Fwd: null value ONCASCADE=PERSIST and XA Resources

classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

Fwd: null value ONCASCADE=PERSIST and XA Resources

John Arevalo
Hi list, I'm facing 2 problems with JPA

1) I have an OneToMany relationship between Invoice and ProductItem,
when i try to create a new invoice:

Invoice invoice = new Invoice();
ArrayList<ProductItem> items = new ArrayList<ProductItem>();
for(/*any iteration*/) {
     item = new ProductItem();
     item.setQuantity(myQuantity);
     items.add(item);
}

invoice.setProductItems(items);
invoiceFacade.create(invoice);

throws an SQLException because native query is: INSERT INTO
PRODUCT_ITEM(QUANTITY, INVOICE_ID) VALUES(3, null);

should i persist invoice before add items to it? in that piece of code
i can manage transaction in create(Invoice) method...persisting
invoice object first, I have to manage Transaction outside of EJB
method, or create another one.

2) another Exception is thrown in several "INSERT" actions. I have
Oracle PersistenceContext and DB2 PersistenceContext in EJB module,
message is:

Local transaction already has 1non-XA Resource: cannot add more resources.

reading this post [1], looks like i need XADatasource when i use
different pool resources. Really i don't have to persist objects from
DB2, so i don't need distribuited transactions, can i disable XA?


[1]http://www.theserverside.com/discussions/thread.tss?thread_id=21385#95346

Thanks for your replies,


Best regards.
--
John Arévalo
GNU/Linux User #443701
http://counter.li.org/
_______________________________________________
eclipselink-users mailing list
[hidden email]
https://dev.eclipse.org/mailman/listinfo/eclipselink-users
Reply | Threaded
Open this post in threaded view
|

Re: Fwd: null value ONCASCADE=PERSIST and XA Resources

christopher delahunt
1) How have you set the invoice's primary key, and how are the
ProductItem <--> Invoice mappings defined?

2) I can't say too much, it looks like a container setup issue.  The
exception is stating you cant use two different transactional resources
inside a single transaction; Two JTA datasources cannot be involved in 1
transaction without XA, which is what you seem to be attempting to do
with your current configuration and use of two persistence contexts.  If
you don't want to use XA, make one of the persistence context not use a
JTA datasource and manage the transactions through the application
directly.  Ie make one resource local and let the other take part in the
JTA transaction.  Of course, this will require transaction management on
the resource local persistence context, so you may just want to use XA
instead.

Best Regards,
Chris

John Arevalo wrote:

> Hi list, I'm facing 2 problems with JPA
>
> 1) I have an OneToMany relationship between Invoice and ProductItem,
> when i try to create a new invoice:
>
> Invoice invoice = new Invoice();
> ArrayList<ProductItem> items = new ArrayList<ProductItem>();
> for(/*any iteration*/) {
>      item = new ProductItem();
>      item.setQuantity(myQuantity);
>      items.add(item);
> }
>
> invoice.setProductItems(items);
> invoiceFacade.create(invoice);
>
> throws an SQLException because native query is: INSERT INTO
> PRODUCT_ITEM(QUANTITY, INVOICE_ID) VALUES(3, null);
>
> should i persist invoice before add items to it? in that piece of code
> i can manage transaction in create(Invoice) method...persisting
> invoice object first, I have to manage Transaction outside of EJB
> method, or create another one.
>
> 2) another Exception is thrown in several "INSERT" actions. I have
> Oracle PersistenceContext and DB2 PersistenceContext in EJB module,
> message is:
>
> Local transaction already has 1non-XA Resource: cannot add more resources.
>
> reading this post [1], looks like i need XADatasource when i use
> different pool resources. Really i don't have to persist objects from
> DB2, so i don't need distribuited transactions, can i disable XA?
>
>
> [1]http://www.theserverside.com/discussions/thread.tss?thread_id=21385#95346
>
> Thanks for your replies,
>
>
> Best regards.
> --
> John Arévalo
> GNU/Linux User #443701
> http://counter.li.org/
> _______________________________________________
> eclipselink-users mailing list
> [hidden email]
> https://dev.eclipse.org/mailman/listinfo/eclipselink-users
>  
_______________________________________________
eclipselink-users mailing list
[hidden email]
https://dev.eclipse.org/mailman/listinfo/eclipselink-users
Reply | Threaded
Open this post in threaded view
|

