Spring Integration RMI

Integration

版本5.0.7.RELEASE

 

这部分参考文档涵盖了Spring Framework与许多Java EE(及相关)技术的集成。

1.使用Spring进行远程处理和Web服务

1.1。介绍

Spring提供了使用各种技术进行远程支持的集成类。远程支持简化了通常(Spring)POJO实现的远程启用服务的开发。目前,Spring支持以下远程技术:

  • 远程方法调用(RMI)。通过使用RmiProxyFactoryBean和,RmiServiceExporterSpring支持传统的RMI(带java.rmi.Remote 接口和java.rmi.RemoteException)以及通过RMI调用者(带有任何Java接口)的透明远程处理。

  • Spring的HTTP调用者。Spring提供了一种特殊的远程处理策略,允许通过HTTP进行Java序列化,支持任何Java接口(就像RMI调用程序一样)。相应的支持类是HttpInvokerProxyFactoryBean和 HttpInvokerServiceExporter

  • 黑森州。通过使用Spring HessianProxyFactoryBean, HessianServiceExporter您可以使用Caucho提供的基于HTTP的轻量级协议透明地公开您的服务。

  • JAX-WS。Spring通过JAX-WS(Java EE 5和Java 6中引入的JAX-RPC的后继者)为Web服务提供远程支持。

  • JMS。通过JmsInvokerServiceExporterJmsInvokerProxyFactoryBean类支持使用JMS作为底层协议进行远程处理 。

  • AMQP。Spring AMQP项目支持使用AMQP作为底层协议进行远程处理。

在讨论Spring的远程处理功能时,我们将使用以下域模型和相应的服务:

<span style="color:#34302d"><span style="color:rgba(0, 0, 0, 0.9)"><code><strong>public</strong> <strong>class</strong> <span style="color:#445588"><strong>Account</strong></span> <strong>implements</strong> <span style="color:inherit">Serializable</span>{

    <strong>private</strong> <span style="color:inherit">String</span> name;

    <strong>public</strong> <span style="color:inherit">String</span> getName(){
        <span style="color:#000000"><strong>return</strong></span> name;
    }

    <strong>public</strong> <strong>void</strong> setName(<span style="color:inherit">String</span> name) {
        <span style="color:#996633">this</span>.name = name;
    }

}</code></span></span>
<span style="color:#34302d"><span style="color:rgba(0, 0, 0, 0.9)"><code><strong>public</strong> <strong>interface</strong> <span style="color:#445588"><strong>AccountService</strong></span> {

    <strong>public</strong> <strong>void</strong> insertAccount(Account account);

    <strong>public</strong> <span style="color:inherit">List</span><Account> getAccounts(<span style="color:inherit">String</span> name);

}</code></span></span>
<span style="color:#34302d"><span style="color:rgba(0, 0, 0, 0.9)"><code><span style="color:#999988"><em>// the implementation doing nothing at the moment</em></span>
<strong>public</strong> <strong>class</strong> <span style="color:#445588"><strong>AccountServiceImpl</strong></span> <strong>implements</strong> AccountService {

    <strong>public</strong> <strong>void</strong> insertAccount(Account acc) {
        <span style="color:#999988"><em>// do something...</em></span>
    }

    <strong>public</strong> <span style="color:inherit">List</span><Account> getAccounts(<span style="color:inherit">String</span> name) {
        <span style="color:#999988"><em>// do something...</em></span>
    }

}</code></span></span>

我们将使用RMI开始向远程客户端公开服务,并谈谈使用RMI的缺点。然后我们将继续展示使用Hessian作为协议的示例。

1.2。使用RMI公开服务

使用Spring对RMI的支持,您可以透明地通过RMI基础结构公开您的服务。完成此设置后,您基本上具有类似于远程EJB的配置,除了没有对安全上下文传播或远程事务传播的标准支持这一事实。在使用RMI调用程序时,Spring确实为这样的附加调用上下文提供了钩子,因此您可以在此处插入安全框架或自定义安全凭证。

1.2.1。使用RmiServiceExporter导出服务

使用RmiServiceExporter,我们可以将AccountService对象的接口公开为RMI对象。RmiProxyFactoryBean在传统RMI服务的情况下,可以使用或通过普通RMI 访问接口。在RmiServiceExporter明确支持通过RMI调用任何非RMI业务。

当然,我们首先要在Spring容器中设置我们的服务:

<span style="color:#34302d"><span style="color:rgba(0, 0, 0, 0.9)"><code><span style="color:#008080"><bean</span> <span style="color:#000080">id</span>=<span style="color:#dd2200"><span style="color:#dd1144">"</span><span style="color:#dd1144">accountService</span><span style="color:#dd1144">"</span></span> <span style="color:#000080">class</span>=<span style="color:#dd2200"><span style="color:#dd1144">"</span><span style="color:#dd1144">example.AccountServiceImpl</span><span style="color:#dd1144">"</span></span><span style="color:#008080">></span>
    <span style="color:#999988"><em><!-- any additional properties, maybe a DAO? --></em></span>
<span style="color:#008080"></bean></span></code></span></span>

接下来,我们将使用以下方式公开我们的服务RmiServiceExporter

