2012-03-13 52 views
0

對於整個servlet而言,我很新,所以如果我混合使用不正確的或易混淆的術語,請糾正我的錯誤。然而,我使用JAX-RS(Jersey)編寫了一個使用Java編寫博客的ping服務器,並且我遇到了一個問題,我有一個接受REST輸入的servlet類,另一個servlet類列出了相同的內容。使用JAX-RS將對象注入到servlet類中

眼下他們正在通過類,看起來像這樣分享他們的對象:

public class BlogPingUtils { 

    private static final String LIST_OF_CHANGES = "listOfChanges"; 

    public static List<PingInfo> getListOfChanges(ServletContext context) { 
     List<PingInfo> listOfChanges = (List<PingInfo>)context.getAttribute(LIST_OF_CHANGES); 
     if(listOfChanges == null) listOfChanges = new ArrayList<PingInfo>(); 

     return listOfChanges; 
    } 

    public static void setListOfChanges(ServletContext context, List<PingInfo> listOfChanges) { 
     context.setAttribute(LIST_OF_CHANGES, listOfChanges); 
    } 
} 

這個工作在一個小規模的開發環境,但感覺很髒,可能不會在重鏈工作由於併發問題等原因導致生產環境惡化。它也不是很靈活。我想要做的是有一個接口,可以有讀取和寫入數據的方法。然後,我會將實現此接口的類的對象注入到這兩個servlet中,以便它們實際上使用相同的對象與數據進行交互。然後這將由同步的列表或數據庫事務或其他事物支持。

這樣做的首選方法是什麼?可能嗎?我的web.xml現在的問題是非常簡單的,看起來像這樣:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
          http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4"> 
    <display-name>Blog Ping</display-name> 

    <servlet> 
    <servlet-name>Jersey REST Service</servlet-name> 
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class> 

    <init-param> 
     <param-name>com.sun.jersey.config.property.packages</param-name> 
     <param-value>com.vrutberg.blogping</param-value> 
    </init-param> 

    <load-on-startup>1</load-on-startup> 
    </servlet> 

    <servlet-mapping> 
    <servlet-name>Jersey REST Service</servlet-name> 
    <url-pattern>/*</url-pattern> 
    </servlet-mapping> 
</web-app> 

回答

0

,而不是一個靜態類,我想設計一個接口與你的getter和setter,不是創建一個實現類。

然後,我會註冊一個單線程(或根據您的需要的池)實現類與兩個servlet,如JNDI可見的線程安全的中央存儲庫。

小服務程序查詢中央存儲庫並'接口'轉換。

+0

是的,這是我想到的。你能舉一個例子說明如何用JNDI做到這一點嗎?現在使用Google來嘗試找到一個... :) – vrutberg 2012-03-13 18:32:52

+0

另外,我發現這個:http://jersey.java.net/nonav/documentation/latest/user-guide.html#d4e188 我可以使用它來解決單身人士的需求? – vrutberg 2012-03-13 18:35:09

+0

我會避免使用澤西島唯一的解決方案;你可能總是需要來自另一個artefact的中央倉庫的資源,比如標準的servlet。如果你確定你只會做Jersey/JAX-RX,爲什麼不呢。對於JNDI,它取決於你的servlet容器。如果您使用Jetty,則必須啓用它:請點擊此處:[link](http://wiki.eclipse.org/Jetty/Feature/JNDI)。對於Tomcat來說,它已經'在那裏'了,請檢查Tomcat **全局** JNDI如何 – 2012-03-14 06:27:51

相關問題