Ce contenu n'est pas disponible dans la langue sélectionnée.
Chapter 7. Using the jUDDI Client
7.1. jUDDI Client Copier lienLien copié sur presse-papiers!
SOA_ROOT/jboss-as/server/PROFILE/deployers/esb.deployer/lib/juddi-client-VERSION.jar.
7.2. jUDDI Client Dependencies Copier lienLien copié sur presse-papiers!
uddi-ws-3.0.0.jarcommons-configuration-1.5.jarcommons-collection-3.2.1.jarlog4j-1.2.13.jar
- libraries for JDK6.
- JAXWS client libraries (if you are using a JAXWS transport like CXF.)
- RMI and JNDI client libraries (if you are using the RMI Transport.)
7.3. jUDDI Client and the JBoss Enterprise SOA Platform Copier lienLien copié sur presse-papiers!
Important
7.4. Transport Settings Copier lienLien copié sur presse-papiers!
7.5. uddi.xml Copier lienLien copié sur presse-papiers!
META-INF/uddi.xml file contains the configuration settings for the jUDDI client. You can include this file in the deployment archive that is interacting with the UDDI client code.
7.6. Deploy a Custom jUDDI Client Configuration Copier lienLien copié sur presse-papiers!
Procedure 7.1. Task
- Open META-INF/uddi.xml in your text editor.
- Configure the settings.
- Save and exit.
- Include the uddi.xml file in your archive when you deploy it.
- Call this code:
UDDIClerkManager clerkManager = new UDDIClerkManager("META/myuddi.xml"); clerkManager.start();UDDIClerkManager clerkManager = new UDDIClerkManager("META/myuddi.xml"); clerkManager.start();Copy to Clipboard Copied! Toggle word wrap Toggle overflow - Alternatively, if your application deploys as a WAR archive, add your client configuration to
yourwar/META-INF/myuddi.xmland, in the web.xml file, specify these context parameters:uddi.client.manager.nameanduddi.client.xml.In this example, both context parameters are set and on deployment the UDDIClerkServlet takes care of reading the configuration:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.7. Sample jUDDI Client Configuration File Copier lienLien copié sur presse-papiers!
isHomeJUDDI="true", while for the 'remote' registries you would set isHomeJUDDI="false".
| Element Name | Description | Required? |
|---|---|---|
| name | name of the node | yes |
| description | description of the node | no |
| properties | container for properties that will be passed into the clerk | no |
| proxyTransport | The Transport protocol used by the client to connect to the UDDI server | yes |
| custodyTransferUrl | Connection settings for custody transfer | no |
| inquiryUrl | Connection location settings for inquiries | yes |
| publishUrl | Connection location settings for publishing | yes |
| securityUrl | Connection location settings for obtaining security tokens | yes |
| subscriptionUrl | Connection location settings for registering subscription requests | no |
| subscriptionListenerUrl | Connection location settings receiving subscription notifications | no |
| juddiApiUrl | Connection location settings for the jUDDI specific API for things like publisher management | no |
| Attribute Name | Description | Required? |
|---|---|---|
| name | name of the clerk | yes |
| node | name reference to one of the nodes specified in the same manager | yes |
| publisher | name of an existing publisher | yes |
| password | password credential of the publisher | yes |
7.8. Java API for XML Web Services (JAX-WS) Copier lienLien copié sur presse-papiers!
7.9. Set the JAX-WS Transport Copier lienLien copié sur presse-papiers!
Prerequisites
- Based on the settings in the
uddi.xmlfile, the client will use JAX-WS to communicate with the (remote) registry server. This means that the client needs to have access to a JAX-WS-compliant web service stack (such as CXF, Axis2 or JBossWS).
Procedure 7.2. Task
- Ensure that the JAX-WS URLs are pointing to an address where the UDDI client can find the WSDL documents:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Important
Pros: This is the standard way of performing UDDI communication and it should should work with all UDDIv3 server implementations.Cons: If the server is deployed on the same application server this may lead to issues when auto-registration on deployment/undeployment is used, since the WS stack may become unavailable during undeployment. A workaround is to host the UDDI server on a different server.
7.10. Remote Invocation Class Copier lienLien copié sur presse-papiers!
7.11. jUDDI and Remote Method Invocation Copier lienLien copié sur presse-papiers!
7.12. Enable Remote Method Invocation for jUDDI Copier lienLien copié sur presse-papiers!
Procedure 7.3. Task
- Open the jUDDI configuration file in a text editor:
vi SOA_ROOT/jboss-as/server/PROFILE/deploy/jbossesb-registry.sar/esb.juddi.xml. - Edit the settings and set the property <entry key="juddi.jndi.registration">true</entry>. If set to true, RMI methods are registered to jndi and can be searched and called. Default is true.
- Save the file and exit.
- Open the UDDI configuration file in a text editor:
vi META-INF/uddi.xml. - "Comment out" the JAX-WS section of the file and uncomment the RMI section instead.
- As an optional step, you can also set the java.naming.* properties. In this example, you specified the setting for connecting to jUDDI v3 deployed on a JBoss Application Server. If you like you can instead set the java.naming.* properties in a
jndi.propertiesfile, or as system parameters.Copy to Clipboard Copied! Toggle word wrap Toggle overflow Important
Pros: It is lightweight fast since it does not need a web service stack.Cons: It only works with a jUDDI v3 server implementation. - Save the file and exit.
When you deploy it, the RMI-based UDDI services will bind to the global JNDI namespace:
- juddiv3 (class:
org.jnp.interfaces.NamingContext) - UDDIPublicationService (class:
org.apache.juddi.rmi.UDDIPublicationService) - UDDICustodyTransferService (class:
org.apache.juddi.rmi.UDDICustodyTransferService) - UDDISubscriptionListenerService (class:
org.apache.juddi.rmi.UDDISubscriptionListenerService) - UDDISecurityService (class:
org.apache.juddi.rmi.UDDISecurityService) - UDDISubscriptionService (class:
org.apache.juddi.rmi.UDDISubscriptionService) - UDDIInquiryService (class:
org.apache.juddi.rmi.UDDIInquiryService)
7.13. InVM Transport Copier lienLien copié sur presse-papiers!
7.14. InVM and jUDDI Copier lienLien copié sur presse-papiers!
juddi.war archive, the server will be started by the org.apache.juddi.RegistryServlet class, but if you are running outside any container, you are responsible for starting and stopping the org.apache.juddi.Registry service yourself.
7.15. Configure the InVM Transport for jUDDI Copier lienLien copié sur presse-papiers!
Procedure 7.4. Task
- Open the UDDI configuration file in a text editor:
vi META-INF/uddi.xml. - "Comment out" the JAX-WS and RMI Transport sections of the file and uncomment the InVM Transport section instead.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Important
Pros: It is lightweight and provides the best performance for communications and there are no deployment order issues when using auto-registration of services during deployment and undeployment.Cons: It will only work with a jUDDI v3 server implementation. Normally, you would use a jUDDI server for each application server sharing one common database. - Save the file and exit.
7.16. Start the Service Registry Using the InVM Transport Copier lienLien copié sur presse-papiers!
- Call the following method prior to making any other calls to it:
Registry.start()
7.17. Stop the Service Registry Using the InVM Transport Copier lienLien copié sur presse-papiers!
Procedure 7.5. Task
- Call the following method prior to making any other calls to it:
Registry.stop()
The registry releases any resources it may be holding.
7.18. UDDI Annotation Copier lienLien copié sur presse-papiers!
Note
7.19. Use the UDDIService Annotation Copier lienLien copié sur presse-papiers!
Procedure 7.6. Task
- Use the UDDIService annotation to register a service under an already-existing business in the Registry. The annotation should be added to the Java class' "class" level.
7.20. UDDIService Attributes Copier lienLien copié sur presse-papiers!
| Attribute | Description | Required? |
|---|---|---|
| serviceName | This is the name of the service. By default, the clerk will use the one name specified in the WebService annotation | No |
| description | This is the human-readable description of the service | Yes |
| serviceKey | This is the service's UDDI v3 key. | Yes |
| businessKey | This is the UDDI v3 key of the business that should own the service. (The business should exist in the Registry at time of registration.) | Yes |
| lang | This is the language locale which will be used for the name and description. (It defaults to "en" if you omit it.) | No |
| categoryBag | This is the definition of a CategoryBag. | No |
7.21. Use the UDDIServiceBinding Annotation Copier lienLien copié sur presse-papiers!
Procedure 7.7. Task
- Use the UDDIServiceBinding annotation to register an end-point reference in the Service Registry. The annotation should be added to the Java class' "class" level.
Note
You cannot use this annotation by itself. It needs to be utilised within an UDDIService annotation
7.22. UDDIServiceBinding Attributes Copier lienLien copié sur presse-papiers!
| Attribute | Description | Required? |
|---|---|---|
| bindingKey | This is the ServiceBinding's UDDI v3 key. | Yes |
| description | This is a human-readable description of the service | Yes |
| accessPointType | This is UDDI v3's AccessPointType. (It defaults to wsdlDeployment if you omit it.) | No |
| accessPoint | This is the end-point reference | Yes |
| lang | This is the language locale which will be used for the name and description, (It will default to "en" if you omit it.) | No |
| tModelKeys | This is a comma-separated list of tModelKeys key references. | No |
| categoryBag | This is the definition of a CategoryBag. | No |
7.23. Example Use of UDDI Annotations Copier lienLien copié sur presse-papiers!
You can use the annotations on any class that defines a service. Here they are added to a web service (a POJO with a JAX-WS web service annotation):
juddi-client code will scan this class for UDDI annotations and take care of the registration process.
org.apache.juddi.samples.HelloWorldImpl service class:
<clerk name="BobCratchit" node="default" publisher="sales" password="sales">
<class>org.apache.juddi.samples.HelloWorldImpl</class>
</clerk>
<clerk name="BobCratchit" node="default" publisher="sales" password="sales">
<class>org.apache.juddi.samples.HelloWorldImpl</class>
</clerk>
default, and that he will be using the sales publisher (for which the password is sales).
Note
7.24. CategoryBag Attribute Copier lienLien copié sur presse-papiers!
7.25. Example Use of the CategoryBag Annotation Copier lienLien copié sur presse-papiers!
categoryBag="keyedReference=keyName=uddi-org:types:wsdl;keyValue=wsdlDeployment;" +
"tModelKey=uddi:uddi.org:categorization:types," +
"keyedReference=keyName=uddi-org:types:wsdl2;keyValue=wsdlDeployment2;" +
"tModelKey=uddi:uddi.org:categorization:types2",
categoryBag="keyedReference=keyName=uddi-org:types:wsdl;keyValue=wsdlDeployment;" +
"tModelKey=uddi:uddi.org:categorization:types," +
"keyedReference=keyName=uddi-org:types:wsdl2;keyValue=wsdlDeployment2;" +
"tModelKey=uddi:uddi.org:categorization:types2",
7.26. Use Annotations to Develop a Web Service Copier lienLien copié sur presse-papiers!
Procedure 7.8. Task
- Add an annotation to any class that defines a service. Here is an example where they are added to a web service POJO with a JAX-WS Webservice annotation:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow On deployment of this WebService, the juddi-client code will scan this class for UDDI annotations and take care of the registration process. - Open the uddi.xml file in your text editor:
vi uddi.xml - Scroll down to the "clerk" section and add a reference to the
org.apache.juddi.samples.HelloWorldImplservice class:Copy to Clipboard Copied! Toggle word wrap Toggle overflow In this example, Bob is using the connection setting for the node named "default". Furthermore, he will be using a publisher named "bob", for which the password is also "bob". - Save the file and exit.
7.27. Key Template Copier lienLien copié sur presse-papiers!
uddi.xml file.
uddi.xml file. The values you set for the properties in this template will be used when the key is registered.
7.28. Key Template Properties Copier lienLien copié sur presse-papiers!
| Property | Description | Required? | Default Value |
|---|---|---|---|
| lang | The language setting used by the registration | no | en |
| businessName | The business name which is used by the registration. | yes | - |
| keyDomain | The key domain key part (used by the key formats) | yes | - |
| businessKeyFormat | Key format used to construct the Business Key | no | uddi:${keyDomain}:business_${businessName} |
| serviceKeyFormat | Key format used to construct the BusinessService Key | no | uddi:${keyDomain}:service_${serviceName} |
| bindingKeyFormat | Key format used to construct the TemplateBinding Key | no | uddi:${keyDomain}:binding_${nodeName}_${serviceName}_${portName} |
| serviceDescription | Default BusinessService description | no | Default service description when no <wsdl:document> element is defined inside the <wsdl:service> element. |
| bindingDescription | Default BindingTemplate description | no | Default binding description when no <wsdl:document> element is defined inside the <wsdl:binding> element. |
7.29. Use the jUDDI Client Code in Your Application Copier lienLien copié sur presse-papiers!
Procedure 7.9. Task
- Open the jUDDI client configuration file in a text editor:
vi SOA_ROOT/jboss-as/server/PROFILE/deploy/jbossesb-registry.sar/esb.juddi.xml. Use this file as a template for your ownuddi.xmlfile. - Make sure the clerk manager points to your custom
uddi.xmlwhen it is instantiated:UDDIClerkManager clerkManager = new UDDIClerkManager("META/myuddi.xml"); clerkManager.start(); UDDIClerk clerk = clerkManager.getClientConfig().getUDDIClerks().get(clerkName);UDDIClerkManager clerkManager = new UDDIClerkManager("META/myuddi.xml"); clerkManager.start(); UDDIClerk clerk = clerkManager.getClientConfig().getUDDIClerks().get(clerkName);Copy to Clipboard Copied! Toggle word wrap Toggle overflow Note
A UDDIClerk will allow you do make authenticated requests to a UDDI server.
7.30. WSDL and the UDDI Registry Copier lienLien copié sur presse-papiers!
7.31. Specification for the Service and Binding Descriptions in the WSDL Copier lienLien copié sur presse-papiers!
uddi.xml file. However it makes a lot more sense to have a specific description for each service and binding and so the registration code tries to obtain these descriptions from the <wsdl:document> tags in the WSDL, which can be nested as a child element inside the <wsdl:service> and <wsdl:binding> elements.
7.32. Register a WSDL Process in jUDDI Copier lienLien copié sur presse-papiers!
Prerequisites
- org.apache.juddi.v3.client.mapping
Procedure 7.10. Task
- Use the code in the
org.apache.juddi.v3.client.mappingpackage. - Make the following call to asynchronously register your web service end point:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Note
This does assume that you can pass in a URL to the WSDL file in addition to the WSDLDefinition. In most cases you will need to package the WSDL file you wish to register in your deployment.To obtain a WSDLDefinition use this code:ReadWSDL readWSDL = new ReadWSDL(); Definition definition = readWSDL.readWSDL("wsdl/HelloWorld.wsdl");ReadWSDL readWSDL = new ReadWSDL(); Definition definition = readWSDL.readWSDL("wsdl/HelloWorld.wsdl");Copy to Clipboard Copied! Toggle word wrap Toggle overflow You need to pass the path information to the WSDL that is on the classpath.
7.33. Remove a WSDL Binding from the Service Registry Copier lienLien copié sur presse-papiers!
Procedure 7.11. Task
- To remove a WSDL binding from the service registry, use this code:
WSDL2UDDI wsdl2UDDI = new WSDL2UDDI(clerk, urlLocalizer, properties); String serviceKey = wsdl2UDDI.unRegister(serviceName, portName, serviceURL);
WSDL2UDDI wsdl2UDDI = new WSDL2UDDI(clerk, urlLocalizer, properties); String serviceKey = wsdl2UDDI.unRegister(serviceName, portName, serviceURL);Copy to Clipboard Copied! Toggle word wrap Toggle overflow Note
If this is the last BindingTemplate for the BusinessService it will also remove the BusinessService itself along with the WSDLPortType and WSDLBinding TModels. The lifecycle is set to "registration" on deployment of the end point and set to "unregistration" on removal of the end point.
7.34. Register a BPEL Process in jUDDI Copier lienLien copié sur presse-papiers!
Prerequisites
- org.apache.juddi.v3.client.mapping
Procedure 7.12. Task
- Use the code in the
org.apache.juddi.v3.client.mappingpackage. - Make the following call to asynchronously register your web service end point:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Set the RegistrationInfo.RegistrationType to RegistrationType.BPEL.
7.35. URLLocalizer Interface and the JBoss Enterprise SOA Platform Copier lienLien copié sur presse-papiers!
7.36. Dynamic UDDI Service Look-up Copier lienLien copié sur presse-papiers!
7.37. Use the Service Locator to Find a Service Binding Copier lienLien copié sur presse-papiers!
Prerequisites
- You must already know the names of the service and port.
Procedure 7.13. Task
- To locate a service binding using the service locator, use this code:
ServiceLocator serviceLocator = new ServiceLocator(clerk, urlLocalizer, properties); String endPointURL = serviceLocator.lookupEndpoint(serviceQName, String portName);
ServiceLocator serviceLocator = new ServiceLocator(clerk, urlLocalizer, properties); String endPointURL = serviceLocator.lookupEndpoint(serviceQName, String portName);Copy to Clipboard Copied! Toggle word wrap Toggle overflow Note
The downside of doing a look-up prior to each service invocation is that it will be detrimental to performance.
7.38. Tutorial: Using the jUDDI Client Copier lienLien copié sur presse-papiers!
Prerequisites
- Make sure the publisher (in this case,
root) already exists in the Service Registry
Procedure 7.14. Task
- Obtain the sample code located in the
uddi-clientmodule. - Make a call to the Registry to obtain an authentication token. (The following code is taken from the unit tests in this module):
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Note
Ensure that you supply the correct credentials for the root publisher to obtain a successful response.