Ich erhalte eine Nullpointer wenn die EntityManager
über Anmerkung PersistenceContext
PersistenceContext nicht Injizieren EntityManager
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
@Stateless
public class UserService {
@PersistenceContext(unitName = "jcrdb")
private EntityManager em;
...
}
Mein persistence.xml
in Pfad zuzugreifen versuchen src/main/webapp/META-INF
:
<?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="jcrdb" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<!-- <jta-data-source>jdbc/jcrdb</jta-data-source> -->
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties>
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.format_sql" value="true" />
<!-- this tell Hibernate to update the DDL when it starts, very useful
for development, dangerous in production -->
<property name="hibernate.hbm2ddl.auto" value="update" />
<property name="javax.persistence.logging.level" value="INFO" />
<property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver" />
<property name="javax.persistence.jdbc.url" value="jdbc:postgresql://127.0.0.1:5432/jcrdb" />
<property name="javax.persistence.jdbc.user" value="jcr_admin" />
<property name="javax.persistence.jdbc.password" value="q1w2e3r4" />
<!-- <property name="tomee.jpa.factory.lazy" value="true" />-->
</properties>
</persistence-unit>
</persistence>
Die User
-Klasse:
@Entity
@Table(name = "Users")
public class User {
@Id
@GeneratedValue(generator = "increment")
@GenericGenerator(name = "increment", strategy = "increment")
private int UserId;
private String alias;
private String email;
@OneToOne(fetch = FetchType.LAZY)
private Person person;
@OneToMany
private List<Role> roles;
public User() {
}
// constructor, getters, setters...
}
Es gibt kein Problem, das EntityManager direkt wie folgt erhalten:
EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("jcrdb");
em = entityManagerFactory.createEntityManager();
Ich habe versucht, dies in Steg und tomEE läuft.
Es scheint mir, dass das ejb-Zeug nicht funktioniert. Was fehlt mir hier (neu zu all dem)?
verwenden Sie Feder ?? Drucken Sie einen vollen Stapel-Trace, wenn Sie – goodyzain
haben Nein, ich benutze noch keinen Frühling. Der Stack-Trace zeigt nur die Initialisierungsmethoden meiner App und des Servers an. Die NPE ist die Ursache. – sotix
werfen Sie einen Blick auf diesen Link ... Ich denke, das Problem mit den Konfigurationen mit '@' statuslose Bean werfen Sie einen Blick auf http://stackoverflow.com/questions/8544935/problems-in-injecting-entity-manager-into- Stateless-Bean – goodyzain