`
neo
  • 浏览: 265613 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

在Play!中提供RMI(通过Spring)

阅读更多
1、SOAP/RPC风格的Webservice(通过XFire),Hessian, PHPRPC都需要Servlet模型的支持,但是Play!不支持Servlet(或许有变通的方法?),所以,还是使用RMI这种技术

2、Play!的Model类,不是纯的POJO,继承了JPASupport,作为远程对象传递时,可能会产生
10:38:16,956 ERROR ~ failed to lazily initialize a collection of role: models.User.posts, no session or session was closed
org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: models.User.posts, no session or session was closed

这样的错误,因此,要定义 POJO的VO/DTO对象,做为远程传递对象

3、VO对象,因为要通过RMI传递,必须要实现Serializable接口,并且最好在类中指定serialVersionUID,象这样
private static final long serialVersionUID = 1L;
可以避免Server和Client之间同种对象版本不一样的错误

4、通过Spring封装并提供RMI的服务。需要自定义一个job,随Play!启动而启动,初始化RMI服务,象这样 
//注册RMI
play.modules.spring.Spring.getBean("postServiceRmi");


5、RMI实现类,无法象Play!的Controller类一样,直接调用Model对象,Guillaume Bort的解释是
“I think that the RMI server call your code in a non managed thread.
You need to wrap your code in a play.Invoker.Invocation object. “

需要使用以下的变通方法
So it is almost the same code than Jobs. Btw you could directly use jobs:

public class RetrievePostsByUserJob extends Job<List<PostVO>> {

      private Long id;

      public RetrievePostsByUserJob(Long id) {
          this.id = id;
      }

      public List<PostVO> doJobWithResult() {
          ... your code here
          return list;
      }

}

and then use the job in your RMI server:

public List<PostVO> getPostsByUserId(Long id) {
     return new RetrievePostsByUserJob(id).now().get();

}
分享到:
评论

相关推荐

    rmi与spring整合实例

    在IT行业中,远程方法调用(Remote Method Invocation,RMI)和Spring框架是两个非常重要的概念,它们在分布式系统开发中发挥着关键作用。RMI是Java平台提供的一种技术,用于在不同Java虚拟机(JVM)之间进行对象间...

    如何在Spring框架中使用RMI技术.zip

    以下是在Spring中使用RMI的关键步骤: 1. **定义远程接口**:创建一个Java接口,声明所有需要远程调用的方法。这个接口需要继承`java.rmi.Remote`接口,并抛出`java.rmi.RemoteException`。 2. **实现远程接口**:...

    SpringRMI小例子

    Spring提供了对RMI的高级抽象,通过其`org.springframework.remoting.rmi`包,使得RMI服务的创建、配置和暴露变得更加简单。在Spring MVC项目中,我们可以将RMI服务作为一个Bean来管理,这样可以充分利用Spring的...

    Spring RMI

    在Spring中集成RMI,可以轻松地创建和管理远程服务,提升系统的可扩展性和灵活性。 ### 1. Spring RMI基本概念 Spring RMI是Spring框架对Java RMI的封装,它简化了RMI服务的配置和管理过程。RMI的核心概念包括: ...

    Spring RMI小例子

    在这个"Spring RMI小例子"中,我们将深入理解Spring如何简化RMI的使用,以及如何通过它实现跨网络的交互。 首先,RMI允许Java对象在不同的JVM之间进行通信,仿佛它们都在同一个进程中运行。Spring通过提供自动注册...

    spring RMI 服务(自动把service发布为RMI服务)

    Spring RMI服务是一种在Java平台上实现远程方法调用(Remote Method Invocation, RMI)的技术,它允许分布式系统中的不同组件通过网络进行通信。在Spring框架的支持下,我们可以更方便地将服务发布为RMI服务,使得...

    spring中使用RMI

    在Spring中集成RMI,首先我们需要定义一个远程接口,例如: ```java public interface MyRemoteService extends Remote { String doSomething(String input) throws RemoteException; } ``` 然后,实现这个接口:...

    spring和RMI分布式整合源码

    通过分析和学习这个源码,开发者可以了解如何在Spring环境中设置RMI服务,如何处理异常,以及如何在客户端使用代理进行调用。这对于提升分布式系统的开发能力,理解服务间的通信机制,以及掌握Spring和RMI的整合应用...

    Spring-RMI.rar_spring rmi

    总结,Spring整合RMI提供了一种方便、灵活的方式来实现分布式系统中的远程方法调用。通过"SpringRMIClient"和"SpringRMIServer"示例,我们可以清晰地了解如何在Spring框架下设置和调用RMI服务。这在构建可扩展、高...

    spring rmi应用

    Spring RMI整合了RMI机制,提供了一种更加灵活和易于管理的方式,让开发者可以在Spring容器中定义远程服务,并通过Spring的IoC(Inversion of Control)和AOP(Aspect Oriented Programming)特性来增强这些服务。...

    spring+rmi非本地实现

    在IT行业中,Spring框架是Java开发中的一个核心组件,它为构建可维护、可扩展的Web应用程序提供了强大的支持。RMI(Remote Method Invocation)则是Java平台上的远程对象调用技术,允许程序在不同的Java虚拟机之间...

    spring rmi 小例子

    6. **源码分析**:在提供的压缩包文件`SpringRMI`中,可能包含了上述所有步骤的代码示例。通过阅读这些源码,你可以深入理解Spring RMI的工作原理,包括服务暴露、注册、代理创建等。 7. **工具使用**:在开发过程...

    spring rmi 集成

    Spring框架提供了对RMI的支持,使得在Spring应用中集成RMI变得更加简单和灵活。本篇将深入探讨Spring如何与RMI结合,以及客户端和服务器端的实现细节。 ### 一、Spring RMI 服务器端集成 1. **定义远程接口**:...

    在Spring中输出、访问RMI

    在Spring中输出、访问RMI,之前做的Demo,希望对大家有所帮助!

    spring RMI 实用分享

    在本文中,我们将深入探讨Spring框架如何集成RMI,以及如何创建和使用RMI客户端。 首先,让我们了解RMI的基本概念。RMI是一种机制,它允许一个对象在一台计算机上执行的方法可以在另一台计算机上执行,就好像这些...

    spring RMI简单例子

    Spring RMI在此基础上提供了更高级别的抽象,通过Spring的依赖注入(DI)和AOP(面向切面编程)能力简化了服务的创建和调用。 要实现Spring RMI,我们需要以下组件: 1. **远程接口(Remote Interface)**:这是...

    spring rmi 改造

    在Spring中,可以使用`ThreadPoolTaskExecutor`或`ThreadPoolTaskScheduler`来实现线程池。 下面是如何在Spring RMI中引入线程池的步骤: 1. **配置线程池**:在Spring的配置文件(如`applicationContext.xml`)中...

    rmi实例(Spring整合)

    在Spring中,整合RMI主要通过以下几种方式: 1. **使用Spring的RmiServiceExporter**:这是最基础的整合方式,它允许我们将任何Spring Bean导出为RMI服务。首先,你需要创建一个实现远程接口的Spring Bean。然后,...

    Spring Rmi使用文档

    例如,在分布式系统中,不同的服务节点之间需要相互调用对方提供的业务逻辑或数据处理能力时,Spring RMI 就能发挥重要作用。此外,在微服务架构中,不同服务间的通信也可以利用 Spring RMI 来实现。 #### 五、总结...

    RMI SpringRMI API

    在Spring 3.1版本中,通常会使用Spring的RMI支持,这可能涉及到的包包括Spring的核心库、AOP库、beans库以及RMI相关的库。确保这些库都在项目的`lib`目录下,以避免运行时的依赖问题。整合Spring和RMI可以让你更专注...

Global site tag (gtag.js) - Google Analytics