Newbie : Jboss 2.4.3 , CMP: ejbCreate throws NullPointerExce
andig Mar 10, 2002 5:53 AMHello all,
I am evaluating if we use JBoss and CMP for our next project.
I setup Jboss 2.4 with Postgres and ran the CDBean - CMP - sample, it worked fine.
To get in touch with all this J2EE stuff and CMP, I wrote a small test application
which is similar to the Jboss CMP samples.
I have got a entity bean (UserBean), a serializable value object (UserValue) and a stateless
session bean (UserSession) for clients. I use the JBossUtilAutoNumber to autoincrement the userId.
The two tables are created in the database.
In the attached code, the addUser() method should insert a new User in the database.
My problem is, that the ejbCreate() - method of the bean throws a NullPointerException.
To get more info about this error I turned on debugging for jaws.
Whats wrong ??
Thanks for your help.
ejb-jar.xml :
------------------------
<ejb-jar>
<display-name>Bionicon Order System</display-name>
<enterprise-beans>
<!-- Auto Increment Util -->
<ejb-name>JBossUtilAutoNumber</ejb-name>
org.jboss.util.AutoNumberHome
org.jboss.util.AutoNumber
<ejb-class>org.jboss.util.AutoNumberEJB</ejb-class>
<persistence-type>Container</persistence-type>
<prim-key-class>java.lang.String</prim-key-class>
True
<cmp-field><field-name>name</field-name></cmp-field>
<cmp-field><field-name>value</field-name></cmp-field>
<primkey-field>name</primkey-field>
Models a User
<ejb-name>UserBean</ejb-name>
siteos.bionicon.user.interfaces.UserHome
siteos.bionicon.user.interfaces.User
<ejb-class>siteos.bionicon.user.bean.UserBean</ejb-class>
<!-- Container Managed Persistence -->
<persistence-type>Container</persistence-type>
<prim-key-class>java.lang.Integer</prim-key-class>
False
<cmp-field><field-name>userId</field-name></cmp-field>
<cmp-field><field-name>login</field-name></cmp-field>
<cmp-field><field-name>password</field-name></cmp-field>
<primkey-field>userId</primkey-field>
Models use cases for Users
<ejb-name>UserSessionBean</ejb-name>
siteos.bionicon.user.interfaces.UserSessionHome
siteos.bionicon.user.interfaces.UserSession
<ejb-class>siteos.bionicon.user.bean.UserSessionBean</ejb-class>
<session-type>Stateless</session-type>
<transaction-type>Container</transaction-type>
<ejb-ref>
<ejb-ref-name>ejb/User</ejb-ref-name>
<ejb-ref-type>Entity</ejb-ref-type>
siteos.bionicon.user.interfaces.UserHome
siteos.bionicon.user.interfaces.User
<ejb-link>UserBean</ejb-link>
</ejb-ref>
</enterprise-beans>
<assembly-descriptor>
<container-transaction>
<ejb-name>UserBean</ejb-name>
<method-name>*</method-name>
<trans-attribute>Required</trans-attribute>
</container-transaction>
</assembly-descriptor>
</ejb-jar>
--------------------
UserBean.java:
--------------------
public class UserBean implements EntityBean
{
public Integer userId;
private String login;
private String password;
EntityContext ctx;
/**
*
*/
public Integer ejbCreate ()
{
userId = AutoNumberFactory.getNextInteger("UserBean");
System.out.println("ejBCreate Called " + userId);
return null;
}
public void ejbPostCreate() { }
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() { }
public void setValueObject(UserValue value)
{
userId = value.getUserId();
login = value.getLogin();
password = value.getPassword();
}
public UserValue getValueObject()
{
UserValue value = new UserValue();
value.setUserId(userId);
value.setLogin(login);
value.setPassword(password);
return value;
}
}
-------------------------
UserSession.java :
-------------------------
...
public void addUser(UserValue value) throws RemoteException
{
//get home interface
UserHome home = (UserHome) getHome("user/User", UserHome.class);
try
{
//here happens the Exception
User user = home.create();
//set Value
user.setValueObject(value);
}
catch (Exception e2)
{
throw new EJBException (e2);
}
}
...
--------------------------
The Exception , wow !
--------------------------
[Default] ejBCreate Called 0
[JAWS] Create, id is 0
[JAWS] Exists command executing: SELECT COUNT(*) FROM UserBean WHERE userId=?
[JAWS] Set parameter: idx=1, jdbcType=INTEGER, value=0
[JAWS] Create command executing: INSERT INTO UserBean (password,login,userId) VALUES (?,?,?)
[JAWS] java.lang.NullPointerException
[JAWS] at org.jboss.ejb.plugins.jaws.metadata.CMPFieldMetaData.getValue(CMPFieldMetaData.java:363)
[JAWS] at org.jboss.ejb.plugins.jaws.jdbc.JDBCCommand.getCMPFieldValue(JDBCCommand.java:640)
[JAWS] at org.jboss.ejb.plugins.jaws.jdbc.JDBCCreateEntityCommand.setParameters(JDBCCreateEntityComman
d.java:163)
[JAWS] at org.jboss.ejb.plugins.jaws.jdbc.JDBCCommand.jdbcExecute(JDBCCommand.java:159)
[JAWS] at org.jboss.ejb.plugins.jaws.jdbc.JDBCCreateEntityCommand.execute(JDBCCreateEntityCommand.java
:135)
[JAWS] at org.jboss.ejb.plugins.jaws.JAWSPersistenceManager.createEntity(JAWSPersistenceManager.java:1
28)
[JAWS] at org.jboss.ejb.plugins.CMPPersistenceManager.createEntity(CMPPersistenceManager.java:231)
[JAWS] at org.jboss.ejb.EntityContainer.createHome(EntityContainer.java:616)
[JAWS] at java.lang.reflect.Method.invoke(Native Method)
[JAWS] at org.jboss.ejb.EntityContainer$ContainerInterceptor.invokeHome(EntityContainer.java:843)
[JAWS] at org.jboss.ejb.plugins.EntitySynchronizationInterceptor.invokeHome(EntitySynchronizationInter
ceptor.java:231)
[JAWS] at org.jboss.ejb.plugins.EntityInstanceInterceptor.invokeHome(EntityInstanceInterceptor.java:15
4)
[JAWS] at org.jboss.ejb.plugins.EntityLockInterceptor.invokeHome(EntityLockInterceptor.java:108)
[JAWS] at org.jboss.ejb.plugins.TxInterceptorCMT.invokeNext(TxInterceptorCMT.java:135)
[JAWS] at org.jboss.ejb.plugins.TxInterceptorCMT.runWithTransactions(TxInterceptorCMT.java:307)
[JAWS] at org.jboss.ejb.plugins.TxInterceptorCMT.invokeHome(TxInterceptorCMT.java:86)
[JAWS] at org.jboss.ejb.plugins.SecurityInterceptor.invokeHome(SecurityInterceptor.java:103)
[JAWS] at org.jboss.ejb.plugins.LogInterceptor.invokeHome(LogInterceptor.java:106)
[JAWS] at org.jboss.ejb.EntityContainer.invokeHome(EntityContainer.java:420)
[JAWS] at org.jboss.ejb.plugins.jrmp.server.JRMPContainerInvoker.invokeHome(JRMPContainerInvoker.java:
441)
[JAWS] at org.jboss.ejb.plugins.jrmp.interfaces.HomeProxy.invokeHome(HomeProxy.java:237)
[JAWS] at org.jboss.ejb.plugins.jrmp.interfaces.HomeProxy.invoke(HomeProxy.java:182)
[JAWS] at $Proxy25.create(Unknown Source)
[JAWS] at siteos.bionicon.order.bean.OrderSessionBean.addUser(OrderSessionBean.java:70)
[JAWS] at java.lang.reflect.Method.invoke(Native Method)
[JAWS] at org.jboss.ejb.StatefulSessionContainer$ContainerInterceptor.invoke(StatefulSessionContainer.
java:650)
[JAWS] at org.jboss.ejb.plugins.SecurityInterceptor.invoke(SecurityInterceptor.java:128)
[JAWS] at org.jboss.ejb.plugins.StatefulSessionInstanceInterceptor.invoke(StatefulSessionInstanceInter
ceptor.java:243)
[JAWS] at org.jboss.ejb.plugins.TxInterceptorCMT.invokeNext(TxInterceptorCMT.java:133)
[JAWS] at org.jboss.ejb.plugins.TxInterceptorCMT.runWithTransactions(TxInterceptorCMT.java:307)
[JAWS] at org.jboss.ejb.plugins.TxInterceptorCMT.invoke(TxInterceptorCMT.java:99)
[JAWS] at org.jboss.ejb.plugins.LogInterceptor.invoke(LogInterceptor.java:195)
[JAWS] at org.jboss.ejb.StatefulSessionContainer.invoke(StatefulSessionContainer.java:341)
[JAWS] at org.jboss.ejb.plugins.jrmp.server.JRMPContainerInvoker.invoke(JRMPContainerInvoker.java:395)
[JAWS] at java.lang.reflect.Method.invoke(Native Method)
[JAWS] at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:242)
[JAWS] at sun.rmi.transport.Transport$1.run(Transport.java:155)
[JAWS] at java.security.AccessController.doPrivileged(Native Method)
[JAWS] at sun.rmi.transport.Transport.serviceCall(Transport.java:152)
[JAWS] at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:462)
[JAWS] at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:662)
[JAWS] at java.lang.Thread.run(Thread.java:498)
[EntitySynchronizationInterceptor] beforeCompletion called for ctx org.jboss.ejb.EntityEnterpriseContex
t@2e3bd49b
[EntitySynchronizationInterceptor] Checking ctx=org.jboss.ejb.EntityEnterpriseContext@2e3bd49b, for sta
tus of tx=TransactionImpl:XidImpl [FormatId=257, GlobalId=Gandalf//3, BranchQual=]
[EntitySynchronizationInterceptor] afterCompletion, clear tx for ctx=org.jboss.ejb.EntityEnterpriseCont
ext@2e3bd49b, tx=TransactionImpl:XidImpl [FormatId=257, GlobalId=Gandalf//3, BranchQual=]
[EntitySynchronizationInterceptor] afterCompletion, sent notify on TxLock for ctx=org.jboss.ejb.EntityE
nterpriseContext@2e3bd49b
[UserSessionBean] TRANSACTION ROLLBACK EXCEPTION:null
Embedded Exception
Could not create entity:java.lang.NullPointerException; nested exception is:
javax.ejb.EJBException: null
Embedded Exception
Could not create entity:java.lang.NullPointerException
[UserSessionBean] javax.ejb.CreateException: Could not create entity:java.lang.NullPointerException
[UserSessionBean] at org.jboss.ejb.plugins.jaws.jdbc.JDBCCreateEntityCommand.execute(JDBCCreateEn
tityCommand.java:139)
[UserSessionBean] at org.jboss.ejb.plugins.jaws.JAWSPersistenceManager.createEntity(JAWSPersisten
ceManager.java:128)
[UserSessionBean] at org.jboss.ejb.plugins.CMPPersistenceManager.createEntity(CMPPersistenceManag
er.java:231)
[UserSessionBean] at org.jboss.ejb.EntityContainer.createHome(EntityContainer.java:616)
[UserSessionBean] at java.lang.reflect.Method.invoke(Native Method)
....