Spring Framework 과 RMI 연동하기.
RMI 는 JDK 1.1 부터 추가되었고 한때는 CORBA, EJB 와 함께 분산 시스템을 구축하기 위한 기술로써 사용되었으나 Java 에 국한되는 단점이 있었고 SOA, ROA 등의 개념을 탑재한 다른 기술들이 널리 사용되면서 현재는 많이 사용되고 있지는 않다.
개발환경.
JDK 1.8
Spring Framework 4.3.7.RELEASE
Maven3
Windows 10 / MacOC
Server 구현.
Server 에서 제공할 기능을 구현한다.
interface, implement 로 구현한다.
ErpServer.java
....
public interface ErpServer {
String getReservationList(String param);
}
....
ErpServerImpl.java
....
@Service
public class ErpServerImpl implements ErpServer {
private Logger logger = LoggerFactory.getLogger(this.getClass().getName());
private String TAG = this.getClass().getName();
/**
*
* @param param
* @return
*/
public String getReservationList(String param) {
logger.debug("> getReservationList", TAG);
return "hello "+ param;
}
}
....
context 설정에서 구현한 기능을 RMI 를 이용해서 외부에서 사용할 수 있도록 export 해준다.
....
<!-- Server -->
<bean id="erpServer" class="kr.co.xxxx.ei.rmi.server.ErpServerImpl"/>
<bean class="org.springframework.remoting.rmi.RmiServiceExporter">
<property name="serviceName" value="ErpServer"/>
<property name="service" ref="erpServer"/>
<property name="serviceInterface" value="kr.co.xxxx.ei.rmi.server.ErpServer"/>
<!-- 기본값은 1099 -->
<property name="registryPort" value="1199"/>
</bean>
....
Client 구현.
Server 에서 제공하는 기능의 interface 를 가져온다.
Server 를 구현한 쪽에서 Client 에게 배포해야 하며 파일복사해서 붙여넣는 방법을 사용한다.
package 구조는 상관없다.
ErpServer.java
....
public interface ErpServer {
String getReservationList(String param);
}
....
가져온 데이터를 처리하는 로직을 구현한다.
InterfaceUtils.java
....
/**
* RMI 를 통해서 ERP Interface Server 로 부터 데이터를 가져온다.
*
* @param param
* @return
* @throws Exception
*/
public String getReservationListFromRmi(String param) throws Exception {
logger.debug("> getReservationList", TAG);
logger.debug("> getReservationListFromRmi : {}", erpServerClient.getReservationList(param), TAG);
return erpServerClient.getReservationList(param);
}
....
context 에 처리를 위한 설정을 추가한다.
....
<!-- Client -->
<bean class="kr.co.xxxx.ei.common.InterfaceUtils">
<property name="erpServerClient" ref="erpServerClient"/>
</bean>
<bean id="erpServerClient" class="org.springframework.remoting.rmi.RmiProxyFactoryBean"
p:serviceUrl="rmi://localhost:1199/ErpServer"
p:serviceInterface="kr.co.xxxx.ei.rmi.client.ErpServer" />
....
Spring Framework 에서 많은 부분을 자동화해서 제공하기때문에 간편하게 구현해서 사용할 수 있다.
Server 에서는 제공하는 기능을 interface 를 RmiServiceExporter 를 통해서 제공하고 Client 에서는 미리 정의된 URL 을 통해서 자신이 가지고 있는 (Server 로 부터 미리 전달받은)interface 로 매핑해서 사용한다.
단, domain object 는 반드시 직렬화(implements Serializable)해서 사용해야 한다.
'Development > Spring' 카테고리의 다른 글
Spring Framework 에서 Batch 구현하기 (0) | 2017.09.21 |
---|---|
Spring Framework 과 Redis 연동 (0) | 2017.08.07 |
Spring Framework 과 ActiveMQ 연동 (0) | 2017.07.25 |
Spring Security (0) | 2017.07.20 |
외부 인터넷이 연결되지 않은 경우 application-context 설정하기. (0) | 2016.07.08 |