2013-05-02 2 views
0

나는 스프링 rmi 웹 애플리케이션 (WAR 파일)을 클라우드에 성공적으로 전개했다. 이 응용 프로그램에는 "greetingRmiService"라는 간단한 RMI 서비스가 포함되어 있습니다.이 서비스는 문자열을 반환하고 인사말 메시지를 포함합니다. 내 rmi 서비스를 성공적으로 배포했다고 말하는 서버 로그 부분은 다음과 같습니다.Cloudbees에서 Spring Java RMI 서비스에 외부 액세스

INFO: Pre-instantiating singletons in org.s[email protected]79d9cd24: defining beans [registry,greetingService,org.springframework.remoting.rmi.RmiServiceExporter#0]; root of factory hierarchy 
May 02, 2013 4:06:20 AM org.springframework.remoting.rmi.RmiRegistryFactoryBean getRegistry 
INFO: Looking for RMI registry at port '1099' 
May 02, 2013 4:06:35 AM org.springframework.remoting.rmi.RmiRegistryFactoryBean getRegistry 
INFO: Could not detect RMI registry - creating new one 
May 02, 2013 4:06:35 AM org.springframework.remoting.rmi.RmiServiceExporter prepare 
INFO: Binding service 'greetingRmiService' to RMI registry: RegistryImpl[UnicastServerRef [liveRef: [endpoint:[10.119.1.56:1099](local),objID:[0:0:0, 0]]]] 

로컬 PC에이 서비스에 연결하여 해당 서비스를 호출하기 위해 클라이언트 응용 프로그램을 만들고 싶습니다. 내 클라이언트는 간단한 maven 응용 프로그램입니다. 다음은 클라이언트의 스프링 구성 빈입니다.

<bean id="greetingService" class="org.springframework.remoting.rmi.RmiProxyFactoryBean"> 
<property name="serviceUrl" value="rmi://10.119.1.56:1099/greetingRmiService"/> 
<property name="serviceInterface" value="com.main.GreetingService"/> 
</bean> 

클라이언트의 주요 방법 :

public static void main(String[] args) 
{ 

ApplicationContext ctx = new ClassPathXmlApplicationContext("classpath:com/config/SpringConfigurationBean.xml"); 
GreetingService service = (GreetingService) ctx.getBean("greetingService"); 
System.out.println(service.sayHello("Lahiru")); 
} 

는하지만이 작동하지 않습니다 그리고 그것은 연결 시간 초과 예외를 제공합니다. 서버와 연결하기 위해 엔드 포인트 10.119.1.56:1099를 사용했습니다. 클라우드 서버에 외부 적으로 연결할 때 사용해야하는 올바른 rmi 엔드 포인트입니까?

감사합니다.

답변

1

RMI가 제대로 작동하려면 HTTP를 통해 터널링하여 프록시/라우팅 계층을 통과해야합니다.

당신은 터널링에 대한 자세한 내용을보실 수 있습니다 :

http://www.java-forums.org/blogs/rmi/730-what-http-tunneling-how-make-rmi-calls-across-firewalls.html

봄 애플리케이션의 경우 : http://static.springsource.org/spring-integration/docs/2.0.0.RELEASE/reference/html/httpinvoker.html

+0

당신이 cloudbees에서 그렇게하는 방법을 알고 있나요? –

+0

에 http://www.java-forums.org/blogs/rmi/730-what-http-tunneling-how-make-rmi-calls-across-firewalls.html 링크가 추가되어 다른 곳과 동일하게 작동해야합니다. 그 점에서. –

+0

마이클 감사합니다. 이를 위해 봄 구현을 발견했습니다. http://static.springsource.org/spring-integration/docs/2.0.0.RELEASE/reference/html/httpinvoker.html –