We had a WebSphere Adapter for JDBC Export that was throwing the following error when a row was written into the event table:
[3/19/08 14:44:26:705 EDT] 00000099 MA_RMSEVentPo 2 com.ibm.j2ca.jdbc.inbound.JDBCEventStoreWithXid
getRecordForEvent Entering method.
[3/19/08 14:44:26:705 EDT] 00000099 MA_RMSEVentPo 1
com.ibm.j2ca.extension.eventmanagement.internal.EventManager getObjectForEvent(Event)
Failed to retrieve event (477) from event store (com.ibm.j2ca.jdbc.inbound.JDBCEventStoreWithXid@4dd3f398)
[3/19/08 14:44:26:705 EDT] 00000099 MA_RMSEVentPo E
com.ibm.j2ca.extension.eventmanagement.internal.EventSender getObjectForEvent(Event) null
com.ibm.j2ca.base.exceptions.InvalidVerbException
at com.ibm.j2ca.jdbc.inbound.JDBCEventStoreWithXid.getRecordForEvent(JDBCEventStoreWithXid.java:1379)
at com.ibm.j2ca.extension.eventmanagement.internal.EventManager.getRecordForEvent(EventManager.java:680)
at com.ibm.j2ca.extension.eventmanagement.internal.EventManager.getObjectForEvent(EventManager.java:649)
at com.ibm.j2ca.extension.eventmanagement.internal.EventSender.getRecordForEvent(EventSender.java:365)
at com.ibm.j2ca.extension.eventmanagement.internal.EventSender.doSendEvent(EventSender.java:237)
at com.ibm.j2ca.extension.eventmanagement.internal.EventSender.sendEvent(EventSender.java:158)
at com.ibm.j2ca.extension.eventmanagement.internal.EventListSender.sendEvents(EventListSender.java:113)
at com.ibm.j2ca.extension.eventmanagement.internal.EventListSender.run(EventListSender.java:90)
at com.ibm.ejs.j2c.work.WorkProxy.run(WorkProxy.java:394)
at com.ibm.ejs.j2c.work.AsyncWorkProxy.run(AsyncWorkProxy.java:138)
at com.ibm.ws.asynchbeans.J2EEContext$RunProxy.run(J2EEContext.java:258)
at java.security.AccessController.doPrivileged1(Native Method)
at java.security.AccessController.doPrivileged(AccessController.java(Compiled Code))
at javax.security.auth.Subject.doAs(Subject.java:477)
at com.ibm.websphere.security.auth.WSSubject.doAs(WSSubject.java:118)
at com.ibm.ws.asynchbeans.J2EEContext$DoAsProxy.run(J2EEContext.java:325)
at java.security.AccessController.doPrivileged1(Native Method)
at java.security.AccessController.doPrivileged(AccessController.java(Compiled Code))
at com.ibm.ws.asynchbeans.J2EEContext.run(J2EEContext.java:709)
at com.ibm.ws.asynchbeans.ExecutionContextImpl.go(ExecutionContextImpl.java:85)
at com.ibm.ejs.j2c.work.AsyncWorkProxy.run(AsyncWorkProxy.java:92)
at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java(Compiled Code))
InvalidVerbException: A business graph which wraps a business object contains an attribute called ‘verb’ which is usually one of “Create”, “Update” or “Delete”. The adapter framework leverages this (for some reason) to determine the operation being performed on the data. (I’ll likely talk about my opinion on this later). You will get an InvalidVerbException if you try to set the verb to a value not found in the enumeration.
What I couldnt understand was where the verb was being set. Was it something done internally (a PMR)? Or something that we specified. I went to my trusty source google and found Richard Gregory et al.’s article on ‘Getting connected with WebSphere Integration Developer adapters : Part 3, An introduction to the WebSphere Adapter for JDBC’. The article shows the trigger than you use to populate the row into the event store:
The key column of the table is ‘object_function’. ‘object_function’ is where the verb is read from. When we inspected our trigger, we found that instead of it being set to ‘Create’ it was actually ‘Insert’. Thus, when Process Server attempted to create the Business Graph for the event: InvalidVerbException.