my dog learned polymorphism
The moose likes Object Relational Mapping and the fly likes EJB & JPA Unexpected Results Big Moose Saloon
  Search | Java FAQ | Recent Topics
Register / Login


Win a copy of The Mikado Method this week in the Agile and other Processes forum!
JavaRanch » Java Forums » Databases » Object Relational Mapping
Reply Bookmark "EJB & JPA Unexpected Results" Watch "EJB & JPA Unexpected Results" New topic
Author

EJB & JPA Unexpected Results

Glen Divers
Ranch Hand

Joined: Jan 21, 2010
Posts: 61
Hi

I have two entities, Client and Telephone





and I'm using the Netbeans generated AbstractFacade handle the persistence. My persistence code is;



If I create a new client with a unique telephone number everything works. However, if I create a new client and reuse an existing persisted
telephone number, I get an exception because the phone number already exists in the database as expected, but the new client is still created in the database. I was expecting a rollback and neither client nor telephone to be persisted.

What am I missing/have I done wrong?

Regards
James Sutherland
Ranch Hand

Joined: Oct 01, 2007
Posts: 550
Check your transaction options. It seems you are using a SessionBean, so need to being using a JTA DataSource, but probably are not.

Include your persistence.xml.


TopLink : EclipseLink : Book:Java Persistence : Blog:Java Persistence Performance
Glen Divers
Ranch Hand

Joined: Jan 21, 2010
Posts: 61
Thanks for your response, persistance.xml is specifying JTA
James Sutherland
Ranch Hand

Joined: Oct 01, 2007
Posts: 550
Ensure that you have defined "jdbc/pembridge" as a JTA enabled DataSource in Glassfish.
Glen Divers
Ranch Hand

Joined: Jan 21, 2010
Posts: 61
James Sutherland wrote:Ensure that you have defined "jdbc/pembridge" as a JTA enabled DataSource in Glassfish.


jdbc/pembridge is defined in terms of a connection pool. There doesn't appear to be any other options. The connection pool is defined as a resource type javax.sql.ConnectionPoolDataSource with a datasource classname of com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource.

Glassfish offers alternative resource types of javax.sql.Driver, javax.sql.DataSource and javax.sql.XADataSource. I can't find anything that indicates/mentions JTA.

One odd thing however, Glassfish seems to be creating it's own connection & pool definition. It's created its own connection "pembridge" connnected to pool "mysql_Pembridge_RootPool" which is defined with a resource type of javax.sql.DataSource with a datasource class name of com.mysql.jdbc.jdbc2.optional.MysqlDataSource. If I delete these, they appear to be re-created when I deploy my application, although it never uses this (there's no database userid or password defined for it)

Regards
James Sutherland
Ranch Hand

Joined: Oct 01, 2007
Posts: 550
I believe the JTA DataSource is the javax.sql.XADataSource one.
 
I agree. Here's the link: http://ej-technologies/jprofiler - if it wasn't for jprofiler, we would need to run our stuff on 16 servers instead of 3.
 
subject: EJB & JPA Unexpected Results
 
Similar Threads
cascade operations only populate foreign key for the owning side of the relationship
Help with JPA
Parent Child Relations with Join Table
named queries can be defined only on an entity - problem
Database connection using JBoss Seam & JBoss Tools for Eclipse