| 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.
|
 |
 |
|
|
subject: EJB & JPA Unexpected Results
|
|
|