Problem with using Java RMI in Wildfire plugin

I try to start a rmi server in my own wildfire plugin, so I add such source code in the init method of plugin class:

try {

LocateRegistry.createRegistry(9999);

} catch (Exception e) {

Log.error(e.getMessage(), e);

}

try {

Log.info((“Start RMI server”));

PhoneStateListener listener = new PhoneStateListenerImpl(this);

Log.info((“Rebind RMI server”));

Naming.rebind(“rmi://localhost:9999/chatall”,listener);

} catch (RemoteException e) {

// TODO Auto-generated catch block

Log.error(e.getMessage(), e);

} catch (MalformedURLException e) {

// TODO Auto-generated catch block

Log.error(e.getMessage(), e);

}

But when I start the wildfire again ,I got errors as follows:

2006.08.21 12:27:55 [gxlu.nova.components.chatall.im.server.CallPlugin.init(CallPlugin.java:126)

] RemoteException occurred in server thread; nested exception is:

java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is:

java.lang.ClassNotFoundException: gxlu.nova.components.chatall.im.server.ifc.PhoneStateListener (no security manager: RMI class loader disabled)

java.rmi.ServerException: RemoteException occurred in server thread; nested exception is:

java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is:

java.lang.ClassNotFoundException: gxlu.nova.components.chatall.im.server.ifc.PhoneStateListener (no security manager: RMI class loader disabled)

at sun.rmi.server.UnicastServerRef.oldDispatch(UnicastServerRef.java:385)

at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:240)

at sun.rmi.transport.Transport$1.run(Transport.java:153)

at java.security.AccessController.doPrivileged(Native Method)

at sun.rmi.transport.Transport.serviceCall(Transport.java:149)

at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:466)

at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:707)

at java.lang.Thread.run(Thread.java:595)

at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall .java:247)

at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:223)

at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:343)

at sun.rmi.registry.RegistryImpl_Stub.rebind(Unknown Source)

at java.rmi.Naming.rebind(Naming.java:160)

at gxlu.nova.components.chatall.im.server.CallPlugin.init(CallPlugin.java:123)

at gxlu.nova.components.chatall.im.server.CallPlugin.initializePlugin(CallPlugin.j ava:80)

at org.jivesoftware.wildfire.container.PluginManager.loadPlugin(PluginManager.java :396)

at org.jivesoftware.wildfire.container.PluginManager.access$200(PluginManager.java :47)

at org.jivesoftware.wildfire.container.PluginManager$PluginMonitor.run(PluginManag er.java:883)

at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:417)

at java.util.concurrent.FutureTask$Sync.innerRunAndReset(FutureTask.java:280)

at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:135)

at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$101 (ScheduledThreadPoolExecutor.java:65)

at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.runPeriodi c(ScheduledThreadPoolExecutor.java:142)

at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Schedu ledThreadPoolExecutor.java:166)

at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java: 650)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675)

at java.lang.Thread.run(Thread.java:595)

Caused by: java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is:

java.lang.ClassNotFoundException: gxlu.nova.components.chatall.im.server.ifc.PhoneStateListener (no security manager: RMI class loader disabled)

at sun.rmi.registry.RegistryImpl_Skel.dispatch(Unknown Source)

at sun.rmi.server.UnicastServerRef.oldDispatch(UnicastServerRef.java:375)

at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:240)

at sun.rmi.transport.Transport$1.run(Transport.java:153)

at java.security.AccessController.doPrivileged(Native Method)

at sun.rmi.transport.Transport.serviceCall(Transport.java:149)

at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:466)

at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:707)

… 1 more

Caused by: java.lang.ClassNotFoundException: gxlu.nova.components.chatall.im.server.ifc.PhoneStateListener (no security manager: RMI class loader disabled)

at sun.rmi.server.LoaderHandler.loadProxyClass(LoaderHandler.java:531)

at java.rmi.server.RMIClassLoader$2.loadProxyClass(RMIClassLoader.java:628)

at java.rmi.server.RMIClassLoader.loadProxyClass(RMIClassLoader.java:294)

at sun.rmi.server.MarshalInputStream.resolveProxyClass(MarshalInputStream.java:238 )

at java.io.ObjectInputStream.readProxyDesc(ObjectInputStream.java:1499)

at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1462)

at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1698)

at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1304)

at java.io.ObjectInputStream.readObject(ObjectInputStream.java:349)

… 9 more

I’'m sure I set the class PhoneStateListener or other classes in my classpath, then why it gives me a classnotfound exception?

Hi,

could you please check or classpath or post it here? It really looks like a classpath problem. Are you using Windows or Linux and where did you modify the classpath?

LG

All the classes including the plugin class are packaged in the same jar, so it can’‘t be any problem with classpath. Maybe it’'s related to the security manager of wildfire?