Newsgroup: it.comp.java
Titolo: Servlet & RMI

Ciao a tutti,
teneterò di essere il più breve possibile.
Ho scritto un'applicazione RMI.
Avvio l'rmiregistry sulla porta di default, il server carica un
RMISecurityManager. All'avvio del servere carico come file di policy un file
così fatto:
grant{
 //PERMETTI TUTTO!!
 permission java.security.AllPermission;
 permission java.net.SocketPermission "*:1024-65535", "accept,
connect,listen";
};
Lanciato il server avvio il Client (un'applicazione Swing) che accede a dei
semplici servizi remoti. Tutto funziona correttamente.
Adesso vorrei scrivere una Servlet che accede ai servizi remoti del server.
Il cuore della Servlet è all'interno del metodo doGet (forse era più
opportuno dentro init()?) riporto la parte di codice fondamentale:
try{
            ServletContext context = getServletContext();
            String rmihost = context.getInitParameter("rmihost");
            int rmiport =
Integer.parseInt(context.getInitParameter("rmiport"));
            Registry registry = LocateRegistry.getRegistry(rmihost,
rmiport);
            ElencoProvincieFactory elcpf =
(ElencoProvincieFactory)registry.lookup("elencoProvincie");
            ElencoProvincie elp = elcpf.getElencoProvince();
            ComboProvince[] provComboList = elp.ElencoProvincie("f");
            out.println("Numero province con la f iniziale:
"+provComboList.length);
        }
        catch(Exception e){
        e.printStackTrace(out);}
Il nome "elencoProvincie" è il nome con cui è registrata l'istanza
dell'oggetto di mio interesse.
In \webapps\ROOT\WEB-INF\classes\ ho provveduto a creare le directory del
package e ho inserito
la servlet e lo stub e le interfacce. Tuttavia ottengo questo errore:
java.rmi.UnmarshalException: error unmarshalling return; nested exception
is:
 java.lang.ClassNotFoundException:
package.subpackage.ElencoProvincieImpl_Stub (no security manager: RMI class
loader disabled)
 at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:169)
 at
package.subpackage.ElencoProvincieFactoryImpl_Stub.getElencoProvince(Unknown
Source)
 at package.subpackage.RmiDemo.doGet(RmiDemo.java:33)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java)
 at
org.apache.tomcat.facade.ServletHandler.doService(ServletHandler.java:574)
 at org.apache.tomcat.core.Handler.invoke(Handler.java:322)
 at org.apache.tomcat.core.Handler.service(Handler.java:235)
 at org.apache.tomcat.facade.ServletHandler.service(ServletHandler.java:485)
 at
org.apache.tomcat.core.ContextManager.internalService(ContextManager.java:91
7)
 at org.apache.tomcat.core.ContextManager.service(ContextManager.java:833)
 at
org.apache.tomcat.modules.server.Http10Interceptor.processConnection(Http10I
nterceptor.java:176)
 at
org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:494)
 at
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.jav
a:516)
 at java.lang.Thread.run(Thread.java:536)
Caused by: java.lang.ClassNotFoundException:
package.subpackage.ElencoProvincieImpl_Stub (no security manager: RMI class
loader disabled)
 at sun.rmi.server.LoaderHandler.loadClass(LoaderHandler.java:368)
 at sun.rmi.server.LoaderHandler.loadClass(LoaderHandler.java:161)
 at java.rmi.server.RMIClassLoader$2.loadClass(RMIClassLoader.java:631)
 at java.rmi.server.RMIClassLoader.loadClass(RMIClassLoader.java:257)
 at
sun.rmi.server.MarshalInputStream.resolveClass(MarshalInputStream.java:200)
 at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1513)
 at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1435)
 at
java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1626)
 at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1274)
 at java.io.ObjectInputStream.readObject(ObjectInputStream.java:324)
 at sun.rmi.server.UnicastRef.unmarshalValue(UnicastRef.java:297)
 at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:146)
 ... 14 more
Lo stub è dove si trova la servlet. Cosa può essere, forse la Servlet non ha
i oermessi per caricare lo stub?
Vi ringrazio.
Mr. Deckard

 (ElencoProvincieFactory)registry.lookup("elencoProvincie");
ma soltanto un
      ElencoProvincieFactory elcpf  = (ElencoProvincieFactory)
Naming.lookup(serverName);
Dove ovviamente ElencoProvincieFactory è l'interfaccia remota e serverName
l'indirizzo url completo dell'oggetto remoto.
Ciao
-- 
--------------------
Andrea Musumeci
system architect freelance
work: 
http://www.javalab.it
work: 
http://www.caronte.org
--------------------

 Ciao
Purtroppo, pur seguendo il tuo consiglio, continuo ad avere il solito
errore...
C'è nessuno che sappia dov'è che sbaglio?
Grazie ancora Andrea.
Mr. Deckard