Hi all,
I'm always getting the following exception when using CMP (ejb 1.1 and ejb
2.0) in orion 1.1.36 and earlier versions:
on the client side :
java.lang.InternalError: Object was null but still part of the cache
at com.evermind.server.rmi.bb.invokeMethod(JAX)
at com.evermind.server.rmi.a2.invoke(JAX)
at com.evermind.server.rmi.a3.invoke(JAX)
at __Proxy1.create(Unknown Source)
at om.fnv.kozijncalc.entities.klanten.KlantTest.<init>KlantTest.java:41)
at com.fnv.kozijncalc.entities.klanten.KlantTest.mainKlantTest.java:100)
Below is all the code and the deployment descriptors. I think it has
something todo with orion's memory (bean caching ) managment. Has someone
else have equal problems ? Or is it a bug ? Where can I find the bug list?
Thank in advance.
Wim Veninga.
[EMAIL PROTECTED]
the client code :
package com.fnv.kozijncalc.entities.klanten;
import java.io.*;
import java.util.*;
import javax.ejb.*;
import javax.rmi.*;
import javax.naming.*;
public class KlantTest
{
static final String objNaam = "java:comp/env/Klant";
static final String fileName =
"C:\\testKozijnEJB\\instellingen.properties";
public KlantTest() throws Exception
{
FileInputStream fis = new FileInputStream(this.fileName);
Properties props = new Properties();
props.load(fis);
//find the serverPortalHome
System.out.print("Connecting to server...");
Context context = new InitialContext(props);
Object portalRef = context.lookup(objNaam);
KlantHome home =
(KlantHome)PortableRemoteObject.narrow(portalRef,KlantHome.class);
System.out.println(" done.");
System.out.println("Creating new klant...");
Klant klant = home.create(new Integer(26)); /* Error OCCURES HERE
*/
klant.setKlantNaam("Jamper");
klant.setKlantAdres("testadres");
klant.setKlantPostcode("9501 BN");
klant.setKlantPlaats("TestPlaats");
klant.setKlantLand("Land");
klant.setKlantTelefoon("Telefoon");
klant.setKlantContactPersoon("Contact");
System.out.println("Created klant with following data : ");
printKlant(klant);
}
private void printKlant(Klant k) throws Exception
{
System.out.println("Found klant : ");
System.out.println("klant nr = " + k.getKlantNr().toString());
System.out.println("naam = " + k.getKlantNaam());
System.out.println("adres = "+ k.getKlantAdres());
System.out.println("postcode = "+ k.getKlantPostcode());
System.out.println("plaats = "+ k.getKlantPlaats());
System.out.println("land = "+ k.getKlantLand());
System.out.println("contact = "+ k.getKlantContactPersoon());
}
public static void main(String args[])
{
try
{
KlantTest klantTest = new KlantTest();
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
application-client.xml:
<?xml version="1.0"?>
<!DOCTYPE application-client PUBLIC "-//Sun Microsystems, Inc.//DTD J2EE
Application Client 1.2//EN"
"http://java.sun.com/j2ee/dtds/application-client_1_2.dtd">
<application-client>
<display-name>Klant Test</display-name>
<ejb-ref>
<ejb-ref-name>Klant</ejb-ref-name>
<ejb-ref-type>Entity</ejb-ref-type>
<home>com.fnv.kozijncalc.entities.klanten.KlantHome</home>
<remote>com.fnv.kozijncalc.entities.klanten.Klant</remote>
</ejb-ref>
</application-client>
EJB 2.0 code :
Home :
package com.fnv.kozijncalc.entities.klanten;
import javax.ejb.*;
import java.rmi.RemoteException;
public interface KlantHome extends EJBHome
{
public Klant create(Integer klantNr) throws CreateException,
RemoteException;
public Klant findByPrimaryKey(Integer key) throws RemoteException,
FinderException;
}
Remote :
package com.fnv.kozijncalc.entities.klanten;
import java.rmi.RemoteException;
import javax.ejb.*;
public interface Klant extends EJBObject
{
public java.lang.Integer getKlantNr() throws RemoteException;
public java.lang.String getKlantNaam() throws RemoteException;
public void setKlantNaam(java.lang.String value) throws RemoteException;
public java.lang.String getKlantAdres() throws RemoteException;
public void setKlantAdres(java.lang.String value) throws RemoteException;
public java.lang.String getKlantPostcode() throws RemoteException;
public void setKlantPostcode(java.lang.String value) throws
RemoteException;
public java.lang.String getKlantPlaats() throws RemoteException;
public void setKlantPlaats(java.lang.String value) throws RemoteException;
public java.lang.String getKlantLand() throws RemoteException;
public void setKlantLand(java.lang.String value) throws RemoteException;
public java.lang.String getKlantTelefoon() throws RemoteException;
public void setKlantTelefoon(java.lang.String value) throws
RemoteException;
public java.lang.String getKlantContactPersoon() throws RemoteException;
public void setKlantContactPersoon(java.lang.String value) throws
RemoteException;
}
Bean :
package com.fnv.kozijncalc.entities.klanten;
import javax.ejb.*;
public abstract class KlantEJB implements EntityBean {
protected EntityContext context;
public abstract java.lang.Integer getKlantNr();
public abstract void setKlantNr(java.lang.Integer value);
public abstract java.lang.String getKlantNaam();
public abstract void setKlantNaam(java.lang.String value);
public abstract java.lang.String getKlantAdres();
public abstract void setKlantAdres(java.lang.String value);
public abstract java.lang.String getKlantPostcode();
public abstract void setKlantPostcode(java.lang.String value);
public abstract java.lang.String getKlantPlaats();
public abstract void setKlantPlaats(java.lang.String value);
public abstract java.lang.String getKlantLand();
public abstract void setKlantLand(java.lang.String value);
public abstract java.lang.String getKlantTelefoon();
public abstract void setKlantTelefoon(java.lang.String value);
public abstract java.lang.String getKlantContactPersoon();
public abstract void setKlantContactPersoon(java.lang.String value);
public void ejbLoad() {
}
public void ejbStore() {
}
public void ejbActivate() {
}
public void ejbPassivate() {
}
public void ejbRemove() {
}
public void setEntityContext(EntityContext context) {
this.context = context;
}
public void unsetEntityContext() {
this.context = null;
}
public Integer ejbCreate(Integer klantNr) throws CreateException {
this.setKlantNr(klantNr);
return null; // Return null when using CMP
}
public void ejbPostCreate(Integer klantNr) {
}
}
Deployement Descriptors :
ejb-jar:
<?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_2_0.dtd">
<ejb-jar>
<description>
</description>
<enterprise-beans>
<!-- The entity beans voor kozijnCalc -->
<entity>
<description></description>
<ejb-name>Klant</ejb-name>
<home>com.fnv.kozijncalc.entities.klanten.KlantHome</home>
<remote>com.fnv.kozijncalc.entities.klanten.Klant</remote>
<ejb-class>com.fnv.kozijncalc.entities.klanten.KlantEJB</ejb-class>
<persistence-type>Container</persistence-type>
<prim-key-class>java.lang.Integer</prim-key-class>
<reentrant>False</reentrant>
<cmp-field><field-name>klantNr</field-name></cmp-field>
<cmp-field><field-name>klantNaam</field-name></cmp-field>
<cmp-field><field-name>klantAdres</field-name></cmp-field>
<cmp-field><field-name>klantPostcode</field-name></cmp-field>
<cmp-field><field-name>klantPlaats</field-name></cmp-field>
<cmp-field><field-name>klantLand</field-name></cmp-field>
<cmp-field><field-name>klantTelefoon</field-name></cmp-field>
<cmp-field><field-name>klantContactPersoon</field-name></cmp-field>
<primkey-field>klantNr</primkey-field>
</entity>
</enterprise-beans>
<!-- Dependant object -->
<dependents>
</dependents>
<!-- CMP RELATION SHIPS : De relaties die beans met elkaar of met
dependants hebben. -->
<relationships>
</relationships>
<assembly-descriptor>
<container-transaction>
<method>
<ejb-name>com.fnv.kozijncalc.entities.klanten.Klant</ejb-name>
<method-name>*</method-name>
</method>
<trans-attribute>Supports</trans-attribute>
</container-transaction>
</assembly-descriptor>
</ejb-jar>
Orion-ejb-jar:
<?xml version="1.0"?>
<!DOCTYPE orion-ejb-jar PUBLIC "-//Evermind//DTD Enterprise JavaBeans 1.1
runtime//EN" "http://www.orionserver.com/dtds/orion-ejb-jar.dtd">
<orion-ejb-jar deployment-version="1.1.36" deployment-time="e0a72cf703">
<enterprise-beans>
<entity-deployment name="Klant" location="Klant"
wrapper="KlantHome_EntityHomeWrapper35" table="klanten"
data-source="jdbc/KozijnDS">
<primkey-mapping>
<cmp-field-mapping name="klantNr" persistence-name="klantNr" />
</primkey-mapping>
<cmp-field-mapping name="klantNaam" persistence-name="klantNaam" />
<cmp-field-mapping name="klantAdres" persistence-name="klantAdres" />
<cmp-field-mapping name="klantPostcode" persistence-name="klantPostcode"
/>
<cmp-field-mapping name="klantPlaats" persistence-name="klantPlaats" />
<cmp-field-mapping name="klantLand" persistence-name="klantLand" />
<cmp-field-mapping name="klantTelefoon" persistence-name="klantTelefoon"
/>
<cmp-field-mapping name="klantContactPersoon"
persistence-name="klantContactPersoon" />
</entity-deployment>
</enterprise-beans>
<assembly-descriptor>
<default-method-access>
<security-role-mapping impliesAll="true" />
</default-method-access>
</assembly-descriptor>
</orion-ejb-jar>
(I can sent your a .ear with al the code (also with the other beans and
relations between them for how to use ejb 2.0). Just sent me an email and i
will sent the .ear back.
Wim Veninga.
[EMAIL PROTECTED]