在Weblogic 10中集成GWT,Spring和JPA(Eclipse-link)

时间:2010-03-29 09:24:17

标签: spring gwt jpa eclipselink

我的应用程序架构如下所示。 UI层中的GWT - >调用GWT RPC服务(servlet) - >查找Spring Beans - >调用在JPA(EclipseLink)中实现的DAO层。

我已成功使用GWT rpc服务测试应用程序,直接调用JPA层。但我无法将弹簧融入混音中。 (Spring的主要用途是事务管理)。

我试过谷歌搜索,但找不到任何关于这个主题的好文章。 (大多数文章都指的是在GWT中使用Spring MVC,这不是我想要的) 你能指点我一些文章/教程吗?

提前致谢!

的Manoj

2 个答案:

答案 0 :(得分:0)

如果您正在寻找非常简单的东西,为什么不从服务实现中调用应用程序上下文中的bean?类似的东西:

public class GreetingServiceImpl extends RemoteServiceServlet implements
    GreetingService {

  public String greetServer(String input) throws IllegalArgumentException {
    return WebApplicationContextUtils.getRequiredWebApplication(getServletContext()).
      getBean(GreetingService .class).greetServer(input);
  }
}

支持应用程序上下文必须提供GreetingService的“真实”实现。

Seee this article

答案 1 :(得分:0)

我发现的一个有趣的问题是我经常希望我的servlet是一个Spring管理的bean。这样,它可以执行所有依赖注入等。但通常,您必须在web.xml中指定您的servlet,这意味着您的容器(例如Tomcat)而不是Spring将创建servlet。

使用HttpRequestHandlerServlet可以解决这个问题。我的web.xml文件包含以下行:

<servlet>
    <servlet-name>dataProvider</servlet-name>
    <servlet-class>
        org.springframework.web.context.support.HttpRequestHandlerServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet>
    <servlet-name>documentCreator</servlet-name>
    <servlet-class>
        org.springframework.web.context.support.HttpRequestHandlerServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>dataProvider</servlet-name>
    <url-pattern>/dataProvider/*</url-pattern>
</servlet-mapping>

<servlet-mapping>
    <servlet-name>documentCreator</servlet-name>
    <url-pattern>/documentCreator/*</url-pattern>
</servlet-mapping>

这告诉Spring它将使用它的两个bean作为servlet,一个叫做dataProvider,另一个叫做documentCreator。它必须使用xml配置文件或注释来计算这些bean的内容。我更喜欢注释,例如@Controller。

那么当Tomcat收到请求时会发生什么,例如GET / dataProvider / test 从servlet-mapping部分,它知道它必须将该请求提供给它创建的第一个HttpRequestHandlerServlet。该类知道它具有名称dataProvider,并且它在Spring上下文中查找名为dataProvider的bean。然后它调用该bean上的handleRequest方法。

我的DataProvider类如下所示:

@Controller
public class DataProvider extends HttpServlet implements HttpRequestHandler {

  @Autowired
  private OtherBeanType otherBean

  @Override
  protected void doGet(HttpServletRequest request, HttpServletResponse response) {
    // my doGet method
  }

  @Override
  protected void doPost(HttpServletRequest request, HttpServletResponse response) {
    // my doPost method
  }

  @Override
  public void handleRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    if (request.getMethod().equalsIgnoreCase("GET")) {
      doGet(request, response);
    } else if (request.getMethod().equalsIgnoreCase("POST")) {
      doPost(request, response);
    }
  }

}

我认为我们需要handleRequest()方法有点不幸(如果你使用Get和Post之外的任何东西,你需要在那里添加它们)。如果HttpRequestHandlerServlet可以为你做这项工作会更好,但这就是它现在的工作原理。