• Post Reply Bookmark Topic Watch Topic
  • New Topic

Transaction Issues with session EJB.

 
Tarun Dewan
Greenhorn
Posts: 21
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
We have implemented Stateless Session EJBs with DAO (Simple JAVA classes) objects, wherein one of my stateless EJB method calls methods of multiple DAO (say CustomerDAO and OrderDAO).
First we are saving info in CustomerDAo and then into OrderDAO. While saving info in OrderDAO, if there are any exceptions then i want my transaction to be rolledback completely (i.e. entry in CustomerDAO should not be committed). I have tried to implement this by marking my sessioncontext as setRollbackOnly.
Right now if there is some problem in OrderDAO then my transaction is committed automatically (if autocommit is set to true). If i set it to false then it is not committed even if there is no error.
My transaction is specified as Container Managed - Required for all methods. Each of my DAOs are having their own connection object, set to AutoCommit "false". Also after putting connection to AutoCommit "FALSE", ORderDAO locks the corresponding Table.
Pls. inform any solution or work around for the same.
If i use Entity EJBs with Local Interface will it be of similar performance as my DAOs.
Eagerly waiting for any response.
Thanks & regards,
Tarun Dewan.
 
Matthew Phillips
Ranch Hand
Posts: 2676
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
tarun,
We don't have many rules at Javaranch, but our naming policy is one of them. Please read this policy and change your display name to comply with it if you wish to continue posting. Thanks.
You can change your display name here.
 
Paul Lester
Ranch Hand
Posts: 40
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
It sounds as if you don't have your datasource configured properly. Basically, there are three "types" or configurations of datasources and these are configurable by the container, usually in some XML file or another.
The three types are:
1. Normal, non-transactional aware datasources.
2. Transactional aware datasources.
3. 2-Phase commit datasources
You'll have to look at the instructions of your container to see how to change your datasource to be transaction aware, which is item #2, unless you need transactions across different databases, then you'll need 2-Phase commit.
Further, when you get it right, you won't have to call setAutoCommit, you'll just let the container take care of it.
Regards,
Paul
 
  • Post Reply Bookmark Topic Watch Topic
  • New Topic
Boost this thread!