Как обеспечить бизнес-логику весной на удаленном сервере? - PullRequest
2 голосов
/ 25 мая 2010

Используя Spring as Framework, если мне нужно предоставить сервис бизнес-логики либо JSP / Сервлетам (на веб-серверах), либо клиентскому приложению для настольных компьютеров, либо мобильным клиентам, это единственный способ выполнить бизнес логики (без EJB) на удаленном сервере. через сервлеты?

Ответы [ 4 ]

2 голосов
/ 25 мая 2010

Это одна альтернатива. Но ничто не мешает вам создать собственный сервер или перенести работу в контейнер Spring.

Преимущества использования контейнера сервлетов в том, что вы получаете обработку потоков и сокетов бесплатно. (Это также относится к RMI с сервером RMI)

Преимущества использования инфраструктуры веб-служб, в которой используется сервлет, заключаются в том, что вам нужно только обрабатывать и настраивать сгенерированный код. И он работает со всеми основными технологиями, такими как .NET и PHP, поскольку это всего лишь XML.

Еще одним преимуществом в расширенной операционной среде является то, что сервлет отправляет HTTP-сообщения по умолчанию на порт 80. С жесткими брандмауэрами это абсолютно простое решение.

Например, для RMI вам нужно два порта для связи.

Если вы заинтересованы в использовании веб-контейнера, такого как Tomcat, на своем удаленном сервере, у вас должен быть контейнер Spring внутри веб-контейнера.

Но самая простая альтернатива, если вы можете жить с Spring на обоих концах, - это использовать Spring вызывает вместе со стандартным веб-контейнером Java 6.

При наличии хорошего уровня вы можете протестировать весь код уровня бизнеса и интеграции с помощью тестов JUnit! Это довольно элегантно!

2 голосов
/ 25 мая 2010

Нет. Вы можете выставить логику через RMI, Hessian, Burlap, JAX-RPC и т. Д.

1 голос
/ 25 мая 2010

Как было сказано в предыдущих комментариях, вы всегда можете раскрыть свою логику через 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";
    }
}

Чтобы предоставить эту службу через RMI на локальном хосте с портом 9000, необходимо добавить следующий фрагмент кода в конфигурацию 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;
   }
* *} Тысяча двадцать-один

Вот и все. Весна обо всем позаботится.

1 голос
/ 25 мая 2010

Не требуется, чтобы сервисы бизнес-логики на удаленном сервере были представлены через сервлет. Предоставляемый сервис может быть любым, что ваш клиентский код знает, как использовать. Spring предоставляет средства для упрощения связи некоторых типов по сравнению с другими: HTTP, SOAP и RMI RESTful были бы проще, чем JINI или уникальный проводной протокол.

...