Win a copy of Functional Reactive Programming this week in the Other Languages forum!
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic

java.lang.ClassCastException for cmp entity beans

 
John Smith
Ranch Hand
Posts: 49
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Hi:

I am using Weblogic 8.1 sp6. When I called an cmp method called
Collection products = categoryHome.selectProduct(category);
I get the following error:
Error Message:EJB Exception: : java.lang.ClassCastException
at com.CategoryEJB_9tmtvx__WebLogic_CMP_RDBMS.ejbSelectProduct(CategoryEJB_9tmtvx__WebLogic_CMP_RDBMS.java:1544)
at com.CategoryBean.ejbHomeSelectProduct(CategoryBean.java:32)
at com.CategoryEJB_9tmtvx_LocalHomeImpl.selectProduct(CategoryEJB_9tmtvx_LocalHomeImpl.java:167)
at jsp_servlet._jsp.__browsecatalogcontent._jspService(BrowseCatalogContent.jsp:48)
at weblogic.servlet.jsp.JspBase.service(JspBase.java:33)
at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run(ServletStubImpl.java:1077)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:465)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:526)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:348)
at weblogic.servlet.internal.RequestDispatcherImpl.include(RequestDispatcherImpl.java:646)
at weblogic.servlet.internal.RequestDispatcherImpl.include(RequestDispatcherImpl.java:431)
at weblogic.servlet.jsp.PageContextImpl.include(PageContextImpl.java:154)
at jsp_servlet._jsp.__browsecatalog._jspService(BrowseCatalog.jsp:9)
at weblogic.servlet.jsp.JspBase.service(JspBase.java:33)
at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run(ServletStubImpl.java:1077)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:465)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:526)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:348)
at weblogic.servlet.internal.RequestDispatcherImpl.forward(RequestDispatcherImpl.java:330)

Here is my client code:
Context jndiContext = getInitialContext();
Object objCategory = jndiContext.lookup("CategoryHomeLocal");
CategoryHomeLocal categoryHome = (CategoryHomeLocal)objCategory;
Integer categoryId = new Integer(categoryIdString);
CategoryLocal category = categoryHome.findByPrimaryKey(categoryId);
Collection products = categoryHome.selectProduct(category);

ejb-jar.xml:
<?xml version="1.0"?>

<!DOCTYPE ejb-jar PUBLIC
"-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN"
"http://java.sun.com/dtd/ejb-jar_2_0.dtd">

<ejb-jar>
<enterprise-beans>
<entity>
<ejb-name>CategoryEJB</ejb-name>
<local-home>com.CategoryHomeLocal</local-home>
<local>com.CategoryLocal</local>
<ejb-class>com.CategoryBean</ejb-class>
<persistence-type>Container</persistence-type>
<prim-key-class>java.lang.Integer</prim-key-class>
<reentrant>False</reentrant>
<cmp-version>2.x</cmp-version>
<abstract-schema-name>Category</abstract-schema-name>
<cmp-field><field-name>categoryId</field-name></cmp-field>
<cmp-field><field-name>categoryName</field-name></cmp-field>
<cmp-field><field-name>picture</field-name></cmp-field>
<cmp-field><field-name>pictureWidth</field-name></cmp-field>
<cmp-field><field-name>pictureHeight</field-name></cmp-field>
<cmp-field><field-name>labelOn</field-name></cmp-field>
<cmp-field><field-name>labelOff</field-name></cmp-field>
<cmp-field><field-name>button</field-name></cmp-field>

<primkey-field>categoryId</primkey-field>
<security-identity><use-caller-identity/></security-identity>
<query>
<query-method>
<method-name>findCategory</method-name>
<method-params></method-params>
</query-method>
<ejb-ql>
SELECT OBJECT(c) FROM Category c
</ejb-ql>
</query>
<query>
<query-method>
<method-name>ejbSelectProduct</method-name>
<method-params>
<method-param>com.CategoryLocal</method-param>

