Duvida RMI (rmiregistry.exe)

Seguinte, eu aprendi (li num tutorial) q qnd usamos RMI, devemos executar o rmiregistry dentro da pasta dos .class da app.

Aqui a pasta (onde tao os .class) eh: C:\Documents and Settings\hlds\Meus documentos\NetBeans workspace\Catalogo_codata_servidor\build\classes\catalogo_codata_servidor

Logicamente, a app eh "catalogo_codata_servidor"

Tipo qnd executo o rmiregistry dentro desta pasta e executo o .jar do servidor, ele inicia e roda blz. Mas so q eu queria executar o rmiregistry de qlq pasta (e n obrigatoriamente dentro desta pasta) e iniciar o servidor, pois essa app vai ser implatada e possa ser q o administrador la se esqueca disso. Eu li q se adicionasse esta pasta no path das variaveis de ambiente, poderia executar o rmiregistry de qlq lugar, mas eu adicionei no path e n pegou.

Alguem sabe oq devo fazer e como devo adicionar a pasta da app no path p eu executar o rmiregistry de onde quiser? (ja tentei tds as maneiras adicionar a pasta no path e nd) vlw…

up ai

Pare de dar up nos seus tópicos. Eu creio que se ninguém respondeu é porque ninguém sabe a resposta.

Vc colocou a pasta no path dessa forma:

em propriedades de meu computador, va na aba avancado e depois clicando em variaveis de ambiente. Em variaveis de ambiente nas variaveis do sistema clique em Path e em editar, ai acrescente no final do valor da variavel adicione %\bla\bla.

quem não ajuda, nao atrapalha filho. :twisted:

deixa o cara!!!

bro, se tem como me mandar esse tut de RMI pra o meu email ??
tb to tentando aprender RMI - Corba
abrass

Bem, faz tempo que não uso isso mas acho que você deve adicionar a pasta no CLASSPATH, não no PATH :wink:

Eu pra falar a verdade costumava iniciar o servidor direto na aplicação mesmo, aí não dava esses problemas…

Se não me engano… eu usava a classe java.rmi.registry.LocateRegistry, e usava seu método createRegistry(int port) passando 1099, que é a porta padrão do rmi :smiley:

quem não ajuda, nao atrapalha filho. :twisted:

deixa o cara!!!

bro, se tem como me mandar esse tut de RMI pra o meu email ??
tb to tentando aprender RMI - Corba
abrass[/quote]

Diferente de certas pessoas acima, eu estou aki p ajudar e ser ajudado, e enviou o tutorial sim, so me diz teu email q n achei.

Bem, faz tempo que não uso isso mas acho que você deve adicionar a pasta no CLASSPATH, não no PATH :wink:

Eu pra falar a verdade costumava iniciar o servidor direto na aplicação mesmo, aí não dava esses problemas…

Se não me engano… eu usava a classe java.rmi.registry.LocateRegistry, e usava seu método createRegistry(int port) passando 1099, que é a porta padrão do rmi :smiley:
[/quote]

Qnd chegar em casa, vo tentar adicionar ao classpath. Vlw.
Como eh essa parada de iniciar o servidor pelo cliente? Isso fica meio ¨tronxo¨ nao? Pq o servidor tem q ta stsrtado antes dos clientes e ficar startado direto, mas explique ai p ve se n entendi errado.

Dps q upei a galera respondeu, entao fica na tua, vlw??? Como o cara disse: quem n ajuda, n atrapalha.

Bem, faz tempo que não uso isso mas acho que você deve adicionar a pasta no CLASSPATH, não no PATH :wink:

Eu pra falar a verdade costumava iniciar o servidor direto na aplicação mesmo, aí não dava esses problemas…

Se não me engano… eu usava a classe java.rmi.registry.LocateRegistry, e usava seu método createRegistry(int port) passando 1099, que é a porta padrão do rmi :smiley:
[/quote]

So mais uma duvida: o dir do pacote (package) da minha app eh ¨catalogo_codata_servidor¨

