문제 설명
JBoss 5.1의 Java EE 빈에서 빈 EntityManager (Empty EntityManager in Java EE bean on JBoss 5.1)
저는 Java EE의 초보자입니다. 이것은 제가 하려고 하는 첫 번째 프로젝트이고 해결할 수 없는 문제가 있습니다.
저는 세 개의 프로젝트를 만들었습니다. slowka‑beans(EJB), slowka‑persistance(JPA ) 및 slowka‑web(JSF). 배포한 후에는 지속성 단위에 액세스할 수 없습니다. EntityManager는 null입니다. 모든 것이 잘 작동합니다. 빈을 만들고 그 안에 엔티티 클래스를 인스턴스화하고 JSF 페이지에 표시할 수 있습니다. 하지만 DB에 어떻게 저장할 수 있습니까? JBoss 사이트에 MySQL 데이터베이스가 구성되어 있습니다.
내가 가지고 있는 코드는 다음과 같습니다. LanguagesManager.java(slowka‑beans)
@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
JSP에서 LanguagesManager::getWorking()
에 액세스할 때마다 "Not working..." 출력이 나타납니다.
프로젝트를 만들었습니다. Eclipse에서 JPA는 EclipseLink를 사용하고 있습니다. 동일한 결과로 EclipseLink 1.1.4 및 2.1.0을 모두 시도했습니다.
도와 주시겠습니까?
참조 솔루션
방법 1:
Don't call EJBs from JSPs. Call them from servlets, where you inject them with @EJB
.
If you instantiate the object manually, then injection does not happen. The object (ejb) must be instantiated by the EJB container.