Features
This component has been successfully tested with the following EJB specifications :
On the following JEE container :
This component acts only as a service provider. A JBI message exchange sent to a ServiceEndpoint (mapped to an EJB) is transformed into an EJB call through RMI. Component Configuration
The component can be configured through its JBI descriptor file like this : <?xml version="1.0" encoding="UTF-8"?> <jbi:jbi xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:petalsCDK="http://petals.ow2.org/components/extensions/version-4.0" xmlns:jbi="http://java.sun.com/xml/ns/jbi" version="1.0"> <jbi:component type="binding-component" component-class-loader-delegation="parent-first"> <jbi:identification> <jbi:name>petals-bc-ejb</jbi:name> <jbi:description> An EJB Binding Component sending messages to local or distant EJB instances </jbi:description> </jbi:identification> <jbi:component-class-name>org.ow2.petals.bc.ejb.EjbBC</jbi:component-class-name> <jbi:component-class-path> <jbi:path-element/> </jbi:component-class-path> <jbi:bootstrap-class-name> org.ow2.petals.component.framework.DefaultBootstrap </jbi:bootstrap-classname> <jbi:bootstrap-class-path> <jbi:path-element/> </jbi:bootstrap-class-path> <petalsCDK:acceptor-pool-size>5</petalsCDK:acceptor-pool-size> <petalsCDK:processor-pool-size>10</petalsCDK:processor-pool-size> <petalsCDK:ignored-status>NOTHING_IGNORED</petalsCDK:ignored-status> <shared-library>petals-sl-ejb</shared-library> <petalsCDK:jbi-listener-class-name> org.ow2.petals.bc.ejb.listener.JBIListener </petalsCDK:jbi-listener-class-name> </jbi:component> </jbi:jbi> This component doesn't have any specific configuration parameters. You can customize the component configuration by changing the following common parameters.
Unable to render {include} Couldn't find a page to include called: 0 CDK Component Configuration Table
Service ConfigurationSend a JBI message to an external EJBWhen a JBI message is received on an endpoint linked to an EJB, the message is transformed into a RMI message, then sent to the linked EJB.
The RMI message is created following these steps :
In order to reach the remote EJB, the component need to get an RMI stub of the EJB from a JNDI server. The JNDI name of the target EJB is defined in the parameter ejb.jndi.name. The external EJB is called and the response is processed by the PEtALS-JAXB-Databinding library and then returned to the JBI environment. Service Unit descriptorThe Service Unit descriptor file ( jbi.xml ) looks like this : <?xml version="1.0" encoding="UTF-8"?> <!-- JBI descriptor for the PEtALS' "petals-bc-ejb" component (EJB). Originally created for the version 1.1 of the component. --> <jbi:jbi version="1.0" xmlns:ejb="http://petals.ow2.org/components/ejb/version-1.1" xmlns:generatedNs="http://application.localisation.watersupply.petals.ow2.org/" xmlns:jbi="http://java.sun.com/xml/ns/jbi" xmlns:petalsCDK="http://petals.ow2.org/components/extensions/version-4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <!-- Import a Service into PEtALS or Expose a PEtALS Service => use a BC. --> <jbi:services binding-component="true"> <!-- Import a Service into PEtALS => provides a Service. --> <jbi:provides interface-name="generatedNs:LocalisationFinderBusinessServicePortType" service-name="generatedNs:LocalisationFinderBusinessService" endpoint-name="LocalisationFinderBusinessServiceEndpoint"> <!-- CDK specific elements --> <petalsCDK:wsdl>Localisation.wsdl</petalsCDK:wsdl> <!-- Component specific elements --> <ejb:ejb.jndi.name>LocalisationFinderBusinessService</ejb:ejb.jndi.name> <ejb:java.naming.factory.initial> org.jnp.interfaces.NamingContextFactory </ejb:java.naming.factory.initial> <ejb:java.naming.provider.url>jnp://localhost:1099/</ejb:java.naming.provider.url> <ejb:ejb.version>2.1</ejb:ejb.version> <ejb:ejb.home.interface> org.ow2.petals.watersupply.localisation.application.LocalisationFinderBusinessServiceRemoteHome </ejb:ejb.home.interface> <ejb:marshalling.engine>jaxb</ejb:marshalling.engine> <ejb:security.name /> <ejb:security.principal /> <ejb:security.credencials /> </jbi:provides> </jbi:services> </jbi:jbi> Configuration of a Service Unit to expose an EJB onto Petals ESB :
Configuration of a Service Unit to provide a service (JBI)
Configuration of a Service Unit to provide a service (CDK)
Unable to render {include} Couldn't find a page to include called: 0 CDK Interceptor configuration for SU
Service Unit contentThe service unit must contain a JAR archive including the EJB Interface (and EJB Home Interface for a 2.x EJB) and all specific Java classes used by this interface. It is also highly recommended to provide a WSDL description of your EJB interface. This WSDL description will be used as Service Description for the JBI Endpoint linked to your EJB. The directory structure of a SU for the BC-EJB must look like this : my-su-ejb.zip
+ META-INF
- jbi.xml
- my-ejb-wsdl-description.wsdl
- my-ejb.jar
- my-ejb-dependency1.jar
- my-ejb-dependency2.jar
Packaging EJB container RMI client librariesSince the petals-bc-ejb is a generic binding component that allows to call Enterprise Java Beans running on different kind of application servers, you must add your application specific RMI client libraries to the component classpath. There are three solutions to add the libraries to do so :
By default this component uses a shared library called "petals-sl-ejb" which must contains the RMI client libraries of the EJB targeted EJB container with its JEE EJB specification. To learn more about shared-libraries, feel free to read the [Shared Libraries] page. XML to Java bindingSince the JBI message payload is a XML message, the component must provide a way to transform Java objects into XML (marshalling) an XML to Java objects (unmarshalling). The message payload containing an EJB call is unmarshalled to Java objects that will be used as method parameters for the EJB call through RMI. The EJB response is intercepted by the component and then marshalled to an XML payload. This marshalling / unmarshalling process is provided by the PEtALS-JAXB-Databinding library. This library uses a WSDL file (generated from your service class with Apache-CXF or OW2-Java2EasyWSDL from the EasyWSDL toolbox) to bind Java classes to XML tags. Request messageThe incoming JBI message payload is unmarshalled by JAXB using the WSDL provided in the service unit. XML messages are transformed to Java Objects which are used to perform a RMI call on the EJB. An EJB call request which conforms to the provided WSDL (as generated by soapui, when the EJB is exposed outside the bus) <?xml version="1.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:q0="http://application.localisation.watersupply.petals.ow2.org/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <soapenv:Body> <q0:getBureauDistributeurInfoByCommuneId> <q0:arg0>452</q0:arg0> </q0:getBureauDistributeurInfoByCommuneId> </soapenv:Body> </soapenv:Envelope> Response messageThe EJB response is intercepted by the component and then marshalled by JAXB conforming to the provided WSDL. An EJB response marshalled conforming to the WSDL (as received by soapui, when the EJB is exposed outside the bus) <?xml version="1.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> <soapenv:Body> <getBureauDistributeurInfoByCommuneIdResponse xmlns="http://businessinfo.localisation.watersupply.petals.ow2.org" xmlns:ns2="http://application.localisation.watersupply.petals.ow2.org/"> <ns2:return> <BureauDistributeurInfo> <code>code 0</code> <id>452</id> <libelle>libelle 0</libelle> </BureauDistributeurInfo> <BureauDistributeurInfo> <code>code 2</code> <id>452</id> <libelle>libelle 2</libelle> </BureauDistributeurInfo> <BureauDistributeurInfo> <code>code 3</code> <id>452</id> <libelle>libelle 3</libelle> </BureauDistributeurInfo> </ns2:return> </getBureauDistributeurInfoByCommuneIdResponse> </soapenv:Body> </soapenv:Envelope> JAAS authenticationThe EJB binding component is JAAS enabled : it can handle security subjects from your JBI platform to your application server to perform authentication and role based EJB method restrictions.
JAAS configurationJAAS authentication is based on a configuration file which specifies all the login modules to be used during the authentication process, as shown below. jonas {
// Login Module to use for the example jaasclient.
//First, use a LoginModule for the authentication
org.ow2.petals.bc.ejb.security.WSSUserPasswordLoginModule required
org.ow2.petals.users="users.properties"
org.ow2.petals.roles="roles.properties";
// Use the login module to propagate security to the JOnAS server
// globalCtx is set to true in order to set the security context
// for all the threads of the client container instead of only
// on the current thread.
// Useful with multithread applications (like Swing Clients)
org.objectweb.jonas.security.auth.spi.ClientLoginModule required globalCtx="true";
};
In this file, only one configuration “jonas” (which is the configuration identifier) is defined. You can define several configurations in the same JAAS configuration file.
Login module configurationIn your JAAS configuration file you can specify a list of LoginModule, which will be used for the whole authentication process.
For instance in the previous JAAS configuration file, two LoginModule were defined. The first one (org.ow2.petals.bc.ejb.security.WSSUserPasswordLoginModule) is used to make the authentication (based on user / password informations) and the second one, (org.objectweb.jonas.security.auth.spi.ClientLoginModule) is used to propagate the LoginContext to the application server (JOnAS).
JAAS resources
|
Table of contents Contributors
No contributors found for: authors on selected page(s)
|
