You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ode.apache.org by Denis Weerasiri <dd...@gmail.com> on 2009/03/24 13:03:34 UTC

Re: GSOC-web-bpel-debugger - Deploying the debugger service

Hi all,
I tried several ways to deploy the BpelManagementFacadeImpl class it self as
a web service. But I need some ideas from the community on which the best
possible way to deploy the debugger web service should be.

Here are some approaches I tried.
1. Contract first method
   Similar to deploying the Management API, I tried by generating the WSDL
and Bean classes then a problem occurs as BpelManagementFacadeImpl method
implementations return plain java objects not beans. So in this way I have
to reimplement the service class such that methods can handle bean objects
as in org.apache.ode.bpel.engine.ProcessAndInstanceManagementImpl.

2. Pojo Method
   Then I programatically deploy the service using the method
AxisService debuggerService =
AxisService.createService(BpelManagementFacadeImpl.class.getName(),axisConfig);

Now the problem is when invoking operations at
org.apache.axis2.receivers.AbstractMessageReceiver#makeNewServiceObject
method, it tries to instantiate a service implementation class using
reflections. But as in BpelManagementFacadeImpl class doesn't have a default
constructor, so an exception occurs.
So then I tried to instantiate a sevice implementation class by using an
org.apache.axis2.ServiceObjectSupplier. But in that case also when
instantiating the BpelManagementFacadeImpl I need to pass the _server and
store parameters. But I do not know how to get those parameters inside the
ServiceObjectSupplier class.

Is there a way of refering the attributes of org.apache.ode.axis2.ODEServer
object which is created when ODE startup, outside of the
org.apache.ode.axis2.ODEServer class.?
Or do I have to reimplement all the operations as in Contract first method.?
Please help me on deploying this matter.

Best Regards,
Denis Weerasiri.

On Thu, Mar 19, 2009 at 8:42 PM, Matthieu Riou <ma...@gmail.com>wrote:

> On Thu, Mar 19, 2009 at 4:46 AM, Denis Weerasiri <dd...@gmail.com>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 <ma...@gmail.com>wrote:
>>
>>> On Sun, Feb 8, 2009 at 8:29 AM, Denis Weerasiri <ddweerasiri@gmail.com
>>> >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.
>>> >
>>>
>>
>>
>