Rmi

Estou com a seguinte duvida…

tenho diversos objetos RMI em minha aplicação… eles estao todos no servidores… e tenho diversas estacoes acessando uma estancia de cada um destes objetos no servidor ex:

Se a estacao2 precisa de uma classe de pessoa ela estancia a classse no servidor exclusivamente para ela e chama o metodo…

Esse gerenciamento de “criar classes e prover objetos dinamicamente para todas as estacoes” existe algo automatico ou vou ter q criar algo ?

É bastante automático, só que é bom tomar um pouco de cuidado com versões de JVMs para que não fiquem fora de sincronia.

Sua resposta não foi nenhum pouco exclarecedora…

eu perguntei COMO … o que vc chama de automatico ? exemplifique por favor

Bom, se você quer a palavra da Sun, aqui vai:

Dynamic code downloading using RMI
(Using the java.rmi.server.codebase Property)
http://java.sun.com/j2se/1.4.2/docs/guide/rmi/codebase.html

One of the most significant capabilities of the JavaTM platform is the ability to dynamically download Java software from any Uniform Resource Locator (URL) to a Java virtual machine* (JVM) running in a separate process, usually on a different physical system. The result is that a remote system can run a program, for example an applet, which has never been installed on its disk. For the first few sections of this document, codebase with regard to applets will be discussed in order to help describe codebase with regard to Java Remote Method Invocation (RMI).

For example, a JVM running from within a web browser can download the bytecodes for subclasses of java.applet.Applet and any other classes needed by that applet. The system on which the browser is running has most likely never run this applet before, nor installed it on its disk. Once all the necessary classes have been downloaded from the server, the browser can start the execution of the applet program using the local resources of the system on which the client browser is running.

Java RMI takes advantage of this capability to download and execute classes and on systems where those classes have never been installed on disk. Using the RMI API any JVM, not only those in browsers, can download any Java class file including specialized RMI stub classes, which enable the execution of method calls on a remote server using the server system’s resources.

Como está escrito no próprio artigo, embora o exemplo tenha sido dado com browsers e applets (argh), a mecânica vale para aplicações Java normais.

Olha , acho que voce nao esta me entendendo…

toda vez que eu “conecto” ao um objeto no servidor de mesmo nome ex:

rmi://sabedeus/PESSOA

e seto uma propriedade “.setBuscaemfalso(true)”;

se um outro conectar em :

rmi://sabedeus/PESSOA

o Buscaemfalso vai estar true… ou seja…nao adquiri uma NOVA estancia do objeto , apenas estou utilizando o MESMO…

quero saber se a “fabricacao de objetos para CADA ESTANCIA requerida”

o grande lance eh com objetos com conexao em banco de dados que cada um vai ter sua estancia …

Existe algo automatico que “gere uma copia do PESSOA” ou terei que implementar na mao ?

Agora entendi o que você quer. Se você olhar aquele exemplo da Sun realmente vai ver que somente um objeto do tipo HelloImpl é criado e esse objeto é que é acessado remotamente.

O que você poderia fazer então é ter um método na interface Hello que retorne um objeto do tipo HelloSession (por exemplo) a cada vez que você chamá-lo, e trabalhar com esse objeto. Cada client deve chamar uma vez esse método que retorna um HelloSession.

        // Create and install a security manager
        if (System.getSecurityManager() == null) {
            System.setSecurityManager(new RMISecurityManager());
        }
    
        try {
            HelloImpl obj = new HelloImpl();
    
            // Bind this object instance to the name "HelloServer"
            Naming.rebind("//localhost/HelloServer", obj);
    
            System.out.println("HelloServer bound in registry");
        } catch (Exception e) {
            System.out.println("HelloImpl err: " + e.getMessage());
            e.printStackTrace();
        }