hi 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 :(
View the original post :
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=3963557#...
Reply to the post :
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&a...