S
StefGe
Hallo,
ich habe folgendes Problem:
Ich habe zwei Tabellen:
kunde (kunden_id, name, vorname, strasse, hausnummer, ort_id)
ort (ort_id, plz, ortsname, land) - plz. ortsname und land sind eindeutig
Diese Beziehung der EntityBeans habe ich über CMR beschrieben und funktioniert auch einwandfrei. Ich ändere die Daten eines Kunden, kommentiere ich den Teil mit der Änderung des Ortes aus, funktioniert alles einwandfrei! So, komme ich zum Ort: ich schaue als erstes, ob der Ort bereits existiert, ja, dann hole ich mir die ID, ansonsten lege ich den Ort an und lasse mir dann die neue ID geben. Diese wird dann in der Tabelle Kunde upgedatet. Jetzt bekomme ich von meinem Webcontainer eine SecurityException geworfen, wenn mein Servlet versucht, sich eine Instanz vom SessionBean zu holen:
(nur ein Auszug)
java.rmi.AccessException: SecurityException; nested exception is:
javax.security.auth.login.LoginException: java.lang.NullPointerException
at org.jboss.security.Util.createPasswordHash(Util.java:356)
at org.jboss.security.auth.spi.UsernamePasswordLoginModule.createPasswordHash(UsernamePasswordLoginModule.java:298)
at org.jboss.security.auth.spi.UsernamePasswordLoginModule.login(UsernamePasswordLoginModule.java:160)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at javax.security.auth.login.LoginContext.invoke(LoginContext.java:769)
at javax.security.auth.login.LoginContext.access$000(LoginContext.java:186)
at javax.security.auth.login.LoginContext$4.run(LoginContext.java:683)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.login.LoginContext.invokePriv(LoginContext.java:680)
at javax.security.auth.login.LoginContext.login(LoginContext.java:579)
at org.jboss.security.plugins.JaasSecurityManager.defaultLogin(JaasSecurityManager.java:483)
at org.jboss.security.plugins.JaasSecurityManager.authenticate(JaasSecurityManager.java:425)
at org.jboss.security.plugins.JaasSecurityManager.isValid(JaasSecurityManager.java:251)
Ich habe schon bei meiner SessionBean folgendes eingestellt: @ejb.permission unchecked="true", hilft aber nichts. Wenn ich die SecurityDomain aus meiner EJB-Anwendung entferne, dann klappt es aber. Ach übrigens, in der Datenhbank wird alles richtig eingetragen. Starte ich mein entsprechendes Servlet per Hand mit dem Aufruf Controller?action=login nach der Exception, dann klappt es auch wieder. Ich vermute, es ist die Art und Weise, wie ich meine OrtID update, daher hier der Quellcode:
// Ort in der Datenbank ablegen
PlaceLocal pl = null;
try {
// sucht den Ort in der Datenbank
pl = plh.findByPlace(user.getPostalCode(), user.getTown(), user.getCountry());
} catch (FinderException e) {
// Ort nicht gefunden
try {
// Ort wird in der Datenbank neu angelegt
pl = plh.create(user.getPostalCode(), user.getTown(), user.getCountry());
} catch (CreateException e1) {
e1.printStackTrace();
}
}
cl.setPlaceId(pl.getPlaceId());
Über Hilfe wäre ich sehr dankbar, ich hänge hier schon seit einigen Tagen.
Viele Grüße
Stefan
ich habe folgendes Problem:
Ich habe zwei Tabellen:
kunde (kunden_id, name, vorname, strasse, hausnummer, ort_id)
ort (ort_id, plz, ortsname, land) - plz. ortsname und land sind eindeutig
Diese Beziehung der EntityBeans habe ich über CMR beschrieben und funktioniert auch einwandfrei. Ich ändere die Daten eines Kunden, kommentiere ich den Teil mit der Änderung des Ortes aus, funktioniert alles einwandfrei! So, komme ich zum Ort: ich schaue als erstes, ob der Ort bereits existiert, ja, dann hole ich mir die ID, ansonsten lege ich den Ort an und lasse mir dann die neue ID geben. Diese wird dann in der Tabelle Kunde upgedatet. Jetzt bekomme ich von meinem Webcontainer eine SecurityException geworfen, wenn mein Servlet versucht, sich eine Instanz vom SessionBean zu holen:
(nur ein Auszug)
java.rmi.AccessException: SecurityException; nested exception is:
javax.security.auth.login.LoginException: java.lang.NullPointerException
at org.jboss.security.Util.createPasswordHash(Util.java:356)
at org.jboss.security.auth.spi.UsernamePasswordLoginModule.createPasswordHash(UsernamePasswordLoginModule.java:298)
at org.jboss.security.auth.spi.UsernamePasswordLoginModule.login(UsernamePasswordLoginModule.java:160)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at javax.security.auth.login.LoginContext.invoke(LoginContext.java:769)
at javax.security.auth.login.LoginContext.access$000(LoginContext.java:186)
at javax.security.auth.login.LoginContext$4.run(LoginContext.java:683)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.login.LoginContext.invokePriv(LoginContext.java:680)
at javax.security.auth.login.LoginContext.login(LoginContext.java:579)
at org.jboss.security.plugins.JaasSecurityManager.defaultLogin(JaasSecurityManager.java:483)
at org.jboss.security.plugins.JaasSecurityManager.authenticate(JaasSecurityManager.java:425)
at org.jboss.security.plugins.JaasSecurityManager.isValid(JaasSecurityManager.java:251)
Ich habe schon bei meiner SessionBean folgendes eingestellt: @ejb.permission unchecked="true", hilft aber nichts. Wenn ich die SecurityDomain aus meiner EJB-Anwendung entferne, dann klappt es aber. Ach übrigens, in der Datenhbank wird alles richtig eingetragen. Starte ich mein entsprechendes Servlet per Hand mit dem Aufruf Controller?action=login nach der Exception, dann klappt es auch wieder. Ich vermute, es ist die Art und Weise, wie ich meine OrtID update, daher hier der Quellcode:
// Ort in der Datenbank ablegen
PlaceLocal pl = null;
try {
// sucht den Ort in der Datenbank
pl = plh.findByPlace(user.getPostalCode(), user.getTown(), user.getCountry());
} catch (FinderException e) {
// Ort nicht gefunden
try {
// Ort wird in der Datenbank neu angelegt
pl = plh.create(user.getPostalCode(), user.getTown(), user.getCountry());
} catch (CreateException e1) {
e1.printStackTrace();
}
}
cl.setPlaceId(pl.getPlaceId());
Über Hilfe wäre ich sehr dankbar, ich hänge hier schon seit einigen Tagen.
Viele Grüße
Stefan