<span style="color:#34302d"><span style="color:rgba(0, 0, 0, 0.9)"><code><span style="color:#008080"><bean</span> <span style="color:#000080">class</span>=<span style="color:#dd2200"><span style="color:#dd1144">"</span><span style="color:#dd1144">org.springframework.remoting.rmi.RmiServiceExporter</span><span style="color:#dd1144">"</span></span><span style="color:#008080">></span>
    <span style="color:#999988"><em><!-- does not necessarily have to be the same name as the bean to be exported --></em></span>
    <span style="color:#008080"><property</span> <span style="color:#000080">name</span>=<span style="color:#dd2200"><span style="color:#dd1144">"</span><span style="color:#dd1144">serviceName</span><span style="color:#dd1144">"</span></span> <span style="color:#000080">value</span>=<span style="color:#dd2200"><span style="color:#dd1144">"</span><span style="color:#dd1144">AccountService</span><span style="color:#dd1144">"</span></span><span style="color:#008080">/></span>
    <span style="color:#008080"><property</span> <span style="color:#000080">name</span>=<span style="color:#dd2200"><span style="color:#dd1144">"</span><span style="color:#dd1144">service</span><span style="color:#dd1144">"</span></span> <span style="color:#000080">ref</span>=<span style="color:#dd2200"><span style="color:#dd1144">"</span><span style="color:#dd1144">accountService</span><span style="color:#dd1144">"</span></span><span style="color:#008080">/></span>
    <span style="color:#008080"><property</span> <span style="color:#000080">name</span>=<span style="color:#dd2200"><span style="color:#dd1144">"</span><span style="color:#dd1144">serviceInterface</span><span style="color:#dd1144">"</span></span> <span style="color:#000080">value</span>=<span style="color:#dd2200"><span style="color:#dd1144">"</span><span style="color:#dd1144">example.AccountService</span><span style="color:#dd1144">"</span></span><span style="color:#008080">/></span>
    <span style="color:#999988"><em><!-- defaults to 1099 --></em></span>
    <span style="color:#008080"><property</span> <span style="color:#000080">name</span>=<span style="color:#dd2200"><span style="color:#dd1144">"</span><span style="color:#dd1144">registryPort</span><span style="color:#dd1144">"</span></span> <span style="color:#000080">value</span>=<span style="color:#dd2200"><span style="color:#dd1144">"</span><span style="color:#dd1144">1199</span><span style="color:#dd1144">"</span></span><span style="color:#008080">/></span>
<span style="color:#008080"></bean></span></code></span></span>

如您所见,我们正在覆盖RMI注册表的端口。通常,您的应用程序服务器也维护一个RMI注册表,明智的做法是不干扰那个。此外,服务名称用于绑定服务。所以现在,服务将受到约束'rmi://HOST:1199/AccountService'。我们稍后将使用该URL链接到客户端的服务。

 

servicePort属性已被省略(默认为0)。这意味着将使用匿名端口与服务进行通信。

1.2.2。链接到客户端的服务

我们的客户是使用AccountService管理帐户的简单对象:

<span style="color:#34302d"><span style="color:rgba(0, 0, 0, 0.9)"><code><strong>public</strong> <strong>class</strong> <span style="color:#445588"><strong>SimpleObject</strong></span> {

    <strong>private</strong> AccountService accountService;

    <strong>public</strong> <strong>void</strong> setAccountService(AccountService accountService) {
        <span style="color:#996633">this</span>.accountService = accountService;
    }

    <span style="color:#999988"><em>// additional methods using the accountService</em></span>

}</code></span></span>

要链接客户端上的服务,我们将创建一个单独的Spring容器,其中包含简单对象和连接配置位的服务:

<span style="color:#34302d"><span style="color:rgba(0, 0, 0, 0.9)"><code><span style="color:#008080"><bean</span> <span style="color:#000080">class</span>=<span style="color:#dd2200"><span style="color:#dd1144">"</span><span style="color:#dd1144">example.SimpleObject</span><span style="color:#dd1144">"</span></span><span style="color:#008080">></span>
    <span style="color:#008080"><property</span> <span style="color:#000080">name</span>=<span style="color:#dd2200"><span style="color:#dd1144">"</span><span style="color:#dd1144">accountService</span><span style="color:#dd1144">"</span></span> <span style="color:#000080">ref</span>=<span style="color:#dd2200"><span style="color:#dd1144">"</span><span style="color:#dd1144">accountService</span><span style="color:#dd1144">"</span></span><span style="color:#008080">/></span>
<span style="color:#008080"></bean></span>

<span style="color:#008080"><bean</span> <span style="color:#000080">id</span>=<span style="color:#dd2200"><span style="color:#dd1144">"</span><span style="color:#dd1144">accountService</span><span style="color:#dd1144">"</span></span> <span style="color:#000080">class</span>=<span style="color:#dd2200"><span style="color:#dd1144">"</span><span style="color:#dd1144">org.springframework.remoting.rmi.RmiProxyFactoryBean</span><span style="color:#dd1144">"</span></span><span style="color:#008080">></span>
    <span style="color:#008080"><property</span> <span style="color:#000080">name</span>=<span style="color:#dd2200"><span style="color:#dd1144">"</span><span style="color:#dd1144">serviceUrl</span><span style="color:#dd1144">"</span></span> <span style="color:#000080">value</span>=<span style="color:#dd2200"><span style="color:#dd1144">"</span><span style="color:#dd1144">rmi://HOST:1199/AccountService</span><span style="color:#dd1144">"</span></span><span style="color:#008080">/></span>
    <span style="color:#008080"><property</span> <span style="color:#000080">name</span>=<span style="color:#dd2200"><span style="color:#dd1144">"</span><span style="color:#dd1144">serviceInterface</span><span style="color:#dd1144">"</span></span> <span style="color:#000080">value</span>=<span style="color:#dd2200"><span style="color:#dd1144">"</span><span style="color:#dd1144">example.AccountService</span><span style="color:#dd1144">"</span></span><span style="color:#008080">/></span>
<span style="color:#008080"></bean></span></code></span></span>

这就是我们需要做的就是支持客户端上的远程帐户服务。Spring将透明地创建一个调用者并通过该远程启用帐户服务RmiServiceExporter。在客户端,我们将其链接使用RmiProxyFactoryBean

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值