[jboss-user] [EJB 3.0 Users] - Persistence Context Transaction

MarcusDidiusFalco do-not-reply at jboss.com
Wed Dec 2 03:33:50 EST 2009


I am experimentig with JPA and I have difficulties to reproduce an example taken from JavaMagazin 9/09 about the ECB Pattern.
JBoss 5.1.0 GA, MySQL 5.0



The "boundary" (facade)
@Stateless
  | public class OrderServiceBean implements OrderService {
  | 
  | 	
  | 	
  | 	@EJB
  | 	DeliveryService deliveryService;
  | 	
  | 	@EJB
  | 	Warehouse warehouse;
  | 	
  | 	@TransactionAttribute(TransactionAttributeType.REQUIRED)
  | 	public Order order(Order newOrder) throws BillingException {
  | 		
  | 		Order order = warehouse.checkout(newOrder);
  | 		
  | 		
  | 		deliveryService.deliver(order);
  | 		return order;
  | 	}
  | }
  | 
  | 

The Warehouse Bean persists the order. This works like expected:


  | @Stateless
  | public class WarehouseBean implements Warehouse {
  | 
  | 	@PersistenceContext(unitName="ECB")
  | 	EntityManager entityManager;
  | 	
  | 	@TransactionAttribute(TransactionAttributeType.MANDATORY)
  | 	public Order checkout(Order order) {
  | 		this.entityManager.merge(order);
  | 		return order;
  | 	}
  | }

However the DeliveryService modifies the order:

  | @Stateless
  | public class DeliveryServiceBean implements DeliveryService{
  | 
  | 	@TransactionAttribute(TransactionAttributeType.MANDATORY)
  | 	public void deliver(Order order) {
  | 		order.setDelivered(true);
  | 		order.setProductId(2);
  | 	}
  | }

Since the transaction should be still running, I expect that order is still in the persistence context and that the changes made by the DeliveryService should be automatically persisted. However they never arrive in the database.

Do I get the whole concept or persistence context wrong? Or is there some bug in my code?

  | <?xml version="1.0" encoding="UTF-8"?>
  | 
  | <!-- $Id: mysql-ds.xml 71535 2008-04-01 07:05:03Z adrian at jboss.org $ -->
  | <!--  Datasource config for MySQL using 3.0.9 available from:
  | http://www.mysql.com/downloads/api-jdbc-stable.html
  | -->
  | 
  | <datasources>
  |   <local-tx-datasource>
  |     <jndi-name>ECBDS</jndi-name>
  |     <connection-url>jdbc:mysql://localhost:3306/ecb</connection-url>
  |     <driver-class>com.mysql.jdbc.Driver</driver-class>
  |     <user-name>root</user-name>
  |     <password>ritak1</password>
  |     <exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorter</exception-sorter-class-name>
  |     <!-- should only be used on drivers after 3.22.1 with "ping" support
  |     <valid-connection-checker-class-name>org.jboss.resource.adapter.jdbc.vendor.MySQLValidConnectionChecker</valid-connection-checker-class-name>
  |     -->
  |     <!-- sql to call when connection is created
  |     <new-connection-sql>some arbitrary sql</new-connection-sql>
  |       -->
  |     <!-- sql to call on an existing pooled connection when it is obtained from pool - MySQLValidConnectionChecker is preferred for newer drivers
  |     <check-valid-connection-sql>some arbitrary sql</check-valid-connection-sql>
  |       -->
  | 
  |     <!-- corresponding type-mapping in the standardjbosscmp-jdbc.xml (optional) -->
  |     <metadata>
  |        <type-mapping>mySQL</type-mapping>
  |     </metadata>
  |   </local-tx-datasource>
  | </datasources>
  | 




  | <?xml version="1.0" encoding="UTF-8"?>
  | <persistence:persistence version="1.0"
  |  xmlns:persistence="http://java.sun.com/xml/ns/persistence"
  | 	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  | 	xsi:schemaLocation="http://java.sun.com/xml/ns/persistence persistence_1_0.xsd">
  | 	<persistence:persistence-unit name="ECB">
  | 		<persistence:description>ECB</persistence:description>
  | 		<persistence:jta-data-source>java:ECBDS</persistence:jta-data-source>
  | 		<persistence:properties>
  | 			<persistence:property name="hibernate.hbm2ddl.auto" value="create-drop" />
  | 			<persistence:property name="dialect" value="org.hibernate.dialect.MySQLDialect" />
  | 			<persistence:property name="hibernate.show_sql" value="true" />
  | 			<persistence:property name="hibernate.format_sql" value="true" />
  | 		</persistence:properties>
  | 	</persistence:persistence-unit>
  | </persistence:persistence>
  | 

View the original post : http://www.jboss.org/index.html?module=bb&op=viewtopic&p=4268429#4268429

Reply to the post : http://www.jboss.org/index.html?module=bb&op=posting&mode=reply&p=4268429



More information about the jboss-user mailing list