Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Fehler beim Aufruf einer eigenen Finder Methode in einer Entity Bean

Empfohlene Antworten

Veröffentlicht

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.

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

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

  • 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

  • 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 ?

Hm..soll das evtl. ein Prefix oder so sein?

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.