EJB3.0开发有状态会话Bean问题

来源:互联网 发布:武汉网络装修 编辑:程序博客网 时间:2024/04/30 10:45

我用的开发工具是JBossIDE+JBoss4.0.4

开发一个简单的会话Bean

//远程接口

@Remote
public interface ShoppingCart {
 
 public void buy(String product,int quantity);
 
 public HashMap<String,Integer> getCartContents();

@Remove
 public void checkout();
}

//有状态Bean

import java.util.HashMap;

import javax.ejb.Remove;
import javax.ejb.Stateful;

 

public @Stateful class ShoppingCartBean implements ShoppingCart {

 HashMap<String,Integer> cart=new HashMap<String, Integer>();
 
 public void buy(String product, int quantity) {
  if(cart.containsKey(product)){
   int current=cart.get(product);
   current+=quantity;
   cart.put(product,current);
  }else{
   cart.put(product,quantity);
  }
 }

@Remove
 public void checkout() {  
 }

 public HashMap<String, Integer> getCartContents() {
  
  return cart;
 }

}

//测试

import java.util.HashMap;

import javax.naming.InitialContext;

import com.liang.ShoppingCart;

public class ClientCart {

 /**
  * @param args
  * @throws NamingException
  */
 public static void main(String[] args) throws Exception {
  
  InitialContext ict=new InitialContext();
   Object object=ict.lookup("ShoppingCartBean/remote");
  System.out.println(object);
  
   ShoppingCart sc=(ShoppingCart)ict.lookup("ShoppingCartBean/remote");
  
  sc.buy("Book",1);
  
  System.out.println("买书一本!!");
  
  sc.buy("Book",1);
  
  System.out.println("买书一本!!");
  
  sc.buy("Bag",1);
  
  System.out.println("买包一个!!");
  
  HashMap<String,Integer> hm=sc.getCartContents();
  
  for(String product:hm.keySet()){
   System.out.println(hm.get(product)+"  "+product);
  }
  sc.checkout();
 }

}

//我原先用JDK1.6总是报错

如下:
log4j:WARN No appenders could be found for logger (org.jboss.remoting.Client).
log4j:WARN Please initialize the log4j system properly.
Exception in thread "main" javax.naming.NamingException: Could not dereference object [Root exception is java.lang.reflect.UndeclaredThrowableException]
at org.jnp.interfaces.NamingContext.getObjectInstanceWrapFailure(NamingContext.java:1150)
at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:705)
at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:587)
at javax.naming.InitialContext.lookup(Unknown Source)
at com.liang.test.ClientCart.main(ClientCart.java:22)
Caused by: java.lang.reflect.UndeclaredThrowableException
at $Proxy0.createProxy(Unknown Source)
at org.jboss.ejb3.JndiProxyFactory.getObjectInstance(JndiProxyFactory.java:52)
at javax.naming.spi.NamingManager.getObjectInstance(Unknown Source)
at org.jnp.interfaces.NamingContext.getObjectInstance(NamingContext.java:1125)
at org.jnp.interfaces.NamingContext.getObjectInstanceWrapFailure(NamingContext.java:1142)
... 4 more
Caused by: java.lang.ClassNotFoundException: [Lorg.jboss.aop.advice.Interceptor;
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at org.jboss.remoting.loading.RemotingClassLoader.loadClass(RemotingClassLoader.java:50)
at org.jboss.remoting.loading.ObjectInputStreamWithClassLoader.resolveClass(ObjectInputStreamWithClassLoader.java:139)
at java.io.ObjectInputStream.readNonProxyDesc(Unknown Source)
at java.io.ObjectInputStream.readClassDesc(Unknown Source)
at java.io.ObjectInputStream.readArray(Unknown Source)
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.defaultReadFields(Unknown Source)
at java.io.ObjectInputStream.readSerialData(Unknown Source)
at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.defaultReadFields(Unknown Source)
at java.io.ObjectInputStream.readSerialData(Unknown Source)
at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.readObject(Unknown Source)
at org.jboss.aop.joinpoint.InvocationResponse.readExternal(InvocationResponse.java:107)
at java.io.ObjectInputStream.readExternalData(Unknown Source)
at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.defaultReadFields(Unknown Source)
at java.io.ObjectInputStream.readSerialData(Unknown Source)
at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.readObject(Unknown Source)
at org.jboss.remoting.serialization.impl.java.JavaSerializationManager.receiveObject(JavaSerializationManager.java:128)
at org.jboss.remoting.marshal.serializable.SerializableUnMarshaller.read(SerializableUnMarshaller.java:66)
at org.jboss.remoting.transport.socket.SocketClientInvoker.transport(SocketClientInvoker.java:279)
at org.jboss.remoting.RemoteClientInvoker.invoke(RemoteClientInvoker.java:143)
at org.jboss.remoting.Client.invoke(Client.java:525)
at org.jboss.remoting.Client.invoke(Client.java:488)
at org.jboss.aspects.remoting.InvokeRemoteInterceptor.invoke(InvokeRemoteInterceptor.java:41)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:88)
at org.jboss.aspects.remoting.IsLocalInterceptor.invoke(IsLocalInterceptor.java:34)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:88)
at org.jboss.aspects.remoting.PojiProxy.invoke(PojiProxy.java:46)
... 9 more

我原先用JDK1.6总是报错,郁闷了我好久!!

后来网上发现说用JDK1.5,我就换用了,呵呵终于成功了!!

JDK这么奇怪,还不兼容!!

1.6还没1.5的好!!!

 

 

//用JDK1.5运行结果如下:
jboss.j2ee:jar=EjbShopCart.jar,name=ShoppingCartBean,service=EJB3:5c4o12-l7eo73-f5hufurc-1-f5hufux0-3
买书一本!!
买书一本!!
买包一个!!
1  Bag
2  Book

原创粉丝点击