| Author |
CMP beans not entering data in database
|
adrian mills
Ranch Hand
Joined: Dec 09, 2004
Posts: 63
|
|
Hi All, I am using JBoss 4.0.2 and MySQL 4.1.13. I have deployed my entity bean successfully and the tables are created on the backened. But when I try to insert data I am getting the following exception. I have posted my bean and ejb-jar.xml as well as my jbosscmp-jdbc.xml Can anyone point out what is the mistake? I feel I am missing some configuration file. 14:33:43,953 ERROR [LogInterceptor] TransactionRolledbackException in method: public abstract com.cygnet.medina.Hospital.Hospital com.cygnet.medina.Hospital.HospitalHome.create(com.cygnet.medina.Hospital.HospitalData) throws javax.ejb.CreateException,java.rmi.RemoteException, causedBy: javax.ejb.EJBException: getGeneratedKeys returned an empty ResultSet at org.jboss.ejb.plugins.cmp.jdbc.keygen.JDBCMySQLCreateCommand.executeInsert(JDBCMySQLCreateCommand.java:87) at org.jboss.ejb.plugins.cmp.jdbc.JDBCAbstractCreateCommand.performInsert(JDBCAbstractCreateCommand.java:308) at org.jboss.ejb.plugins.cmp.jdbc.JDBCAbstractCreateCommand.execute(JDBCAbstractCreateCommand.java:138) at org.jboss.ejb.plugins.cmp.jdbc.JDBCStoreManager.createEntity(JDBCStoreManager.java:572) at org.jboss.ejb.plugins.CMPPersistenceManager.createEntity(CMPPersistenceManager.java:222) at org.jboss.resource.connectionmanager.CachedConnectionInterceptor.createEntity(CachedConnectionInterceptor.java:266) at org.jboss.ejb.EntityContainer.createHome(EntityContainer.java:766) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:324) at org.jboss.invocation.Invocation.performCall(Invocation.java:345) at org.jboss.ejb.EntityContainer$ContainerInterceptor.invokeHome(EntityContainer.java:1113) A null is inserted in the primarykey field. Here is my Entity Bean code. public abstract class HospitalEJB implements EntityBean { private EntityContext context; public Long hospitalid; public String hospitalname; public void ejbLoad() throws EJBException, RemoteException { } public void ejbActivate() throws EJBException, RemoteException { } public Long ejbCreate(HospitalData hospitalData) throws CreateException{ Long myid = new Long(UniqueIdGenerator.getId()); System.out.println("My id generated ====== "+myid); this.hospitalid = myid; System.out.println("My id generated ====== "+this.hospitalid); System.out.println("Came in ejbCreate method of HospitalEJB"); this.hospitalname = hospitalData.getHospitalname(); return null; } public void ejbPostCreate(HospitalData hospitalData)throws CreateException,RemoteException{ System.out.println("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$"); System.out.println("Came in EJB POSTCreate of HospitalEJB"); System.out.println("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$"); } public void ejbRemove() throws RemoveException, RemoteException, EJBException { } public void setEntityContext(EntityContext context) throws EJBException, RemoteException { } public void unsetEntityContext() throws EJBException, RemoteException { } public void ejbPassivate() throws EJBException, RemoteException { } public void ejbStore() throws EJBException, RemoteException { } /** * @return */ public abstract Long getHospitalid(); /** * @return */ public abstract String getHospitalname(); /** * @param long1 */ public abstract void setHospitalid(Long long1); /** * @param string */ public abstract void setHospitalname(String string); public HospitalData getHospitalData(){ System.out.println("Came in get hospital data"); System.out.println("In Get method of HospitalEJB"+this.hospitalid); System.out.println("In Get method of HospitalEJB"+this.hospitalname); HospitalData hospitalData = new HospitalData(); hospitalData.setHospitalid(this.hospitalid); hospitalData.setHospitalname(this.hospitalname); System.out.println("In Get method of HospitalEJB"+hospitalData.getHospitalid()); System.out.println("In Get method of HospitalEJB"+hospitalData.getHospitalname()); return hospitalData; } public void setHospitalData(HospitalData hospitalData){ System.out.println("In Set method of HospitalEJB" + hospitalData.getHospitalname()); this.hospitalname = hospitalData.getHospitalname(); } } Here is my <ejb-jar.xml> <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN" "http://java.sun.com/dtd/ejb-jar_2_0.dtd"> <ejb-jar> <enterprise-beans> <session> <ejb-name>UserManager</ejb-name> <home>com.cygnet.medina.UserManager.UserManagerHome</home> <remote>com.cygnet.medina.UserManager.UserManager</remote> <ejb-class>com.cygnet.medina.UserManager.UserManagerEJB</ejb-class> <session-type>Stateless</session-type> <transaction-type>Container</transaction-type> </session> <assembly-descriptor> <container-transaction> <method> <ejb-name>UserManager</ejb-name> <method-name>*</method-name> </method> <trans-attribute>Required</trans-attribute> </container-transaction> </assembly-descriptor> <session> <ejb-name>HospitalManager</ejb-name> <home>com.cygnet.medina.HospitalManager.HospitalManagerHome</home> <remote>com.cygnet.medina.HospitalManager.HospitalManager</remote> <ejb-class>com.cygnet.medina.HospitalManager.HospitalManagerEJB</ejb-class> <session-type>Stateless</session-type> <transaction-type>Container</transaction-type> </session> <assembly-descriptor> <container-transaction> <method> <ejb-name>HospitalManager</ejb-name> <method-name>*</method-name> </method> <trans-attribute>Required</trans-attribute> </container-transaction> </assembly-descriptor> <entity> <ejb-name>AnesthesiaUser</ejb-name> <home>com.cygnet.medina.user.AnesthesiaUserHome</home> <remote>com.cygnet.medina.user.AnesthesiaUser</remote> <ejb-class>com.cygnet.medina.user.AnesthesiaUserEJB</ejb-class> <persistence-type>Container</persistence-type> <prim-key-class>java.lang.Long</prim-key-class> <reentrant>False</reentrant> <cmp-version>2.x</cmp-version> <abstract-schema-name>AnesthesiaUser</abstract-schema-name> <cmp-field> <field-name>userid</field-name> <column-name>userid</column-name> </cmp-field> <cmp-field> <field-name>username</field-name> <column-name>username</column-name> </cmp-field> <cmp-field> <field-name>password</field-name> <column-name>password</column-name> </cmp-field> <cmp-field> <field-name>usertype</field-name> <column-name>usertype</column-name> </cmp-field> <cmp-field> <field-name>createddate</field-name> <column-name>createddate</column-name> </cmp-field> <cmp-field> <field-name>updateddate</field-name> <column-name>updateddate</column-name> </cmp-field> <primkey-field>userid</primkey-field> <query> <query-method> <method-name>findByUsername</method-name> <method-params> <method-param>java.lang.String</method-param> </method-params> </query-method> <ejb-ql></ejb-ql> </query> </entity> <assembly-descriptor> <container-transaction> <method> <ejb-name>AnesthesiaUser</ejb-name> <method-name>*</method-name> </method> <trans-attribute>Required</trans-attribute> </container-transaction> </assembly-descriptor> <!-- Added --> <entity> <ejb-name>Hospital</ejb-name> <home>com.cygnet.medina.Hospital.HospitalHome</home> <remote>com.cygnet.medina.Hospital.Hospital</remote> <ejb-class>com.cygnet.medina.Hospital.HospitalEJB</ejb-class> <persistence-type>Container</persistence-type> <prim-key-class>java.lang.Long</prim-key-class> <reentrant>False</reentrant> <cmp-version>2.x</cmp-version> <abstract-schema-name>Hospital</abstract-schema-name> <cmp-field> <field-name>hospitalid</field-name> <column-name>hospitalid</column-name> </cmp-field> <cmp-field> <field-name>hospitalname</field-name> <column-name>hospitalname</column-name> </cmp-field> <primkey-field>hospitalid</primkey-field> </entity> <assembly-descriptor> <container-transaction> <method> <ejb-name>Hospital</ejb-name> <method-name>*</method-name> </method> <trans-attribute>Required</trans-attribute> </container-transaction> </assembly-descriptor> <!-- End --> </enterprise-beans> </ejb-jar> Here is my jbosscmp-jdbc.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE jbosscmp-jdbc PUBLIC "-//JBoss//DTD JBOSSCMP-JDBC 4.0//EN" "http://www.jboss.org/j2ee/dtd/jbosscmp-jdbc_4_0.dtd"> <!-- ===================================================================== --> <!-- --> <!-- Standard JBossCMP-JDBC Configuration --> <!-- --> <!-- ===================================================================== --> <!-- $Id: standardjbosscmp-jdbc.xml,v 1.84.2.6 2005/01/26 18:51:35 starksm Exp $ --> <jbosscmp-jdbc> <defaults> <datasource>java:/MySqlDS</datasource> <!-- <datasource-mapping>MySQL</datasource-mapping> --> <create-table>true</create-table> <remove-table>true</remove-table> <read-only>false</read-only> <read-time-out>300000</read-time-out> <row-locking>false</row-locking> <pk-constraint>true</pk-constraint> <fk-constraint>false</fk-constraint> </defaults> <enterprise-beans> <entity> <ejb-name>AnesthesiaUser</ejb-name> <pk-constraint>false</pk-constraint> <table-name>AnesthesiaUser</table-name> <cmp-field> <field-name>userid</field-name> <column-name>userid</column-name> <jdbc-type>BIGINT</jdbc-type> <sql-type>BIGINT</sql-type> </cmp-field> <cmp-field> <field-name>username</field-name> <column-name>username</column-name> <jdbc-type>VARCHAR</jdbc-type> <sql-type>VARCHAR(50)</sql-type> </cmp-field> <cmp-field> <field-name>password</field-name> <column-name>password</column-name> <jdbc-type>VARCHAR</jdbc-type> <sql-type>VARCHAR(50)</sql-type> </cmp-field> <cmp-field> <field-name>usertype</field-name> <column-name>usertype</column-name> <jdbc-type>VARCHAR</jdbc-type> <sql-type>VARCHAR(50)</sql-type> </cmp-field> <cmp-field> <field-name>createddate</field-name> <column-name>createddate</column-name> <jdbc-type>TIMESTAMP</jdbc-type> <sql-type>DATETIME</sql-type> </cmp-field> <cmp-field> <field-name>updateddate</field-name> <column-name>updateddate</column-name> <jdbc-type>TIMESTAMP</jdbc-type> <sql-type>DATETIME</sql-type> </cmp-field> <query> <query-method> <method-name>findByUsername</method-name> <method-params> <method-param>java.lang.String</method-param> </method-params> </query-method> <jboss-ql><![CDATA[ SELECT OBJECT(u) FROM AnesthesiaUser u WHERE u.username = ?1 ]]></jboss-ql> </query> <entity-command name="mysql-get-generated-keys"/> </entity> <!-- Added --> <entity> <ejb-name>Hospital</ejb-name> <pk-constraint>false</pk-constraint> <table-name>Hospital</table-name> <cmp-field> <field-name>hospitalid</field-name> <column-name>hospitalid</column-name> <jdbc-type>BIGINT</jdbc-type> <sql-type>BIGINT</sql-type> </cmp-field> <cmp-field> <field-name>hospitalname</field-name> <column-name>hospitalname</column-name> <jdbc-type>VARCHAR</jdbc-type> <sql-type>VARCHAR(50)</sql-type> </cmp-field> <entity-command name="mysql-get-generated-keys"/> </entity> <!-- End --> </enterprise-beans> </jbosscmp-jdbc>
|
 |
 |
|
|
subject: CMP beans not entering data in database
|
|
|