Features
This component is based on the Petals ESB Component Development Kit and on Apache Axis2 for invocation and marshalling. If you want more details about jsr181, you can consult this the specification on the Java Community Process portal : http://jcp.org/en/jsr/detail?id=181 |
Component Configuration
The component can be configured through its JBI descriptor file like this :
<?xml version="1.0" encoding="UTF-8"?> <jbi:jbi version="1.0" xmlns:jbi="http://java.sun.com/xml/ns/jbi" xmlns:petalsCDK="http://petals.ow2.org/components/extensions/version-4.0" xmlns:jsr181="http://petals.ow2.org/components/jsr181/version-1.0> <jbi:component type="service-engine" bootstrap-class-loader-delegation="parent-first"> <jbi:identification> <jbi:name>petals-se-jsr181</jbi:name> <jbi:description> The jsr181 Service Engine (based on Axis2)</jbi:description> </jbi:identification> <jbi:component-class-name>org.ow2.petals.se.jsr181.Component</jbi:component-class-name> <jbi:component-class-path>...</jbi:component-class-path> <jbi:bootstrap-class-name>org.ow2.petals.se.jsr181.Bootstrap</jbi:bootstrap-class-name> <jbi:bootstrap-class-path>...</jbi:bootstrap-class-path> <!-- Component Development Kit Parameters --> <petalsCDK:acceptor-pool-size>5</petalsCDK:acceptor-pool-size> <petalsCDK:processor-pool-size>10</petalsCDK:processor-pool-size> <petalsCDK:ignored-status>DONE_AND_ERROR_IGNORED</petalsCDK:ignored-status> <petalsCDK:properties-file /> <petalsCDK:performance-notifications>false</petalsCDK:performance-notifications> </jbi:component> </jbi:jbi>
| Note Actually, nothing is configurable in this JBI descriptor, so leave it as it is. |
| Node The class name values in italic should not be modified by the user. |
Service Configuration
PROVIDE SERVICE : Expose an Java Class as Service in the JBI environment.
The petals-se-jsr181 component can expose a Java Class as JBI ServiceEndpoint. This is done by deploying a Service Unit on it.
When a message is received on a JSR181 linked endpoint from the JBI environment, it is mapped to an Axis2 message and sent to the Axis2 runtime. The linked Java Class is called and the response is processed and returned to the JBI environment.
Service Unit descriptor
The Service Unit descriptor file ( jbi.xml ) looks like this :
<?xml version="1.0" encoding="UTF-8"?> <jbi:jbi version="1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jbi="http://java.sun.com/xml/ns/jbi" xmlns:petalsCDK="http://petals.ow2.org/components/extensions/version-4.0" xmlns:helloworld="http://petals.ow2.org/helloworld" xmlns:jsr181="http://petals.ow2.org/components/jsr181/version-1.0"> <jbi:services binding-component="false"> <jbi:provides interface-name="helloworld:Helloworld" service-name="helloworld:HelloworldService" endpoint-name="HelloworldEndpoint"> <petalsCDK:wsdl>Service.wsdl</petalsCDK:wsdl> <jsr181:class>org.ow2.petals.usecase.jsr181.TestService</jsr181:class> </jbi:provides> </jbi:services> </jbi:jbi>
Definition of CDK parameter scope :
- Installation: The parameter can be set during the installation of the component, by using the installation MBean (see JBI specifications for details about the installation sequence). If the parameter is optional and has not been defined during the development of the component, it is not available at installation time.
- Runtime: The paramater can be set during the installation of the component and during runtime. The runtime configuration can be changed using the CDK custom MBean named RuntimeConfiguration. If the parameter is optional and has not been defined during the development of the component, it is not available at installation and runtime times.
| Parameter | Description |
Default |
Required |
|---|---|---|---|
| provides | Describe the JBI service that will be exposed into the JBI bus. Interface (QName), Service (QName) and Endpoint (String) attributes are required. | - | Yes |
Configuration of a Service Unit to provide a service (JSR181)
| Parameter |
Description |
Default |
Required |
|---|---|---|---|
| class |
The JSR181 annotated class which will provide the Service.This class must be available in the Service Unit class loader. | - |
Yes |
Annotated class
The following class is a sample of JSR181 annotated class (taken from the Petals usecase sources) :
package org.ow2.petals.usecase.jsr181; import java.text.SimpleDateFormat; import java.util.Date; import javax.jws.WebMethod; import javax.jws.WebService; /** * * @author chamerling - eBM WebSourcing * * * NOTE : The * @WebService parameters are not used by the component, the service name is * defined in the service unit. Need to modify the CDK to be able to * create the endpoint from these values... */ @WebService(serviceName = "Hello", name = "MyService", targetNamespace = "http://petals.ow2.org") public class TestService { /** * Say hello to the world ! */ @WebMethod public String sayHello(String str) { System.out.println("Hey! This is the sayHello operation."); return "You say me " + str; } /** * Get a person from its id only to test 'complex' data binding. * * @param id * @return */ @WebMethod public Person getPerson(int id) { System.out.println("Get person " + id); return new Person(id, "Christophe", "Hamerling", 29, "France"); } /** * * @return */ @WebMethod public String getTime() { System.out.println("Get time"); return new SimpleDateFormat().format(new Date(System.currentTimeMillis())); } /** * NOP */ @WebMethod public void voidvoid() { System.out.println("The Void operation"); } /** * The final operation will be 'specializedOperation' */ @WebMethod(operationName = "specializedOperation") public void operation() { System.out.println("The specialized operation"); } /** * * @throws Exception */ @WebMethod public String iAmThrowingAnException() throws Exception { System.out.println("throw exception"); throw new Exception("This is a server side Exception"); } }