On Thu, Mar 19, 2009 at 4:46 AM, Denis Weerasiri <[email protected]>wrote:
> Hi all, > > I studied how the ODE Management API is deployed as a web service during > the startup of ODE in order to deploy the debugging functionality as a web > service programatically during the startup of ODE. So I created the WSDL > from the service class (BpelManagementFacedImpl) and implement Axis2 wrapper > class for the debugger interface. Then I change the > org.apache.ode.axis2.ODEServer#init method in order to start the debugging > service when ODE starts. As well the relevant schema were added to > ode-bpel-schemas module and created the .xsdconfig file in order to generate > the bean classes. Then I changed the rakefile in order to add relevant > schema to the war distribution. > > Then I build ODE and put war distribution inside tomcat and start ODE. > > Debugger service was created without no exceptions. But when I invoke > operations it gives a exception stack as follows. It seems like there is a > serializing/deserializing problem. > The DynamicService thingy relays web services calls to the management class (ProcessAndInstanceManagement). Doing so, it take cares of serialization and deserialization of the parameters and the returned result. It's usually pretty easy because the management API only deals either with basic types or XmlBeans types. What it's telling you here is that it doesn't know how to serialize the Breakpoint object returned. That's pretty normal because Breakpoint is neither simple not an XmlBean type. So you'll need to add a Breakpoint datatype in pmapi.xsd to generate an XmlBean out of it and then return that from the management classes. Cheers, Matthieu > <soapenv:Fault> > > <soapenv:Code>axis2ns72:Server</soapenv:Code> > > <soapenv:Reason> > > java.lang.RuntimeException: Couldn't convert object > [Lorg.apache.ode.bpel.bdi.breaks.Breakpoint;@9fb152 into a response > element. > > </soapenv:Reason> > > <soapenv:Detail> > > <axis2ns73:RuntimeException> > > java.lang.RuntimeException: Couldn't convert object > [Lorg.apache.ode.bpel.bdi.breaks.Breakpoint;@9fb152 into a response > element. > > at org.apache.ode.il.DynamicService.convertToOM(DynamicService.java:164) > > at org.apache.ode.il.DynamicService.invoke(DynamicService.java:73) > > at > org.apache.ode.axis2.service.DebuggingWebService$DynamicMessageReceiver.invokeBusinessLogic(DebuggingWebService.java:95) > > at > org.apache.axis2.receivers.AbstractMessageReceiver.receive(AbstractMessageReceiver.java:96) > > at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:145) > > at > org.apache.axis2.transport.http.util.RESTUtil.invokeAxisEngine(RESTUtil.java:125) > > at > org.apache.axis2.transport.http.util.RESTUtil.processURLRequest(RESTUtil.java:119) > > at > org.apache.axis2.transport.http.AxisServlet$RestRequestProcessor.processURLRequest(AxisServlet.java:799) > > at org.apache.axis2.transport.http.AxisServlet.doGet(AxisServlet.java:242) > > at org.apache.ode.axis2.hooks.ODEAxisServlet.doGet(ODEAxisServlet.java:62) > > at javax.servlet.http.HttpServlet.service(HttpServlet.java:617) > > at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) > > at > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) > > at > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) > > at > org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) > > at > org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) > > at > org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) > > at > org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) > > at > org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) > > at > org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286) > > at > org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845) > > at > org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583) > > at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447) > > at java.lang.Thread.run(Thread.java:619) > > </axis2ns73:RuntimeException> > > </soapenv:Detail> > > </soapenv:Fault> > > > Please help me on this matter. > > Cheers, > > Denis Weerasiri > > > On Tue, Feb 10, 2009 at 4:00 AM, Matthieu Riou <[email protected]>wrote: > >> On Sun, Feb 8, 2009 at 8:29 AM, Denis Weerasiri <[email protected] >> >wrote: >> >> > Hi, >> > >> > I'm interested in implementing a interactive debugging tool for WS-BPEL >> > developers on Apache ODE which enables to set breakpoints, and >> > watch/inspect >> > instance variables as GSOC project. >> >> >> Sweet! Really good idea :) >> >> >> > >> > These days I'm developing a WS-BPEL status tracking tool which generate >> an >> > SVG flow diagram based on the BPEL code, and view the instance variable >> > values and the activity details of the running instances. I used the ODE >> > Management API for that. But it seems that ODE doesn't provide any API >> for >> > handling breakoints. >> > Please let me know whether there is any API or some tool already >> developed >> > for handling breakpoint functionality in ODE. >> > As well I'm clueless of the capacity of this project idea, whether it's >> > possible to achieve. >> > Or if there is any other interresting ideas for GSOC under Apache ODE >> > project please let me know. >> >> >> It is possible as it's a feature that used to exist back in the days when >> ODE was still called PXE and was developed by Intalio only. Debugging had >> been developed for Netbeans by a third party. >> >> Since then, even if it's never really been tested, I've been very careful >> to >> not remove this code and keep it up-to-date with the different refactoring >> we've done, thinking we'll probably revive this feature sooner or later. >> So >> even if it's probably buggy, most of the code is still present and should >> be >> operational. >> >> So if you check the InstanceManagement interface [1], you'll see >> suspend(iid) and resume(iid) methods, which is a start. Those are >> implemented by the DebuggerSupport class [2], which is useful to look at >> but >> is mostly internal API (external tooling shouldn't use it directly). >> Instead >> those methods should be used through BpelManagementFacadeImpl that >> delegates >> to DebuggerSupport. You'll find all the usual suspects: >> getGlobalBreakpoints, addActivityBreakpoint, removeBreakpoint, ... For the >> moment, even though those methods are on BpelManagementFacadeImpl like all >> others of the management API, they're not accessible remotely yet. But >> that >> wouldn't too hard to add. >> >> I think that should be enough information to get you started but don't >> hesitate to ask if you have any other additional question or problems. >> >> Cheers, >> Matthieu >> >> [1] >> >> http://svn.apache.org/repos/asf/ode/trunk/bpel-api/src/main/java/org/apache/ode/bpel/pmapi/InstanceManagement.java >> [2] >> >> http://svn.apache.org/repos/asf/ode/trunk/engine/src/main/java/org/apache/ode/bpel/engine/DebuggerSupport.java >> >> >> > >> > >> > Best regards, >> > Denis Weerasiri. >> > >> > >
