Simple EJB3 Transaction Question
grdzeli_kaci Aug 7, 2006 8:48 AMhi all,
i hava some problems with transactions again:
problem is that i want to manage them by myself not like this :
Session Bean
@Remote(UserManager.class) public @Stateless class UserManagerBean implements UserManager { @PersistenceContext(unitName = "Oracle") private EntityManager oracleManager; @TransactionAttribute(TransactionAttributeType.REQUIRED) public UserRecord login(User userObject,UserContext context) throws MagtiException { try { oracleManager.persist(userObject); } catch (Exception e) { e1.printStackTrace(); } }
then i did some changes :
I Version by some EJB3 Documentation
@Remote(UserManager.class) public @Stateless class UserManagerBean implements UserManager { @Resource public UserTransaction utx; @Resource public EntityManagerFactory factory; @TransactionAttribute(TransactionAttributeType.REQUIRED) public UserRecord login(User userObject,UserContext context) throws MagtiException { try { utx.begin(); oracleManager.persist(userObject); utx.commit(); } catch (Exception e) { utx.rollback(); e1.printStackTrace(); } }
but i get an error like this :
java.lang.IllegalStateException: Container UserManagerBean: it is illegal to inject UserTransaction into a CMT bean at org.jboss.ejb3.injection.UserTransactionFieldInjector.<init>(UserTransactionFieldInjector.java:46)
if i remove this :
@TransactionAttribute(TransactionAttributeType.REQUIRED)
the problem was not resolved.
In II version program succsessfully deployed but i get an error again
Session Bean
@Remote(UserManager.class) public @Stateless class UserManagerBean implements UserManager { @PersistenceContext(unitName = "Oracle") private EntityManager oracleManager; @TransactionAttribute(TransactionAttributeType.REQUIRED) public UserRecord login(User userObject,UserContext context) throws MagtiException { try { oracleManager.getTransaction().begin(); oracleManager.persist(userObject); oracleManager.getTransaction().commit(); } catch (Exception e) { oracleManager.getTransaction().rollback(); e1.printStackTrace(); } }
in this case error was like this :
03:42:07,015 ERROR [STDERR] java.lang.IllegalStateException: Illegal to call this method from injected, managed EntityManager 03:42:07,015 ERROR [STDERR] at org.jboss.ejb3.entity.TransactionScopedEntityManager.getTransaction(TransactionScopedEntityManager.java:219)
ooo ya there is my persistance.xml file :
<?xml version="1.0" encoding="ISO-8859-1" ?> <persistence xmlns="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 http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" version="1.0"> <persistence-unit name="Oracle" transaction-type="JTA"> <jta-data-source>java:/XAOracleDS</jta-data-source> <class>com.magti.businesslayer.ejb3entity.oracle.User</class> <properties> <property name="hibernate.dialect" value="org.hibernate.dialect.OracleDialect"/> <property name="hibernate.connection.driver_class" value="oracle.jdbc.OracleDriver"/> <property name="hibernate.connection.url" value="jdbc:oracle:thin:@192.168.9.133:1521:devnbtwo"/> <property name="hibernate.connection.username" value="USER_MANAGER"/> <property name="hibernate.connection.password" value="USER_MANAGER"/> <property name="hibernate.default_schema" value="USER_MANAGER"/> </properties> </persistence-unit> </persistence>
COULD ANYBODY HELP ME.
i don't know how i can manage transactions by myself :(