</method-params>
</query-method>
<ejb-ql>
SELECT OBJECT(p) FROM Product p
WHERE p.homeCategory = ?1
</ejb-ql>
</query>
</entity>
<entity>
<ejb-name>ProductEJB</ejb-name>
<local-home>com.ProductHomeLocal</local-home>
<local>com.ProductLocal</local>
<ejb-class>com.ProductBean</ejb-class>
<persistence-type>Container</persistence-type>
<prim-key-class>java.lang.Integer</prim-key-class>
<reentrant>False</reentrant>
<cmp-version>2.x</cmp-version>
<abstract-schema-name>Product</abstract-schema-name>
<cmp-field><field-name>productId</field-name></cmp-field>
<cmp-field><field-name>brandName</field-name></cmp-field>
<cmp-field><field-name>productDescription</field-name></cmp-field>
<cmp-field><field-name>purchasePrice</field-name></cmp-field>
<cmp-field><field-name>categoryId</field-name></cmp-field>
<primkey-field>productId</primkey-field>
<security-identity><use-caller-identity/></security-identity>
<!-- <query>
<query-method>
<method-name>findByProduct</method-name>
<method-params>
<method-param>com.titan.address.CategoryLocal</method-param>

</method-params>
</query-method>
<ejb-ql>
SELECT OBJECT(p) FROM Product p
WHERE p.homeCategory = ?1
</ejb-ql>
</query>
-->
</entity>
</enterprise-beans>
<relationships>
<ejb-relation>

<ejb-relation-name>Product-HomeCategory</ejb-relation-name>
<ejb-relationship-role>
<ejb-relationship-role-name>
Product-has-a-Category
</ejb-relationship-role-name>
<multiplicity>one</multiplicity>
<relationship-role-source>
<ejb-name>ProductEJB</ejb-name>
</relationship-role-source>
<cmr-field>
<cmr-field-name>homeCategory</cmr-field-name>
<cmr-field-type>java.util.Collection</cmr-field-type>
</cmr-field>
</ejb-relationship-role>
<ejb-relationship-role>
<ejb-relationship-role-name>
Category-belongs-to-Product
</ejb-relationship-role-name>
<multiplicity>many</multiplicity>
<cascade-delete/>
<relationship-role-source>
<ejb-name>CategoryEJB</ejb-name>
</relationship-role-source>
</ejb-relationship-role>
</ejb-relation>
</relationships>
<assembly-descriptor>
<security-role>
<role-name>Employees</role-name>
</security-role>
<method-permission>
<role-name>Employees</role-name>
<method>
<ejb-name>CategoryEJB</ejb-name>
<method-name>*</method-name>
</method>
</method-permission>
<container-transaction>
<method>
<ejb-name>CategoryEJB</ejb-name>
<method-name>*</method-name>
</method>
<method>
<ejb-name>ProductEJB</ejb-name>
<method-name>*</method-name>
</method>
<trans-attribute>Required</trans-attribute>
</container-transaction>
</assembly-descriptor>

</ejb-jar>

weblogic-cmp-rdbms-jar.xml:
<!DOCTYPE weblogic-rdbms-jar PUBLIC
'-//BEA Systems, Inc.//DTD WebLogic 8.1.0 EJB RDBMS Persistence//EN'
'http://www.bea.com/servers/wls810/dtd/weblogic-rdbms20-persistence-810.dtd'>
<weblogic-rdbms-jar>

<weblogic-rdbms-bean>
<ejb-name>CategoryEJB</ejb-name>
<data-source-name>ShoeStore</data-source-name>
<table-map>
<table-name>category</table-name>
<field-map>
<cmp-field>categoryId</cmp-field>
<dbms-column>categoryID</dbms-column>
</field-map>
<field-map>
<cmp-field>categoryName</cmp-field>
<dbms-column>categoryName</dbms-column>
</field-map>
<field-map>
<cmp-field>picture</cmp-field>
<dbms-column>Picture</dbms-column>
</field-map>
<field-map>
<cmp-field>pictureWidth</cmp-field>
<dbms-column>PictureWidth</dbms-column>
</field-map>
<field-map>
<cmp-field>pictureHeight</cmp-field>
<dbms-column>PictureHeight</dbms-column>
</field-map>
<field-map>
<cmp-field>labelOn</cmp-field>
<dbms-column>LabelOn</dbms-column>
</field-map>
<field-map>
<cmp-field>labelOff</cmp-field>
<dbms-column>LabelOff</dbms-column>
</field-map>
<field-map>
<cmp-field>button</cmp-field>
<dbms-column>Button</dbms-column>
</field-map>
</table-map>
<automatic-key-generation>
<generator-type>SQL_SERVER</generator-type>

