java - 无法在 JBoss AS 7 ("Can' 中获得持久性 t 找到名为 subdeployment 的部署单元”)

标签 java hibernate jboss7.x

我尝试实现一个演示,该演示使用 JBoss AS 7,默认 hibernate 和 JBoss AS 附带的默认数据库。我的实现类似于 JBoss 的“登录”示例(我有一些额外的项目来实现 Web 服务并部署为 EAR),但我看不出区别。无论如何,我经常遇到运行时异常,例如

Caused by: java.lang.RuntimeException: Can't find a deployment unit named  at subdeployment "myproject.persistence.war" of deployment "myproject.ear"
    at org.jboss.as.weld.services.bootstrap.WeldJpaInjectionServices.getScopedPUName(WeldJpaInjectionServices.java:94) [jboss-as-weld-7.0.2.Final.jar:7.0.2.Final]
    at org.jboss.as.weld.services.bootstrap.WeldJpaInjectionServices.resolvePersistenceContext(WeldJpaInjectionServices.java:59) [jboss-as-weld-7.0.2.Final.jar:7.0.2.Final]
    at org.jboss.weld.util.Beans.injectEEFields(Beans.java:784) [weld-core-1.1.2.Final.jar:2011-07-26 15:02]

我的 list .MF

Manifest-Version: 1.0
Dependencies: org.hibernate

我的 beans.xml 是空的。在我的 lib 文件夹中,我有 hibernate jar 可以访问 native hibernate 功能。

我的persistence.xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence 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/persistence/persistence_2_0.xsd"
    version="2.0">
    <persistence-unit name="accessControlDatabase">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <jta-data-source>java:jboss/datasources/ExampleDS</jta-data-source>
        <properties>
            <property name="hibernate.hbm2ddl.auto" value="create-drop" />
        </properties>
    </persistence-unit>
</persistence>  

还有我的两个相关类:

import javax.enterprise.inject.Produces;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

public class Resources {
    @SuppressWarnings("unused")
    @Produces
    @PersistenceContext(name = "accessControlDatabase")
    private EntityManager em;
}

import java.util.List;

import javax.enterprise.context.RequestScoped;
import javax.inject.Inject;
import javax.inject.Named;
import javax.persistence.EntityManager;

import myproject.model.Session;
import myproject.model.User;

@Named("accessControlRepository")
@RequestScoped
public class AccessControlRepository {
    @Inject
    private EntityManager em;

    @SuppressWarnings("unchecked")
    public List<Session> getAllSessions() {
        return em.createQuery("from Session").getResultList();
    }
}

什么会导致异常?我应该寻找什么来解决问题?

最佳答案

我找到了解决办法。我必须将 persistence.xml 放入 EAR 项目的 META-INF 文件夹中。如果这样做,我可以使用 @PersistenceContext 注释来访问 EntityManager。我认为它也应该以另一种方式起作用。这似乎是一种变通方法,而不是真正的解决方案。

关于java - 无法在 JBoss AS 7 ("Can' 中获得持久性 t 找到名为 subdeployment 的部署单元”),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8179755/

相关文章:

java - 如何在java中加入一个线程与另一个线程?

java - 作为 javassist 注释成员的注释数组

java - 在 Jboss 7.1.1 中外部化 MDB 配置

java - Maven Dropwizard 中的 Hibernate 数据库连接错误

java - 无法在 Jboss EAP7 EAP 中上传我的 Web 应用程序

java - 如何解决org.hibernate.MappingException?

java - 在 Web 容器外的 Java 6 中使用 Guice 3 和 JAX-WS

java - Couchbase 在 Java 中批量检索多个 key

java - 为什么当我按下 JFrame 时,焦点永远不会从我的组件中丢失?

java - JPA:列在其父级中应该是唯一的。