Entao eu adiciono no classpath assim?

C:\Documents and Settings\hlds\Meus documentos\NetBeans workspace\Catalogo_codata_servidor\build\classes\catalogo_codata_servidor

Ou assim?

C:\Documents and Settings\hlds\Meus documentos\NetBeans workspace\Catalogo_codata_servidor\build\classes

Quem chama essa classe aí é o servidor mesmo. O que você faz normalmente é iniciar o rmiregistry e rodar o servidor pra ele colocar os objetos lá, usando isso, o próprio servidor que você fez cria o rmiregistry e sai colocando os objetos, sem precisar rodar nada antes.

Não sei se entendi direito mas, se catalogo_codata_servidor for o nome do pacote, é a 2ª opção.

flw

Dps q upei a galera respondeu, entao fica na tua, vlw??? Como o cara disse: quem n ajuda, n atrapalha.[/quote]Olha, me desculpem, mas sinceramente não me agrada quando um user fica upando seus tópicos apenas para deixá-los em destaque para ser respondidos mais rápidos, acho melhor ser mais paciente. Sem contar que acho uma falta de respeito com os outros users esse tipo de atitude. Imagina se todos os users resolverem ter esse tipo de atitude quando seus tópicos não forem respondidos no momento em que eles esperam. Me diga que você não se sentiria incomodado quando ao entrar em um fórum as únicas mensagens que você visse fossem “UP”?
Não sei se acontece nessa comunidade porque sou novo aqui, mas na maioria dos fóruns que já participei e participo os usuários não costumam aprovar esse tipo de atitude e até recriminam usuários que fazem isso. Se isto não ocorre aqui no guj, paciência, eu peço desculpas e digo que não irei mais fazer isso. Quem sou eu para impor regras aqui.

Bem, como eu disse, vo falar pela ultima vez p n ficar discutindo mais isso, qnd upei o topico, imediatamente o pessoal respondeu, agora eu tenho bom senso de saber qnd alguem sabe ou n, e n vo ficar insistindo em up´s qnd ve q n vo obter reposta, o q n era este caso, a prova ta ai o pessoal ajudando. Fui…

Bem, faz tempo que não uso isso mas acho que você deve adicionar a pasta no CLASSPATH, não no PATH :wink:

Eu pra falar a verdade costumava iniciar o servidor direto na aplicação mesmo, aí não dava esses problemas…

Se não me engano… eu usava a classe java.rmi.registry.LocateRegistry, e usava seu método createRegistry(int port) passando 1099, que é a porta padrão do rmi :smiley:
[/quote]

Gostei da tua ideia, vc tem codigo dessa parte de chamar o rmiregistry pelo servidor, se tiver coloca ai.

Outra coisa, vc chamando o rmiregistry pelo servidor, n precisa adiciona o .jar do servidor ao classpath ne? Vlw…

Precisa adicionar o jar do servidor na hora que for rodar o servidor sim, ou rodar ele do diretório que estão as classes.

Briguei aqui um pouco com o rmi e com a ajuda do tutorial de rmi da Sun consegui fazer um servidor funcionar, veja o código… o arquivo rmiserver.policy também está no diretório src do projeto do eclipse, e ele copia automaticamente pro bin do projeto:

package teste.eduardo.pessoal.rmi;

import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.rmi.server.UnicastRemoteObject;
import java.util.Scanner;

/**
 * <p>
 * Classe para testar o servidor rmi
 * </p>
 * <p>
 * Para rodar o servidor faça:
 * </p>
 * 
 * <pre>
 * java -Djava.rmi.server.codebase=file:///C:/caminho/para/as/classes 
 * -Djava.security.policy=rmiserver.policy ServidorRMI
 * </pre>
 * 
 * @author eduardo.machado
 * 
 */