</automatic-key-generation>
</weblogic-rdbms-bean>

<weblogic-rdbms-bean>
<ejb-name>ProductEJB</ejb-name>
<data-source-name>ShoeStore</data-source-name>
<table-map>
<table-name>PRODUCT</table-name>
<field-map>
<cmp-field>productId</cmp-field>
<dbms-column>productId</dbms-column>
</field-map>
<field-map>
<cmp-field>categoryId</cmp-field>
<dbms-column>categoryId</dbms-column>
</field-map>
<field-map>
<cmp-field>brandName</cmp-field>
<dbms-column>brandName</dbms-column>
</field-map>
<field-map>
<cmp-field>productDescription</cmp-field>
<dbms-column>productDescription</dbms-column>
</field-map>
<field-map>
<cmp-field>purchasePrice</cmp-field>
<dbms-column>purchasePrice</dbms-column>
</field-map>

</table-map>

<!-- Automatically generate the value of ID in the database on inserts using sequence table -->
<automatic-key-generation>
<generator-type>SQL_SERVER</generator-type>

</automatic-key-generation>

</weblogic-rdbms-bean>

<weblogic-rdbms-relation>
<relation-name>Product-HomeCategory</relation-name>
<weblogic-relationship-role>
<relationship-role-name>Category-belongs-to-Product</relationship-role-name>
<relationship-role-map>
<column-map>
<foreign-key-column>categoryId</foreign-key-column>
<key-column>productId</key-column>
</column-map>
</relationship-role-map>
</weblogic-relationship-role>
</weblogic-rdbms-relation>
</weblogic-rdbms-jar>

ProductBean.java:
package com;

import javax.naming.InitialContext;
import javax.ejb.EntityContext;
import javax.ejb.CreateException;
import javax.ejb.FinderException;
import javax.naming.NamingException;
import java.util.Date;
import java.util.Collection;
import java.util.Iterator;
import java.util.Vector;
import java.lang.Integer;
public abstract class ProductBean implements javax.ejb.EntityBean
{
public Integer ejbCreate(Integer id)
{
this.setProductId(id);
return null;
}

public void ejbPostCreate(Integer id)
{

}
//public abstract Integer getCategoryId();
//public abstract void setCategoryId(Integer categoryId);

public abstract Integer getProductId();
public abstract void setProductId(Integer productId);

public abstract Integer getCategoryId();
public abstract void setCategoryId(Integer categoryId);

public abstract String getBrandName();
public abstract void setBrandName(String brandName);

public abstract String getProductDescription();
public abstract void setProductDescription(String productDescription);

public abstract Double getPurchasePrice();
public abstract void setPurchasePrice(Double purchasePrice);


public abstract Collection getHomeCategory();
public abstract void setHomeCategory(Collection categoryLocal);


public void setEntityContext(EntityContext ec)
{
System.out.println("ProductBean setEntityContext");
}
public void unsetEntityContext()
{
System.out.println("ProductBean unsetEntityContext");
}
public void ejbLoad()
{
System.out.println("ProductBean ejbLoad");

}
public void ejbStore()
{
System.out.println("ProductBean ejbStore");
}
public void ejbActivate()
{
System.out.println("ProductBean ejbActivate");

}
public void ejbPassivate()
{
System.out.println("ProductBean ejbPassivate");
}
public void ejbRemove()
{
System.out.println("ProductBean ejbRemove");
}



}

ProductHomeLocal.java:
package com;

import java.util.Collection;
import javax.ejb.CreateException;
import javax.ejb.FinderException;


public interface ProductHomeLocal extends javax.ejb.EJBLocalHome
{
public ProductLocal create(Integer id)
throws CreateException;

public ProductLocal findByPrimaryKey(Integer id)
throws FinderException;




}
ProductLocal.java:
package com;

import javax.ejb.CreateException;
import javax.ejb.FinderException;
import javax.naming.NamingException;


import java.util.Date;
import java.util.Vector;
import java.util.Collection;

