RMI Callback

4 respostas
E

Senhores,

Quando tento exporta o meu objeto, para que o mesmo receba chamadas oriundas do servidor utilizando uma porta anônima, pela chamada:

UnicastRemoteObject.exportObject(MonitoracaoImpl.mImpl);//“MonitoracaoImpl.mImpl” mImpl é static - usei o padrão Singleton…

Ocorre o seguinte erro:

SEVERE: null java.rmi.StubNotFoundException: Stub class not found: cti_spherical.interfaces.monitoracao.MonitoracaoImpl_Stub; nested exception is: java.lang.ClassNotFoundException: cti_spherical.interfaces.monitoracao.MonitoracaoImpl_Stub at sun.rmi.server.Util.createStub(Util.java:274) at sun.rmi.server.Util.createProxy(Util.java:122) at sun.rmi.server.UnicastServerRef.exportObject(UnicastServerRef.java:179) at java.rmi.server.UnicastRemoteObject.exportObject(UnicastRemoteObject.java:293) at java.rmi.server.UnicastRemoteObject.exportObject(UnicastRemoteObject.java:220) at cti_spherical.interfaces.monitoracao.MonitoracaoImpl.register(MonitoracaoImpl.java:46) at cti_spherical.model.ModelMonitoracao.solicitaTodasLinhas(ModelMonitoracao.java:76) at cti_spherical.ctr.CtrMonitoracao.evtIniciouTelaMonitoracao(CtrMonitoracao.java:18) at cti_spherical.gui.TelaMonitoracao.iniciouTelaMonitoracao(TelaMonitoracao.java:478) at cti_spherical.main.CTI.iniciaTelaMonitoracao(CTI.java:158) at cti_spherical.model.ModelMonitoracao.iniciaTelaMonitoracao(ModelMonitoracao.java:32) at cti_spherical.ctr.CtrSphericalView.evtMostraTelaMonitoracao(CtrSphericalView.java:66) at cti_spherical.CTI_SphericalView.BotaoMonitoracaoMouseClicked(CTI_SphericalView.java:788) at cti_spherical.CTI_SphericalView.access$1000(CTI_SphericalView.java:24) at cti_spherical.CTI_SphericalView$7.mouseClicked(CTI_SphericalView.java:426) at java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:253) at java.awt.Component.processMouseEvent(Component.java:6041) at javax.swing.JComponent.processMouseEvent(JComponent.java:3260) at java.awt.Component.processEvent(Component.java:5803) at java.awt.Container.processEvent(Container.java:2058) at java.awt.Component.dispatchEventImpl(Component.java:4410) at java.awt.Container.dispatchEventImpl(Container.java:2116) at java.awt.Component.dispatchEvent(Component.java:4240) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3995) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916) at java.awt.Container.dispatchEventImpl(Container.java:2102) at java.awt.Window.dispatchEventImpl(Window.java:2429) at java.awt.Component.dispatchEvent(Component.java:4240) at java.awt.EventQueue.dispatchEvent(EventQueue.java:599) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160) at java.awt.EventDispatchThread.run(EventDispatchThread.java:121) Caused by: java.lang.ClassNotFoundException: cti_spherical.interfaces.monitoracao.MonitoracaoImpl_Stub at java.net.URLClassLoader$1.run(URLClassLoader.java:200) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:188) at java.lang.ClassLoader.loadClass(ClassLoader.java:306) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:276) at java.lang.ClassLoader.loadClass(ClassLoader.java:251) at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:247) at sun.rmi.server.Util.createStub(Util.java:268) ... 35 more
A conexão RMI está funcionando corretamente!!!

Alguma idéia do ocorrido?

Obrigado!!!

4 Respostas

KaZu

Já nem lembro muito bem dos erros, mas você criou todos os Stubs?

E

Bem, pelo menos acredito que tenha criado

public class MonitoracaoImpl extends UnicastRemoteObject implements MonitoracaoCli { 
static MonitoracaoImpl mImpl;
   /**
     * Metodo static que retorna instancia unica desta classe. Padrão Singleton.
     * @return MonitoracaoImpl
     * @throws java.rmi.RemoteException
     */
    public static MonitoracaoImpl instanciaMonitoramentoImpl() throws RemoteException {
        if(mImpl == null) mImpl = new MonitoracaoImpl();
        return mImpl;
    }
   /**
     * Registra o objeto desta classe remotamente no servidor. RMI callback
     */
    public void register(){
        try {
            UnicastRemoteObject.exportObject(MonitoracaoImpl.mImpl);
            MonitoracaoServ monitoracaoServ = (MonitoracaoServ) RMI.instaciaRMI().getStub(); //PEga o stub, funciona, já testei isoladamente...
            monitoracaoServ.register(MonitoracaoImpl.mImpl);
        } catch (RemoteException ex) {
            Logger.getLogger(MonitoracaoImpl.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}

Este é o código para registrar o objeto.

Abaixo está a interface:

/**
 *
 * @author Elton de Souza
 */
public interface MonitoracaoServ extends Remote {

    public void register(MonitoracaoCli monitoracaoCli) throws RemoteException;
}

Alguma luz???

KaZu

Então, lembro que tinha que ir no DOS e digitar o comando:

rmic nomedoservidorRMI

Depois disso tem q digitar novamente no DOS:

start rmiregistry

daí ele inicializava os stubs. Lembro que tinha um comando alternativo que se colocava dentro do código, se eu achar meu pendrive eu posto aqui.
Só testa isso e vê se funciona.

E

Já está registrado!!!

Como disse, se eu comentar o UnicastRemoteObject.exportObject(MonitoracaoImpl.mImpl); a aplicação RMI funciona de maneira correta (cliente -> servidor), o serviçojá está registrado!

Mas quando tento exporta o objeto para fazer o RMI callback utilizando o metodo acima, é que ocorre o problema…

Portanto, o stub é criado corretamente sem a chamada do tal método; porém quando o método acima é invocado o problema descrito se refere justamente ao de não ter o stub! Vai entender!!! :x

Criado 17 de abril de 2008
Ultima resposta 18 de abr. de 2008
Respostas 4
Participantes 2