Spring Remoting了解与使用

HttpInvokerServiceExporter只是spring remoting的一种,还有HessianServiceExporter,BurlapServiceExporter
下面一个例子以HttpInvokerServiceExporter为例的综合应用
也可以参考http://www.javaeye.com/topic/417767这个帖子

1.JettyDaemon类的start方法
Java代码 复制代码  收藏代码
  1. server = new Server();   
  2. final SelectChannelConnector connector = new SelectChannelConnector();   
  3. connector.setReuseAddress(true);   
  4. connector.setPort(port);   
  5.   
  6. server.addConnector(connector);   
  7.  WebAppContext webAppContext = new WebAppContext();   
  8.  webAppContext.setContextPath("/");   
  9.     
  10. ServletHolder sh = new ServletHolder();   
  11. sh.setName("helloServlt");   
  12. sh.setClassName(DispatcherServlet.class.getName());   
  13. sh.setInitParameter("contextConfigLocation","classpath:applicationContext-mvc.xml");   
  14. sh.setInitOrder(0);   
  15.   
  16. webAppContext.addServlet(sh, "*.sv");   
  17. webAppContext.setDescriptor("web/WEB-INF/web.xml");   
  18. webAppContext.setResourceBase("web");   
  19.   
  20. // webAppContext.setConfigurationDiscovered(true);  
  21.   
  22. webAppContext.setParentLoaderPriority(true);   
  23. server.setHandler(webAppContext);   
  24.   
  25. // 保证在退出时能优雅的退出jetty服务  
  26. // server.setStopAtShutdown(true);  
  27.   
  28. // 以下代码是关键   
  29. webAppContext.setClassLoader(applicationContext.getClassLoader());   
  30. XmlWebApplicationContext xmlWebAppContext = new XmlWebApplicationContext();   
  31. xmlWebAppContext.setParent(applicationContext);   
  32. xmlWebAppContext.setConfigLocations(new String[] { "classpath:applicationContext-mvc.xml" });   
  33. xmlWebAppContext.setServletContext(webAppContext.getServletContext());   
  34. xmlWebAppContext.refresh();   
  35. webAppContext.setAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE,xmlWebAppContext);   
  36. server.start();  
   server = new Server();
   final SelectChannelConnector connector = new SelectChannelConnector();
   connector.setReuseAddress(true);
   connector.setPort(port);
   
   server.addConnector(connector);
    WebAppContext webAppContext = new WebAppContext();
    webAppContext.setContextPath("/");
    
   ServletHolder sh = new ServletHolder();
   sh.setName("helloServlt");
   sh.setClassName(DispatcherServlet.class.getName());
   sh.setInitParameter("contextConfigLocation","classpath:applicationContext-mvc.xml");
   sh.setInitOrder(0);

   webAppContext.addServlet(sh, "*.sv");
   webAppContext.setDescriptor("web/WEB-INF/web.xml");
   webAppContext.setResourceBase("web");

   // webAppContext.setConfigurationDiscovered(true);

   webAppContext.setParentLoaderPriority(true);
   server.setHandler(webAppContext);
			
   // 保证在退出时能优雅的退出jetty服务
   // server.setStopAtShutdown(true);

   // 以下代码是关键
   webAppContext.setClassLoader(applicationContext.getClassLoader());
   XmlWebApplicationContext xmlWebAppContext = new XmlWebApplicationContext();
   xmlWebAppContext.setParent(applicationContext);
   xmlWebAppContext.setConfigLocations(new String[] { "classpath:applicationContext-mvc.xml" });
   xmlWebAppContext.setServletContext(webAppContext.getServletContext());
   xmlWebAppContext.refresh();
   webAppContext.setAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE,xmlWebAppContext);
   server.start();

2.服务器bean配置,没啥特别,就是让spring自动调用start方法和stop方法 
Java代码 复制代码  收藏代码
  1.  <bean id="webDaemon" class="com.taobao.monitor.pf.analyse.master.core.JettyDaemon"  
  2.     init-method="start" destroy-method="stop">   
  3.     <property name="port" value="${master.port}"></property>   
  4.    </bean>   
  5.   
  6. 3.applicationContext-mvc.xml   
  7.        <bean id="urlMapping"  
  8.         class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">   
  9.         <property name="mappings">   
  10.             <props>   
  11.                 <prop key="/task2slave.sv">task2slaveService</prop>   
  12.             </props>   
  13.         </property>   
  14.     </bean>   
  15.   
  16.     <bean id="task2slaveService"  
  17.         class="org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter">   
  18.         <property name="service" ref="taskManager"/>  <!--实现类-->   
  19.         <property name="serviceInterface">                  <!--接口,需要提供给调用方-->   
  20.             <value>com.taobao.monitor.pf.analyse.inter.Task2Slave</value>   
  21.         </property>   
  22.     </bean>  
 <bean id="webDaemon" class="com.taobao.monitor.pf.analyse.master.core.JettyDaemon"
	init-method="start" destroy-method="stop">
	<property name="port" value="${master.port}"></property>
   </bean>

3.applicationContext-mvc.xml
       <bean id="urlMapping"
		class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
		<property name="mappings">
			<props>
				<prop key="/task2slave.sv">task2slaveService</prop>
			</props>
		</property>
	</bean>

	<bean id="task2slaveService"
		class="org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter">
		<property name="service" ref="taskManager"/>  <!--实现类-->
		<property name="serviceInterface">                  <!--接口,需要提供给调用方-->
			<value>com.taobao.monitor.pf.analyse.inter.Task2Slave</value>
		</property>
	</bean>

4.调用方配置,直接使用task2Slave实例即可    
Java代码 复制代码  收藏代码
  1. <!-- spring http 远程调用 -->        
  2.     <bean   id="httpInvokerRequestExecutor"      
  3.        class="org.springframework.remoting.httpinvoker.CommonsHttpInvokerRequestExecutor">      
  4.        <property      
  5.            name="httpClient">      
  6.            <bean      
  7.                class="org.apache.commons.httpclient.HttpClient">     
  8.                <property      
  9.                    name="timeout"      
  10.                    value="${http.timeout}" />      
  11.                <property      
  12.                    name="httpConnectionManager">      
  13.                    <ref      
  14.                        bean="multiThreadedHttpConnectionManager" />      
  15.                </property>      
  16.            </bean>      
  17.        </property>      
  18.    </bean>   
  19.   
  20. <!--  获取远程任务接口对象,用来请求需要的job和rule对象 -->   
  21. <bean id="task2Slave"  
  22.     class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">   
  23.     <property name="serviceUrl">   
  24.         <value>http://${master.ip}:${master.port}/task2slave.sv</value>  
  25.     </property>   
  26.     <property name="serviceInterface">   
  27.         <value>com.taobao.monitor.pf.analyse.inter.Task2Slave</value>   
  28.     </property>   
  29.     <property name="httpInvokerRequestExecutor" ref="httpInvokerRequestExecutor"/>      
  30. </bean>  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值