2016-07-28 41 views
0

Ich habe ein Servlet, das Daten erhält und dann persistiert. Hier ist ein grober Schnipsel:Ist es threadsicher, eigene Methoden in einem HttpServlet zu deklarieren?

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

Meine Fragen

  • Ist es OK, um den (requestScoped) -Dienst über CDI wie das zu injizieren?
  • Kann ich meine eigene (nicht statische) Methode im Servlet erstellen und Thread-sicher sein? Benötige ich das synchronisierte Keyword?

eigene Methode:

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

Dieses Thema auch über die Thread-Sicherheit in Servlets diskutiert http://stackoverflow.com/questions/20768720/ if-my-servlet-instance-variable-is-of-type-string-puffer-is-it-thread-sicher – JavaHopper

Antwort

0

Ihre eigenen Methoden zu haben ist absolut in Ordnung - solange auch sie sind Thread-sicher. Das Einfügen Ihres PersistService ist eine großartige Möglichkeit, Ihren Backing Store in das Servlet zu integrieren, aber es ist immer noch wichtig, dass der PersistService Thread-sicher ist. Zum Beispiel, wenn Sie einen statischen EntityManager in dieser Klasse haben, dann ist das nicht Thread Safe ohne zusätzliche Synchronisation. Aber wenn Sie Ihre Beharrlichkeit in einer thread-sicheren Weise tun, dann sollten Sie in Ordnung sein.

Im Allgemeinen ist das Muster, das Sie verwenden, eine, die ich oft verwendet habe und es funktioniert gut.

Sie auf diese Fragen beziehen:

Regarding thread safety of servlet

Why Servlets are not thread Safe?

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