1 Reply Latest reply on Aug 10, 2007 10:23 AM by sisepago

    Transaction vs. Extended Persistence Contexts Problem

      Hello Guys,
      maybe somebody has already hit so a problem, I am trying to test Transaction vs. Extended persistence context example from the O'Reilly EJB 3.0 Workbook (exercise 5.1) in an unit test using Embedded JBoss and I got anytime this error when I ran the test unit.

      here is the error trace:


      Testsuite: com.titan.travelagent.TravelAgentBeanTestCase
      Tests run: 2, Failures: 0, Errors: 1, Time elapsed: 6.241 sec
      ------------- Standard Output ---------------
      WARN 08-08 09:39:04,057 (UnifiedLoaderRepository3.java:addClassLoader:675) -Tried to add non-URLClassLoader. Ignored
      WARN 08-08 09:39:05,004 (TxControl.java::266) -[com.arjuna.ats.arjuna.coordinator.TxControl_1] - Name of XA node not defined. Using -3f574dec:c73a:46b97318:0
      WARN 08-08 09:39:07,257 (JDBCPersistenceManager.java:start:143) -

      JBoss Messaging Warning: DataSource connection transaction isolation should be READ_COMMITTED, but it is currently NONE.
      Using an isolation level less strict than READ_COMMITTED may lead to data consistency problems.
      Using an isolation level more strict than READ_COMMITTED may lead to deadlock.

      WARN 08-08 09:39:08,734 (JBossTimerServiceFactory.java:restoreTimerService:112) -TIMER SERVICE IS NOT INSTALLED
      ----------------------------------------------------------
      no cabin should be null :null
      Successfully created and found cabin from @Remote interface
      Master Suite
      1
      1
      3
      Update detached cabin instance with new bed count of 4
      Finding cabin to see it has been updated with merge() on the embedded jboss
      new bed count is: 4
      ----------------------------------------------------------
      ----------------------------------------------------------
      WARN 08-08 09:39:08,919 (MessageCounterManager.java:stop:89) -org.jboss.jms.server.messagecounter.MessageCounterManager@dd79e9 isn't started
      ------------- ---------------- ---------------

      Testcase: testCreateFindAndUpdateCabin took 0.166 sec
      Testcase: testTransactionScopeAndExtendedPersistenceContext took 0.001 sec
      Caused an ERROR
      TransactionPersistenceContextBean not bound
      javax.naming.NameNotFoundException: TransactionPersistenceContextBean not bound
      at org.jnp.server.NamingServer.getBinding(NamingServer.java:542)
      at org.jnp.server.NamingServer.getBinding(NamingServer.java:550)
      at org.jnp.server.NamingServer.getObject(NamingServer.java:556)
      at org.jnp.server.NamingServer.lookup(NamingServer.java:267)
      at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:628)
      at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:590)
      at javax.naming.InitialContext.lookup(InitialContext.java:351)
      at com.titan.travelagent.TravelAgentBeanTestCase.testTransactionScopeAndExtendedPersistenceContext(TravelAgentBeanTestCase.java:140)
      at junit.extensions.TestDecorator.basicRun(TestDecorator.java:22)
      at junit.extensions.TestSetup$1.protect(TestSetup.java:19)
      at junit.extensions.TestSetup.run(TestSetup.java:23)


      here is the test unit :

      package com.titan.travelagent;
      
      import javax.naming.InitialContext;
      
      import junit.extensions.TestSetup;
      import junit.framework.Test;
      import junit.framework.TestCase;
      import junit.framework.TestSuite;
      
      import org.jboss.deployers.spi.DeploymentException;
      import org.jboss.embedded.Bootstrap;
      import org.jboss.virtual.plugins.context.vfs.AssembledContextFactory;
      import org.jboss.virtual.plugins.context.vfs.AssembledDirectory;
      
      import com.titan.domain.Cabin;
      
      public class TravelAgentBeanTestCase extends TestCase {
      
       private static AssembledDirectory jar;
       private static boolean globalSetup = false;
      
       public TravelAgentBeanTestCase() {
       super("TravelAgentBeanTestCase");
       }
      
       public static Test suite() {
       TestSuite suite = new TestSuite();
       suite.addTestSuite(TravelAgentBeanTestCase.class);
       globalSetup = true;
      
       return new TestSetup(suite) {
       @Override
       protected void setUp() throws Exception {
       super.setUp();
       if (!Bootstrap.getInstance().isStarted()) {
       Bootstrap.getInstance().bootstrap();
       }
       deploy();
       }
      
       @Override
       protected void tearDown() throws Exception {
       undeploy();
       if (System.getProperty("shutdown.embedded.jboss") != null)
       Bootstrap.getInstance().shutdown();
       super.tearDown();
       }
       };
       }
      
       @Override
       protected void setUp() throws Exception {
       if (globalSetup)
       return;
       Bootstrap.getInstance().bootstrap();
       deploy();
       }
      
       @Override
       protected void tearDown() throws Exception {
       if (globalSetup)
       return;
       undeploy();
       }
      
       private static void deploy() {
       jar = AssembledContextFactory.getInstance().create("titan.jar");
       jar.addClass(Cabin.class);
       jar.addClass(TravelAgentBean.class);
       jar.addClass(TravelAgentRemote.class);
       jar.mkdir("META-INF").addResource("META-INF/persistence.xml", "persistence.xml");
       try {
       Bootstrap.getInstance().deploy(jar);
       } catch (DeploymentException e) {
       throw new RuntimeException("Unable to deploy", e);
       }
       }
      
       private static void undeploy() {
       try {
       Bootstrap.getInstance().undeploy(jar);
       AssembledContextFactory.getInstance().remove(jar);
       } catch (DeploymentException e) {
       throw new RuntimeException("Unable to undeploy", e);
       }
       }
      
       /**
       * persist()/find()/merge()
       *
       * @throws Exception
       */
       public void testCreateFindAndUpdateCabin() throws Exception {
       InitialContext ctx = new javax.naming.InitialContext();
       TravelAgentRemote remote = (TravelAgentRemote) ctx
       .lookup("TravelAgentBean/remote");
       System.out
       .println("----------------------------------------------------------");
      
       Cabin noCabin = remote.findCabin(1);
       System.out.println("no cabin should be null :" + noCabin);
      
      
       Cabin cabin_1 = new Cabin();
       cabin_1.setId(1);
       cabin_1.setName("Master Suite");
       cabin_1.setDeckLevel(1);
       cabin_1.setShipId(1);
       cabin_1.setBedCount(3);
       remote.createCabin(cabin_1);
      
       Cabin cabin_2 = remote.findCabin(1);
      
       System.out
       .println(" Successfully created and found cabin from @Remote interface");
       System.out.println(cabin_2.getName());
       System.out.println(cabin_2.getDeckLevel());
       System.out.println(cabin_2.getShipId());
       System.out.println(cabin_2.getBedCount());
      
       System.out.println("Update detached cabin instance with new bed count of 4");
       cabin_2.setBedCount(4);
       remote.updateCabin(cabin_2);
       System.out.println("Finding cabin to see it has been updated with merge() on the embedded jboss");
       Cabin cabin_3 = remote.findCabin(1);
       System.out.println("new bed count is: " + cabin_3.getBedCount());
       System.out
       .println("----------------------------------------------------------");
       }
      
      
       //Transaction vs. Extended Persistence Context
       public void testTransactionScopeAndExtendedPersistenceContext() throws Exception{
       InitialContext ctx = new InitialContext();
      
       Object ref = ctx.lookup("TravelAgentBean/remote");
       TravelAgentRemote dao = (TravelAgentRemote)ref;
       System.out
       .println("----------------------------------------------------------");
      
       ref = ctx.lookup("TransactionPersistenceContextBean/remote");
       TransactionPersistenceContextRemote txBean = (TransactionPersistenceContextRemote)ref;
      
      
       Cabin fetchedCabin = dao.findCabin(1);
       int oldBedCount = fetchedCabin.getBedCount();
      
       System.out.println("set up transaction persistence context stateful bean");
      
       txBean.setCabin(1);
       txBean.updateBedCount(4);
      
       fetchedCabin = dao.findCabin(1);
       System.out.println(oldBedCount + " : " + fetchedCabin.getBedCount());
      
       ref = ctx.lookup("ExtendedPersistenceContextBean/remote");
       ExtendedPersistenceContextRemote extBean = (ExtendedPersistenceContextRemote)ref;
      
       extBean.setCabin(1);
       extBean.updateBedCount(5);
      
       fetchedCabin = dao.findCabin(1);
       System.out.println(oldBedCount + " : " + fetchedCabin.getBedCount());
      
       txBean.remove();
       extBean.remove();
       }
      }


      I will be happy with some infos.

      thanks for advance.



        • 1. Re: Transaction vs. Extended Persistence Contexts Problem

          bill post:

          Because you didn't add the TransactionPersistenceContextBean class to the virtual jar?

          Serge Pagop wrote:
          Hello Bill, maybe you has also hit so a problem (I also already post in the embedded jboss forum), I am trying to test Transaction vs. Extended persistence context example from the O'Reilly EJB 3.0 Workbook (exercise 5.1) in an unit test using Embedded JBoss and I got anytime this error when I ran the test unit. here is the error trace: Testsuite: com.titan.travelagent.TravelAgentBeanTestCase Tests run: 2, Failures: 0, Errors: 1, Time elapsed: 6.241 sec ------------- Standard Output --------------- WARN 08-08 09:39:04,057 (UnifiedLoaderRepository3.java:addClassLoader:675) -Tried to add non-URLClassLoader. Ignored WARN 08-08 09:39:05,004 (TxControl.java::266) -[com.arjuna.ats.arjuna.coordinator.TxControl_1] - Name of XA node not defined. Using -3f574dec:c73a:46b97318:0 WARN 08-08 09:39:07,257 (JDBCPersistenceManager.java:start:143) - JBoss Messaging Warning: DataSource connection transaction isolation should be READ_COMMITTED, but it is currently NONE. Using an isolation level less strict than READ_COMMITTED may lead to data consistency problems. Using an isolation level more strict than READ_COMMITTED may lead to deadlock. WARN 08-08 09:39:08,734 (JBossTimerServiceFactory.java:restoreTimerService:112) -TIMER SERVICE IS NOT INSTALLED ---------------------------------------------------------- no cabin should be null :null Successfully created and found cabin from @Remote interface Master Suite 1 1 3 Update detached cabin instance with new bed count of 4 Finding cabin to see it has been updated with merge() on the embedded jboss new bed count is: 4 ---------------------------------------------------------- ---------------------------------------------------------- WARN 08-08 09:39:08,919 (MessageCounterManager.java:stop:89) -org.jboss.jms.server.messagecounter.MessageCounterManager@dd79e9 isn't started ------------- ---------------- --------------- Testcase: testCreateFindAndUpdateCabin took 0.166 sec Testcase: testTransactionScopeAndExtendedPersistenceContext took 0.001 sec Caused an ERROR TransactionPersistenceContextBean not bound javax.naming.NameNotFoundException: TransactionPersistenceContextBean not bound at org.jnp.server.NamingServer.getBinding(NamingServer.java:542) at org.jnp.server.NamingServer.getBinding(NamingServer.java:550) at org.jnp.server.NamingServer.getObject(NamingServer.java:556) at org.jnp.server.NamingServer.lookup(NamingServer.java:267) at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:628) at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:590) at javax.naming.InitialContext.lookup(InitialContext.java:351) at com.titan.travelagent.TravelAgentBeanTestCase.testTransactionScopeAndExtendedPersistenceContext(TravelAgentBeanTestCase.java:140) at junit.extensions.TestDecorator.basicRun(TestDecorator.java:22) at junit.extensions.TestSetup$1.protect(TestSetup.java:19) at junit.extensions.TestSetup.run(TestSetup.java:23) here is the test unit : *Code:*
          package com.titan.travelagent;
          import javax.naming.InitialContext;
          import junit.extensions.TestSetup;
          import junit.framework.Test;
          import junit.framework.TestCase;
          import junit.framework.TestSuite;
          import org.jboss.deployers.spi.DeploymentException;
          import org.jboss.embedded.Bootstrap;
          import org.jboss.virtual.plugins.context.vfs.AssembledContextFactory;
          import org.jboss.virtual.plugins.context.vfs.AssembledDirectory;
          import com.titan.domain.Cabin;
          public class TravelAgentBeanTestCase extends TestCase {
          private static AssembledDirectory jar;
          private static boolean globalSetup = false;
          public TravelAgentBeanTestCase() {
          super("TravelAgentBeanTestCase");
          }
          public static Test suite() {
          TestSuite suite = new TestSuite();
          suite.addTestSuite(TravelAgentBeanTestCase.class);
          globalSetup = true;
          return new TestSetup(suite) {
          @Override
          protected void setUp() throws Exception {
          super.setUp();
          if (!Bootstrap.getInstance().isStarted()) {
          Bootstrap.getInstance().bootstrap();
          }
          deploy();
          }
          @Override
          protected void tearDown() throws Exception {
          undeploy();
          if (System.getProperty("shutdown.embedded.jboss") != null)
          Bootstrap.getInstance().shutdown();
          super.tearDown();
          }
          };
          }
          @Override
          protected void setUp() throws Exception {
          if (globalSetup)
          return;
          Bootstrap.getInstance().bootstrap();
          deploy();
          }
          @Override
          protected void tearDown() throws Exception {
          if (globalSetup)
          return;
          undeploy();
          }
          private static void deploy() {
          jar = AssembledContextFactory.getInstance().create("titan.jar");
          jar.addClass(Cabin.class);
          jar.addClass(TravelAgentBean.class);
          jar.addClass(TravelAgentRemote.class);
          jar.mkdir("META-INF").addResource("META-INF/persistence.xml", "persistence.xml");
          try {
          Bootstrap.getInstance().deploy(jar);
          } catch (DeploymentException e) {
          throw new RuntimeException("Unable to deploy", e);
          }
          }
          private static void undeploy() {
          try {
          Bootstrap.getInstance().undeploy(jar);
          AssembledContextFactory.getInstance().remove(jar);
          } catch (DeploymentException e) {
          throw new RuntimeException("Unable to undeploy", e);
          }
          }
          /**
          * persist()/find()/merge()
          * * @throws Exception
          */
          public void testCreateFindAndUpdateCabin() throws Exception {
          InitialContext ctx = new javax.naming.InitialContext();
          TravelAgentRemote remote = (TravelAgentRemote) ctx
          .lookup("TravelAgentBean/remote");
          System.out
          .println("----------------------------------------------------------");
          Cabin noCabin = remote.findCabin(1);
          System.out.println("no cabin should be null :" + noCabin);
          Cabin cabin_1 = new Cabin();
          cabin_1.setId(1);
          cabin_1.setName("Master Suite");
          cabin_1.setDeckLevel(1);
          cabin_1.setShipId(1);
          cabin_1.setBedCount(3);
          remote.createCabin(cabin_1);
          Cabin cabin_2 = remote.findCabin(1);
          System.out
          .println(" Successfully created and found cabin from @Remote interface");
          System.out.println(cabin_2.getName());
          System.out.println(cabin_2.getDeckLevel());
          System.out.println(cabin_2.getShipId());
          System.out.println(cabin_2.getBedCount());
          System.out.println("Update detached cabin instance with new bed count of 4");
          cabin_2.setBedCount(4);
          remote.updateCabin(cabin_2);
          System.out.println("Finding cabin to see it has been updated with merge() on the embedded jboss");
          Cabin cabin_3 = remote.findCabin(1);
          System.out.println("new bed count is: " + cabin_3.getBedCount());
          System.out
          .println("----------------------------------------------------------");
          }
          //Transaction vs. Extended Persistence Context
          public void testTransactionScopeAndExtendedPersistenceContext() throws Exception{
          InitialContext ctx = new InitialContext();
          Object ref = ctx.lookup("TravelAgentBean/remote");
          TravelAgentRemote dao = (TravelAgentRemote)ref;
          System.out
          .println("----------------------------------------------------------");
          ref = ctx.lookup("TransactionPersistenceContextBean/remote");
          TransactionPersistenceContextRemote txBean = (TransactionPersistenceContextRemote)ref;
          Cabin fetchedCabin = dao.findCabin(1);
          int oldBedCount = fetchedCabin.getBedCount();
          System.out.println("set up transaction persistence context stateful bean");
          txBean.setCabin(1);
          txBean.updateBedCount(4);
          fetchedCabin = dao.findCabin(1);
          System.out.println(oldBedCount + " : " + fetchedCabin.getBedCount());
          ref = ctx.lookup("ExtendedPersistenceContextBean/remote");
          ExtendedPersistenceContextRemote extBean = (ExtendedPersistenceContextRemote)ref;
          extBean.setCabin(1);
          extBean.updateBedCount(5);
          fetchedCabin = dao.findCabin(1);
          System.out.println(oldBedCount + " : " + fetchedCabin.getBedCount());
          txBean.remove();
          extBean.remove();
          }
          }
          I will be happy with some infos. thanks for advance. Best Regards,
          Serge Pagop
          -------
          |||| Serge Pagop
          |||| Senior Consultant
          |||| |||| innoQ Deutschland GmbH, Halskestr. 17, D-40880 Ratingen, Germany
          |||| Phone: +49 2102 77162-100, Mobile: +49 178 4049592, Fax: +49 2102 77160-1
          |||| Mail: serge.pagop@innoq.com <mailto:serge.pagop@innoq.com>, Web: http://www.innoq.com <http://www.innoq.com/>, Weblog: http://www.innoq.com/blog/sp