Пустой EntityManager в Java EE bean на JBoss 5.1 - PullRequest
1 голос
/ 01 декабря 2010

Я новичок в Java EE. Это первый проект, который я пытаюсь сделать, и у меня есть проблема, которую я просто не могу решить.

Я создал три проекта: slowka-bean (EJB), slowka-persistance (JPA) и slowka-web (JSF). После их развертывания я не могу получить доступ к единице персистентности - EntityManager имеет значение null. Все отлично работает - я могу создавать бины, внутри них создавать экземпляры классов сущностей и показывать их на странице JSF. Но как я могу хранить их в БД? У меня настроена база данных MySQL на сайте JBoss.

Код, который у меня есть, выглядит следующим образом: LanguagesManager.java (в замедленных бобах)

@Stateless
public class LanguagesManager implements LanguagesManagerLocal {

    @PersistenceContext(unitName="slowka-persistance")
    private EntityManager em;

    public LanguagesManager() {
        System.out.println("LanguagesManagerBean constructor");
    }

    public String getWorking() {
        if(em == null) {
            System.out.println("Not working...");
            return "Not working...";
        } else {
            System.out.println("It's ALIVE!");
            return "It's ALIVE!";
        }
    }
}

persistence.xml (slowka-persistance):

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0" 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_1_0.xsd">
    <persistence-unit name="slowka-persistance">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <jta-data-source>java:/PraktykiDS</jta-data-source>
        <class>pl.edu.uj.sobczak.szymon.Language</class>
    </persistence-unit>
</persistence>

Развертывание этого на сервере не вызывает никаких исключений. но я заметил следующие предупреждения в выводе сервера:

23:02:23,801 INFO  [PersistenceUnitDeployment] Starting persistence unit persistence.unit:unitName=slowka.ear/slowka-persistance.jar#slowka-persistance
23:02:23,803 INFO  [Ejb3Configuration] Processing PersistenceUnitInfo [
    name: slowka-persistance
    ...]
23:02:23,804 WARN  [Ejb3Configuration] Persistence provider caller does not implement the EJB3 spec correctly. PersistenceUnitInfo.getNewTempClassLoader() is null.
(... trimmed ...)
23:02:23,868 INFO  [SessionFactoryObjectFactory] Bound factory to JNDI name: persistence.unit:unitName=slowka.ear/slowka-persistance.jar#slowka-persistance
23:02:23,868 WARN  [SessionFactoryObjectFactory] InitialContext did not implement EventContext

Каждый раз, когда я получаю доступ к LanguagesManager::getWorking() из JSP, я получаю вывод "Не работает ...".

Я создал проект в Eclipse, JPA использует EclipseLink. Я пробовал оба - EclipseLink 1.1.4 и 2.1.0 с тем же результатом.

Можете ли вы помочь мне?

1 Ответ

2 голосов
/ 01 декабря 2010

Не вызывайте EJB из JSP. Позвоните им из сервлетов, где вы вводите их с @EJB.

Если вы создаете экземпляр объекта вручную, тогда внедрение не произойдет. Объект (ejb) должен быть создан контейнером EJB.

...