如何在远程服务器中提供Spring中的业务逻辑?

时间:2010-05-24 20:56:51

标签: java spring frameworks ejb servlets

使用Spring as Framework,如果我需要为JSP / Servlet(在Web服务器上)或Application桌面客户端或Mobile客户端提供业务逻辑服务,那么在远程服务器中完成逻辑业务(没有EJB)的唯一方法通过Servlets?

4 个答案:

答案 0 :(得分:2)

没有。您可以通过RMI, Hessian, Burlap, JAX-RPC等公开逻辑

答案 1 :(得分:2)

这是另一种选择。但是没有什么可以阻止你创建自己的服务器或处理Spring容器的工作。

使用Servlet容器的优点是可以免费获得线程和套接字处理。 (这也适用于带有RMI服务器的RMI)

使用使用Servlet的Web Service框架的优点是您只需要处理和配置生成的代码。它适用于所有主要技术,如.NET和PHP,因为它只是XML。

高级操作环境的另一个优点是Servlet默认在端口80上发送HTTP消息。对于刚性防火墙,这是绝对最简单的解决方案。

例如,对于RMI,您需要两个端口进行通信。

如果您对在远程服务器上使用Tomcat等Web容器感兴趣,则应将Web容器放在Web容器中。

但是,如果你能在两端使用Spring,绝对最简单的选择是将Spring invokers与Java 6的捆绑Web容器一起使用。

通过良好的分层,您可以使用JUnit测试测试所有业务和集成层代码!那很优雅!

答案 2 :(得分:1)

远程服务器上的业务逻辑服务不需要通过servlet公开。公开的服务可以是您的客户端代码知道如何使用的任何内容。 Spring提供了使某些类型的通信比其他类型更容易的设施:RESTful HTTP,SOAP和RMI比JINI或独特的有线协议更容易。

答案 3 :(得分:1)

正如之前的评论中所说,你总是可以通过RMI,Hessian / Burlap,JAX-WS / JAX-RPC甚至是JMS公开你的逻辑。

对于RMI或JMS,您甚至不必更改业务接口以将其公开为远程服务。这只是配置问题。

例如,假设您有业务接口:

 public interface HelloWorld {
    public String getMessage();
  }

及其实施:

public class SimpleHelloWorld implements HelloWorld {
    public String getMessage() {
       return "Hello World";
    }
}

要在9000端口的localhost上通过RMI公开此服务,您需要将以下代码片段添加到Spring配置中:

<?xml version="1.0" encoding="UTF-8"?>
   <beans xmlns="http://www.springframework.org/schema/beans">
       <bean id="helloWorldService"
            class="com.apress.prospring2.ch15.remoting.SimpleHelloWorld"/>
       <bean id="serviceExporter"
             class="org.springframework.remoting.rmi.RmiServiceExporter">
           <property name="serviceName" value="HelloWorld" />
           <property name="service" ref="helloWorldService" />
           <property name="serviceInterface"
               value="com.apress.prospring2.ch15.remoting.HelloWorld" />
            <property name="registryPort" value="9000" />

  </bean>

您的客户端配置应具有以下配置(appCtx.xml):

  <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans">
       <bean id="helloWorldService"
            class="org.springframework.remoting.rmi.RmiProxyFactoryBean">
          <property name="serviceUrl" value="rmi://localhost:9000/HelloWorld" />
          <property name="serviceInterface"
              value="com.apress.prospring2.ch15.remoting.HelloWorld"/>
       </bean>
       <bean id="helloWorldClient"
            class="com.apress.prospring2.ch15.remoting.rmi.HelloWorldClient">
          <property name="helloWorldService" ref="helloWorldService" />
       </bean>
</beans>

这是一个简单的客户端:

public class HelloWorldClient {
   private HelloWorld helloWorldService;

   public static void main(String[] args) throws Exception {
      ApplicationContext ctx = new ClassPathXmlApplicationContext("appCtx.xml");
      HelloWorldClient helloWorldClient = 
        (HelloWorldClient) ctx.getBean("helloWorldClient");
      helloWorldClient.run();
   }

   public void run() {
       System.out.println(helloWorldService.getMessage());
  } 
  public void setHelloWorldService(HelloWorld helloWorldService) {
      this.helloWorldService = helloWorldService;
   }

}

就是这样。春天将照顾其他一切。