Leider ist es das nicht. Die Klasse habe ich bereits in der persistence.xml angegeben.
In meinem letzten Beitrag habe ich die persistence.xml mitgepostet. Da ist die EntityBean bereits enthalten
Code:
<class>org.emetis.testejb3.server.accessteschd.AccessTeschdBean</class>
Ich habe allerdings ein anderes, für mich unverständliches Problem entdeckt.
(1.) PersistenceContext wird gar nicht definiert in der SessionBean
>> Deployement klappt
>> EntityBean ist bekannt, manager ist aber null
(2.) PersistenceContext-Definition (in der SessionBean) mit name
@PersistenceContext(name="harri_em")
>> Deployment funktioniert nicht da unitname nicht bekannt
>> JBoss: There is no default persistence unit in this deployment
(3.) PersistenceContext-Definition (in der SessionBean) mit unitName
@PersistenceContext(unitName="harri_em")
>> Deployment funktioniert nicht da name nicht bekannt
>> JBoss: JBoss requires name() for class level @PersistenceContext
(4.) PeristenceContext-Definition (in der SessionBean) mit namu UND unitName
@PersistenceContext(unitName="harri_em", name="harri_em")
>> Deployement klappt
>> EntityBean ist bekannt, manager ist aber null
>> Verhalten wie (1.)
Aber noch eine weitere Unklarheit gibt es. Wo muss @PersistenceContext eigentlich stehen? Vor der KlassenDefinition der SessionBean oder innerhalb der Klasse?
Vor der Klasse:
Code:
@Stateless
@PersistenceContext(unitName="harri_em", name="harri_em")
@Remote(org.emetis.testejb3.server.helloworld.HelloWorld.class)
public class HelloWorldBean implements HelloWorld, Serializable{
Innerhalb der klasse:
Code:
@PersistenceContext(unitName="harri_em", name="harri_em")
EntityManager manager;
public String createInstance(final AccessTeschdBean accessTeschdBean) throws RemoteException {
Innerhalb der Klasse bekomme ich eine weitere Verhaltensvariante
(5.) PeristenceContext innherhalb der Klasse mit unitName UND name
>> Deployment klappt
>> Entity nicht bekannt
Die Variante die "am ehesten" funktioniert ist die (1.) und (4.).
Vielleicht hole ich mir den EntityManager auch nicht richtig? Für mich EJB/hibernate laien sieht das nämlich nach normalem java Verhalten aus.
Es gibt keine Stelle im Code wo ich "aktiv" den Entitymanager setze.
Nicht sowas wie:
Code:
Entitymanager manager = BlaBla.megthodeXY();
hier mal mein code:
Code:
package org.emetis.testejb3.server.helloworld;
import java.io.PrintWriter;
import java.io.Serializable;
import java.io.StringWriter;
import java.rmi.RemoteException;
import javax.ejb.Remote;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import org.emetis.testejb3.server.accessteschd.AccessTeschdBean;
@Stateless
@Remote(org.emetis.testejb3.server.helloworld.HelloWorld.class)
public class HelloWorldBean implements HelloWorld, Serializable{
private static final long serialVersionUID = 5909166101546098024L;
public String getGreeting() throws RemoteException{
return "Servus Harri";
}
@PersistenceContext(unitName="harri_em", name="harri_em")
EntityManager manager;
public String createInstance(final AccessTeschdBean accessTeschdBean) throws RemoteException {
try{
System.out.println("AccessteschBean: "+accessTeschdBean.toString());
manager.persist(accessTeschdBean);
}
catch (Exception e) {
StringWriter sw = new StringWriter();
e.printStackTrace(new PrintWriter(sw, true));
return sw.toString();
}
return "OK";
}
}
Ich weiss langsam wirklich nicht mehr weiter! bin bald am Durchdrehen!
Ich kämpfe jetzt schon so lange mit diesem Problem!
Vielen Dank für jede Hilfe!
Gruß
der verzweifelte Harri E.