我是Java EE的新手。这是我要做的第一个项目,我遇到了一个我无法解决的问题。
我创建了三个项目:slowka-beans(EJB),slowka-persistance(JPA)和slowka-web(JSF)。在部署它们之后,我无法访问持久性单元 - EntityManager为null。一切正常 - 我可以创建bean,在它们实例化实体类并在JSF页面上显示它们。但是如何将它们存储在数据库中呢?我在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,结果相同。
能帮助你吗?
答案 0 :(得分:2)
不要从JSP调用EJB。从servlet中调用它们,然后使用@EJB
注入它们。
如果手动实例化对象,则不会进行注入。对象(ejb)必须由EJB容器实例化。