Re: Fwd: null value ONCASCADE=PERSIST and XA Resources

christopher delahunt
Hello John,

I didn't notice that you are not setting the Item's invoice.  Generally,
a 1:M when using a foreign key requires that the target have a M:1 back,
and it is this M:1 back that defines and controls the foreign key
value.  Since the INVOICE_ID is being set to null, you probably have
this mapped correctly and instead are just leaving the relationship as
null.  To get it set, when you add an item to invoice's list of Items,
you also need to set the back pointer.  JPA does not maintain
bidirectional relationships for you.

Best Regards,
Chris

christopher delahunt wrote:

> 1) How have you set the invoice's primary key, and how are the
> ProductItem <--> Invoice mappings defined?
>
> 2) I can't say too much, it looks like a container setup issue.  The
> exception is stating you cant use two different transactional
> resources inside a single transaction; Two JTA datasources cannot be
> involved in 1 transaction without XA, which is what you seem to be
> attempting to do with your current configuration and use of two
> persistence contexts.  If you don't want to use XA, make one of the
> persistence context not use a JTA datasource and manage the
> transactions through the application directly.  Ie make one resource
> local and let the other take part in the JTA transaction.  Of course,
> this will require transaction management on the resource local
> persistence context, so you may just want to use XA instead.
>
> Best Regards,
> Chris
>
> John Arevalo wrote:
>> Hi list, I'm facing 2 problems with JPA
>>
>> 1) I have an OneToMany relationship between Invoice and ProductItem,
>> when i try to create a new invoice:
>>
>> Invoice invoice = new Invoice();
>> ArrayList<ProductItem> items = new ArrayList<ProductItem>();
>> for(/*any iteration*/) {
>>      item = new ProductItem();
>>      item.setQuantity(myQuantity);
>>      items.add(item);
>> }
>>
>> invoice.setProductItems(items);
>> invoiceFacade.create(invoice);
>>
>> throws an SQLException because native query is: INSERT INTO
>> PRODUCT_ITEM(QUANTITY, INVOICE_ID) VALUES(3, null);
>>
>> should i persist invoice before add items to it? in that piece of code
>> i can manage transaction in create(Invoice) method...persisting
>> invoice object first, I have to manage Transaction outside of EJB
>> method, or create another one.
>>
>> 2) another Exception is thrown in several "INSERT" actions. I have
>> Oracle PersistenceContext and DB2 PersistenceContext in EJB module,
>> message is:
>>
>> Local transaction already has 1non-XA Resource: cannot add more
>> resources.
>>
>> reading this post [1], looks like i need XADatasource when i use
>> different pool resources. Really i don't have to persist objects from
>> DB2, so i don't need distribuited transactions, can i disable XA?
>>
>>
>> [1]http://www.theserverside.com/discussions/thread.tss?thread_id=21385#95346 
>>
>>
>> Thanks for your replies,
>>
>>
>> Best regards.
>> --
>> John Arévalo
>> GNU/Linux User #443701
>> http://counter.li.org/
>> _______________________________________________
>> eclipselink-users mailing list
>> [hidden email]
>> https://dev.eclipse.org/mailman/listinfo/eclipselink-users
>>  
> _______________________________________________
> eclipselink-users mailing list
> [hidden email]
> https://dev.eclipse.org/mailman/listinfo/eclipselink-users
_______________________________________________
eclipselink-users mailing list
[hidden email]
https://dev.eclipse.org/mailman/listinfo/eclipselink-users
Reply | Threaded
Open this post in threaded view
|

Re: Fwd: null value ONCASCADE=PERSIST and XA Resources

John Arevalo
Thanks Christopher,

item.setInvoice(invoice) fixed it.

i'll try XA resources.

--
John Arévalo
GNU/Linux User #443701
http://counter.li.org/
_______________________________________________
eclipselink-users mailing list
[hidden email]
https://dev.eclipse.org/mailman/listinfo/eclipselink-users