wood burning stoves 2.0*
The moose likes JBoss/WildFly and the fly likes Entity Bean on JBoss4.0.2 Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login


Win a copy of Android Security Essentials Live Lessons this week in the Android forum!
JavaRanch » Java Forums » Products » JBoss/WildFly
Bookmark "Entity Bean on JBoss4.0.2" Watch "Entity Bean on JBoss4.0.2" New topic
Author

Entity Bean on JBoss4.0.2

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.


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>


Can anyone point out where is the mistake.??
Please I have been stuck on this for 2 days now.
Thanks a lot for all your help.
Regards
Adrian
Dave Salter
Ranch Hand

Joined: Jul 20, 2005
Posts: 292

Is your id field in MySQL set as an auto increment?

Dave.
adrian mills
Ranch Hand

Joined: Dec 09, 2004
Posts: 63
No the id is generated by me in the ejbCreate method using another class

UniqueId generator

Here is the class
package com.cygnet.medina.util;

/**
* @author shardul
*
* To change the template for this generated type comment go to
* Window>Preferences>Java>Code Generation>Code and Comments
*/
public class UniqueIdGenerator {



private static long id = System.currentTimeMillis();

public static synchronized long getId() {
System.out.println(" $$**Came in UniqueId Generator **$$");
System.out.println("Value of id returned is **$$ ====="+ id);
return id++;

}

}

Thanks dave for the reply I hope this is sufficient for you to give me further hint.

Cheers
Adrian
 
I agree. Here's the link: http://aspose.com/file-tools
 
subject: Entity Bean on JBoss4.0.2
 
Similar Threads
CMP 2.0 problem with MySQL server
CMP beans not entering data in database
CMP 2.0 problem in Jboss 4.0.2
Could not Create entity error.
CMP EJB Creation with id generated by an independent class