Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it L'avatar di kuarl
    Registrato dal
    Oct 2001
    Messaggi
    1,093

    [J2EE] ejb3 + jpa + servlet, iniezione EntityManager

    salve popolo,

    sto iniziando a lavorare con le suddette tecnologie, le sto usando per creare un applicazione web interfacciata ad un database, e per fare ciò ho separato la logica di business dalla parte prettamente web. Tuttavia sono nuovo al mondo degli ejb e jpa e non riesco ancora a venirne fuori indenne.

    L'applicazione attualmente consiste in due moduli, rappresentati da due distinti progetti in eclipse che poi vengono pacchettizzati in un EAR (terzo progetto eclipse).

    Il primo progetto è un EJB, con gli oggetti POJO marcati con le opportune annotazioni (@Entity e tutto il resto) su una base di dati. Ad essi aggiungo le relative classi che implementano i metodi CRUD relative ad ogni bean. Nell'altro progetto o modulo, ci sono le servlet che si occupano di ricevere ed inoltrare le richieste su queste classi appena descritte (semplificando parecchio, per adesso mi interessa far funzionare sta roba). Il tutto poi viene pacchettizzato in un ear con due moduli, uno ejb e l'altro web. Ora il problema riguarda i cosiddetti container-managed entity manager, che dovrei iniettare con le opportune annotazioni. Se lo faccio all'interno di una classe servlet, che è appunto gestita dal servlet container, tutto bene, se lo faccio nelle suddette classi con i metodi CRUD invece non funziona.

    Un esempio:
    codice:
    package it.gobeyond.medical.persistence;
    
    import it.gobeyond.medical.model.Appuntamento;
    
    import javax.ejb.Stateless;
    import javax.persistence.*;
    
    @Stateless
    public class AppuntamentoDAO {
    	@PersistenceUnit
    	private EntityManagerFactory emf;
    	@PersistenceContext
    	private EntityManager em;
        
        public Appuntamento findAll() {
        	return em.find(Appuntamento.class, 2);
        }
    
    }
    come ho detto, questo bean si trova all'interno del progetto ejb di eclipse, ma emf e em restano null.

    Per completezza vi incollo anche i file application.xml
    codice:
    <?xml version="1.0" encoding="UTF-8"?>
    <application xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:application="http://java.sun.com/xml/ns/javaee/application_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application_5.xsd" id="Application_ID" version="5">
      <display-name>Medical</display-name>
      <module>
        <web>
          <web-uri>MedicalWebTest.war</web-uri>
          <context-root>MedicalWebTest</context-root>
        </web>
      </module>
      <module>
        <ejb>MedicalEJB.jar</ejb>
      </module>
    </application>
    e persistence.xml
    codice:
    <?xml version="1.0" encoding="UTF-8"?>
    <persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persisten...stence_1_0.xsd">
    	<persistence-unit name="MedicalEJB" transaction-type="JTA">
    		<jta-data-source>MedicalMySQL</jta-data-source>
    		<class>
    		it.gobeyond.medical.model.Appuntamento</class>
    		<class>
    		it.gobeyond.medical.model.Cartella</class>
    		<class>
    		it.gobeyond.medical.model.Cliente</class>
    	</persistence-unit>
    </persistence>
    il datasource jta definito qui naturalmente c'è e funziona (uso glassfish).

    Dove sbaglio? la classe appuntamentoDAO non viene gestita da nessun container? non dovrebbe essercene uno che gestisce gli EJB?

  2. #2
    Utente di HTML.it L'avatar di kuarl
    Registrato dal
    Oct 2001
    Messaggi
    1,093
    a quanto pare è proprio come supponevo, il web container non gestisce i beans, ciò significa che non posso iniettare le dipendenze nei beans, a meno che non usi jsf, e purtroppo non è il mio caso.

    Bella limitazione eh... se solo si decidessero a rendere decenti ste jsf ci farei un pensierino...

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    43
    Prova ad usare NetBeans
    www.netbeans.org
    by yakino @doc

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.