2016-07-28 1 views
0

私はデータを取得し、それを維持するサーブレットを持っています。ここでは大まかなスニペットです:HttpServletで独自のメソッドを宣言するのはスレッドセーフですか?

@WebServlet("/ListenerServlet") 
public class ListenerServlet extends HttpServlet { 

    @Inject 
    private PersistService service; 

    protected void doGet(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException { 

    String toPersist = getDataFromRequest(); 
    service.persist(toPersist); 
} 

私の質問は

  • それはそのようなCDI経由(requestScoped)サービスを注入するためにOKですか?
  • サーブレットに独自の(静的ではない)メソッドを作成し、スレッドセーフにすることはできますか? synchronizedキーワードが必要ですか?

自身の方法:

private void doPersist(String toPersist) { 
    service.persist(toPersist); 
} 
+0

http://stackoverflow.com/questions/20768720/ if-my-servlet-instance-variable-of-type-string-buffer-is-itスレッドセーフ – JavaHopper

答えて

0

独自のメソッドを持って絶対に大丈夫です - 限り、彼らはあまりにもスレッドセーフですと。 PersistServiceを注入すると、バッキングストアをサーブレットに入れることができますが、PersistServiceもスレッドセーフであることが重要です。たとえば、そのクラスに静的なEntityManagerがある場合、それはではなく、スレッドセーフで、追加の同期はありません。しかし、あなたがスレッドセーフな方法で永続性を行っているなら、あなたはうまくいくはずです。

一般に、使用しているパターンは何度も使用していて、うまく機能します。

あなたはこれらの質問を参照してください可能性があります

Regarding thread safety of servlet

Why Servlets are not thread Safe?

If my Servlet instance variable is of type StringBuffer, is it thread-safe?

このトピックでは、また、サーブレットでのスレッドの安全性について論じて
関連する問題