Próbuję wywołać metodę komponentu MBean z aplikacji internetowej Tomcat, a obiekt docelowy MBean działa pod kontrolą JBoss 4.2.3 Zarówno Tomcat, jak i JBoss aplikacje korzystają z tej samej wersji słoiku z tej samej klasy, ale na wywoływanie widzę następujący wyjątek:Zdalne wywołanie JMX nie powiodło się z ClassNotFoundException: ... (brak menedżera zabezpieczeń: moduł ładujący klasy RMI wyłączony
Caused by: java.lang.ClassNotFoundException: ...thisClass... (no security manager: RMI class loader disabled)
at sun.rmi.server.LoaderHandler.loadClass(LoaderHandler.java:375)
at sun.rmi.server.LoaderHandler.loadClass(LoaderHandler.java:165)
at java.rmi.server.RMIClassLoader$2.loadClass(RMIClassLoader.java:620)
at org.jboss.system.JBossRMIClassLoader.loadClass(JBossRMIClassLoader.java:91)
at java.rmi.server.RMIClassLoader.loadClass(RMIClassLoader.java:247)
at sun.rmi.server.MarshalInputStream.resolveClass(MarshalInputStream.java:197)
at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1575)
at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1496)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1732)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351)
at java.util.ArrayList.readObject(ArrayList.java:593)
at sun.reflect.GeneratedMethodAccessor164.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:974)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1849)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351)
at java.util.HashMap.readObject(HashMap.java:1030)
at sun.reflect.GeneratedMethodAccessor163.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:974)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1849)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
at java.io.ObjectInputStream.readArray(ObjectInputStream.java:1667)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1323)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351)
at java.rmi.MarshalledObject.get(MarshalledObject.java:142)
at javax.management.remote.rmi.RMIConnectionImpl$6.run(RMIConnectionImpl.java:1513)
... 20 more
myślę, że JBoss nie używa własnej klasy, ale starają się ściągnąć skądś tej klasy a nie z " brak menedżera bezpieczeństwa: wyłączono moduł ładujący klasy RMI. "Ale jak zmienić to zachowanie, aby użyć lokalnej, już załadowanej klasy, lub może się pomyliłem w tym przypuszczeniu?"
Aby wyjaśnić tutaj dla każdego, kto czyta ten post; kiedy mówi "kompiluj interfejsy + klasy zarówno do klienta, jak i do serwera", upewnij się, że nie używasz tego samego pliku JAR zarówno do wdrożenia serwera, jak i klienta. Dla klientów upewnij się, że kompilujesz tylko wymagane klasy w podanym JAR. –