*
The moose likes EJB and other Java EE Technologies and the fly likes CMP for EntityBean - EJBC Error Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login
JavaRanch » Java Forums » Java » EJB and other Java EE Technologies
Bookmark "CMP for EntityBean - EJBC Error" Watch "CMP for EntityBean - EJBC Error" New topic
Author

CMP for EntityBean - EJBC Error

smitharai
Greenhorn

Joined: Aug 20, 2001
Posts: 4
Hi, I am trying to use CMP for entity bean for a simple database table having three columns, namely, cust_id(int), item_code(varchar2), quantity(int). While I am genetrating the Jar file, I am getting the incompatible ERROR. I could not understand where exactly the error is: My code is as under:
Please help me out.
Smitha
=================================================================
REMOTE INTERFACE
<--------------->
package ejb.entityBean.containerManaged.testing;
import java.sql.*;
import java.rmi.RemoteException;
public interface Order extends javax.ejb.EJBObject {
public void setQuantity(int quantity) throws RemoteException;
public int getCustID() throws RemoteException;
public String getItemCode() throws RemoteException;
public int getQuantity() throws RemoteException;
}
_________________________________________________________________
HOME INTERFACE
<------------->
package ejb.entityBean.containerManaged.testing;
import java.rmi.RemoteException;
import java.sql.*;
import java.util.Collection;
import javax.ejb.*;

public interface OrderHome extends EJBHome {
public Order create(int custid, String itemcode, int quantity) throws RemoteException, CreateException;
public Order findByPrimaryKey(OrderPK pk) throws FinderException, RemoteException;
}
_________________________________________________________________
PRIMARY KEY CLASS
<--------------->
package ejb.entityBean.containerManaged.testing;
import java.sql.*;
public class OrderPK implements java.io.Serializable {
public int custid;
public OrderPK() {
}
public OrderPK(int custid) {
this.custid = custid;;
}
public boolean equals(Object obj) {
if (obj==null | | !(obj instanceof OrderPK))
return false;
OrderPK pk = (OrderPK)obj;
if (this.custid != pk.custid)
return false;
return true;
}
public int hashCode() {
StringBuffer strB = new StringBuffer();
strB.append(custid);
return strB.toString().hashCode();
}
public String toString() {
String b = "OrderPK[custid=" + custid ;
return b;
}
}
_________________________________________________________________
BEAN CLASS
<--------->
package ejb.entityBean.containerManaged.testing;
import java.rmi.*;
import javax.ejb.*;
import java.sql.*;
public class OrderBean implements EntityBean {
private boolean isModified = false;
public EntityContext entityContext;
public int custid;
public String itemcode;
public int quantity;

public OrderPK ejbCreate(int cust_id, String item_code, int quant) throws CreateException {

this.custid = cust_id;
this.itemcode=item_code;
this.quantity=quant;

return null;
}
public void ejbPostCreate(int cust_id, String item_code, int quant) throws CreateException {
}
public void ejbActivate() throws RemoteException {
}
public void ejbLoad() throws RemoteException {
}
public void ejbPassivate() throws RemoteException {
}
public void ejbRemove() throws RemoteException, RemoveException {

}
public void ejbStore() throws RemoteException {
if (isModified())
setModified(false);
}
public void setEntityContext(EntityContext context) throws RemoteException {
entityContext = context;
}
public void unsetEntityContext() throws RemoteException {
entityContext = null;
}
public boolean isModified() {
return this.isModified;
}
private void setModified(boolean modified) {
this.isModified = modified;
}
public void setQuantity(int quantity) {
this.quantity = quantity;
}
public int getCustID() {
return this.custid;
}
public String getItemCode() {
return this.itemcode;
}
public int getQuantity() {
return this.quantity;
}
}
_________________________________________________________________
ejb-jar.xml
<---------->
<?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_1_1.dtd'>
<ejb-jar>
<enterprise-beans>
<entity>
<ejb-name>Order</ejb-name>
<home>ejb.entityBean.containerManaged.testing.OrderHome</home>
<remote>ejb.entityBean.containerManaged.testing.Order</remote>
<ejb-class>ejb.entityBean.containerManaged.testing.OrderBean</ejb-class>
<persistence-type>Container</persistence-type>
<prim-key-class>ejb.entityBean.containerManaged.testing.OrderPK</prim-key-class>
<reentrant>False</reentrant>
<cmp-field>
<field-name>custid</field-name>
</cmp-field>
<cmp-field>
<field-name>itemcode</field-name>
</cmp-field>
<cmp-field>
<field-name>quantity</field-name>
</cmp-field>
<primkey-field>custid</primkey-field>
</entity>
</enterprise-beans>
<assembly-descriptor>
<container-transaction>
<method>
<ejb-name>Order</ejb-name>
<method-intf>Remote</method-intf>
<method-name>*</method-name>
</method>
<trans-attribute>Required</trans-attribute>
</container-transaction>
</assembly-descriptor>
</ejb-jar>
_________________________________________________________________
weblogic-cmp-rdbms-jar.xml
<------------------------->
< !DOCTYPE weblogic-rdbms-bean PUBLIC <br /> '-//BEA Systems, Inc.//DTD WebLogic 5.1.0 EJB RDBMS Persistence//EN'<br /> 'http://www.bea.com/servers/wls510/dtd/weblogic-rdbms-persistence.dtd'>
<weblogic-rdbms-bean>
<pool-name>ejbDemoPool</pool-name>
<table-name>orders</table-name>
<attribute-map>
<object-link>
<bean-field>custid</bean-field>
<dbms-column>cust_id</dbms-column>
</object-link>
<object-link>
<bean-field>itemcode</bean-field>
<dbms-column>itemcode</dbms-column>
</object-link>
<object-link>
<bean-field>quantity</bean-field>
<dbms-column>quantity</dbms-column>
</object-link>
</attribute-map>
<finder-list>
<finder>

