2010-03-29 30 views
1

我的應用程序體系結構如下所示。 GWT在UI層 - >調用GWT RPC服務(servlets) - > Looksup Spring Beans - >調用在JPA(EclipseLink)中實現的DAO層。在Weblogic中集成GWT,Spring和JPA(Eclipse-link)10

我已經用GWT rpc服務直接調用JPA層成功地測試了應用程序。但是我很難將spring融入到混音中。 (Spring的主要用途是事務管理)。

我試過Google搜索,但找不到關於該主題的任何好文章。 (大多數文章指的是在GWT中使用Spring MVC,這不是我正在尋找的) 您能否指點我一些文章/教程?

在此先感謝!

馬諾

+0

你能更詳細地描述實際問題嗎? – John 2010-03-29 09:59:31

回答

0

如果你正在尋找的東西很簡單,你爲什麼不只是從你的服務實現從應用程序調用上下文中的豆?例如:

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 also this article

+0

我關注了帖子(http://pgt.de/2008/02/14/non-invasive-gwt-and-spring-integration/),並從 - >(http://code.google.com/p/gwt-spring-starter-app /),我的應用與Spring集成在一起。 謝謝! John, 感謝您的回覆。這是有道理的,但我有點不願意在兩者之間添加另一層。因此繼續採用lexicore建議的方法。 – MVK 2010-03-30 17:22:04

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,它的要使用它的兩個豆爲小服務程序,一個名爲dataProvider的,另一種叫documentCreator。必須使用xml配置文件或註釋來確定這些bean是什麼。我更喜歡註釋,比如@Controller。

那麼當Tomcat收到請求時會發生什麼,例如GET/dataProvider/test 從servlet映射部分,它知道它必須將該請求提交給它創建的第一個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()方法(如果你使用比其他任何獲取和發佈,您會需要添加他們在那裏)。如果HttpRequestHandlerServlet可以爲你工作,那將會更好,但這就是它現在的工作方式。