Hallo,
ich verwenden Netbeans und habe als mein Hauptprojekt ein Webprojekt mit einem
Glassfish (3.1.2) Webservice angelegt. Dieses Projekt dient mir als Projektbasis. Derzeit gibt es zwei weitere Projekte. Ein Interfaceprojekt (definiert das WS-Interface) und einem Managerprojekt.
Die Hauptklasse des Managerprojekts wird mittels
Spring in den Webservice injiziert.
Das Managerprojekt übernimmt die Datenspeicherung. Die wollte ich mit der
JPA umsetzten.
Dafür hat der Manager diverse Instanzen wie diese:
Java Code:
1
| @EJB DataObjectFacade dataObjectDao; |
Diese werden bereits nicht automatisch befüllt und es kommt zu NullPointerExceptions.
Das gleiche gilt auch wenn ich diese mittels
Spring bereits injiziere für den EntityManager von
Java Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
18
19
20
21
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
| @Stateless
public class DataObjectFacade extends AbstractFacade<DataObject> {
@PersistenceContext
private EntityManager em;
@Override
protected EntityManager getEntityManager() {
return em;
}
public DataObjectFacade() {
super(DataObject.class);
}
}
/**
* Autogenerierte Klasse
*/
public abstract class AbstractFacade<T> {
private Class<T> entityClass;
public AbstractFacade(Class<T> entityClass) {
this.entityClass = entityClass;
}
protected abstract EntityManager getEntityManager();
public void create(T entity) {
getEntityManager().persist(entity);
}
public void edit(T entity) {
getEntityManager().merge(entity);
}
public void remove(T entity) {
getEntityManager().remove(getEntityManager().merge(entity));
}
public T find(Object id) {
return getEntityManager().find(entityClass, id);
}
public List<T> findAll() {
javax.persistence.criteria.CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery();
cq.select(cq.from(entityClass));
return getEntityManager().createQuery(cq).getResultList();
}
public List<T> findRange(int[] range) {
javax.persistence.criteria.CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery();
cq.select(cq.from(entityClass));
javax.persistence.Query q = getEntityManager().createQuery(cq);
q.setMaxResults(range[1] - range[0]);
q.setFirstResult(range[0]);
return q.getResultList();
}
public int count() {
javax.persistence.criteria.CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery();
javax.persistence.criteria.Root<T> rt = cq.from(entityClass);
cq.select(getEntityManager().getCriteriaBuilder().count(rt));
javax.persistence.Query q = getEntityManager().createQuery(cq);
return ((Long) q.getSingleResult()).intValue();
}
} |
Das Managerprojekt ist als Bibliothek angelegt und wird direkt als Projektreferenz in dem Webprojekt referenziert. Die persistence.
xml liegt im Webprojekt - im Managerprojekt ist keine enthalten (da ich sie dort nicht benötige).
Wenn jemand damit Erfahrungen hat oder eine Idee wieso die Instanzen nicht automatisch erzeugt werden, würde ich mich über die Hilfe freuen.
Danke und viele Grüße