2015-05-23 21 views
5

Voglio creare un'app di accesso in Java EE. Ho pensato di implementarlo usando una pagina html, un servlet e una classe di entità per l'utente, ma sembra che EntityManager non sia thread-safe (non può essere iniettato nel servlet e ho bisogno che controlli il database).Injecting EntityManager in servlet, sembra non thread-safe

Ho letto su EntityManagerFactory ma non voglio gestire la vita del prodotto EntityManager quando posso fare in modo che il contenitore lo faccia. Penso che alcune implementazioni che usano il pattern DAO possano essere fatte in modo che io possa avere un gestore di entità nel servlet, qualcosa come DAOImpl che contiene un gestore, e avere quella classe come variabile privata nel servlet. Ma non sono riuscito a trovare alcun tutorial utile online.

Qualcuno potrebbe fornire un'implementazione per questo?

+0

Un oggetto può essere non thread-safe se ha lo stato mutabile. Quindi, perché non eseguire l'autenticazione con un oggetto stateless. Non è questo il genere di cose a cui è destinato @Stateless Session Bean (parte di EJB 3.0)? – scottb

+0

In che modo si inietta esattamente ciò che ti ha fatto pensare che non sia sicuro? – BalusC

risposta

1

La strada da percorrere è creare un LoginService come @Stateless. Dovrebbe contenere EntityManager. Questa preoccupazione EJB è gestire l'accesso.

Ora inserire l'EJB nel proprio servlet.

Il contenitore si prenderà cura della concorrenza.

http://www.adam-bien.com/roller/abien/entry/is_in_an_ejb_injected

+0

Anche qui: http://tamanmohamed.blogspot.cz/2012/03/jpa-thread-safety-when-injecting.html – dmatej

1

Segui Oracle ha suggerito documentazione here, qualsiasi approccio dovrebbe fare: O:

Iniettare EntityManagerFactory nel vostro impl dao tramite SerlvetContextListener.

@PersistenceUnit   
private EntityManagerFactory emf; 

Oppure Iniezione di EntityManager in DaoImpl.

@PersistenceContext 
    private EntityManager em;