2014-11-20 34 views
1

我創建了一個包裝jar包的maven實用程序項目,其中我實現了EntityManager接口來管理數據庫連接和內容。但是當我想用@Inject使用它(從另一個Maven項目)它不起作用。從其他項目註冊EntityManager

有沒有一種方法來指定我想使用哪個EntityManager實現?

重要提示:如果我在主項目中包含此EntityManager,它將起作用。但我試圖避免這種情況,因爲將來我會有其他項目使用同一個數據庫。

這是我的例外。

org.jboss.weld.exceptions.DeploymentException:WELD-001408預約等待依賴關係式[EntityManager的]與在注射點[[字段] @注入私人com.gtwpedidos.test.CanalSurDao.em限定符[@default] ] at org.jboss.weld.bootstrap.Validator.validateInjectionPoint(Validator.java:275) at org.jboss.weld.bootstrap.Validator.validateInjectionPoint(Validator.java:244) at org.jboss.weld.bootstrap .Validator.validateBean(Validator.java:107) at org.jboss.weld.bootstrap.Validator.validateRIBean(Validator.java:127) at org.jboss.weld.bootstrap.Validator.validateBeans(Validator.java:346 ) at org.jboss.weld.bootstrap.Validator.validateDeployme nt(Validator.java:331) at org.jboss.weld.bootstrap.WeldBootstrap.validateBeans(WeldBootstrap.java:366) at org.jboss.as.weld.WeldContainer.start(WeldContainer.java:83) at org.jboss.as.weld.services.WeldService.start(WeldService.java:76) at org.jboss.msc.service.ServiceControllerImpl $ StartTask.startService(ServiceControllerImpl.java:1811) at org.jboss.msc。 Service.ServiceControllerImpl $ StartTask.run(ServiceControllerImpl.java:1746) at java.util.concurrent.ThreadPoolExecutor $ Worker.runTask(ThreadPoolExecutor.java:895) at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor。 java:918) at java.lang.Thread.run(Thread.java:695)

回答

0

我認爲,這樣做的正確方法是:

  • 1:使你的實用工具項目是EJBEJB內與@PersistenceContext註解注入你EntityManager。這樣,EntityManager將由EJB處理,即當例如@Stateless bean被創建並且銷燬@Stateless bean時銷燬EntityManager。

  • 第二:

    UTILITY EJB

    @Stateless(name="UtilityEJB", mappedName="UtilityEJBGlobal") 
    public class UtilityEJB 
    { 
    
        @PersistenceContext(unitName = "PRIMARY_PERSISTENCE_UNIT") 
        public EntityManager em; 
    
        //other stuff ...... 
    } 
    

    ,主要項目:注射使用@EJB註釋

粗糙例如您在您的主項目的EJB utility EJB

@Stateless 
public class Main 
{ 

    @EJB(mappedName="UtilityEJBGlobal") 
    private UtilityEJB utilityEJB ; 

    //other stuff ...... 

} 

在我而言,我不得不使用映射namings爲了我的主要項目,找到已部署EJB,並在主要的一個注入它。

希望它有幫助

+0

感謝您的快速回復。我現在就試試吧! – Hugo 2014-11-20 19:01:56