ClassCastException in Stateful Session-Bean
te-bachi Jan 16, 2007 10:55 AMI'm a beginner and would like to run some JBoss EJB 3.0 examples:
Calculator (Stateless SessionBean) - OK!
ShoppingCart (Stateful SessionBean) - ClassCastException
Environment:
o Java 1.5.0_09
o IntelliJ IDEA 6.0.4
o JBoss 4.0.5 AS (JEMS Installer with ejb3)
o Windows XP SP2
Interfaces:
@Local @Remote public interface Calculator { int add(int x, int y); int subtract(int x, int y); } @Local @Remote public interface ShoppingCart { void buy(String product, int quantity); HashMap<String, Integer> getCartContents(); }
SessionBeans:
@Stateless public class CalculatorBean implements Calculator { public int add(int x, int y) { return x + y; } public int subtract(int x, int y) { return x - y; } } @Stateful public class ShoppingCartBean implements ShoppingCart { private HashMap<String, Integer> cart; public ShoppingCartBean() { cart = new HashMap<String, Integer>(); } public void buy(String product, int quantity) { if (cart.containsKey(product)) { int currq = cart.get(product); currq += quantity; cart.put(product, currq); } else { cart.put(product, quantity); } } public HashMap<String, Integer> getCartContents() { return cart; } }
Client:
public class Client { public static void main(String[] args) throws Exception { System.setSecurityManager(new RMISecurityManager()); InitialContext ctx = new InitialContext(); ctx.addToEnvironment(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory"); ctx.addToEnvironment(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces"); ctx.addToEnvironment(Context.PROVIDER_URL, "jnp://localhost:1099"); Calculator calculator = (Calculator) ctx.lookup("MyApplication/CalculatorBean/remote"); System.out.println("1 + 1 = " + calculator.add(1, 1)); System.out.println("1 - 1 = " + calculator.subtract(1, 1)); } } public class Client { public static void main(String[] args) throws Exception { System.setSecurityManager(new RMISecurityManager()); InitialContext ctx = new InitialContext(); ctx.addToEnvironment(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory"); ctx.addToEnvironment(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces"); ctx.addToEnvironment(Context.PROVIDER_URL, "jnp://localhost:1099"); ShoppingCart cart = (ShoppingCart) ctx.lookup("MyApplication/ShoppingCartBean/remote"); } }
Policy:
grant { permission java.security.AllPermission; };
JBoss LOG:
[...] 16:34:50,404 INFO [JmxKernelAbstraction] installing MBean: jboss.j2ee:ear=MyApplication.ear,jar=MyEjb.jar,name=ShoppingCartBean,service=EJB3 with dependencies: 16:34:50,419 INFO [EJBContainer] STARTED EJB: org.jboss.tutorial.stateful.bean.ShoppingCartBean ejbName: ShoppingCartBean 16:34:50,466 INFO [SimpleStatefulCache] Initializing SimpleStatefulCache with maxSize: 100000 timeout: 300 for jboss.j2ee:ear=MyApplication.ear,jar=MyEjb.jar,name=ShoppingCartBean,service=EJB3 16:34:50,466 INFO [JmxKernelAbstraction] installing MBean: jboss.j2ee:ear=MyApplication.ear,jar=MyEjb.jar,name=CalculatorBean,service=EJB3 with dependencies: 16:34:50,466 INFO [EJBContainer] STARTED EJB: org.jboss.tutorial.stateless.bean.CalculatorBean ejbName: CalculatorBean [...]
Command:
java \ -Djava.security.policy=java.policy \ -classpath jbossall-client.jar;jboss-aop-jdk50-client.jar" \ org.jboss.tutorial.stateless.client.Client 1 + 1 = 2 1 - 1 = 0 java \ -Djava.security.policy=java.policy \ -classpath jbossall-client.jar;jboss-aop-jdk50-client.jar" \ org.jboss.tutorial.stateful.client.Client Exception in thread "main" java.lang.ClassCastException: javax.naming.Reference at org.jboss.tutorial.stateful.client.Client.main(Client.java:20)