Remoting 기능을
지원해줍니다. 스프링을
사용하면
매우
간단하게 RMI를
사용할
수
있습니다.
서비스를
제공하는
쪽
1. POJO로
서비스
인터페이스
구현체
개발
2. RmiServiceExporter 등록하기
인터페이스는
더이상 Remote 인터페이스를
확장하지
않아도
됩니다.
package chapter8.client;
public interface EchoService {
// word를
세
번
반복한
문자열을
반환합니다.
String say(String word);
}
구현체의 메소드들은 더이상 RemoteException을 던지지 않아도 됩니다.
package chapter8.server;
import chapter8.client.EchoService;
public class EchoServiceImpl implements EchoService {
public String say(String word) {
StringBuilder builder = new StringBuilder(word);
for (int i = 0; i < 2; i++) {
builder.append(word);
}
return builder.toString();
}
}
스프링 설정 파일에 서비스 구현체와 Exporter를 설정해줍니다.
<bean id="echoService" class="chapter8.server.EchoServiceImpl" />
<bean class="org.springframework.remoting.rmi.RmiServiceExporter">
<property name="service" ref="echoService" />
<property name="serviceName" value="EchoService" />
<property name="serviceInterface"
value="chapter8.client.EchoService" />
</bean>
RmiServiceExporter가
기본으로
로컬에 1099 포트에 RMI 레지스트리가
있는지
확인하고
있으면
서비스를
등록하고, 없으면 RMI 레지스트리를
새로
만들어
실행한
다음
서비스를
추가합니다. 이
모든일을
알아서
해주기
때문에
개발자는
할
일이
없습니다.(하고
싶다면, 레지스트리
위치
설정과
포트
설정을
할
수
있겠죠. 그
때는 registryHost 속성과 registryPort 속성에
원하는
값을
설정해
주면
됩니다.)
서비스를
사용하는
쪽
1. 마치
서비스가
로컬에
존재하는
듯이
코딩합니다.
2. 스프링
설정
파일에서 RmiProxyFactoryBean을
사용하여
원하는
서비스를 bean으로
설정합니다.
테스트
코드입니다.
package chapter8;
import org.springframework.test.AbstractDependencyInjectionSpringContextTests;
import chapter8.client.Keesun;
public class KeesunTest extends AbstractDependencyInjectionSpringContextTests {
@Override
protected String[] getConfigLocations() {
return new String[] { "chapter8/client/springContext.xml" };
}
private Keesun keesun;
public void setKeesun(Keesun keesun) {
this.keesun = keesun;
}
public void testDI() throws Exception {
assertNotNull(keesun);
}
public void testEcho() throws Exception {
String echoResult = keesun.yaahoo("Spring");
assertEquals("SpringSpringSpring", echoResult);
}
}
Keesun 이란 클래스가 EchoService를 사용하고 있습니다.
package chapter8.client;
public class Keesun {
private EchoService echoService;
public void setEchoService(EchoService echoService) {
this.echoService = echoService;
}
public String yaahoo(String word){
return echoService.say(word);
}
}
마지막으로 스프링 설정 파일에 Keesun과 EchoService를 bean으로 등록해 줍니다.
<bean id="keesun" class="chapter8.client.Keesun" />
<bean id="echoService"
class="org.springframework.remoting.rmi.RmiProxyFactoryBean">
<property name="serviceUrl"
value="rmi://localhost/EchoService" />
<property name="serviceInterface"
value="chapter8.client.EchoService" />
</bean>
1. Server 실행하기
2. Test 코드(Client) 실행하기.
레지스트리
서버를
동작시키려면
서비스를
제공하는
측
스프링
설정
파일을
읽어들이면서 Exporter bean을
생성하면되겠죠.
package chapter8;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class EchoServiceServer {
public static void main(String[] args) {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("chapter8/server/springContext.xml");
}
}
다음은 위에서 작성했던 KeesunTest를 실행해 줍니다.
'IT노트 > eGov&Spring F/W' 카테고리의 다른 글
@SuppressWarning (0) | 2015.01.30 |
---|---|
Spring Remoting: Remote Method Invocation (RMI) (0) | 2015.01.30 |
[Spring 레퍼런스] 20장 스프링을 사용한 원격작업(remoting) 및 웹 서비스 #1 (0) | 2015.01.30 |
★★★★Spring Remote (RMI) 예제 (0) | 2015.01.30 |
Spring RMI (0) | 2015.01.30 |