OSS through JavaTM Initiative
Design of the OSS Common API Reference Implementation (JSR 144) OSS through Java Initiative
Vincent Perrot, Sun Microsystem COM-API-Ri_Design.[Link]
Copyright 2002-2007 The Members of the OSS through Java Initiative. All Rights Reserved. Use is subject to license terms. Sun, Sun Microsystems, the Sun Logo are trademarks or registered trademarks of Sun Microsystems, Inc. in the United States and other countries.
COM-API-Ri_Design.[Link]
OSS through JavaTM Initiative
Executive Summary
The Common API offers interfaces and classes, which are common across all OSS API defined under OSS J Initiative. This document describes how the Reference Implementation (RI) was created and designed to implement the Common API Specifications. The RI contains several parts that could be used independently: the based interfaces implementation the CBE implementation examples of java, xml over JMS and Web services implementation.
COM-API-Ri_Design.[Link]
OSS through JavaTM Initiative
Table of Contents
Executive Summary......................................................................................................................................2 Table of Contents..........................................................................................................................................3 Preface........................................................................................................................................................... 4
Objectives....................................................................................................................... 4 Audience......................................................................................................................... 4 Related Information........................................................................................................4 Revision History: ...........................................................................................................4
1 Introduction................................................................................................................................................ 6 2 Design Overview of Reusable Part of Reference Implementation ........................................................ 7
2.1 Application Context Implementer class.....................................................................7 2.2 Attribute Access Classes............................................................................................8 2.3 Base Java Value Type and CBE implementations.....................................................8
3 Design overview of integration profile examples................................................................................... 10
3.1 Common_ex_EJB.................................................................................................... 11 3.2 Common_ex_WS......................................................................................................12 3.3 Common_ex_vpn_WS..............................................................................................15
3.3.1 work environment..................................................................................................................................................16 3.3.2 generation of the web service endpoint.................................................................................................................17 [Link] Handling with OSSJ Values and Keys.......................................................................................................... 21
3.4 Verify the Application..............................................................................................32
3.4.1 Static verification.................................................................................................................................................. 32 Appendix A: Glossary and References..................................................................................................... 35
References.................................................................................................................... 35
COM-API-Ri_Design.[Link]
OSS through JavaTM Initiative
Preface
Objectives
Design description of the OSS/J Common Reference Implementation
Audience
The target audiences are Developers who seek information about how the Common API can be implemented Developers of other OSS/J API Reference Implementers Developers who want to make use of these API and extend its implementations
Related Information
Prerequisite NetBeans IDE 5.5.1, and glassfish v2 b50. You can download it at: [Link] [Link] Once NetBeans and Glassfish install properly, start NetBeans go to Runtime and add the Glassfish application Server:
And follow instructions.
Revision History:
Date February 2006 Version 1.3 Author Vincent Perrot State Maintenance release 3 Comments
COM-API-Ri_Design.[Link]
OSS through JavaTM Initiative
Sun Microsystems Inc September 2006 February 2006 1.5 1.4 Vincent Perrot Sun Microsystems Inc Vincent Perrot Sun Microsystems Inc Maintenance Release 4 Maintenance Release 5 Change all the content according to the new RI design
COM-API-Ri_Design.[Link]
OSS through JavaTM Initiative
1 Introduction
This document describes the design and the creation phases of the OSS through Java Initiative, Common API Reference Implementation. The Reference Implementation can be used either as a proof-of-concept for the Common API specification, showing that it is possible to implement the API or APIs can be directly used as a package. The Reference Implementation consists of two parts. The first part, consists of abstract classes and interfaces which can be reused by the target audiences of this API directly and the second part consists of concrete implementation the Interfaces of the API this part cant be reused and this only serves as proof or example how to implement the API. This document shows how the Reference Implementation is designed. Reference Implementation provides the concrete interfaces and classes as specified in the Common API Specifications. It also provides some abstract classes for certain interfaces so that the developers classes can directly extend these classes and implement only those none generic methods. Finally it contains examples of the different profile implementations. In general the concrete Reference Implementation is designed as a set of Enterprise Java Beans. The entire RI is developed using NetBeans and Java EE SDK.
COM-API-Ri_Design.[Link]
OSS through JavaTM Initiative
2 Design Overview of Reusable Part of Reference Implementation
The Reference Implementation has following set of classes apart from the classes and interfaces specified by the specification. Each of these classes is explained in detail in later part of the document. Application Context Implementer class Attribute Access classes Base Java Value Type and CBE implementations
All the reusable classes are archived in the jars with a name starting by oss_cbe for the CBE implementations and oss_common_ri for the implementation of the based interfaces. In the following chapter some interface implementations are detailed.
2.1 Application Context Implementer class
The ApplicationContext implementation class contains the URL and other system properties required to set up an initial connection with the JNDI provider into which the components in charge of that managed entity are registered. This class implements the ApplicationContext Interface defined in the specification apart from this it provides additional static method, which provides the Application context based on the present server configuration. The figure below shows the relationship between the interface and class Green color indicates the Interface is part of the specification Yellow class is additional class defined in Reference Implementation
<<Interface>> ApplicationContext
ApplicationContextImpl getApplicationContext()
COM-API-Ri_Design.[Link]
OSS through JavaTM Initiative
2.2 Attribute Access Classes
Two classes namely AttributeManager and AttributeAccessImpl are the classes, which help in accessing the attributes of value object as specified in the specification. Attribute Manager manages the attributes of the value object and provides easy methods to get the properties of attributes like attribute names, settable attributes etc. AttributeAccessImpl is abstract class implementing the AttributeAcess Interface, which all value objects must implement according to the specification. This abstract class manages the attributes using the AttributeManager class. The figure below shows the relationship between the interface and classes Green color indicates the Interface is part of the specification Yellow classes are addition classes defined in Reference Implementation
<<Interface>> AttributeAccess
AttributeAccessImpl 1
AttributeManger
2.3 Base Java Value Type and CBE implementations
The Java Value Types are the objects, which are exchanged between the client and [Link] following classes are defined in addition to those specified in the specification ManagedEntityKeyImpl ManagedEntityKeyResultImpl ManagedEntityValueImpl
The figure below shows the relationship between the interface and classes Green color indicates the Interface is part of the specification Yellow classes are addition classes defined in Reference Implementation
COM-API-Ri_Design.[Link]
OSS through JavaTM Initiative
<<Interface>> ManagedEntityKeyResult 0..1
<<Interface>> ManagedEntityKey 1 1 1
<<Interface>> ManagedEntityValue
ManagedEntityKeyResultImpl
ManagedEntityKeyImpl
ManagedEntityValueImpl
1 AttributeManger
ManagedEntityKeyImpl is an abstract class, which implements the ManagedEntityKey Interface. Since very managed Entity type must have a ManagedEntityKey Interface implementation it can directly extend ManagedEntityKey abstract class and define the methods to make the primary key which will be specific to the entity type, functionalities like checking equality of two key objects as specified in the specification is taken care by the abstract class. ManagedEntityvalueImpl implements the ManagedEntityValue Interface as specified in the specification and it also extends the AttributeAccessImpl class. Then all the CBE implementation classes are derived from these based definitions. The CBE implementation classes have been generated for a large part using a hand made java generator. The generation facilitates: the consistencies in names and formats the fastidious duplication of common code section (managing inheritance and Attribute management, population etc) stable clone and equality methods generation etc.
COM-API-Ri_Design.[Link]
OSS through JavaTM Initiative
3 Design overview of integration profile examples
This part of Reference Implementation consists of concrete example Implementations of API for the three integration profiles with a special attention for the web services one. The example application (a minimalist vpn services) and its three integration profiles are packaged and deployed within a unique enterprise archive (ear file). It provides any client application all the possible interfaces to the common features. And it demonstrates the extension capabilities of the Common API design. NetBeans and Java EE SDK have been largely used for this development. Java EE 5 SDK supports the combination of J2EE 1.4 EJBs and latest Web services from Java EE 5 into the same archive. This capability has been used to build a simple and reusable OSSJ example. For the implementation of the web services interfaces 2 different approaches have been used: WSDL to java: generation of the WS implementation from the WSDL. This technique have been used to produce the common features based on the WSDL generated in the Specification bundle. Java to WSDL: the code of the specification have been duplicated into the RI and then instrumented using JSE5 annotation in order to code the Webservices endpoint and then generate the WSDL. This technique have use for the vpn example.
Common_ex.ear
Common_ex_EJB.jar: Java and XML/JMS integration profiles
Common_ex_WS..jar: WSDL to java web services integration profile
Common_ex_vpn_WS.jar: Java to WSDL web services integration profile
COM-API-Ri_Design.[Link]
10
OSS through JavaTM Initiative
3.1 Common_ex_EJB
This module contains all the code necessary to implement the applicaition itself (vpn service) and the java and XML/JMS integration profiles example. It uses JSE5 (including annotation that will be used later only for the WS implementation). It includes : the specification interfaces ([Link] package name), the class implementations of the used CBE ([Link] pacjage name) as well as the EJBs and necessary message driven bean needed for the XML/JMS profiles.
This module is not using any Java EE 5 specific feature and reference only J2EE 1.4 specification.
The EJB Module common_ex_EJB is created as a new project where the necessary source files have been either newly created or copying form other projects. This module has no external dependencies (libraries or other projects) except to Java SE and EE. The deployment descriptor follows the OSSJ convention for JNDI names, etc. It contains four EJBs implementing the Vpn applicaition: VpnServiceSB: this is the Session bean (java integration profile) exposing the Remote interface of the application and extending the Common interface. JmsSender and XVTMessageDrivenBean handling the XML resquests and responses of the XML/JMS profile MplsvpnTblEB, the Entity bean implementing the application core business and persistency following the recommended OSSJ design guidelines.
This application also needs the following external resources to deploy and run correctly:
COM-API-Ri_Design.[Link]
11
OSS through JavaTM Initiative
Once the started the database table need to be created using the following SQL syntax (the src directory sql/[Link] file):
-- CONNECT 'jdbc:derby://localhost:1527/mplsvpndb;user=dbuser;password=dbpassword;';
CREATE TABLE MPLSVPN_TBL ( MplsKey varchar(128) not null, State varchar(128), SubscriberId varchar(256), Mandatory int, VrfName varchar(256), StartMode int, CONSTRAINT mplsvpntable_PK Primary Key (MplsKey));
-- EXIT;
3.2 Common_ex_WS
This module contains the WS profile for the common services. It has been generated using NetBeans capabilities from the WSDL files. After the creation of the project (EJB Module) in NetBeans,
COM-API-Ri_Design.[Link]
12
OSS through JavaTM Initiative
create the WS using the new file wizard:
COM-API-Ri_Design.[Link]
13
OSS through JavaTM Initiative
Then follow instructions, and finally complete the code skeleton. The following lines needs to be added to interface the session bean implementing the VPN service:
@EJB(name="VpnServiceEJB") VpnServiceRemoteHome vpnHome; private VpnServiceRemote getSession() throws [Link], [Link] { if (initCtx == null) initCtx = new InitialContext(); vpnHome = (VpnServiceRemoteHome)[Link]("System/System1/ApplicationType/Common/Application/1-4;14;ReferenceImplementation/Comp/VpnServiceBean"); if (vpnHome == null){ throw new [Link]("Lookup of VpnServiceRemoteHome failed"); } try { return [Link](); } catch ([Link] rex) { [Link](); throw new EJBException("RemoteException: " + [Link]()); } }
Once deployed, this service could be easily test using NetBeans and application server capabilities: Go to the common_ex_WS project, open the Web Services section right click on the service and selection Test Web Service:
Your favorite web browser will pops up the web services page from where you can exercise one of the OSS Common API feature:
COM-API-Ri_Design.[Link] 14
OSS through JavaTM Initiative
For example, pushing the getEventTypes button will return:
3.3 Common_ex_vpn_WS
COM-API-Ri_Design.[Link]
15
OSS through JavaTM Initiative
The module demonstrates how to expose a JavaEE enterprise application the java integration profile of module common_ex_EJB- as web service with JAX-WS 2.1. Concretely, a new EJB3.0 implementing the web service have been created. This EJB3.0 accesses the existing Session Bean to invoke the corresponding methods providing the services. The obsolete JAX-RPC tools, have been replaced by JAX-WS 2.1 tools to generate the artifacts exposing the EJB3.0 as web service. In the following sections, the migration process is detailed step by step, with comments to better understand constraints and choices. This section comes with a NetBeans project illustrating the work with a concrete example. This section is divided into four parts: the work environment and project creation, the generation of the web service endpoint, the packaging of the project deployment file (the EAR), the test of the web services.
Web Service Client
XMLSOAP Message over HTTP
Client artifacts generated by JAX-WS Web Service artifacts generated by JAX-WS Web Service Descritption WSDL / XSD files
Web Service Implementation Class
Caption:
Enterprise Application SessionBean
EJB Container EBJ 2.0 EBJ 3.0 Web Service artifacts generated by JAX-WS
Derby database
Common_ex_EJB Sun Application Server 9.0 PE
3.3.1 work environment
NetBeans 5.5.1 and Glassfish v2 b50
COM-API-Ri_Design.[Link] 16
OSS through JavaTM Initiative
3.3.2 generation of the web service endpoint
It starts from the creation of a new EJB Module named common_ex_vpn_WS and a new Web Service named VpnService (More details will be given later). This new module is naturally included into the final ear as follow: In case the enterprise application module has not yet been created: create a new enterprise application, choose JavaEE 5; do not create any related module : no EJB module, no web application module, no client application module; then link this EJB module to it; and finally clean and build your project (from the EAR ant targets, more details are given later). The module is now ready to use JAX WS tools. The Web services end point will generated from the annotated EJB, interfaces and classes. This will show how existing systems can expose web services integration profile. (Note: a minimalist approach is applied. Many other customizations could be made to make the final generated WSDL files aligned with OSSJ standard). There are two possible implementations: either to interface the session bean or the underlying entity bean (bean called by the session bean): first solution would be to create a new EJB 3.0 for the web service, exposing the VPN service interface. This Ejb 3.0 will then communicate with the Session Bean 2.0 of 'common_ex_EJB' module. Second solution would be to convert the existing Session Bean in the web service implementation (in annotated EJB 3.0) so that the web service implementation classes access directly the entity bean.
To minimize the impact on the existing Session Bean, and to preserve the Java integration profile, the first solution gets the preference. In this netbean project create a new EJB module where the desired methods are created using the same names as the Java integration profile. Then it is connected to the Session Bean exposing the java integration profile as follow:
/* * [Link] * * Created on June 6, 2007, 2:29 PM * * To change this template, choose Tools | Template Manager * and open the template in the editor. */
COM-API-Ri_Design.[Link]
17
OSS through JavaTM Initiative
package [Link];
import [Link]; import [Link]; import [Link]; import [Link]; import [Link]; import [Link]; import [Link]; import [Link]; import [Link]; import [Link];
/** * * @author vince */
@Stateless() @WebService() public class VpnService {
@EJB(name="VpnServiceEJB",mappedName="System/System1/ApplicationType/Common/Application/1-5;15;ReferenceImplementation/Comp/VpnServiceBean") VpnServiceRemoteHome vpnHome;
InitialContext initCtx = null;
@WebMethod(operationName="createMplsVpnServiceByValue") public MplsVpnServiceKey createMplsVpnServiceByValue(MplsVpnServiceValue mplsVpnServiceValue)
throws [Link], [Link], [Link], [Link]{ try {
MplsVpnServiceKey retKey = null; try { retKey = getSession().createMplsVpnServiceByValue(mplsVpnServiceValue); } catch ([Link] rex) { [Link](); throw new EJBException("RemoteException" + [Link]()); }
COM-API-Ri_Design.[Link]
18
OSS through JavaTM Initiative
return retKey; } catch (Exception e) { String msg = "Unable to createMplsVpnServiceByValue... Exception : throw new RemoteException(msg+e); } } ";
@WebMethod(operationName="getMplsVpnServiceByKey") public MplsVpnServiceValue
getMplsVpnServiceByKey(MplsVpnServiceKey mplsVpnServiceKey, String[] attrName
throws [Link], [Link], [Link]{ try {
MplsVpnServiceValue retValue = null; try { retValue = getSession().getMplsVpnServiceByKey(mplsVpnServiceKey, attrNames); } catch ([Link] rex) { [Link](); throw new EJBException("RemoteException" + [Link]()); } //set all attribute populated for the XML encoding ((AttributeAccessImpl)retValue).setFullyPopulated();
return retValue; } catch (Exception e) { String msg = "Unable to getMplsVpnServiceByKey... Exception : throw new RemoteException(msg+e); } } ";
@WebMethod(operationName="setMplsVpnServiceByValue") public void setMplsVpnServiceByValue(MplsVpnServiceValue mplsVpnServiceValue, boolean resyncRequired)
throws [Link], [Link], [Link], [Link], [Link]{ try {
try { getSession().setMplsVpnServiceByValue(mplsVpnServiceValue, resyncRequired); } catch ([Link] rex) { [Link](); throw new EJBException("RemoteException" + [Link]());
COM-API-Ri_Design.[Link]
19
OSS through JavaTM Initiative
} } catch (Exception e) { String msg = "Unable to setMplsVpnServiceByValue... Exception : throw new RemoteException(msg+e); } } ";
private VpnServiceRemote getSession() throws [Link], [Link] {
if (initCtx == null) initCtx = new InitialContext();
vpnHome = (VpnServiceRemoteHome)[Link]("System/System1/ApplicationType/Common/Application 5;ReferenceImplementation/Comp/VpnServiceBean"); if (vpnHome == null){ throw new [Link]("Lookup of VpnServiceRemoteHome failed"); }
try { return [Link](); } catch ([Link] rex) { [Link](); throw new EJBException("RemoteException: " + [Link]()); } }
The needed of Web Services related annotations are: @Stateless: to specify this class is a Stateless Session Bean ; @WebService: to indicate JAX-WS this file is a web service, so that artifacts have to be created ; @WebMethod: for JAX-WS too, indicating that this method can be request by a web service client ;
NetBeans handles automatically the @WebService annotation by creating the ant target 'wsgen-generate' for producing the endpoint of this web service. As this point wsgen execution should be possible. But JAX-B will encounter obstacle to compute interfaces definitions ; error message like "JAX'B can't handle with interfaces..." will be generated. Next part explains how to handle the generation from interfaces definitions.
COM-API-Ri_Design.[Link]
20
OSS through JavaTM Initiative
From this interface definition no specific annotation appears for return values and argument of methods. The following section details the preliminary development that has been done in the CBE definitions and implementations.
[Link] Handling with OSSJ Values and Keys
OSS/J APIs define only interfaces for parameter and return types. JAX-WS tool generates artifacts (java classes) able to convert an xml data file to a java object and vice versa. JAXWS delegates to JAX-B the binding of xml types to java types. JAX-B needs to instanciate classes (can't be done with interfaces) to encode and decode XML from / to Java . It may exist several solutions to solve this issue. JAX-B experts have already considered it and propose three solutions. Their three solutions using different annotations: @XmlRootElement: implies to annotate all the code, each time when interface is used or implemented. @XmlJavaTypeAdapter: only applicable if interface definitions can be modified (regarding JCP licensing model for example) @XmlElement: constraint to have a one to one relationship between interfaces and implementations (not always the case for the clients) and cross boundaries between modules can be not supported...
More details can be found in the JAX-B guide, currently written and step by step improved: [Link] In our case, the second solution using @XmlJavaTypeAdapter is used for its simplicity and minimal code impact. The @XmlJavaTypeAdapter annotation allows JAX-B to link the XML type to a java encoder/decoder. Its usage involves two constraints : annotation of the interface, creation of an adapter class with two methods for (un)marshalling between the interface and the implementation class. This avoid the modification of the existing CBE implementation. Here is an example:
package [Link]; /** * */ import [Link]; import [Link]; Public interface definition for MplsVpnService
@XmlType
COM-API-Ri_Design.[Link]
21
OSS through JavaTM Initiative
@XmlJavaTypeAdapter(value=[Link])
public interface MplsVpnServiceValue extends [Link] { public static final String VALUE_TYPE = "[Link]"; public static final String MPLS_VPN_SERVICE_KEY = "mplsVpnServiceKey"; public final static String VRF_NAME = "vrfName";
/** Deep copy of this object public Object clone(); /** * Attribute getter for vrfName
*/
* @return the value of the vrfName field. * @throws [Link] - if the attribute is not populated. */ public [Link] getVrfName() throws [Link];
/** * Attribute setter for vrfName * @param value - the value to use to set the vrfName attribute. * @throws [Link] - Is thrown to report that a bad argument was provided to the method. */ public void setVrfName( [Link] value ) throws [Link];
/** * Gets the key for this value object * @return the key for this value object * @throws [Link] if no key was populated in this * */ public [Link] getMplsVpnServiceKey() throws [Link]; value object.
/** * Sets the key for this value object * * @param key - the key to set on this value object. * @throws [Link], if the key is not a valid * */ key for this value object.
COM-API-Ri_Design.[Link]
22
OSS through JavaTM Initiative
public void setMplsVpnServiceKey( [Link] key ) throws [Link];
/** * Factory method for MplsVpnServiceKey * * @return a new instance of a blank MplsVpnServiceKey */ public [Link] makeMplsVpnServiceKey(); }
...and its Adapter:
package [Link];
import [Link];
public class MplsVpnServiceValueAdapter extends XmlAdapter<MplsVpnServiceValueImpl,MplsVpnServiceValue>{
public MplsVpnServiceValue unmarshal(MplsVpnServiceValueImpl p) throws Exception { try { MplsVpnServiceValue r = p; return r; } catch (Exception e) { [Link](); String msg = "Unable to unmarshall MplsVpnServiceValue : "+p; throw new Exception(msg+" due to "+e); } }
public MplsVpnServiceValueImpl marshal(MplsVpnServiceValue p) throws Exception { try { MplsVpnServiceValueImpl r = (MplsVpnServiceValueImpl)p; return r; } catch (Exception e) { [Link](); String msg = "Unable to marshall MplsVpnServiceValueImpl : "+p; throw new Exception(msg+" due to "+e); }
COM-API-Ri_Design.[Link]
23
OSS through JavaTM Initiative
Note: The adpater classes have been put in the same package as the corresponding implementations. Coding manually the adapters is a tedious task, however they can be easily generated. Wsgen target can now be executed again to verify artifacts are well generated; all the previous errors shall disappear. This step is not mandatory; it is just for verification purpose. Now, the project shall be able to deploy successfully from the application project using the Run Project item (right-click) on the project. The deployment could be easily verified by accessing the wsdl file of the web browser using the following URL: [Link] The web service interface could also being test using an integrated client application using the same EJB module in NetBeans and application server. The First basic test can be done using the same method as described for common_ex_WS: Select the VpnService using right-click and Push Test Web Service The following page will be displayed into your web browser:
Then click on createMplsVpnServiceByValue:
COM-API-Ri_Design.[Link]
24
OSS through JavaTM Initiative
A Web Service client project example is also provided with this project to show how to handle complex types. The project is name VpnServiceClient The client has been created as follow:
Create a new java Application Project: New Project then General->Java Application
COM-API-Ri_Design.[Link]
25
OSS through JavaTM Initiative
Then enter the application fields as follow:
Once the skeleton created copy/past the following code:
COM-API-Ri_Design.[Link] 26
OSS through JavaTM Initiative
/* * [Link] * Example Of a Client Application using the Web Services capabilities and OSSJ WS profile */
import [Link]; import [Link]; import [Link]; import [Link]; import [Link];
public class VpnServiceClient {
/** * Creates a new instance of VpnServiceClient */ public VpnServiceClient() { } // Add here the reference to WS endpoint and location @WebServiceRef(wsdlLocation="[Link] static [Link] service;
public static void main(String[] args) { try { VpnServiceClient client = new VpnServiceClient();
[Link](args); } catch(Exception e) { [Link](); } }
public void doTest(String[] args) { try { [Link](" Retrieving port from the service " + service); [Link] port = ([Link]) new [Link]().getVpnServicePort();
[Link](" Invoking 'createMplsVpnService' operation on the Servant port"); MplsVpnServiceValueImpl mplsVpn = new MplsVpnServiceValueImpl(); //set the mandatory attributes [Link]("myVrfName"); [Link](0); [Link]("Active"); [Link]("mySubscriberId");
COM-API-Ri_Design.[Link]
27
OSS through JavaTM Initiative
[Link](false); [Link](0);
//invoke create method on the WS MplsVpnServiceKeyImpl mplsVpnKey = (MplsVpnServiceKeyImpl)[Link](mplsVpn);
[Link](" Result, MplsVpnServiceKey returned for the new created:"); [Link](" [Link](" [Link](" primaryKey: "+[Link]()); type VrfName : "+[Link]()); : "+[Link]());
// get the new created vpnservice [Link](" Invoking 'getMplsVpnService' with "+[Link]()); MplsVpnServiceValueImpl mplsValue = (MplsVpnServiceValueImpl)[Link](mplsVpnKey,null); [Link](" Result, MplsVpnServiceKey returned for the new created:"); [Link](" primaryKey : "+[Link]().getPrimaryKey()); [Link](" [Link](" SubsbcriverId : "+[Link]()); VrfName : "+[Link]());
// change some values [Link](" Invoking 'setMplsVpnServiceByValue'"); [Link]("mySubscriberId"); [Link]("updated VrfName: ["+[Link]()+"]"); [Link](mplsValue,false);
// get the new created vpnservice [Link](" Invoking 'getMplsVpnService' with "+[Link]()); mplsValue = (MplsVpnServiceValueImpl)[Link](mplsVpnKey,null); [Link](" Result, MplsVpnServiceKey returned for the new created:"); [Link](" primaryKey : "+[Link]().getPrimaryKey()); [Link](" [Link](" SubsbcriverId : "+[Link]()); VrfName : "+[Link]());
} catch(SOAPFaultException Se) { SOAPFault fault = [Link](); [Link]("SOAPFaultException thrown while running the client : "+[Link]()); } catch(Exception e) { [Link](); } } }
COM-API-Ri_Design.[Link]
28
OSS through JavaTM Initiative
In order to solve (or link) this client application to the VpnService, it is a Web Service Client shall be created as follow: Right click on the VpnServiceClient project a create new Web Service Client:
Note: in case Web Service Client do not appear directly select file/Folder->Web Services->Web Service Client Then enter the following information by selecting Project>common_ex_vpn_WS.VpnService and use client as package name:
COM-API-Ri_Design.[Link]
29
OSS through JavaTM Initiative
NetBeans will then execute some code generation automatically. Your project is now ready to be executed, select Run Project (right click on the project): The following trace shall appear:
COM-API-Ri_Design.[Link]
30
OSS through JavaTM Initiative
COM-API-Ri_Design.[Link]
31
OSS through JavaTM Initiative
3.4 Verify the Application
According to the OSS/J recommendation, the application have to be verified using the Java EE verifier. This tool is integrated into the NetBeans and a downloadable plugin. Using the Update Center download and install the Sun Java System Application Verification Kit (AVK). And download the latest AVK for JavaEE 5 from [Link] (Note: point the installation wizard to the Application Server already installed)
3.4.1 Static verification
Select the common_ex project and select the verify item:
Select first the Static verification: The common_ex application contains no error. Repeat this step and then select the Dynamic Verification:
COM-API-Ri_Design.[Link]
32
OSS through JavaTM Initiative
And follow instruction. Execute the TCKs, once terminated, to view the verification report after executing the application: in the Runtime window, right-click the Application Server node and choose Generate AVK Report. The AVK reports for Common RI 96% coverage => successfully pass the test
COM-API-Ri_Design.[Link]
33
OSS through JavaTM Initiative
COM-API-Ri_Design.[Link]
34
OSS through JavaTM Initiative
Appendix A: Glossary and References
References
COM-API-Ri_Design.[Link]
35