0 Replies Latest reply on Dec 18, 2007 1:22 PM by chane

    Dependency Injection in Domain Model / Seam / Hibernate / Gu

      I have a fairly standard architecture for my application. I'm using SFSB/SLSB Seam components with IN/OUT injection. These methods call the EntityManager (e.g., find()) to interact with the database.

      @Name("seam.editor")
      @Stateful
      public class SeamEditor implements ISeamEditor{
       @In EntityManager em;
      
       @Out DomainModelObject dmo;
       public String executeAction(){
       dmo = em.find(DomainModelObject.class, new Long(9));
       dmo.performSomeAction();
       }
      }
      


      Deep in the object graph returned by the the EntityManager, a domain model object sometimes needs to call a service to obtain another resource. Right now, these services are static method calls.

      @Entity
      public class DeepDomainObject{
      
       private long id;
      
       public String calculateSomething(){
       ..snip...
      
       String resut = DAService.getSomeInformationFromAnotherService();
      
       ..snip...
       }
      
      }
      


      The domain object is created by the EntityManager (using Jboss 4.0.x) via lazy loading using (or eager fetching). So there isn't any DI injection from Seam of the EJB (3) container. And I'm pretty sure I don't want it to come from the container as we want to run unit tests outside the container (which will not hit the db).

      We've now run into the unit testing issue that we want to mock out the static method call. We're exploring different options (Factory creation) and different DI mechanisms.

      What have others done? Does anyone have experience with Guice in this type of situation?

      Thanks in advance,
      Chris....