[EJB 3.0] - Simple EJB3 Transaction Question
by grdzeli_kaci
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#3963557
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=3963557
19 years, 9 months
[JBoss Seam] - Exception using a description tag in a pageflow definition f
by rlhr
I'm using jboss-seam-1.0.1.GA with the special version of JBoss that goes with.
I defined a pageflow and everything worked fine until I added a description
tag inside a page tag:
<page name="CreateUserPage" view-id="/account/user.xhtml">
| <redirect/>
| <description>#{userMgr.description}</description>
| <transition name="create" to="EndPage" />
| <transition name="cancel" to="homePage" />
| </page>
|
A java.lang.NoSuchMethodError Exception occurs in the prepareBackswitch method of org.jboss.seam.core.Manager in line 867 where the description is set (see stacktrace below):
conversation.setDescription( page.getDescription() );
|
Where page is org.jbpm.pageflow.Page
I even replaced the description by a hardcoded string (to make sure there was nothing wrong with my bean) but I get the same exception.
Any idea?
Thanks
Richard
| java.lang.NoSuchMethodError: org.jboss.seam.core.Interpolator.interpolate(Ljava/lang/String;)Ljava/lang/String;
| at org.jbpm.pageflow.Page.getDescription(Page.java:124)
| at org.jboss.seam.core.Manager.prepareBackswitch(Manager.java:867)
| at org.jboss.seam.jsf.AbstractSeamPhaseListener.beforeRender(AbstractSeamPhaseListener.java:117)
| at org.jboss.seam.jsf.SeamPhaseListener.beforePhase(SeamPhaseListener.java:50)
| at org.jboss.seam.jsf.SeamExtendedManagedPersistencePhaseListener.beforePhase(SeamExtendedManagedPersistencePhaseListener.java:38)
| at org.apache.myfaces.lifecycle.LifecycleImpl.informPhaseListenersBefore(LifecycleImpl.java:520)
| at org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:342)
| at javax.faces.webapp.FacesServlet.service(FacesServlet.java:107)
| at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
| at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
| at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:672)
| at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:465)
| at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:398)
| at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:301)
| at org.apache.catalina.core.StandardHostValve.custom(StandardHostValve.java:363)
| at org.apache.catalina.core.StandardHostValve.status(StandardHostValve.java:284)
| at org.apache.catalina.core.StandardHostValve.throwable(StandardHostValve.java:228)
| at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:134)
| at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
| at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
| at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
| at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
| at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
| at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
| at org.apache.tomcat.util.net.MasterSlaveWorkerThread.run(MasterSlaveWorkerThread.java:112)
| at java.lang.Thread.run(Thread.java:595)
| 2006-08-07 14:24:15,031 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[localhost]] Exception Processing ErrorPage[errorCode=500, location=/src/app/error/500.seam]
| javax.servlet.ServletException: org.jboss.seam.core.Interpolator.interpolate(Ljava/lang/String;)Ljava/lang/String;
| at javax.faces.webapp.FacesServlet.service(FacesServlet.java:121)
| at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
| at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
| at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:672)
| at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:465)
| at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:398)
| at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:301)
| at org.apache.catalina.core.StandardHostValve.custom(StandardHostValve.java:363)
| at org.apache.catalina.core.StandardHostValve.status(StandardHostValve.java:284)
| at org.apache.catalina.core.StandardHostValve.throwable(StandardHostValve.java:228)
| at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:134)
| at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
| at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
| at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
| at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
| at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
| at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
| at org.apache.tomcat.util.net.MasterSlaveWorkerThread.run(MasterSlaveWorkerThread.java:112)
| at java.lang.Thread.run(Thread.java:595)
|
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=3963555#3963555
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=3963555
19 years, 9 months
[EJB/JBoss] - @TransactionAttribute ignored on generic interface methods
by akovcic
hi,
I have a problem with transactions annotations for stateless session bean methods defined in generic bussiness interface. Annotations are ignored and defaults are used. Here is the code with junit test case that fails:
Some session bean with mandatory transactional settings on both methods (one setting is ignored)
| import javax.ejb.Stateless;
| import javax.ejb.TransactionAttribute;
| import javax.ejb.TransactionAttributeType;
|
| @Stateless(name = "FrogCalculator")
| public class FrogCalculatorBean implements FrogCalculator {
|
| @TransactionAttribute(value = TransactionAttributeType.MANDATORY)
| public Frog add(Frog t1, Frog t2) {
| if (t1 == null || t2 == null)
| throw new IllegalArgumentException();
|
| return new Frog(t1.value + t2.value);
| }
|
| @TransactionAttribute(value = TransactionAttributeType.MANDATORY)
| public Frog substract(Frog n1, Frog n2) {
| if (n1 == null || n2 == null)
| throw new IllegalArgumentException();
|
| return new Frog(n1.value - n2.value);
| }
|
| }
|
Business interface of above bean. It extends generic interface.
| public interface FrogCalculator extends GenericCalculator<Frog> {
|
| public Frog substract(Frog n1, Frog n2);
|
| }
|
Generic interface
| public interface GenericCalculator<T> {
|
| public T add(T t1, T t2);
|
| }
|
Just a modell class
| public class Frog {
|
| int value;
|
| public Frog(int num){
| this.value = num;
| }
|
| public String toString(){
| return String.valueOf(value);
| }
|
| }
|
Junit test case
| import javax.ejb.EJBTransactionRequiredException;
| import javax.persistence.EntityManager;
| import javax.transaction.TransactionRequiredException;
|
| import junit.framework.Test;
|
| import org.hibernate.Hibernate;
|
| import com.one2snap.dao.UserDAO;
| import com.one2snap.model.test.EntityA;
| import com.one2snap.test.EJBTestCase;
|
| public class FrogCalculatorTestCase extends EJBTestCase {
|
| private int campaignId;
| private Frog n1, n2;
|
| private FrogCalculator calculator;
|
| /**
| * Constructor.
| *
| * @param name
| */
| public FrogCalculatorTestCase(String name) {
| super(name);
| wrapInTransaction = false;
| }
|
| public static Test suite() throws Exception {
| return getDeploySetup(FrogCalculatorTestCase.class);
| }
|
| @Override
| protected void setUp() throws Exception {
| calculator = (FrogCalculator) getInitialContext().lookup("FrogCalculator/local");
| n1 = new Frog(10);
| n2 = new Frog(2);
| }
|
| public void testTransactionSetup1() throws Exception {
| try {
| calculator.add(n1, n2);
| fail("Should raize an EJBTransactionRequiredException exception"); // FAILS HERE!!!
| }
| catch (EJBTransactionRequiredException e) {
| log.info("Expected exception", e);
| }
| }
|
| public void testTransactionSetup2() throws Exception {
| try {
| calculator.substract(n1, n2);
| fail("Should raize an EJBTransactionRequiredException exception"); // OK, excepton is thrown a line before
| }
| catch (EJBTransactionRequiredException e) {
| log.info("Expected exception", e);
| }
| }
|
| }
|
So it looks like annotation:
@TransactionAttribute(value = TransactionAttributeType.MANDATORY)
is ignored for the method 'public Frog add(Frog t1, Frog t2)' defined in generic interface as 'public T add(T t1, T t2)'.
Known bug or something else?
If I define transactional setting for the same method in the deployment descriptor (ejb-jar.xml) test runs withouth an error:
| <ejb-jar>
| <assembly-descriptor>
| <container-transaction>
| <method>
| <ejb-name>FrogCalculator</ejb-name>
| <method-name>add</method-name>
| </method>
| <trans-attribute>Mandatory</trans-attribute>
| </container-transaction>
| </assembly-descriptor>
| </ejb-jar>
|
This proves that transaction annotation is ignored for the 'add' method
PS.
JUnit test is run agains JBoss embeddable:
14:30:01,166 INFO [Version] Hibernate EntityManager 3.2.0.CR1
14:30:01,182 INFO [Version] Hibernate Annotations 3.2.0.CR1
The same problem with beans deployed under JBoss 4.0.4GA
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=3963553#3963553
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=3963553
19 years, 9 months
[JBoss Seam] - Re: DataModel sincronization issue...
by angelogalvao
public class SystemRoleGroupManagerBean implements SystemRoleGroupManager, Serializable{
|
| @PersistenceContext(type=PersistenceContextType.EXTENDED)
| private EntityManager entityManager;
|
| ......
|
| // inject by Seam
|
| @In(required=false)
| @Out(required=false)
| private RoleGroup roleGroup;
|
| @DataModelSelection(value="rolesFromRoleGroup")
| private Role role;
|
| // data models
|
| @DataModel
| private Set<Role> rolesFromRoleGroup;
|
| @SelectItems(labelMethod="getNome")
| private List<Role> roless; // lista de permissões
|
| // factory methods
|
| @Factory("rolesFromRoleGroup")
| @Observer("rolesFromRoleGroupChange")
| public void listRolesFromRoleGroup(){
| if(this.roleGroup!=null){
| rolesFromRoleGroup = roleGroup.getRoles();
| }
| }
|
| @Factory("roless")
| public void listRoles() {
| roless = entityManager.createQuery("from Role order by :nome").setParameter("nome", "nome").getResultList();
| }
|
| // metodos de negocio
|
| @End
| public void addRoleGroup() {
| if(roleGroup.getId()!=null)
| updateUsuariosWithRoleGroup(roleGroup);
| roleGroup = entityManager.merge(roleGroup); // save or updates
| }
|
| /**
| * Sincronizar os papeis dos usuarios com o grupo.
| * @param roleGroup grupo de permissões
| */
| private void updateUsuariosWithRoleGroup(RoleGroup roleGroup){
| }
|
| @Begin(join=true)
| public void addRoleToRoleGroup() {
| // o index é o index da listagem.
| // TODO para @Selectable ou @SelectItemsSelection quando implementarem essa solução.
| Role _role = roless.get(index);
| roleGroup.addRole(_role);
| Events.instance().raiseEvent("rolesFromRoleGroupChange");
| }
|
| @Begin(join=true)
| public void removeRoleFromRoleGroup() {
| roleGroup.removeRole(role);
| Events.instance().raiseEvent("rolesFromRoleGroupChange");
| }
|
| // destroy method
|
| @Remove @Destroy
| public void destroy(){}
| }
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=3963548#3963548
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=3963548
19 years, 9 months