Transaction propagation doesn't work
bogoliy Jun 21, 2012 11:39 AMHello!
I have some troubles with transactions on JBOSS AS 7. When I call from my EmployerDAO some methods of other EJBs it usually results in deadlock on DB2 database.
I can't understand the reason, as all logic should be executed in one transaction - but unfortunatly deadlocks appears.
I have attached my persistence xml.
my datasource configuration in JBOSS:
<xa-datasource jndi-name="java:/jdbc/BS" pool-name="BS" enabled="true" use-java-context="true" use-ccm="true"> <xa-datasource-property name="DatabaseName"> DEMO45N2 </xa-datasource-property> <xa-datasource-property name="ServerName"> 192.168.32.40 </xa-datasource-property> <xa-datasource-property name="PortNumber"> 50001 </xa-datasource-property> <xa-datasource-property name="DriverType"> 4 </xa-datasource-property> <xa-datasource-class>com.ibm.db2.jcc.DB2XADataSource</xa-datasource-class> <driver>org.db2</driver> <transaction-isolation>TRANSACTION_READ_COMMITTED</transaction-isolation> <xa-pool> <max-pool-size>8</max-pool-size> <prefill>false</prefill> <use-strict-min>false</use-strict-min> <flush-strategy>FailingConnectionOnly</flush-strategy> <pad-xid>false</pad-xid> <wrap-xa-resource>false</wrap-xa-resource> </xa-pool> <security> <user-name>db2inst1</user-name> <password>asdf</password> </security> <validation> <validate-on-match>false</validate-on-match> <background-validation>false</background-validation> <background-validation-millis>1</background-validation-millis> <use-fast-fail>false</use-fast-fail> </validation> <statement> <prepared-statement-cache-size>0</prepared-statement-cache-size> </statement> </xa-datasource>
My code :
@Stateless(name = "employerDAO") @Local(value = EmployerDAO.class) public class EmployerDAOImpl extends BaseDAOImpl<Employer> implements EmployerDAO { @EJB private EmployeeDAO employeeDAO; @EJB private SubgroupDAO subgroupDAO; ..... @Override public void changeStatus(long employerId, OrganizationStatus status,EmployeeStatus employeeStatus, String reason) { subgroupDAO.changeStatusOfOrganizationSubgroups(status, employerId); employeeDAO.changeStatusOfOrganizationEmployees(employeeStatus, employerId); Employer employer = getEntityManager().find(Employer.class, employerId); employer.setStatus(status); employer.setStatusReason(reason); employer.setStatusDate(new Date()); } .... }
Is that is bug ? Thanks for response.
-
persistence.xml 5.8 KB