update mit JPA
Ich m mit glassfish v2 und Persistenz in einer web-Anwendung.
I m Aufruf persistence-codes unter Verwendung einer normalen java-Klasse-Datei in eine web-Anwendung
Kann ich wählen Sie einfach mit diesem code: -
@PersistenceUnit
public EntityManagerFactory emf;
EntityManager em;
public List fname (String id) {
String fname = null;
List persons = null;
//private PersistenceManagerFactory persistenceManagerFactory;
try {
emf = Persistence.createEntityManagerFactory("WebApplicationSecurityPU");
em = emf.createEntityManager();
persons = em.createQuery("select r from Roleuser r").getResultList();
int i=0;
for (i=0;i<persons.size(); i++)
System.out.println("Testing n "+ i +" " + persons.get(i));
} catch(Exception e) {
System.out.println("" + e);
}
finally {
if(em != null) {
em.close();
}
}
return persons;
}
Ich soll das update mit JTA als die persistence.xml die Datei hat
transaction-type="JTA"
Wenn ich versuche das update mit diesem code bekomme ich eine nullPointerException, ohne irgendwelche Spuren in den log -
@PersistenceUnit
public EntityManagerFactory emf;
EntityManager em;
Context context;
@Resource
private UserTransaction utx;
public List fname (String id) {
String fname = null;
List persons = null;
try {
emf = Persistence.createEntityManagerFactory("WebApplicationSecurityPU");
utx.begin();
em = emf.createEntityManager();
int m = em.createQuery("update Roleuser r set r.firstName = 'Jignesh I' where r.userID=9").executeUpdate();
utx.commit();
} catch(Exception e) {
System.out.println("" + e);
}
finally {
if(em != null) {
em.close();
}
}
return persons;
}
Jede Hilfe
Dank
Pradyut
Was ist die Klasse, in die Sie versuchen zu bekommen, dass
wie wollen Sie initialisieren
ich habe nicht initialisieren utx!!!.... ich suchte, aber konnte Sie nicht finden, einen code....jede Hilfe
ich erhalte nur eine nullPointerException, ohne irgendwelche Spuren im log
UserTransaction
injiziert? Auch, bitte, fügen Sie den vollständigen stacktrace...wie wollen Sie initialisieren
utx
?ich habe nicht initialisieren utx!!!.... ich suchte, aber konnte Sie nicht finden, einen code....jede Hilfe
ich erhalte nur eine nullPointerException, ohne irgendwelche Spuren im log
InformationsquelleAutor Pradyut Bhattacharya | 2010-02-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
sowie der code sollte ohne Alpträume...(atleast für mich in glassfish)
mit der persistence.xml mit
den code
Verbesserungen sind willkommen...(eigentlich benötigt...)
(Wie man über die Verwendung von @PersistenceContext)
Dank
Pradyut
InformationsquelleAutor Pradyut Bhattacharya
createEntityManager()
injizieren, eine über@PersistenceContext
PersistenceUnit
, aber dann re-ordnen Sie dieetm
- ich würde vorschlagen, fallen beide und siehe p2 oben.Wenn Sie sich nicht mit jedem dependecy injection ist, dann fallen alle Anmerkungen, behalten Sie den aktuellen code ein, und geben Sie ein:
(und definieren
RESOURCE_LOCAL
in Ihrem persistence.xml. Sie wirklich nicht brauchen, JTA)Es gibt Möglichkeiten, aber Sie brauchen Sie nicht. Und Sie sind zu Komplex. An diese für jetzt. Können Sie immer google für JTA und Lesen, aber du musst sehr viel Lesen 😉
omg!!!!!... ich konnte nicht reaaly bekommen wats passiert, aber ohne diese würde der code nicht ausgeführt, @PersistenceUnit public EntityManagerFactory emf; EntityManager em; @Resource
es wird nicht kompiliert, vielleicht. Ich sagte entfernen Sie die Beschriftungen nur, nicht die Variablen selbst.
ha ha ... natürlich nicht die Variablen, sondern die Annotationen @PersistenceUnit und @Resource benötigt werden.... ohne die @Resource es Fehler gibt... Internal Exception: java.sql.SQLException: [Microsoft][ODBC Driver Manager] name der Datenquelle nicht gefunden und kein Standardtreiber angegeben Error Code: 0 jetzt, wo nicht an odbc und microsoft kommt.. ich m mit mySQL...omG!!!!!
InformationsquelleAutor Bozho
Ihre "normale" Klasse ist sehr wahrscheinlich nicht ein verwalteten Komponente d.h. eine Klasse, deren Lebenszyklus verwaltet die container (wie Servlets, Servlet-Filter, JSP-tag-Handler, JSF Managed Beans, ...) und kann nicht profitieren von Ressource-injection1.
Also weder die
UserTransaction
noch dieEntityManagerFactory
injiziert werden hier daher dieNullPointerException
.Ehrlich gesagt, sollten Sie versuchen, einen container managed
EntityManager
, dies würde Ihr code weniger chaotisch. Wenn Sie nicht bekommen kann es injiziert, um es über einen JNDI-lookup. Siehe die Ressourcen unten.1 Haben Sie einen Blick auf Web-Tier, um Mit zu Gehen die Java-EE-5: Ein Blick in den Ressourcen-Injektion für einen schönen überblick über das, was injiziert werden kann, und wo.
Ressourcen
Referenzen
InformationsquelleAutor Pascal Thivent