Spring,Spring,Spring

Spring framework, na minha opinião o melhor e mais completo framework que nos temos, pois revolucionou o modelo de desenvolvimento j2ee, ele inspirou o ejb3. Spring é um container, leve, muito leve, ele se integra como muitos outros frameworks, como jdo,hibernate,ibatis,jdbc,jms,etc... Ele não re-inventa a roda mas sim aperfeiçoá.

Nesse exemplo vou demostrar como fazer um acesso remoto a um Spring Bean como RMI, isso mesmo como se fosse um ejb. Vamos lá.

*Estou usando spring 2.0 E as libs que vem como o proprio spring + as dependencias como
log e por ai vai.




package org.diegopacheco.springrmitest.service;
public interface CromService {
public String rezar();
}



package org.diegopacheco.springrmitest.service;
public class CromServiceImpl implements CromService {
public String rezar() {
return "Você rezou de mais então Crom mandou uma maldição de sua montanha.";
}
}



package org.diegopacheco.springrmitest.util;

import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
* CLASSE que manterá o Spring Factory Beans no 'Ar'
* @author Diego Pacheco
*
*/
public class SpringContextHolderUtil {

public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"classpath:spring-remote-beans.xml"});
BeanFactory factory = (BeanFactory) context;

System.out.println("*** Spring Factory Beans: " + factory + " on Air... ");
System.out.println("*** Para finalizar, derube na mão essa class.");
//while(true){} Esse qhile true não é necessário pois o Spring já mantem o contexto
// no ar. Valeu pietro :)
}

}


Arquivos de conmfiguração e Spring beans(Coloque no classpath)

log4j.rootLogger=INFO, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%-5p %C{1} - %m%n

log4j.logger.org.diegopacheco.springrmitest=INFO


Arquivos de conmfiguração e Spring beans(Coloque no classpath)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd">
<beans
default-autowire="no"
default-dependency-check="none"
default-lazy-init="false"
>

<!-- Define o bean Cimerio -->
<bean
id="cimerio"
class="org.diegopacheco.springrmitest.service.client.Cimerio"
>
<!-- Injeta cromSerivce(vindo do RMI) -->
<property name="cromService" ref="cromService" />
</bean>

<!-- Prove a criação do bean 'cromSerivce' via RMI -->
<bean id="cromService" class="org.springframework.remoting.rmi.RmiProxyFactoryBean">
<property name="serviceUrl" value="rmi://localhost:1199/CromService" />
<property name="serviceInterface" value="org.diegopacheco.springrmitest.service.CromService" />
</bean>

</beans>


Arquivos de conmfiguração e Spring beans(Coloque no classpath)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd">
<beans
default-autowire="no"
default-dependency-check="none"
default-lazy-init="false"
>

<!-- Definição do Bean CromServiceImpl -->
<bean
id="cromService"
class="org.diegopacheco.springrmitest.service.CromServiceImpl"
/>

<!-- Expoe o Bean CromServiceImpl como RMI(tipo EJB) -->
<bean class="org.springframework.remoting.rmi.RmiServiceExporter">
<!-- does not necessarily have to be the same name as the bean to be exported -->
<property name="serviceName" value="CromService"/>
<property name="service" ref="cromService"/>
<property name="serviceInterface" value="org.diegopacheco.springrmitest.service.CromService"/>
<!-- defaults to 1099 -->
<property name="registryPort" value="1199"/>
</bean>

</beans>



package org.diegopacheco.springrmitest.service.client;

import org.diegopacheco.springrmitest.service.CromService;

public class Cimerio {

private CromService cromService;

public Cimerio() {}

public Cimerio(CromService cromService) {
super();
this.cromService = cromService;
}

public void rezarParaCrom(){
System.out.println(cromService.rezar());
}

public CromService getCromService() {
return cromService;
}
public void setCromService(CromService cromService) {
this.cromService = cromService;
}

@Override
public String toString() {
return "Crom...";
}

}



package org.diegopacheco.springrmitest.service.client;

import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class TestRMI {

public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"classpath:spring-client-beans.xml"});
BeanFactory factory = (BeanFactory) context;

Cimerio conan = (Cimerio) factory.getBean("cimerio");
System.out.println("Conan reza para Crom e: ");
conan.rezarParaCrom();
}

}


Para testar: Rode a classe: SpringContextHolderUtil e depois(Não para a execução da classe SpringContextHolderUtil) rode: TestRMI.

A classe: SpringContextHolderUtil Sobe o Contexto do Spring(digamos spring server) e expoe o Bean CromService como um RMI e a classe: TestRMI sobe o contexto(spring client) e injeta CromService vindo do RMI para o bean Cimerio. Ao rodar você terá esse resultado:


INFO RmiClientInterceptor - RMI stub [rmi://localhost:1199/CromService] is an RMI invoker
INFO DefaultAopProxyFactory - CGLIB2 available: proxyTargetClass feature enabled
Conan reza para Crom e:
Você rezou de mais então Crom mandou uma maldição de sua montanha.


Popular posts from this blog

Kafka Streams with Java 15

Rust and Java Interoperability

HMAC in Java