2015-10-19 5 views
8

Я использую Wildfly 8.1 вместе с EJB Project (EJB 3.2), содержащим объекты. При попытке привнести Entity менеджера в один из моих Фасоль я получаю следующее:Почему единица persistence имеет значение null, когда существует persistence.xml

JBAS011440: Can't find a persistence unit named null in deployment \"EntitiesProject.jar\""}, 
"JBAS014771: Services with missing/unavailable dependencies" => [ 
    "jboss.deployment.unit.\"EntitiesProject.jar\".weld.weldClassIntrospector is missing [jboss.deployment.unit.\"EntitiesProject.jar\".beanmanager]", 
    "jboss.naming.context.java.comp.EntitiesProject.EntitiesProject.MitarbeiterDAO.HandleDelegate is missing [jboss.naming.context.java.comp.EntitiesProject.EntitiesProject.MitarbeiterDAO]", 
    "jboss.naming.context.java.comp.EntitiesProject.EntitiesProject.MitarbeiterDAO.InstanceName is missing [jboss.naming.context.java.comp.EntitiesProject.EntitiesProject.MitarbeiterDAO]", 
    "jboss.naming.context.java.comp.EntitiesProject.EntitiesProject.MitarbeiterDAO.InAppClientContainer is missing [jboss.naming.context.java.comp.EntitiesProject.EntitiesProject.MitarbeiterDAO]", 
    "jboss.naming.context.java.comp.EntitiesProject.EntitiesProject.MitarbeiterDAO.Validator is missing [jboss.naming.context.java.comp.EntitiesProject.EntitiesProject.MitarbeiterDAO]", 
    "jboss.naming.context.java.comp.EntitiesProject.EntitiesProject.MitarbeiterDAO.ORB is missing [jboss.naming.context.java.comp.EntitiesProject.EntitiesProject.MitarbeiterDAO]", 
    "jboss.naming.context.java.comp.EntitiesProject.EntitiesProject.MitarbeiterDAO.ValidatorFactory is missing [jboss.naming.context.java.comp.EntitiesProject.EntitiesProject.MitarbeiterDAO]" 
] 

Это мой SessionBean, где я пытаюсь привнести EntityManager:

@Stateless 
public class MitarbeiterDAO implements MitarbeiterDAORemote { 

    @PersistenceContext 
    private EntityManager em; 

    public int writeMitarbeiterToDB(Mitarbeiter m) 
    { 
     em.persist(m); 
     return m.getId(); 
    } 
} 

Я указанный следующий persistence.xml файл который я назвал «project-name»/ejbModule/META-INF.

<persistence-unit name="mitarbeiter"> 
    <provider>org.hibernate.ejb.HibernatePersistence</provider> 
     <jta-data-source>java:jboss/datasources/MySqlDS</jta-data-source> 
    <properties> 
     <property-name="hibernate.hbm2ddl.auto" value="create-drop"/> 
    </properties> 
</persistence-unit> 

Подобные вопросы и их решения

  • Can't find persistence unit предлагает включать в persistence.xml
  • Injecting entityManager in Wildfly/Jboss указывает на то, что там может быть другой каталог, где мой persistence.xml принадлежит. Я пробовал этот каталог, но все же получил то же сообщение об ошибке.
  • Cannot find persistence unit from persistence.xml Хотя это не точно такой же вопрос, решение было добавить <provider> к persistence.xml, но это тоже не работает для меня

Update (см комментарии):
- I попытались использовать @EntityManager(unitName="mitarbeiter") вместо чуть @EntityManager - The Bean Session показано выше, является единственным местом, где я пытаюсь придать EntityManager

Update 2 (см комментарии ответа):

  • persistence.xml находится в каталоге Project/ejbModule/META-INF/
  • Этот каталог входит в путь сборки
  • Как-то он не получает развернуты в то время как другие файлы в том же каталоге, (до jar/META-INF/). Если я копирую &, вставьте его вручную, он будет работать. Почему это?

Любая помощь и советы приветствуются.

+0

Вы пробовали указания unitName' необязательное свойство 'на вашем' @ PersistenceContext' аннотацию? –

+0

yes Я попытался использовать '@PersistenceContext (unitName =" mitarbeiter ")' вместо просто '@ PersistenceContext'. – Jbartmann

+0

OK, только проверка. Это не должно быть необходимым, если не существует более одной единицы постоянства. –

ответ

6

Несколько возможных вопросов:

  • Неправильное расположение файла persistence.xml. Поместите его в каталог META-INF/ в корень архива. Если вы используете maven, это будет src/main/resources/META-INF/persistence.xml.
  • Invalid persistence.xml файл: у вас есть persistence-unit тег закрыт в строке <persistence-unit name="mitarbeiter"/> (пожалуйста, обратите внимание / в конце)
  • <property-name="hibernate.hbm2ddl.auto" value="create-drop"/> является недействительным. Я полагаю, вы хотели: <property name="hibernate.hbm2ddl.auto" value="create-drop" />
  • также используемый вами поставщик устарел.

В общем, правильный persistence.xml контент для JPA 2.1 в вашем случае должна выглядеть следующим образом:

<?xml version="1.0" encoding="UTF-8"?> 
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd" 
    version="2.1"> 

    <persistence-unit name="mitarbeiter"> 
    <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider> 
    <jta-data-source>java:jboss/datasources/MySqlDS</jta-data-source> 

    <properties> 
     <property name="hibernate.hbm2ddl.auto" value="create-drop" /> 
    </properties> 
    </persistence-unit> 
</persistence> 
+0

Спасибо, это мне очень помогло! Я больше не видел таких вещей после поиска решения часами! Это приблизило меня к решению: 'persistence.xml' находится в правильном каталоге, насколько мне известно:' Projektname/ejbModule/META-INF', но он не получает работу, а что-то еще в этом каталоге. Если я копирую и вставляю его вручную, он работает. Что это может быть? – Jbartmann

+0

@Jbartmann, вероятно, каталог не добавлен в качестве исходного местоположения в вашем пути к классу сборки. – Atul

+0

Что я делаю: Проект Rightclick -> Путь сборки -> Настроить путь сборки -> Путь сборки Java -> Источник. Существует элемент 'Project/ejbModule' с' Included: All'. Я изменил его на «Включено: {выбрано все папки, включая META-INF}». Все еще не развертывает мой persistence.xml. Это то, о чем вы говорили? Я все еще могу запустить его только с помощью копирования и вставки вручную. Как только я сделаю rightclick на сервере -> очистить, он будет удален. – Jbartmann

 Смежные вопросы

  • Нет связанных вопросов^_^