</finder>
</finder-list>
<options>
<use-quoted-names>false</use-quoted-names>
</options>
</weblogic-rdbms-bean>
_________________________________________________________________
weblogic-ejb-jar
<-------------->
<?xml version="1.0"?>
< !DOCTYPE weblogic-ejb-jar PUBLIC '-//BEA Systems, Inc.//DTD WebLogic 5.1.0 EJB//EN' 'http://www.bea.com/servers/wls510/dtd/weblogic-ejb-jar.dtd'>
<weblogic-ejb-jar>
<weblogic-enterprise-bean>
<ejb-name>Order</ejb-name>
<caching-descriptor>
<max-beans-in-cache>1000</max-beans-in-cache>
</caching-descriptor>
<persistence-descriptor>
<is-modified-method-name>isModified</is-modified-method-name>
<persistence-type>
<type-identifier>WebLogic_CMP_RDBMS</type-identifier>
<type-version>5.1.0</type-version>
<type-storage>META-INF/weblogic-cmp-rdbms-jar.xml</type-storage>
</persistence-type>
<persistence-use>
<type-identifier>WebLogic_CMP_RDBMS</type-identifier>
<type-version>5.1.0</type-version>
</persistence-use>
</persistence-descriptor>
<jndi-name>containerManaged.OrderHome</jndi-name>
</weblogic-enterprise-bean>
</weblogic-ejb-jar>

------------------
Mahesh Kulkarni
Ranch Hand

Joined: Jul 05, 2001
Posts: 62
Hi Smitha,
First of all if you are setting Cust_id as primary key class then you can't use the getCustid()method.Use instead getPrimaryKey() method.This is std method for getting the primary key of an entity bean.Also check with Hashcode for int.I feel it gives problem sometimes.Also the method EJBCreate in bean should return Primary key class,(return(new(orderPK(custid))) should be written instead of return null.
Just try this if any problem let me know.
Thanx,
Mahesh
smitharai
Greenhorn

Joined: Aug 20, 2001
Posts: 4
Hi Mahesh,
Thanks for the reply. There is no compile ERROR when I changed the return type for the ejbCreate() method to "return new OrderPK(custid);". But when I tried to generate the JAR file, I am getting the ERROR like "Error in OrderBeanEOImpl.java:56: incompatible types found : int required: ejb.entityBean.containerManaged.testing.OrderPK, pk = bean.custid;
I could not understand this. Please correct my mistake.
Thanks,
Smitha
Marcela Blei
Ranch Hand

Joined: Jun 28, 2000
Posts: 477
"smitharai":
Your name is not valid as per the Javaranch name conventions. Please refer to the document located here: http://www.javaranch.com/name.jsp
ranga 786
Greenhorn

Joined: Aug 28, 2001
Posts: 4
Better use SimplePrimary key Instead of compound primarykey class
I.e dont create primary key class and use wrapper class it will solve ur purpose
Tim Holloway
Saloon Keeper

Joined: Jun 25, 2001
Posts: 15952
    
  19

I can't see the problem, but it looks like one I often had. It's really telling you the truth in the error message, though.
One thing you might do is check your deployment to make sure that you have specified that the primary key is given as a CLASS rather than a FIELD (since it's possible to put data in both places a lot of people do this wrong).
You may also want to set the keepgenerated option on the ejbc step and actually look at the code being compiled. The message hints at it, though. Normally "pk" would be an OrderPK and bean.custid would be an int, so pk = bean.custid SHOULD give a type mismatch!


Customer surveys are for companies who didn't pay proper attention to begin with.
 
I agree. Here's the link: http://aspose.com/file-tools
 
subject: CMP for EntityBean - EJBC Error
 
Similar Threads
error in deploying CMP bean
Container Managed Persistence PROBLEM for Entity Bean
Cant deploy the entity bean
Cant deploy the entity bean
try to solve cmp exception over weblogic8.1