Gary Albers@TIMEWEB
01/28/2000 11:17 AM
Orion team:
I have an EntityBean (ValidUser) with a user defined primary key called
DefaultPK.
DefaultPK is a wrapper for an Integer attribute called 'pk'. The bean
works
fine for findByPrimaryKey(DefaultPK).
I added a custom finder method called findByUserID(String).
In the code that Orion generates for this method, it uses a call to
java.sql.ResultSet.getBinaryStream(...) for the primary key field
(DefaultPK validUserPK).
This results in a 'java.io.StreamCorruptedException' wrapped in a
'java.lang.ClassCastException'.
I believe it should be using java.sql.getInt(...) for the specific
attribute 'pk' within the
DefaultPK object.
Is this a bug or do I just have the deployment descriptor coded wrong?
Can Orion handle user defined classes for primary keys?
Relevant code follows below.
BTW - great product!
-Gary
Relevant snippet of ejb-jar.xml follows:
<entity>
<display-name>ValidUser</display-name>
<description>ValidUser Entity Bean</description>
<ejb-name>ValidUser</ejb-name>
<home>IValidUserHome</home>
<remote>IValidUser</remote>
<ejb-class>ValidUserBean</ejb-class>
<reentrant>True</reentrant>
<persistence-type>Container</persistence-type>
<primkey-field>pk</primkey-field>
<primkey-class>DefaultPK</primkey-class>
<cmp-field><field-name>pk</field-name></cmp-field>
<cmp-field><field-name>userID</field-name></cmp-field>
<cmp-field><field-name>password</field-name></cmp-field>
<cmp-field><field-name>validUserSetPK</field-name></cmp-field>
</entity>
Relevant snippet of orion-ejb-jar.xml follows:
<entity>
<data-source-name>jdbc/xa/DefaultXADS</data-source-name>
<exclusive-write-access>true</exclusive-write-access>
<table-name>ValidUser</table-name>
<ejb-name>ValidUser</ejb-name>
<home-wrapper-class>EntityHomeWrapper9</home-wrapper-class>
<location>ValidUser</location>
<cmp-field>
<field-name>pk</field-name>
<persistence-name>validUserPK</persistence-name>
<persistence-type>integer</persistence-type>
</cmp-field>
<cmp-field>
<field-name>userID</field-name>
<persistence-name>userID</persistence-name>
<persistence-type>VARCHAR (15)</persistence-type>
</cmp-field>
<cmp-field>
<field-name>password</field-name>
<persistence-name>password</persistence-name>
<persistence-type>VARCHAR (15)</persistence-type>
</cmp-field>
<cmp-field>
<field-name>validUserSetPK</field-name>
<persistence-name>validUserSetPK</persistence-name>
<persistence-type>integer</persistence-type>
</cmp-field>
<finder-method>
<!-- Generated SQL: "SELECT validUserPK, userID,
password, validUserSetPK FROM ValidUser WHERE userID = ?" -->
<query>$userID = $1</query>
<method>
<ejb-name>ValidUser</ejb-name>
<method-name>findByUserID</method-name>
<method-params>
<method-param>java.lang.String</method-param>
</method-params>
</method>
</finder-method>
</entity>
DefaultPK class definition (stripped down):
import java.io.Serializable;
public class DefaultPK
implements Serializable
{
public Integer pk;
public DefaultPK(int k)
{
pk = new Integer(k);
}
}