public class ServidorRMI {
	public static void main(String[] args) {
		Registry registry = null;
		/* inicia rmi */
		try {
			/* tenta iniciar o registro */
			registry = LocateRegistry.createRegistry(1099);
		} catch (RemoteException e) {
			/* se não conseguiu criar vê se está rodando */
			try {
				registry = LocateRegistry.getRegistry();
			} catch (RemoteException e2) {
				/* não conseguiu nem criar e nem há rodando, sai do programa */
				System.err.println("Registro não pode ser inicializado");
				System.exit(0);
			}
		}

		/* instala security manager */
		if (System.getSecurityManager() == null) {
			System.setSecurityManager(new SecurityManager());
		}

		try {
			/* cria objeto */
			Teste teste = new TesteImpl();
			/* gera stub */
			Teste stub = (Teste) UnicastRemoteObject.exportObject(teste, 0);
			/* coloca o stub no registry */
			String nome = "teste";
			registry.rebind(nome, stub);
			/* espera o final do programa */
			System.out.println("Pronto para receber clientes");
			System.out.println("Entre exit para terminar o programa");
			waitForExit();
		} catch (RemoteException e) {
			e.printStackTrace();
		}
	}

	/**
	 * Espera até o usuário escrever "exit" em System.in
	 */
	private static void waitForExit() {
		Scanner scanner = new Scanner(System.in);
		String in;
		do {
			in = scanner.next();
		} while (!in.equalsIgnoreCase("exit"));
		System.exit(0);
	}
}

tomara que ajude :slight_smile:

[quote=dudaskank]Precisa adicionar o jar do servidor na hora que for rodar o servidor sim, ou rodar ele do diretório que estão as classes.

Briguei aqui um pouco com o rmi e com a ajuda do tutorial de rmi da Sun consegui fazer um servidor funcionar, veja o código… o arquivo rmiserver.policy também está no diretório src do projeto do eclipse, e ele copia automaticamente pro bin do projeto:

package teste.eduardo.pessoal.rmi;

import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.rmi.server.UnicastRemoteObject;
import java.util.Scanner;

/**
 * <p>
 * Classe para testar o servidor rmi
 * </p>
 * <p>
 * Para rodar o servidor faça:
 * </p>
 * 
 * <pre>
 * java -Djava.rmi.server.codebase=file:///C:/caminho/para/as/classes 
 * -Djava.security.policy=rmiserver.policy ServidorRMI
 * </pre>
 * 
 * @author eduardo.machado
 * 
 */
public class ServidorRMI {
	public static void main(String[] args) {
		Registry registry = null;
		/* inicia rmi */
		try {
			/* tenta iniciar o registro */
			registry = LocateRegistry.createRegistry(1099);
		} catch (RemoteException e) {
			/* se não conseguiu criar vê se está rodando */
			try {
				registry = LocateRegistry.getRegistry();
			} catch (RemoteException e2) {
				/* não conseguiu nem criar e nem há rodando, sai do programa */
				System.err.println("Registro não pode ser inicializado");
				System.exit(0);
			}
		}

		/* instala security manager */
		if (System.getSecurityManager() == null) {
			System.setSecurityManager(new SecurityManager());
		}

		try {
			/* cria objeto */
			Teste teste = new TesteImpl();
			/* gera stub */
			Teste stub = (Teste) UnicastRemoteObject.exportObject(teste, 0);
			/* coloca o stub no registry */
			String nome = "teste";
			registry.rebind(nome, stub);
			/* espera o final do programa */
			System.out.println("Pronto para receber clientes");
			System.out.println("Entre exit para terminar o programa");
			waitForExit();
		} catch (RemoteException e) {
			e.printStackTrace();
		}
	}

	/**
	 * Espera até o usuário escrever "exit" em System.in
	 */
	private static void waitForExit() {
		Scanner scanner = new Scanner(System.in);
		String in;
		do {
			in = scanner.next();
		} while (!in.equalsIgnoreCase("exit"));
		System.exit(0);
	}
}

tomara que ajude :slight_smile:
[/quote]

Opa eu estava precisando de algo assim valeu :smiley: