Remote Exception when using Composite Primary Key
damiansutton Sep 4, 2002 12:24 AMHi All,
I have noticed that most people with Composite Primary Key Problems have trouble getting them to work. I don't seem to have a problem creating, doploying or using Composite Primary Keys on JBoss 3.0.1 / Tomcat 4.0.4 .
But I have found that when using remote methods on the bean that has a Composite Primary Key, a Remote Exception is thrown.
I can use the home.findByPrimaryKey(myKey) method successfully, I print the bean that is returned (I works). But if I call any get or set methods it brakes.
Here some of my code that might help.
(in the ejb-jar.xml)
Models the TxCarcass Table
<ejb-name>TxCarcassBean</ejb-name>
pig.TxCarcassHome
pig.TxCarcass
<ejb-class>pig.TxCarcassBean</ejb-class>
<persistence-type>Container</persistence-type>
<prim-key-class>pig.TxCarcassKey</prim-key-class>
False
<cmp-field>
<field-name>site</field-name>
</cmp-field>
<cmp-field>
<field-name>deviceAddr</field-name>
</cmp-field>
<cmp-field>
<field-name>devicePort</field-name>
</cmp-field>
<cmp-field>
<field-name>txDate</field-name>
</cmp-field>
<cmp-field>
<field-name>txTime</field-name>
</cmp-field>
<cmp-field>
<field-name>txSeq</field-name>
</cmp-field>
<cmp-field>
<field-name>txChain</field-name>
</cmp-field>
<cmp-field>
<field-name>txStation</field-name>
</cmp-field>
<cmp-field>
<field-name>txType</field-name>
</cmp-field>
(primary key class)
public class TxCarcassKey implements java.io.Serializable {
public String site;
public String deviceAddr;
public String devicePort;
public Date txDate;
public Integer txSeq;
/** Creates a new instance of TxCarcassKey */
public TxCarcassKey() { }
public boolean equals(Object obj) {
if(obj == null) {
return false;
}
if(obj instanceof TxCarcassKey) {
if(((TxCarcassKey)obj).hashCode() ==
this.hashCode()) {
return true;
}
}
return false;
}
public int hashCode() {
return this.toString().hashCode();
}
public String toString() {
return site + "|" + deviceAddr + "|" + devicePort + "|" + txDate.toString() + "|" + txSeq.toString();
}
}
(implementation bean create method)
public TxCarcassKey ejbCreate(String site, String deviceAddr, String devicePort, Date txDate, Integer txSeq) {
this.site = site;
this.deviceAddr = deviceAddr;
this.devicePort = devicePort;
this.txDate = txDate;
this.txSeq = txSeq;
return null;
}
(home class)
public interface TxCarcassHome extends javax.ejb.EJBHome {
public TxCarcass create(String site, String
deviceAddr, String devicePort, Date txDate, Integer txSeq) throws RemoteException, CreateException;
public TxCarcass findByPrimaryKey(TxCarcassKey key)throws RemoteException, FinderException;
public java.util.Collection findAll() throws RemoteException, FinderException;
}
(test client)
public static void main(String[] args) {
try {
System.out.println("Hello");
SimpleDateFormat sf = new SimpleDateFormat ("dd/MM/yyyy");
InitialContext namingContext = new InitialContext();
TxCarcassHome home = (TxCarcassHome) PortableRemoteObject.narrow(namingContext.lookup ("TxCarcassBean"), TxCarcassHome.class);
TxCarcassKey key = new TxCarcassKey();
key.site = "TEST SITE 2";
key.deviceAddr = "A";
key.devicePort = "1";
key.txDate = sf.parse("29/08/2002");
key.txSeq = new Integer(0);
TxCarcass bean = home.findByPrimaryKey(key);
System.out.println(bean);
System.out.println(bean.getSite());
} catch (Exception z) {
z.printStackTrace();
}
}
(output from test)
Hello
TxCarcassBean:TEST SITE 2|A|1|Thu Aug 29 00:00:00 EST 2002|0
java.rmi.ServerException: RemoteException occurred in server thread; nested exce
ption is:
java.rmi.ServerException: Load failed; nested exception is:
java.lang.NullPointerException
at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:292)
at sun.rmi.transport.Transport$1.run(Transport.java:148)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Transport.java:144)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:4
60)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport
.java:701)
at java.lang.Thread.run(Thread.java:536)
at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(Stream
RemoteCall.java:247)
at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:
223)
....and lots more
Sorry about how long this has been, but please can someone help me out.
Cheers