当前位置: 首页 > 知识库问答 >
问题:

从其他项目注册EntityManager

丰俊艾
2023-03-14

我创建了一个带有jar打包的maven实用程序项目,在该项目中,我实现了EntityManager接口来管理数据库连接和其他内容。但当我想(从另一个maven项目)将其与@Inject一起使用时,它就不起作用了。

有没有办法指定要使用哪个EntityManager实现?

重要提示:如果我在主项目中包含这个实体管理器,它是有效的。但是我正在努力避免这种情况,因为将来我会有其他项目使用相同的数据库。

这是我的例外。

组织。jboss。焊接例外。DeploymentException:WELD-001408在注入点[[field]@Inject private com处具有限定符[@Default]的[EntityManager]类型的未满足依赖项。gtwpedidos。测验卡纳萨尔道。em]在org上。jboss。焊接独自创立验证器。validateInjectionPoint(Validator.java:275)位于org。jboss。焊接独自创立验证器。validateInjectionPoint(Validator.java:244)位于org。jboss。焊接独自创立验证器。validateBean(Validator.java:107)位于org。jboss。焊接独自创立验证器。validateRIBean(Validator.java:127)位于org。jboss。焊接独自创立验证器。validateBeans(Validator.java:346)位于org。jboss。焊接独自创立验证器。validateDeployment(Validator.java:331)位于org。jboss。焊接独自创立WeldBootstrap。org上的validateBeans(WeldBootstrap.java:366)。jboss。像焊接焊接容器。在org上启动(WeldContainer.java:83)。jboss。像焊接服务。焊接服务。在org上启动(WeldService.java:76)。jboss。理学硕士。服务ServiceControllerImpl$StartTask。startService(ServiceControllerImpl.java:1811)位于org。jboss。理学硕士。服务ServiceControllerImpl$StartTask。在java上运行(ServiceControllerImpl.java:1746)。util。同时发生的ThreadPoolExecutor$Worker。java上的runTask(ThreadPoolExecutor.java:895)。util。同时发生的ThreadPoolExecutor$Worker。在java上运行(ThreadPoolExecutor.java:918)。朗。丝线。run(Thread.java:695)

共有1个答案

松烨烨
2023-03-14

我认为正确的方法是:

>

  • 第一:让你的实用程序项目成为一个EJB,在这个EJB中,用@PersistenceContext注释注入你的EntityManager。通过这种方式,EJB将处理EntityManager,例如,当创建@Statelessbean时创建EntityManager,当销毁@Statelessbean时销毁EntityManager。

    第二:使用@EJB注释,将实用程序EJB注入主项目的EJB中

    粗糙的例子:

    实用程序EJB

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

    主要项目

    @Stateless
    public class Main
    {
    
        @EJB(mappedName="UtilityEJBGlobal")
        private UtilityEJB utilityEJB ;
    
        //other stuff   ......
    
    }
    

    在我的例子中,为了让我的主项目找到已经部署的EJB,并将其注入主项目,我必须使用映射的名称。

    希望有帮助

  •  类似资料:
    • 我有两个项目,一个为用户,另一个为部门。 现在,我想从另一个REST API调用REST API。我怎么打电话? 我面临的问题是,部门不提供与用户相关的类,反之亦然。 这是我的UserController类。 这是我的DepartmentController类。 请告诉我如何在getDept()中调用getUser()方法,以及如何使类彼此可用。

    • 因此,我有一个Project1与类A。我有Project2与类B。如何将类A导入到B,而不必在Project2等中创建一个新类。我知道这与构建路径有关,但是我如何添加,以便我可以编写类似于导入Project1/A;的东西?

    • 在我的一个Vaadin视图中,我试图通过使用@Inject注入驻留在另一个项目(bll)中的业务对象来获取它。 瓦丁观点: 我不能这样做,当然,bananaService对象在运行时是空的,因为我没有地方对包进行组件扫描。 我正在使用注释,所以我没有web.xml在我的Vaadin Web项目中,我甚至没有WEB-INF文件夹。 我也知道有一些替代方案,比如CDI-Utils和Vaadin CDI

    • 我使用选择调用手风琴项目,如http://jsfiddle.net/Rnfzz/1/ 但是,当我从选择框中选择一个项目时,其他打开的手风琴项目不会自动隐藏。如何隐藏其他手风琴项目,以便仅显示单击的手风琴项目?。 这是html C-1 Anim pariatur cliche reprehenderit,enim eiusmod high life accusamus terry richardso

    • 我有两个Maven(GWT)项目,其中一个应该依赖于另一个。我只是添加了依赖项,比如: 这些类被正确引用,我可以在我的其他项目中使用它们。但如果我想触发maven构建,它会抱怨:“无法解析项目的依赖项:找不到工件myGroup:MyArtifact:jar:1.0-SNAPSHOT” 该项目没有jar,因为它是一个GWT Web应用程序。它有一个“战争”档案。我测试了一下论点,尝试了“pom”或“