2012-03-13 2 views
0

私はこのサーブレット全体にはかなり新しくなっています。私はJAX-RS(Jersey)を使用してJavaでブログのpingサーバーを作成していますが、REST入力を受け入れるサーブレットクラスと同じコンテンツをリストする別のサーブレットクラスがあるという問題に直面しています。JAX-RSを使ってサーブレットクラスにオブジェクトを注入

今、彼らはこのようになりますクラスを介して自分のオブジェクトを共有している:

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); 
    } 
} 

これは、小規模な開発環境で動作しますが、それは汚い感じているし、おそらく重では動作しません同時実行性の問題などのために大量の生産環境を必要とします。それはあまり柔軟ではありません。私がしたいのは、データを読み書きするためのメソッドを持つインターフェースを持つことです。次に、これらの2つのサーブレットにこのインタフェースを実装するクラスのオブジェクトを挿入し、実際にデータとやりとりするために同じオブジェクトを使用します。これは、同期されたリストやデータベーストランザクションなどによってバックアップされます。

これを行うにはどうすればよいでしょうか?出来ますか?私の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とのインタフェースを設計します。

次に、JNDIなどの両方のサーブレットで表示されるスレッドセーフな中央リポジトリを使用して、シングルトン(または必要に応じてプール)実装クラスを登録します。

サーブレットはセントラルリポジトリを照会し、インターフェイスに「キャスト」します。

+0

はい、これは私が心に留めていたものです。 JNDIでそれを行う方法の例を表示できますか? Googleを使用して今すぐ見つけようとしています... :) – vrutberg

+0

また、私はこれを見つけました:http://jersey.java.net/nonav/documentation/latest/user-guide.html#d4e188 シングルトンの必要性を回避する? – vrutberg

+0

私はJerseyのみのソリューションを使用しないでください。中央のリポジトリから別の人工物、例えば標準サーブレットのリソースが必要な場合があります。あなたがJersey/JAX-RXだけを行うと確信しているなら、なぜそうしないのですか? JNDIの場合、サーブレットコンテナによって異なります。 Jettyを使用している場合は、有効にする必要があります。ここを確認してください:[link](http://wiki.eclipse.org/Jetty/Feature/JNDI) Tomcatの場合はすでにTomcatが存在しているので、Tomcat ** global ** JNDIの方法を確認してください。 –

関連する問題