[jboss-user] [JBoss Seam] - Seam - Embedded Ejb - Logger

philippe.mercier do-not-reply at jboss.com
Tue May 22 11:00:01 EDT 2007


Hi everybody,

I use embedded-ejb with testng (tests are launch via maven2 - surefire).
All work fine !

Now i would like to use @Logger in my session bean as this :


  | @Stateless
  | public class DossierManagerImpl implements DossierManagerLocal {
  | 
  | 	@Logger
  | 	private Log logger;
  | 	
  | 	@PersistenceContext
  | 	private EntityManager em;
  | 
  | 	/**
  | 	 * Constructeur vide
  | 	 */
  | 	public DossierManagerImpl() {
  | 	}
  | 
  | 	/**
  | 	 * Constructeur pour les tests
  | 	 * @param em
  | 	 */
  | 	public DossierManagerImpl(EntityManager em) {
  | 		this.em = em;
  | 	}
  | 
  | 	/*
  | 	 * (non-Javadoc)
  | 	 * @see be.ucm.ss.comptaclient.c397.session.DossierManagerLocal#insert(be.ucm.ss.comptaclient.c397.entity.Dossier)
  | 	 */
  | 	public void insert(Dossier ccDossier) {
  | 		logger.debug("insert dossier : nune = " + ccDossier.getNune());
  | 		em.persist(ccDossier);
  | 	}
  | 
  | 	/*
  | 	 * (non-Javadoc)
  | 	 * @see be.ucm.ss.comptaclient.c397.session.DossierManagerLocal#update(be.ucm.ss.comptaclient.c397.entity.Dossier)
  | 	 */
  | 	public void update(Dossier ccDossier) {
  | 		em.merge(ccDossier);
  | 	}
  | 
  | 	/*
  | 	 * (non-Javadoc)
  | 	 * @see be.ucm.ss.comptaclient.c397.session.DossierManagerLocal#findAll()
  | 	 */
  | 	@SuppressWarnings("unchecked")
  | 	public List<Dossier> findAll() {
  | 		Query q = (Query) em.createQuery("from Dossier");
  | 		return q.getResultList();
  | 	}
  | 
  | 	/*
  | 	 * (non-Javadoc)
  | 	 * @see be.ucm.ss.comptaclient.c397.session.DossierManagerLocal#findFromNune(java.lang.String)
  | 	 */
  | 	public Dossier findFromNune(String nune) {
  | 		System.out.println(nune);
  | 		Dossier dossier = em.find(Dossier.class, nune);
  | 		return dossier;
  | 	}
  | 
  | }
  | 


but when my test class call the "insert" method of the session bean, i have an NullPointerException at the line that reference the logger. 

here is my Test class :

  | package be.ucm.ss.comptaclient.c397.session;
  | 
  | import java.util.List;
  | 
  | import javax.persistence.EntityManager;
  | 
  | import org.testng.annotations.Test;
  | 
  | import be.ucm.ss.comptaclient.c397.entity.Dossier;
  | import be.ucm.util.EmbeddedEjbHandler;
  | 
  | @Test
  | public class DossierManagerImplTest {
  | 	public void testInsert() {
  | 		EntityManager em = EmbeddedEjbHandler.getInstance().getEntityManager();
  | 		em.getTransaction().begin();
  | 		
  | 	    Dossier d = new Dossier();
  | 	    d.setNune("1234567890");
  | 	    d.setNumonss("123456789");
  | 	    d.setDossiermaitre("12345");
  | 	    d.setNumsuccu("123");
  | 	    d.setGestionnairecompta("PHILOU");
  | 	    d.setAdresseonss1("adr1");
  | 	    d.setAdresseonss2("adr2");
  | 	    d.setAdresseonss3("adr3");
  | 	    d.setAdresseonss4("adr4");
  | 	    d.setAdresseonss4("adr5");
  | 	    d.setAdresseonss4("adr6");
  | 	    d.setAdresseonss4("adr7");
  | 	    d.setAdresseonss4("adr8");
  | 	    
  | 	    DossierManagerImpl dmi = new DossierManagerImpl(em);
  | 	    dmi.insert(d);
  | 		em.getTransaction().commit();
  | 	    
  | 	    Dossier dossier = dmi.findFromNune(d.getNune());
  | 	    assert dossier.getNune().equals(d.getNune()) : "test failed"; 
  | 	    
  | 		em.close();
  | 	}
  | 
  | 	public void testFindAll() throws Exception {
  | 		EntityManager em = EmbeddedEjbHandler.getInstance().getEntityManager();
  | 		em.getTransaction().begin();
  | 		
  | 		System.out.println("testFindAll()");
  | 	    DossierManagerImpl dmi = new DossierManagerImpl(em);
  | 	    List<Dossier> list = dmi.findAll();
  | 		assert list != null && !list.isEmpty();
  | 		
  | 		em.getTransaction().commit();
  | 		em.close();
  | 	}
  | 	
  | 	public void testUpdate() {
  | 		EntityManager em = EmbeddedEjbHandler.getInstance().getEntityManager();
  | 		em.getTransaction().begin();
  | 
  | 		System.out.println("testUpdate()");
  | 	    DossierManagerImpl dmi = new DossierManagerImpl(em);
  | 	    Dossier dossier = dmi.findFromNune("1234567890");
  | 	    
  | 	    // update
  | 	    dossier.setAdresseonss1("mon adresse");
  | 		em.merge(dossier);
  | 		em.getTransaction().commit();
  | 		
  | 		// reload & check
  | 		dossier = dmi.findFromNune("1234567890");
  | 		assert dossier.getAdresseonss1().equals("mon adresse");
  | 		
  | 		em.close();
  | 	}
  | }
  | 


Than, my questions are :

1) how can i inject a reference to a logger in the session bean.
what is the best practice

2) in my session bean, i must add a constuctor for giving the entity manager and that only for test. Is there an alternative to do that ?

Thanks.

View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4047617#4047617

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4047617



More information about the jboss-user mailing list