Veröffentlicht 20. September 200618 j Hallo, ich beschäftige mich zur Zeit ein wenig mit CMP Entity Beans. Dazu habe ich auf einer Oracle 9i Datenbank eine Tabelle mit 3 Spalten angelegt. Benutzernummer Primary Key (Dieser wird beim Anlegen eines Datensatzes automatisch aus einer Sequence gefüllt) Benutzername String Passwort String Auf diese Tabelle greife ich mit Hilfe einer DataSource zu. Diese DataSource wurde auch schon im Websphere Application Server eingerichtet und erfolgreich getestet. Mir ist es auch schon gelungen mit Hilfe der Entity Bean einen neuen Datensatz anzulegen und mit Hilfe der generierten findByPrimaryKey Methode auszulesen. Im nächsten Schritt habe ich im Deployment Deskriptor der EntityBean eine neue Methode eingetragen die einen Benutzer anhand des Namens finden soll. Wenn ich diese Methode aufrufe bekomme ich jedoch folgende Exception: 19.09.06 15:17:15:438 CEST] 00000168 DataAccessReq E PMGR0000E: Aufruf-Stack: com.ibm.ws.ejbpersistence.utilpm.PersistenceManagerException: PMGR6022E: Bei der Verwendung des Adapters für das Erstellen oder Ausführen einer Interaktion ist ein Fehler aufgetreten. ??? at com.ibm.ws.ejbpersistence.dataaccess.DataAccessRequestImpl.execute(Unknown Source) at com.ibm.ws.ejbpersistence.beanextensions.ConcreteBeanStatefulInstanceExtensionImpl.executeQuery(Unknown Source) at com.ibm.ws.ejbpersistence.beanextensions.ConcreteBeanStatefulInstanceExtensionImpl.executeFind(Unknown Source) at sample.ConcreteTbl_benutzer_4d762f35.ejbFindByName_Local(ConcreteTbl_benutzer_4d762f35.java:104) at sample.EJSCMPTbl_benutzerHomeBean_4d762f35.findByName_Local(EJSCMPTbl_benutzerHomeBean_4d762f35.java:25) at sample.EJSLocalCMPTbl_benutzerHome_4d762f35.findByName(EJSLocalCMPTbl_benutzerHome_4d762f35.java:106) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java(Compiled Code)) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java(Compiled Code)) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java(Compiled Code)) at java.lang.reflect.Method.invoke(Method.java(Compiled Code)) at com.ibm.etools.utc.model.ReflectionMethodModel.invoke(ReflectionMethodModel.java:65) at com.ibm.etools.utc.servlet.InvokeServlet.invoke(InvokeServlet.java:111) at com.ibm.etools.utc.servlet.InvokeServlet.doPost(InvokeServlet.java:367) at javax.servlet.http.HttpServlet.service(HttpServlet.java(Compiled Code)) at javax.servlet.http.HttpServlet.service(HttpServlet.java(Compiled Code)) at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java(Compiled Code)) at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java(Compiled Code)) at com.ibm.ws.webcontainer.servlet.CacheServletWrapper.handleRequest(CacheServletWrapper.java(Compiled Code)) at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java(Compiled Code)) at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java(Compiled Code)) at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java(Compiled Code)) at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewInformation(HttpInboundLink.java(Compiled Code)) at com.ibm.ws.http.channel.inbound.impl.HttpICLReadCallback.complete(HttpICLReadCallback.java(Compiled Code)) at com.ibm.ws.tcp.channel.impl.WorkQueueManager.requestComplete(WorkQueueManager.java(Compiled Code)) at com.ibm.ws.tcp.channel.impl.WorkQueueManager.attemptIO(WorkQueueManager.java(Compiled Code)) at com.ibm.ws.tcp.channel.impl.WorkQueueManager.workerRun(WorkQueueManager.java(Compiled Code)) at com.ibm.ws.tcp.channel.impl.WorkQueueManager$Worker.run(WorkQueueManager.java(Compiled Code)) at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java(Compiled Code)) Caused by: java.lang.NullPointerException at sample.websphere_deploy.ORACLE_V9_1.Tbl_benutzerBeanFunctionSet_4d762f35.execute(Tbl_benutzerBeanFunctionSet_4d762f35.java:326) at com.ibm.ws.rsadapter.cci.WSInteractionImpl.execute(WSInteractionImpl.java:486) at com.ibm.wsspi.ejbpersistence.WSEJBToRAAdapter.executeFinder(WSEJBToRAAdapter.java:212) at com.ibm.ws.rsadapter.cci.WSRelationalRAAdapter.executeFinder(WSRelationalRAAdapter.java:371) ... 29 more [19.09.06 15:17:15:438 CEST] 00000168 ExceptionUtil E CNTR0019E: EJB hat eine unerwartete (nicht deklarierte) Ausnahme beim Aufruf der Methode "findByName" ausgelöst. Ausnahmedaten: com.ibm.ws.exception.WsEJBException at com.ibm.ws.ejbpersistence.beanextensions.ConcreteBeanStatefulInstanceExtensionImpl.executeFind(Unknown Source) at sample.ConcreteTbl_benutzer_4d762f35.ejbFindByName_Local(ConcreteTbl_benutzer_4d762f35.java:104) at sample.EJSCMPTbl_benutzerHomeBean_4d762f35.findByName_Local(EJSCMPTbl_benutzerHomeBean_4d762f35.java:25) at sample.EJSLocalCMPTbl_benutzerHome_4d762f35.findByName(EJSLocalCMPTbl_benutzerHome_4d762f35.java:106) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java(Compiled Code)) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java(Compiled Code)) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java(Compiled Code)) at java.lang.reflect.Method.invoke(Method.java(Compiled Code)) at com.ibm.etools.utc.model.ReflectionMethodModel.invoke(ReflectionMethodModel.java:65) at com.ibm.etools.utc.servlet.InvokeServlet.invoke(InvokeServlet.java:111) at com.ibm.etools.utc.servlet.InvokeServlet.doPost(InvokeServlet.java:367) at javax.servlet.http.HttpServlet.service(HttpServlet.java(Compiled Code)) at javax.servlet.http.HttpServlet.service(HttpServlet.java(Compiled Code)) at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java(Compiled Code)) at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java(Compiled Code)) at com.ibm.ws.webcontainer.servlet.CacheServletWrapper.handleRequest(CacheServletWrapper.java(Compiled Code)) at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java(Compiled Code)) at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java(Compiled Code)) at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java(Compiled Code)) at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewInformation(HttpInboundLink.java(Compiled Code)) at com.ibm.ws.http.channel.inbound.impl.HttpICLReadCallback.complete(HttpICLReadCallback.java(Compiled Code)) at com.ibm.ws.tcp.channel.impl.WorkQueueManager.requestComplete(WorkQueueManager.java(Compiled Code)) at com.ibm.ws.tcp.channel.impl.WorkQueueManager.attemptIO(WorkQueueManager.java(Compiled Code)) at com.ibm.ws.tcp.channel.impl.WorkQueueManager.workerRun(WorkQueueManager.java(Compiled Code)) at com.ibm.ws.tcp.channel.impl.WorkQueueManager$Worker.run(WorkQueueManager.java(Compiled Code)) at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java(Compiled Code)) Caused by: com.ibm.ws.ejbpersistence.utilpm.PersistenceManagerException: PMGR6022E: Bei der Verwendung des Adapters für das Erstellen oder Ausführen einer Interaktion ist ein Fehler aufgetreten. ??? at com.ibm.ws.ejbpersistence.dataaccess.DataAccessRequestImpl.execute(Unknown Source) at com.ibm.ws.ejbpersistence.beanextensions.ConcreteBeanStatefulInstanceExtensionImpl.executeQuery(Unknown Source) ... 27 more Caused by: java.lang.NullPointerException at sample.websphere_deploy.ORACLE_V9_1.Tbl_benutzerBeanFunctionSet_4d762f35.execute(Tbl_benutzerBeanFunctionSet_4d762f35.java:326) at com.ibm.ws.rsadapter.cci.WSInteractionImpl.execute(WSInteractionImpl.java:486) at com.ibm.wsspi.ejbpersistence.WSEJBToRAAdapter.executeFinder(WSEJBToRAAdapter.java:212) at com.ibm.ws.rsadapter.cci.WSRelationalRAAdapter.executeFinder(WSRelationalRAAdapter.java:371) ... 29 more Hat jemand Erfahrung mit diesem Fehler und kann mir erklären wie er zu stande kommt. Als Entwicklungsumgebung nutze ich den Rational Application Developer 6.0 Ich hoffe die Angaben sind ausführlich genug und jemand hat eine Lösung für dieses Problem.
20. September 200618 j Servus, mit dem RAD habe ich zwar keine Erfahrungen, aber Du könntest mal die generierte Klasse durchschauen, in der die NullPointerException auftritt. Die ist der eigentliche Grund für den Fehler. Vielleicht findest Du da was. Peter
20. September 200618 j Autor Super Danke für den Tipp. Hab eine generierte Methode anpassen müssen und jetzt funktioniert es
20. September 200618 j Servus, was hast Du denn anpassen müssen? Eigentlich würde ich zunächst auf einen Fehler in der Konfiguration tippen, wenn eine NPE in einer generierten Methode auftreten kann. Sonst wäre der Generator Mist. So hast Du beim nächsten Erzeugen der Klassen wieder das gleiche Problem. Peter
20. September 200618 j Autor Servus, was hast Du denn anpassen müssen? Das erzeugte PreparedStatement war Murks. Der Tabellenname wurde mit eine \q vor den Feldnamen gesetzt. Nachdem ich das Statement so umgeschrieben habe wie es bei findByPrimaryKey stand funktioniert es einwandfrei. Freitag kann ich den merkwürdigen Code mal posten vielleicht kann mich jemand auf meinen Konfigfehler hinweisen
22. September 200618 j Autor So sah der generierte Code aus select q1.\"BENUTZERNUMMER\", q1.\"BENUTZERNAME\", q1.\"PASSWORT\" from TVRB0.TBL_BENUTZER q1 where ( q1.\"BENUTZERNAME\" = ?) und dieses q1 musste ich entfernen. Hat jemand eine Idee was da beim generieren falsch gelaufen ist ?
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.