Java RMI fácil utilizando o Spring – Cliente

Esta é a continuação do post anterior.

Uma vez que já criamos o servidor RMI basta consumi-lo. Vou mostrar de duas formas para ficar bem entendido.

A primeira é já na sua aplicação web, maneira mais simples de todas. No seu application context .xml ou arquivo que o valha adicione o seguinte bean:


<bean id="rmiService">
<property name="serviceUrl" value="rmi://192.168.224.75:1099/rmi-service"/>
<property name="serviceInterface" value="com.app.sys.rmiclient.FileManagement"/>
</bean>

Neste bean podemos notar algums coisinhas simples. Ele cria um bean chamado rmiService e configura-o para o endereço onde o nosso servidor RMI está rodando, no meu caso é
este IP configurado aí.

Este codigo especifica uma interface também, para o Spring saber exatamente o que está criando. Note que nossa interface é exatamente a mesma interface que criamos no servidor RMI. DEVE ser a mesma interface
se puder copiar e colar melhor ainda.

Creio que tenha ficado bem claro que nosso cliente deve ter uma versão da Interface do RMI, né?

Agora que o bean está no seu application context, sempre que sua aplicação “subir” vai tentar fazer a conexão e se o RMI não estiver rodando no servidor vai retornar um erro.

Quando a aplicação subir é só fazer o @Autowired utilizando o rmiService do tipo FileManagement e usar os métodos da interface.

Simples, simples.

Para quem quer um pouco mais de detalhes eu criei um outro JAR chamado client-rmi, o contrário do server-rmi que criei no post anterior, mas volta lá e pegue a definição do POM
e pegue também a estrutura de pastas do resources por exemplo.


<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">
<bean id="rmiService">
<property name="serviceUrl" value="rmi://192.168.224.75:1099/rmi-service"/>
<property name="serviceInterface" value="com.app.sys.rmiclient.FileManagement"/>
</bean>

</beans>


Veja que a criação do bean aqui é exatamente a mesma que usamos no nosso container web, isto mostra legal o quão parrudo o Spring é para criar o seu próprio contexto.

Como já descrevi você cola a interface FileManagement no seu client.

E agora o simples e fácil Main.



import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.io.StringWriter;
import java.io.Writer;
import java.util.Scanner;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Main {
public static void main(String[] args) throws IOException {
ApplicationContext ctx = new ClassPathXmlApplicationContext("com/app/sys/rmiclient/rmi-server-context.xml");
FileManagement management = (FileManagement) ctx.getBean("rmiService");

System.out.println("Digite o arquivo:");

java.util.Scanner s = new Scanner(System.in);

String arquivo = s.next();

byte[] file = management.getFile(arquivo);

InputStream is = new ByteArrayInputStream(file);

System.out.println(file.length);

if (is != null) {
Writer writer = new StringWriter();

char[] buffer = new char[1024];
try {
Reader reader = new BufferedReader(new InputStreamReader(is,
"UTF-8"));
int n;
while ((n = reader.read(buffer)) != -1) {
writer.write(buffer, 0, n);
}
} finally {
is.close();
}
System.out.println(writer.toString());
}

System.out.println("Deseja excluir: (s/n)");

if(s.next().equals("s"))
System.out.println(management.deleteFile(arquivo));

System.out.println("FIM EXEC");
}
}

Veja que carregamos o contexto do Spring mostrando o endereço do arquivo e deste contexto apenas pegamos o bean que ele mesmo criou.

A partir daí é só rodar nosso métodos e é o nosso bom e velho código Java.

Simples assim.

Qualquer dúvida é só escrever.

Tags: , , ,

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Sair / Alterar )

Imagem do Twitter

You are commenting using your Twitter account. Sair / Alterar )

Foto do Facebook

You are commenting using your Facebook account. Sair / Alterar )

Connecting to %s


Seguir

Obtenha todo post novo entregue na sua caixa de entrada.