Не удается настроить постоянство для работы в JBoss AS 7 («Не удается найти модуль развертывания, указанный в подразделе») - PullRequest
5 голосов
/ 18 ноября 2011

Я пытаюсь реализовать демонстрацию, которая использует JBoss AS 7 со спящим режимом по умолчанию и базой данных по умолчанию, поставляемой с JBoss AS.Моя реализация похожа на пример входа в систему от JBoss (у меня есть несколько дополнительных проектов для реализации веб-службы и развертывания в качестве 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]

Мой MANIFEST.MF

Manifest-Version: 1.0
Dependencies: org.hibernate

Мой файл beans.xml пуст.В папке lib у меня есть jiber-файлы hibernate для доступа к собственным функциям hibernate.

My 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();
    }
}

Что может вызвать исключение?Что я должен искать, чтобы решить проблему?

Ответы [ 2 ]

8 голосов
/ 18 ноября 2011

Я нашел решение. Я должен поместить persistence.xml в папку META-INF проекта EAR . Если я сделаю это, я смогу использовать аннотацию @PersistenceContext, чтобы получить EntityManager. Я думаю, что это должно работать и в другом направлении. Похоже, это обходной путь, а не реальное решение.

0 голосов
/ 10 июня 2014

Вы должны определить ссылку на единицу сохраняемости в вашем web.xml файле myproject.persistence.war следующим образом

<persistence-unit-ref>
     <persistence-unit-ref-name>myprojectPersistenceUnit/pu</persistence-unit-ref-name>
     <persistence-unit-name>../myproject.name.jar#myprojectPersistenceUnit</persistence-unit-name>
</persistence-unit-ref>

Распространенной ошибкой при этом является неправильная запись ссылки на контент <persistence-unit-name>, это источник, генерирующий эту ошибку

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...