0 Replies Latest reply on Sep 26, 2001 4:42 PM by Barnali Dey

    Transaction Rollback Exception. Please Help!

    Barnali Dey Newbie

      I am trying to deploy & test one cmp entity bean in JBOSS. It seems the ejb is deployed properly & successfully. But while running the client it's giving transaction rollback exception.
      Could anyone please help me in solving this problem?

      Thanks in advance for your help..

      =====================================================
      My codes are as follows
      =====================================================

      +++++++++++++++++++ HOME Interface ++++++++++++++++++

      package org.jboss.docs.testJboss.interfaces;

      import javax.ejb.EJBHome;
      import javax.ejb.CreateException;
      import javax.ejb.FinderException;
      import java.rmi.RemoteException;
      import java.util.Collection;

      public interface TestHome
      extends EJBHome
      {
      public Test create(final int id, final String name)
      throws CreateException, RemoteException;
      public Test findByPrimaryKey(final int id)
      throws FinderException, RemoteException;

      }

      +++++++++++++++++++ REMOTE Interface ++++++++++++++++++

      package org.jboss.docs.testJboss.interfaces;

      import javax.ejb.EJBObject;
      import java.rmi.RemoteException;

      public interface Test
      extends EJBObject
      {

      public void add() throws RemoteException;

      public int getId() throws RemoteException;
      public void setId(int id) throws RemoteException;

      public String getName() throws RemoteException;;
      public void setName(String name) throws
      RemoteException;
      }

      +++++++++++++++++++ BEAN +++++++++++++++++++++++++++

      package org.jboss.docs.testJboss.bean;

      import org.jboss.docs.testJboss.interfaces.*;
      import javax.ejb.EntityBean;
      import javax.ejb.EntityContext;

      /**
      * Entity Bean representing a Class. A Class have a Teacher and a number of
      * Students
      */

      public class TestBean
      implements EntityBean
      {
      EntityContext ctx;

      private int id;
      private String name;

      /**
      * Create an instance of a Class.
      */
      public int ejbCreate (final int id, final String name)
      {
      this.id = id;
      this.name = name;
      return 0;
      }

      public void ejbPostCreate(final int id, final String name) { }

      public int getId()
      {
      return id;
      }
      public void setId( int newId)
      {
      id = newId;
      }

      public String getName()
      {
      return name;
      }
      public void setName( String newName)
      {
      name = newName;
      }

      public void add()
      {
      setId( id );
      setName( name );
      }

      public void setEntityContext(EntityContext ctx) { this.ctx = ctx; }

      public void unsetEntityContext() { ctx = null; }

      public void ejbActivate() {}

      public void ejbPassivate()
      {

      }

      public void ejbLoad()
      {

      }

      public void ejbStore() { }
      public void ejbRemove() { }

      }

      ++++++++++++++++ jaws.xml +++++++++++++++++++++++


      SQLServerPool
      <type-mapping>SQLServerPool</type-mapping>

      <enterprise-beans>

      <ejb-name>TestBean</ejb-name>
      <table-name>TEST</table-name>
      <remove-table>true</remove-table>
      <cmp-field>
      <field-name>id</field-name>
      <column-name>ID</column-name>
      </cmp-field>
      <cmp-field>
      <field-name>name</field-name>
      <column-name>NAME</column-name>
      <jdbc-type>VARCHAR</jdbc-type>
      <sql-type>VARCHAR(100)</sql-type>
      </cmp-field>


      findByPrimaryKey


      <read-ahead>true</read-ahead>



      </enterprise-beans>


      ++++++++++++++++++++++++ JBOSS.xml +++++++++++++++
      <?xml version="1.0" encoding="Cp1252"?>


      false
      <container-configurations />
      <resource-managers />
      <enterprise-beans>

      <ejb-name>TestBean</ejb-name>
      <jndi-name>testJboss/Test</jndi-name>

      </enterprise-beans>


      +++++++++++++++++++ ejb-jar.xml ++++++++++++++++

      <?xml version="1.0"?>

      <!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 1.1//EN" "http://java.sun.com/j2ee/dtds/ejb-jar_1_1.dtd">

      <ejb-jar>
      <display-name>Test</display-name>
      <enterprise-beans>


      Testing JBOSS
      <ejb-name>TestBean</ejb-name>
      org.jboss.docs.testJboss.interfaces.TestHome
      org.jboss.docs.testJboss.interfaces.Test
      <ejb-class>org.jboss.docs.testJboss.bean.TestBean</ejb-class>
      <persistence-type>Container</persistence-type>
      <prim-key-class>java.lang.Integer</prim-key-class>
      False
      <cmp-field><field-name>id</field-name></cmp-field>
      <cmp-field><field-name>name</field-name></cmp-field>

      <primkey-field>id</primkey-field>


      </enterprise-beans>

      <assembly-descriptor>
      <container-transaction>

      <ejb-name>TestBean</ejb-name>
      <method-intf>Remote</method-intf>
      <method-name>*</method-name>

      <trans-attribute>Required</trans-attribute>
      </container-transaction>
      </assembly-descriptor>
      </ejb-jar>


      ++++++++++++++++++ CLIENT src file (Upload.java) ++++++

      package org.jboss.docs.testJboss;

      import org.jboss.docs.testJboss.interfaces.TestHome;
      import org.jboss.docs.testJboss.interfaces.Test;

      import javax.naming.InitialContext;
      import javax.rmi.PortableRemoteObject;

      import java.util.Hashtable;
      import java.util.StringTokenizer;
      import java.util.Properties;
      import java.io.FileInputStream;

      /**
      * Uploads a tab-delimited file of CD data to the database. There is a `main()'
      * method so this class can be run from the command line. `main()' takes one
      * command-line argument: the name of the file to upload. See the documentation
      * for the `uploadFile()' method for details of the file format. Note that the
      * uploading process may be very slow on some machines, especially if you are
      * using an interpreting JVM. Expect to have a cup of coffee if you are
      * uploading more than a hundred CDs.
      * Note that the uploadFile method deletes the existing database before it
      * uploads.
      */
      public class Upload
      {

      /**
      * Run the upload process from the command line.
      */
      public static void main(String[] args)
      {
      String name = "Testing JBOSS";
      int id = 10;

      try
      {
      System.out.println("1. Value of ID is = " +id);
      System.out.println("1. Value of name is =" +name);

      uploadValue (id, name);
      }

      catch(Exception e)
      {
      System.err.println("ERROR: " + e.toString());
      }
      System.out.println ("OK");
      }

      /**
      * This method uploads a database of CDs specified as a text file. The file
      * must contain one line for each CD, with 5 fields on each line. The
      * ordering of the fields is id-title-artist-type-notes. The fields are
      * separated with tabs. Note that a tab on its own must exist as a
      * placeholder for an empty field.
      */
      public static void uploadValue (int id, String name)
      throws javax.naming.NamingException,
      java.rmi.RemoteException, javax.ejb.CreateException
      {

      // Get a naming context
      InitialContext jndiContext = new InitialContext();

      // Get a reference to a CD Bean
      Object ref = jndiContext.lookup("testJboss/Test");

      // Get a reference from this to the Bean's Home interface
      TestHome home = (TestHome)
      PortableRemoteObject.narrow (ref, TestHome.class);

      System.out.println("2. Value of ID is = " +id);
      System.out.println("2. Value of name is =" +name);

      Test test = home.create(id, name);

      System.out.println("3. Value of ID is = " +id);
      System.out.println("3. Value of name is =" +name);

      test.add();


      } // End of uploadFile()

      }

      +++++++++++++++++++++++ build-client.xml ++++++++++

      <?xml version="1.0" encoding="UTF-8" ?>
      <!-- An Ant build file for the CMP tutorial code -->

















      +++++++++++++++++++ build-testJboss-compile +++++++++
      <?xml version="1.0" encoding="UTF-8" ?>
      <!-- An Ant build file for the CMP tutorial code -->
















      <!-- JNDI Client used to connect to JBoss running on localhost -->

      <!-- File containing some cds -->
      <!--

      -->



      ++++++++++++++++ ERROR MESSAGE both in JBOSS server console & command prompt +++++++++++++++++

      Message displayed in the JBOSS console after copying the test.jar in the deploy directory :

      [AutoDeployer] Auto deploy of file:/C:/JBoss-2.4.0/deploy/Test.jar
      [J2EE Deployer Default] Deploy J2EE application: file:/C:/JBoss-2.4.0/deploy/Test.jar
      [J2eeDeployer] Create application Test.jar
      [J2eeDeployer] install EJB module Test.jar
      [Container factory] Deploying:file:/C:/JBoss-2.4.0/tmp/deploy/Default/Test.jar
      [Verifier] Verifying file:/C:/JBoss-2.4.0/tmp/deploy/Default/Test.jar/ejb1001.jar
      [Verifier]
      Bean : TestBean
      Method : public int ejbCreate(int, String)
      Section: 9.2.3
      Warning: The return type of an ejbCreate(...) method must be the entity bean's primary key type.

      [Verifier]
      Bean : TestBean
      Section: 9.4.7.1
      Warning: The primkey-field element must name a public field in the bean implementation class.

      [Container factory] Deploying TestBean
      [JAWS] Created table 'TEST' successfully.
      [Default] null
      [Bean Cache] Cache policy scheduler started
      [ContainerManagement] Initializing
      [ContainerManagement] Initialized
      [ContainerManagement] Starting
      [ContainerManagement] Started
      [Container factory] Deployed application: file:/C:/JBoss-2.4.0/tmp/deploy/Default/Test.jar
      [J2EE Deployer Default] J2EE application: file:/C:/JBoss-2.4.0/deploy/Test.jar is deployed.

      Message displayed in the JBOSS console after running the client from the command prompt :

      [TestBean] TRANSACTION ROLLBACK EXCEPTION:null; nested exception is:
      javax.ejb.EJBException
      [TestBean] java.lang.NullPointerException
      [TestBean] at org.jboss.ejb.plugins.jaws.jdbc.JDBCCreateEntityCommand.execute(JDBCCreateEntityC
      ommand.java:117)
      [TestBean] at org.jboss.ejb.plugins.jaws.JAWSPersistenceManager.createEntity(JAWSPersistenceMan
      ager.java:128)
      [TestBean] at org.jboss.ejb.plugins.CMPPersistenceManager.createEntity(CMPPersistenceManager.ja
      va:231)
      [TestBean] at org.jboss.ejb.EntityContainer.createHome(EntityContainer.java:538)
      [TestBean] at java.lang.reflect.Method.invoke(Native Method)
      [TestBean] at org.jboss.ejb.EntityContainer$ContainerInterceptor.invokeHome(EntityContainer.jav
      a:765)
      [TestBean] at org.jboss.ejb.plugins.EntitySynchronizationInterceptor.invokeHome(EntitySynchroni
      zationInterceptor.java:224)
      [TestBean] at org.jboss.ejb.plugins.EntityInstanceInterceptor.invokeHome(EntityInstanceIntercep
      tor.java:87)
      [TestBean] at org.jboss.ejb.plugins.TxInterceptorCMT.invokeNext(TxInterceptorCMT.java:135)
      [TestBean] at org.jboss.ejb.plugins.TxInterceptorCMT.runWithTransactions(TxInterceptorCMT.java:
      307)
      [TestBean] at org.jboss.ejb.plugins.TxInterceptorCMT.invokeHome(TxInterceptorCMT.java:86)
      [TestBean] at org.jboss.ejb.plugins.SecurityInterceptor.invokeHome(SecurityInterceptor.java:103
      )
      [TestBean] at org.jboss.ejb.plugins.LogInterceptor.invokeHome(LogInterceptor.java:106)
      [TestBean] at org.jboss.ejb.EntityContainer.invokeHome(EntityContainer.java:342)
      [TestBean] at org.jboss.ejb.plugins.jrmp.server.JRMPContainerInvoker.invokeHome(JRMPContainerIn
      voker.java:370)
      [TestBean] at java.lang.reflect.Method.invoke(Native Method)
      [TestBean] at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:241)
      [TestBean] at sun.rmi.transport.Transport$1.run(Transport.java:142)
      [TestBean] at java.security.AccessController.doPrivileged(Native Method)
      [TestBean] at sun.rmi.transport.Transport.serviceCall(Transport.java:139)
      [TestBean] at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:443)
      [TestBean] at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:643)
      [TestBean] at java.lang.Thread.run(Thread.java:484)

      Message displayed in the command prompt after running the client :

      C:\JBoss-2.4.0\examples\build>ant cmp-testJboss-upload
      Buildfile: build.xml

      validate:

      fail_if_not_valid:

      init:
      [echo] Using JBoss directory=C:/JBoss-2.4.0
      [echo] Using base classpath=C:\JBoss-2.4.0\client\jboss-j2ee.jar;C:\JBoss-2
      .4.0\client\jaas.jar;C:\JBoss-2.4.0\client\jbosssx-client.jar;C:\JBoss-2.4.0\cli
      ent\jboss-client.jar;C:\JBoss-2.4.0\client\jnp-client.jar;C:\jakarta-tomcat-3.2.
      3\lib\servlet.jar
      [echo] Using Source directory=C:\JBoss-2.4.0\examples
      [echo] Using Build directory=C:\JBoss-2.4.0\examples/build-examples

      cmp-testJboss-upload:

      main:
      [java] 1. Value of ID is = 10
      [java] 1. Value of name is =Testing JBOSS
      [java] 2. Value of ID is = 10
      [java] 2. Value of name is =Testing JBOSS
      [java] ERROR: java.rmi.ServerException: RemoteException occurred in server
      thread; nested exception is:
      [java] OK
      [java] javax.transaction.TransactionRolledbackException: null; nested e
      xception is:
      [java] javax.ejb.EJBException

      BUILD SUCCESSFUL

      Total time: 12 seconds
      C:\JBoss-2.4.0\examples\build>