我用的开发工具是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