public interface ProductLocal extends javax.ejb.EJBLocalObject
{
public Integer getProductId();
public void setProductId(Integer productId);

public String getBrandName();
public void setBrandName(String brandName);

public String getProductDescription();
public void setProductDescription(String productDescription);

public Double getPurchasePrice();
public void setPurchasePrice(Double purchasePrice);

public Collection getHomeCategory();
public void setHomeCategory(Collection categoryLocal);


}

CategoryBean.java:
package com;

import javax.naming.InitialContext;
import javax.ejb.EntityContext;
import javax.ejb.CreateException;
import javax.naming.NamingException;
import java.util.Date;
import java.util.Collection;
import java.util.Iterator;
import java.util.Vector;
import javax.ejb.FinderException;

public abstract class CategoryBean implements javax.ejb.EntityBean
{

public Integer ejbCreate(Integer id)
{
this.setCategoryId(id);
return null;
}

public void ejbPostCreate(Integer id)
{

}
// abstract accessor methods
public abstract javax.ejb.EntityBean ejbSelectProduct(CategoryLocal categoryLocal)
throws FinderException;

public Collection ejbHomeSelectProduct(CategoryLocal categoryLocal)
throws FinderException {
return (Collection)(this.ejbSelectProduct(categoryLocal));
}





public abstract Integer getCategoryId();
public abstract void setCategoryId(Integer categoryId);


public abstract String getCategoryName();
public abstract void setCategoryName(String categoryName);

public abstract String getPicture();

public abstract void setPicture(String picture);

public abstract String getPictureWidth();
public abstract void setPictureWidth(String pictureWidth);

public abstract String getPictureHeight();
public abstract void setPictureHeight(String pictureHeight);

public abstract String getLabelOn();
public abstract void setLabelOn(String labelOn);

public abstract String getLabelOff();
public abstract void setLabelOff(String labelOff);

public abstract String getButton();
public abstract void setButton(String button);


public void setEntityContext(EntityContext ec)
{
System.out.println("setEntityContext");
}
public void unsetEntityContext()
{
System.out.println("unsetEntityContext");
}
public void ejbLoad()
{
System.out.println("ejbLoad");

}
public void ejbStore()
{
System.out.println("ejbStore");
}
public void ejbActivate()
{
System.out.println("ejbActivate");

}
public void ejbPassivate()
{
System.out.println("ejbPassivate");
}
public void ejbRemove()
{
System.out.println("ejbRemove");
}


}

CategoryHomeLocal.java:
package com;

import java.util.Collection;
import javax.ejb.CreateException;
import javax.ejb.FinderException;

public interface CategoryHomeLocal extends javax.ejb.EJBLocalHome
{
public CategoryLocal create(Integer id)
throws CreateException;

public CategoryLocal findByPrimaryKey(Integer id)
throws FinderException;

public Collection findCategory()
throws FinderException;


public Collection selectProduct(CategoryLocal categoryLocal)
throws FinderException;
}

CategoryLocal.java:
package com;

import javax.ejb.CreateException;
import javax.naming.NamingException;
import java.util.Date;
import java.util.Vector;
import java.util.Collection;
public interface CategoryLocal extends javax.ejb.EJBLocalObject
{

public Integer getCategoryId();
public void setCategoryId(Integer categoryId);

public String getCategoryName();
public void setCategoryName(String categoryName);

public String getPicture();

public void setPicture(String picture);

public String getPictureWidth();
public void setPictureWidth(String pictureWidth);

public String getPictureHeight();
public void setPictureHeight(String pictureHeight);

public String getLabelOn();
public void setLabelOn(String labelOn);

public String getLabelOff();
public void setLabelOff(String labelOff);

public String getButton();
public void setButton(String button);


}

Any hint would be greatly appreciated.

Yours,

Frustrated.
 
Herman Schelti
Ranch Hand
Posts: 387
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
hi John,

stacktrace says: error in method ejbSelectProduct

method ejbSelectProduct returns javax.ejb.EntityBean, I don't think that's OK.


Herman
 
Mark Spritzler
ranger
Sheriff
Posts: 17278
6
IntelliJ IDE Mac Spring
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Hey John, for furture reference, there is a CODE button below, that put in CODE tags that will keep your code and xml all formatted and indented for easier reading.

Thanks

Mark
 
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic