CMP EJB Creation with id generated by an independent class
adrian mills
Ranch Hand
Joined: Dec 09, 2004
Posts: 63
posted
0
Hi All, I have a HospitalBean which is called from a HospitalManagerBean which is a SessionBean.
The Manager code is as follows public HospitalData addHospital(HospitalData hospitalData) throws EJBException,RemoteException{ HospitalData newHospitalData = new HospitalData();
try { System.out.println("Debug in HospitalManager 1********"); InitialContext initialContext = new InitialContext(); System.out.println("Debug in HospitalManager 2********"); HospitalHome hospitalHome = (HospitalHome) initialContext.lookup(JNDINames.Hospital_Home); System.out.println("Debug in HospitalManager 3********"); Hospital hospital = hospitalHome.create(hospitalData); System.out.println("$$$$$$$Created Hospital$$$$$$$$$$$"); System.out.println("Hospital Primary Key" + hospital.getPrimaryKey().toString()); newHospitalData = hospital.getHospitalData();
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");
public void ejbPostCreate(HospitalData hospitalData)throws CreateException,RemoteException{ System.out.println("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$"); System.out.println("Came in EJB POSTCreate of HospitalEJB"); System.out.println("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$");
/** * @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(); }
}
The bean is deployed properly.The tables are also created but when I run the application it gives the following error:
18:27:12,093 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)
A 0 is entered in the hospitalid field and no value is entered in the hospital name field.
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>
Can anyone tell me what the problem is.I am struggling with it for the past 2 days. Also FYI I am using Jboss 4.0.2 and MySQL 4.1.13 database
Ken Loh
Ranch Hand
Joined: Feb 16, 2005
Posts: 190
posted
0
Hi Adrian,
Would it be possible for you to resubmit your codes in their original format with indentations and all ? It's 3:00 am where I live and reading your codes which all left-aligned is certainly an uphill task.
Thanks, Ken
adrian mills
Ranch Hand
Joined: Dec 09, 2004
Posts: 63
posted
0
Sorry Ken, I am resubmitting the code I hope this is formatted properly.
This is my HospitalManagerEJB used to look up the Hospital EJB.
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");
/** * @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 Uniqueid generator class
public class UniqueIdGenerator {
private static long id = System.currentTimeMillis();
public static synchronized long getId() { return id++;
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">
I am getting the following error. The bean is deployed properly.The tables are also created but when I run the application it gives the following error:
18:27:12,093 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)
A 0 is entered in the hospitalid field and no value is entered in the hospital name field.
I hope the indentation is properly shown on the forum. I am struggling with this set up for the past 2 days.
I am using JBoss 4.0.2 and MySQL 4.1.13 as I had told you earlier.
Thanks With Regards Adrian
adrian mills
Ranch Hand
Joined: Dec 09, 2004
Posts: 63
posted
0
Oops the indentation does not remain when I submit my question ken. I am sorry can u tell me how do we enable this. I am really sorry to cause this inconvinience to you.