2 Understanding Communication Service Components

This chapter describes the components, management, and use of the communication services used by Oracle Communications Services Gatekeeper. Also see ”About Communication Services” in Services Gatekeeper Communication Service Reference Guide for a higher-level look at communication services.

Understanding Communication Service Components

A communication service consists of:

  • A Service Web Service (SOAP or RESTful)

  • A Service enterprise Java bean (EJB)

  • A Callback EJB

  • A Callback client EJB

  • A set of network protocol plug-ins

Service components, such as the Web service and service EJB, handle application-initiated requests.

Callback components, such as the callback EJB and callback client EJB, handle network-triggered requests.

When these components are deployed in separate clusters, remote calls are used to transport the request or response.

Figure 2-1 shows the high-level communication path used by application-triggered and network-triggered requests.

Figure 2-1 High-Level Components of a Communication Service

Description of Figure 2-1 follows
Description of ''Figure 2-1 High-Level Components of a Communication Service''

Communication service components are auto-generated and are based on one or more WSDL or WADL files. Application-initiated requests use service WSDL or WADL files. Network-triggered requests use callback WSDL or WADL files.

You use Platform Developer Studio Wizard to generate the communication service components listed in Table 2-1.

Table 2-1 Common Components of a Communication Service

Module Description North interface South interface

Service Web Service

For application-initiated requests, the service Web service implements the (SOAP or RESTful) interfaces defined in the set of WSDL or WADL files for the specific service.

The definition for a Web service is packaged into a single WAR file. For example, the SOAP Parlay X 2.1 Short Messaging service defines the SendSms, ReceiveSms, and SmsNotificationManager interfaces for application-initiated requests. The service Web service implements all the above interfaces and is packaged into one single WAR file for this communication service.

Passes on the requests to the service EJB. Any service EJB of the same type can be chosen, regardless of the server on which it is deployed. The requests are load-balanced across the different server instances.

Packaged into a single WAR file.

Deployed as a part of the access tier .ear for the communication service.

The Service Web service is transparent to an extension developer.

SOAP/HTTP representation of the service WSDL files

Java RMI representation of the service WSDL files

Service EJB

The service EJB is packaged into a single JAR file for the communication service. When the Web service makes a Java RMI call to a service EJB, the service EJB uses the Plug-in Manager to locate and calls the appropriate plug-in instance. The operations defined between the service Web service and the service EJB are Java realizations of the interfaces defined in the service WSDL files.

The service EJB is responsible for:

  • Constructing the RequestInfo object.

  • Converting any exception caught to an exception that is defined in the service WSDL files.

This functionality must be implemented in the PluginFactory class, which extends "Class: RequestInfo".

Packaged in a single .jar file.

Deployed as a part of the network tier .ear file.

Java RMI representation of the service WSDL files

Local Java representation of the service WSDL files

Callback EJB

A Web services client that uses a Web service implemented by an application. It uses the interfaces defined in the set of callback WSDL or WADL files that define the Web service for network-triggered requests.

Accepts requests from the service callback client EJB and propagates them to an application.

Packaged into a single .jar file for the communication service.

Deployed as a part of the access tier .ear file.

SOAP/HTTP representation of the service callback WSDL file

Java RMI representation of the callback WSDL file

Callback EJB client

A client library that abstracts the remote call between the plug-in and the callback EJB.

Accepts requests from a plug-in and propagates them to the callback EJB.

It provides for cache invalidation of references to the remote object in order to support in-production redeployment of the .ear file for the access tier.

Any callback EJB of the same type can be chosen, regardless of the server on which it is deployed. The requests are load-balanced across the different server instances.

See "Class: CallbackFactory" and "Interface: Callback".

Packaged into a single .jar file for the communication service.

Deployed as a part of the network tier .ear file.

Java RMI representation of the service callback WSDL file

Local Java representation of the callback WSDL file


Understanding Communication Service Plug-ins

As an extension developer, you can use the range of interfaces and classes provided in the com.bea.wlcp.wlng.api.plugin.* packages.

The first of these is a set of interfaces that define the borders of a plug-in and related helper classes. You can use these borders to apply aspects, the special constructs that contain several entities unavailable to standard classes in the definition of the plug-in and thereby provide flexibility in handling the request in transit. See "Understanding Aspects, Annotations, EDRs, Alarms, and CDRs" for information on aspects and the Services Gatekeeper Java API Reference for information on the com.bea.wlcp.wlng.plugin package.

Plug-in Service and Plug-in Instance

A plug-in service is a JEE application that implements the com.bea.wlcp.wlng.api.plugin.ManagedPluginService interface. It has:

  • A life cycle, defined in the com.bea.wlcp.wlng.api.plugin.PluginServiceLifecycle interface.

  • A registry, defined in the com.bea.wlcp.wlng.api.plugin.PluginService interface.

  • A factory to create plug-in instances, defined in the com.bea.wlcp.wlng.api.plugin.PluginInstanceFactory interface.

Life-cycle management is performed on the plug-in service.

A plug-in instance is a class that implements the com.bea.wlcp.wlng.api.plugin.ManagedPluginInstance interface. Plug-in instances are part of the traffic flow. Each plug-in instance registers with the Plug-in Manager and manages the routing. It has:

  • A life cycle defined in the com.bea.wlcp.wlng.api.plugin.PluginInstanceLifecycle interface.

  • A set of PluginNorth and PluginSouth interfaces that it implements. These interfaces are defined by the application-facing interfaces and the network-facing interfaces.

  • A registry, defined in the com.bea.wlcp.wlng.api.plugin.PluginInstance interface. This registry holds the list of the registered interfaces.

  • Logic that examines the data in a request and determines if the instance can handle it or not. The interface for this logic is defined in com.bea.wlcp.wlng.api.plugin.PluginInstance.

  • Logic that maintains the state of a connection. The interface for this logic is defined in com.bea.wlcp.wlng.api.plugin.PluginInstance.

Understanding the Plug-in States

Plug-in services have the following states:

  • NEW

  • STARTED

  • ACTIVE (ADMIN)

  • ACTIVE (RUNNING)

Plug-in instances have the following states:

  • NEW

  • ACTIVE

Figure 2-2 shows the states used by the plug-in service and plug-in instance.

Figure 2-2 States for a Plug-in Service (left) and a Plug-in instance (right)

Description of Figure 2-2 follows
Description of ''Figure 2-2 States for a Plug-in Service (left) and a Plug-in instance (right)''

The state transitions in Figure 2-1 are triggered by:

  • The start-up sequence of the server in which the plug-in is deployed.

  • An explicit deployment of the plug-in using the weblogic.Deployer, a Java-based deployment tool that provides a command-line interface to the WebLogic Server deployment API. For details, see "Deploying Applications and Modules with weblogic.Deployer" in Oracle Fusion Middleware Deploying Applications to Oracle WebLogic Server.

Note:

All deployments are made at the .ear level, which means that individual plug-ins are not targeted, but all plug-ins within the .ear are affected.

Table 2-2 lists the plug-in service state transitions, what they are triggered by and describes the state.

Table 2-2 Plug-in Service State Transitions

State Transition Triggered by Descriptions

init

Deployment or startup

The plug-in service has been created and initialized.

The only method that will be called in this state is doStarted()

doStarted

Deployment or startup

The plug-in service should perform as much initialization as possible without being externally visible. Examples include: retrieving configuration data, creating internal objects, and initializing stores.

doActivated

Deployment or startup

The plug-in service should continue activation and become visible, for example register MBeans, without accepting traffic.

handleResuming

Deployment or startup

The plug-in service should order all plug-in instances to establish connections with the network node, if applicable, and accept traffic.

handleSuspending

Graceful undeployment/redeployment/stopping

That is, by invoking weblogic.Deployer with -graceful

The plug-in service should order the plug-in instance to reject new traffic, but continue processing of in-flight work.

A com.bea.wlcp.wlng.api.plugin.CompletionBarrier type object is provided in the request.

When all in-flight work has been processed, the plug-in should get the com.bea.wlcp.wlng.api.plugin.CompletionBarrierCallback interface type object from the CompletionBarrier type object and call the completed() method on the CompletionBarrierCallback interface.

handleForceSuspending

Forced undeployment/redeployment/stopping

That is invoking weblogic.Deployer with -retiretimeout

The plug-in service should order the plug-in instance to reject new traffic and to discard in-flight work.

doDeactivated

Undeployment.

The plug-in service should deactivate itself, unregister any MBeans and become invisible.

doStopped

Undeployment.

The plug-in service should perform cleanup and be available for garbage collection.


Table 2-3 lists the state transitions, what they are triggered by and describes each state. These state transitions are triggered by either the start-up sequence of the server on which the plug-in instance is created, or are an explicit creation of a new instance using the Plug-in manager. See the discussion on ”Managing and Configuring the Plug-in Manager” in the Services Gatekeeper System Administrator's Guide.

Table 2-3 Plug-in Instance State Transitions

Transition Triggered by Descriptions

activate

Creation of the plug-in instance using the Plug-in Manager MBean.

The plug-in instance is created. Depending on the state of the plug-in service, the plug-in instance should take the appropriate action. If the state of the plug-in service is:

  • ACTIVE (ADMIN): The plug-in instance

    Instantiates and registers the PluginNorth and call-back interfaces with the plug-in manager.

    Instantiates and registers the PluginSouth interfaces with the plug-in manager.

    Instantiates any ConfigurationStore.

    Registers the MBean for the instance.

  • ACTIVE (RUNNING): The plug-in instance

    Connects to the network node, if a connection-oriented protocol is used.

    Registers any callbacks with the network node.

deactivate

Destruction of the plug-in instance using the Plug-in Manager MBean.

The plug-in instance:

  • De-registers any call-backs with the network node.

  • Disconnects from the network node, if connected.

  • De-registers the MBean for the instance.

  • Cancels any timers.


The Plug-in Manager maintains a pool of plug-in instances. This pool is provided to the plug-in when the init() method is called. This pool can be used to iterate over all instances in order to propagate events related to state transitions in the plug-in service.

The Plug-in Manager maintains a registry of all PluginNorth and PluginSouth interfaces. It is the responsibility of the plug-in instance to register these interfaces with the Plug-in Manager. The Plug-in Manager uses this list of registered interfaces when routing a request to the appropriate plug-in instance. The Plug-in Manager queries the plug-in instance for information in order to make a routing decision. A plug-in instance maintains:

  • A list of PluginNorth interfaces

  • A list of PluginSouth interfaces

  • Whether the plug-in instance has a connection to the network node.

  • Custom pattern matching, where the plug-in examines the request and marks the plug-in instance as either a 1) mandatory, 2) optional, or 3) required target for the request.

The plug-in service maintains a:

  • Service type, used by all plug-in instances to generate EDRs, CDRs, and statistics.

  • List of supported address schemes, used by the Plug-in Manager when taking a routing decision.

Understanding the PluginPool

The PluginPool interface is a collection of PluginInstances interfaces. PluginPool is populated when a plug-in instance is created using the PluginInstanceFactory. The plug-in service can use PluginPool to do the following:

  • List plug-in instances

  • Get a plug-in instance by its plug-in instance ID.

Obtaining Interfaces and Methods for a Plugin

You use the getServiceInfo operation to the PluginManagerMBean to obtain a list of all the interfaces and methods that a plugin offers. You can do this from the Administration Console, or by invoking the MBean directly. For example calling getServiceInfo with the service type Payment-ParlayRestPayment returns this (truncated) list of interfaces and methods:

Interface: oracle.ocsg.parlayrest.plugin.PaymentPlugin
  Method: startAmountReservationTransaction
    Arguments:
     java.lang.String arg0.amountReservationTransaction.clientCorrelator
     java.lang.String arg0.amountReservationTransaction.endUserId
     java.lang.String arg0.amountReservationTransaction.httpResponseCode
     java.lang.String arg0.amountReservationTransaction.originalServerReferenceCode
     java.math.BigDecimal arg0.amountReservationTransaction.paymentAmount.amountReserved
     java.math.BigDecimal arg0.amountReservationTransaction.paymentAmount.chargingInformation.amount
     java.lang.String arg0.amountReservationTransaction.paymentAmount.chargingInformation.code
     java.lang.String arg0.amountReservationTransaction.paymentAmount.chargingInformation.currency
     java.lang.String arg0.amountReservationTransaction.paymentAmount.chargingInformation.httpResponseCode
     java.lang.String arg0.amountReservationTransaction.paymentAmount.chargingMetaData.channel
     java.lang.String arg0.amountReservationTransaction.paymentAmount.chargingMetaData.httpResponseCode
     java.lang.String arg0.amountReservationTransaction.paymentAmount.chargingMetaData.mandateId
     java.lang.String arg0.amountReservationTransaction.paymentAmount.chargingMetaData.onBehalfOf
     java.lang.String arg0.amountReservationTransaction.paymentAmount.chargingMetaData.productId
     java.lang.String arg0.amountReservationTransaction.paymentAmount.chargingMetaData.purchaseCategoryCode
     java.lang.String arg0.amountReservationTransaction.paymentAmount.chargingMetaData.serviceId
     java.math.BigDecimal arg0.amountReservationTransaction.paymentAmount.chargingMetaData.taxAmount
     java.lang.String arg0.amountReservationTransaction.paymentAmount.httpResponseCode
     java.math.BigDecimal arg0.amountReservationTransaction.paymentAmount.totalAmountCharged
     java.math.BigDecimal arg0.amountReservationTransaction.paymentAmount.totalAmountRefunded
     java.lang.String arg0.amountReservationTransaction.referenceCode
     int arg0.amountReservationTransaction.referenceSequence
     java.lang.String arg0.amountReservationTransaction.resourceURL
     java.lang.String arg0.amountReservationTransaction.serverReferenceCode
     java.lang.String arg0.endUserIdPath
     java.lang.String arg0.httpResponseCode
    Return arguments:
     java.lang.String arg0.clientCorrelator
     java.lang.String arg0.endUserId
     java.lang.String arg0.httpResponseCode
     java.lang.String arg0.originalServerReferenceCode
     java.math.BigDecimal arg0.paymentAmount.amountReserved
     java.math.BigDecimal arg0.paymentAmount.chargingInformation.amount
     java.lang.String arg0.paymentAmount.chargingInformation.code
     java.lang.String arg0.paymentAmount.chargingInformation.currency
     java.lang.String arg0.paymentAmount.chargingInformation.httpResponseCode
     java.lang.String arg0.paymentAmount.chargingMetaData.channel
     java.lang.String arg0.paymentAmount.chargingMetaData.httpResponseCode
     java.lang.String arg0.paymentAmount.chargingMetaData.mandateId
     java.lang.String arg0.paymentAmount.chargingMetaData.onBehalfOf
     java.lang.String arg0.paymentAmount.chargingMetaData.productId
     java.lang.String arg0.paymentAmount.chargingMetaData.purchaseCategoryCode
     java.lang.String arg0.paymentAmount.chargingMetaData.serviceId
     java.math.BigDecimal arg0.paymentAmount.chargingMetaData.taxAmount
     java.lang.String arg0.paymentAmount.httpResponseCode
     java.math.BigDecimal arg0.paymentAmount.totalAmountCharged
     java.math.BigDecimal arg0.paymentAmount.totalAmountRefunded
     java.lang.String arg0.referenceCode
     int arg0.referenceSequence
     java.lang.String arg0.resourceURL
     java.lang.String arg0.serverReferenceCode
  Method: updateAmountReservationTransaction
.
.
.

See the individual communication service chapters in the Services Gatekeeper Communication Service Reference Guide for their service types.

See PluginManagerMBean in the ”All Classes” section of the Services Gatekeeper OAM Java API Reference for details.

Understanding the Plug-in APIs

The com.bea.wlcp.wlng.api.plugin package contains interfaces and classes used for building a plug-in. A brief description of some of the most important interfaces and classes in this package is given here. See the Services Gatekeeper Actions Java API Reference for details.

Interface: Plug-in

Plug-in is the superinterface for "Interface: PluginNorth", "Interface: PluginNorthCallBack", and "Interface: PluginSouth".

These interfaces must be implemented by any plug-in that handles network-triggered requests, either new requests or notifications.

Interface: PluginNorth

PluginNorth defines the entry-point for application-initiated requests and is one of the borders at which aspects are woven. This interface must be implemented by all classes that handle application-triggered requests from the service EJB to the plug-in. All interfaces in the plug-in that implement the traffic interfaces contained in the service WSDL definitions must implement the PluginNorth interface. There must be one class per interface.

A list of the implementations is maintained in the class that implements "Interface: ManagedPluginInstance". Statistics aspects are applied for classes that implement this interface and counters for transaction units are increased. See Services Gatekeeper Licensing Guide for information about transaction units.

Interface: PluginNorthCallBack

PluginNorthCallback defines the limit between the plug-in and the service callback EJB and further on to an application.

All interfaces in the plug-in that implement the traffic interfaces contained in the service callback WSDL definitions must implement the PluginNorthCallback interface. Statistics aspects are applied for classes that implement this interface and counters for transaction units are increased. See Services Gatekeeper Licensing Guide for information about transaction units.

Interface: PluginSouth

PluginSouth defines the entry-point for network-triggered requests. It defines the south (or the network-facing) border of a plug-in. This interface must be implemented by the plug-in.

PluginSouth contains methods used to rebuild the object defined by "Interface: RequestContext" for network-initiated requests. The object is rebuilt using information from the object defined by "Interface: ContextMapperInfo" and the methods for resolving the application instance to which the request belongs.

When a network-triggered request arrives at the plug-in, the usual pattern is to correlate the request with a previous subscription for notifications.

Aspects that call the method

public String resolveAppInstanceGroupId(ContextMapperInfo)

can be applied by extending PluginSouth in the class that implements the request.

It is the responsibility of the plug-in instance to extract the information provided in the request and to resolve the application instance that matches this data as a part of the rebuilding of the RequestContext object. This is done using the Context aspect. See "Understanding the Context Aspect" for more information.

After resolving the application instance, the contextual information about the request is set up by calling the following method

public void prepareRequestContext(RequestContext ctx, ContextMapperInfo info)

In the implementation of this method, the plug-in instance has the option to add additional data to the contextual information about the request in the object defined by RequestContext.

Interface: ManagedPluginService

Every plug-in service must implement the ManagedPluginService interface which extends the PluginService, PluginInstanceFactory and PluginServiceLifecycle interfaces.

Interface: PluginService

PluginService defines a plug-in service registered in the Plug-in Manager.

A set of fields can be defined by implementing the following methods:

  • getNetworkProtocol(), returns a descriptive name for the supported network protocol. For example "SMPP v3.4."

  • getServiceType(), returns a ServiceType object. See "Class: ServiceType".

  • getSupportedSchemes(), returns a list of supported address schemes. This is a string array of URI schemes: for example ”tel”, ”mailto”, and ”sip”.

Interface: PluginInstanceFactory

PlugininInstanceFactory allows a plug-in service to create plug-in instances.

It defines the method:

ManagedPluginInstance createInstance(String pluginInstanceId)

This method is triggered by the createPluginInstance method on the Plug-in Manager MBean. When the createInstance method is invoked, the plug-in service is responsible for creating an instance of the class implementing the ManagedPluginInstance interface.

Interface: PluginServiceLifecycle

PluginServiceLifecycle defines the life-cycle for a plug-in service. See "Understanding the Plug-in States".

Interface: ManagedPluginInstance

ManagedPluginInstance extends the PluginInstance and PluginInstanceLifecycle interfaces. It must be implemented by a plug-in instance.

Interface: PluginInstance

PluginInstance defines a plug-in instance registered in the Plug-in Manager.

The plug-in instance is responsible for:

  • Maintaining a list of north interfaces that the plug-in implements.

  • Maintaining a list of south interfaces that the plug-in implements.

Both lists are arrays of PluginInterfaceHolder. The respective lists are returned when the getNorthInterfaces() and getSouthInterfaces() methods are invoked.

The plug-in instance is also responsible for implementing the customMatch(RequestInfo requestInfo) method. This method examines the RequestInfo object and decides if the plug-in instance can be used to serve the request. It returns the following constants:

  • MATCH_OPTIONAL

    The request is completely stateless and can be served by any plug-in instance.

  • MATCH_REMOVE

    The request cannot be served. This situation can occur, for example, if a plug-in service does not implement the method being invoked or if the request relates to a previous request which is known only to a subset of the plug-in instances in the cluster.

  • MATCH_REQUIRED

    The request must be served by the plug-in instance. This situation can occur, for example, if the request relates to a previous request which is known only to a subset of the plug-in instances in the cluster.

The plug-in instance is also responsible for maintaining information on the connection status with the network node to which it is connected. It returns True or False when the isConnected() method is invoked.

The Plug-in Manager invokes the methods in this interface to select the plug-in instance to which it must route the request.

Interface: PluginInstanceLifecycle

PluginInstanceLifecycle defines the life cycle for a plug-in service. See "Understanding the Plug-in States".

Class: RequestFactory

The RequestFactory class processes application-initiated requests both before and after a request is processed in the plug-in. Each communication service must have one implementation of the RequestFactory for each application-facing interface, named according to the pattern: interfacename.PluginFactory, where interfacename is the name of the application-facing interface. A skeleton for the factory is generated by the Platform Developer's Studio Wizard plug-in.

The RequestFactory class has two main functions:

  • It packages routing information contained in the request into a RequestInfo object that the Plug-in Manager then uses to select an appropriate plug-in to process the request. See "Class: RequestInfo" for more information on RequestInfo objects.

    Note:

    In order to support sendlists which target multiple plug-ins, the Request Factory implementation must support three methods that are not required for non-sendlist based plug-ins:
    • createRequestInfos allows the creation of multiple RequestInfo objects. Each RequestInfo object is matched to a plug-in. For example if an SMS message request is sent to 3 addresses, the factory should create an array of 3 AddressRequestInfo objects.

    • createPartialRequest splits a request into multiple requests sent to different plug-ins.

    • mergeResults merges the results reported back by multiple plug-ins into a single result.

    For details see RequestFactory in the ”All Classes” section of the Services Gatekeeper Java API Reference.

    Plug-ins are invoked in sequence and if one of them fails the whole request is considered a failure. In this case, an exception is thrown and the transaction is rolled back.

  • Translates any exceptions thrown in the plug-in (or the underlying network) into a form that can be sent back to the application.

Class: CallbackFactory

This class is used by a plug-in instance to get an implementation of "Interface: Callback". There is one CallbackFactory per interface in the callback WSDL definitions.

The naming pattern is com.acompany.example.callback.interfacenameCallbackFactory

Where interfacename is name of the interface (such as Notification in Example 2-1). The implementation of the interface is fetched using the following pattern:

Example 2-1 Example CallbackFactory Implementation

import com.acompany.example.callback.NotificationCallback;
import com.acompany.example.callback.NotificationCallbackFactory;
...
private NotificationCallback cachedNotificationCallback = null
....
private NotificationCallback getNotificationCallback() {
  if(cachedNotificationCallback == null) {
    cachedNotificationCallback =
    NotificationCallbackFactory.getInstance().create();
  }
  return cachedNotificationCallback;
}

Interface: Callback

The Callback interface is used by a plug-in to propagate a network-triggered request from the plug-in to the callback EJB. This interface defines a Java representation of the methods in the callback WSDL definitions. There is one of these per interface in the callback WSDL definitions.

The naming pattern is com.acompany.example.callback.interface nameCallback, where interfacename is name of the interface.

Class: RequestInfo

The RequestInfo object is created by the RequestFactory to hold information from the application-initiated request. There are four sub-classes of RequestInfo that can be used depending on the request:

  • AddressRequestInfo, if the request contains an address.

  • CorrelatorRequestInfo, if the request contains a correlator.

  • RegistrationIdentifierRequestInfo, if the request contains a registration identifier.

  • RequestIdentifierRequestInfo, if the request contains a request identifier.

Class: ServiceType

ServiceType is an abstract utility class that each plug-in must implement. An object of this type is passed to the Plug-in Manager when the plug-in registers itself, so that the Plug-in Manager can query for service type.

When they are used, aspects make this service type available in the request thread of each plug-in. The service type is used by various services, including the EdrService. See Services Gatekeeper Application Developer's Guide for the current set of supported interfaces and plug-ins.

Plug-in Context APIs

The com.bea.wlcp.wlng.api.plugin.context package contains interfaces and a class used for providing context for a plug-in. Brief descriptions of the most important interfaces and classes in this package are given below. See Services Gatekeeper Java API Reference for the complete Javadoc.

Interface: ContextMapperInfo

This interface defines a ContextMapperInfo object. When network-initiated traffic enters the plug-in from the network-facing (south) side, aspects take any annotated arguments from the network call that are needed by the plug-in for correlation purposes and places them in this very short-lived object. Arguments are stored by key and defined when the annotation is set, making it possible to retrieve a particular value. For example, if an argument is annotated with @MapperInfo(C), its value can be retrieved using the key ”C”.

Methods in the plug-in can access this ContextMapperInfo object and retrieve the annotated arguments in order to perform a mapping such as associating a notification with the session ID of the request that established it.

The PluginSouth interface includes one such method, resolveAppInstanceGroupdId.

Interface: RequestContext

This interface defines a RequestContext object which is available in all communication services for both application-initiated and network-initiated requests. This object contains contextual information about the request, including the service provider account ID, application account ID, and application instance of the application that initiated either the request or the notification, as well as the session ID.

Managing Communication Services

These are base classes and annotations for giving the Services Gatekeeper Administration Console or other JMX tools management access to communication services. See "Making Communication Services Manageable" for more information. Also see the Services Gatekeeper Java API Reference for the com.bea.wlcp.wlng.api.management package documentation.

Managing Communication Service Access with SLAs

SLA enforcement operates on methods identified by the Java representation of the interface, and the operation of the application-facing interface for the communication service.

The content of the <scs> element defined in the <serviceContract> element in the SLA is the plug-in type for the plug-in.

An operation on the application-facing interface is represented in the rules according to the following scheme: <service name> and <operation name>.

Parameters in the operation are represented in the rules according to the following scheme:

argn.parameter name

where n depends on the WSDL definition for the application-facing interface. Normally this is arg0.

If the parameter in parameter name is

  • A composed parameter, the notation is according to the Java Bean notation for that parameter.

  • An enumeration, the notation is according to the Java-representation of that parameter, parameter name.enumeration value. The enumeration value is the string representation.

Sharing Libraries Among Communication Service Plug-ins

It is possible for multiple plug-ins to share common libraries: for example, a third party library or custom code that can be shared.

If there are such parts, these should preferably not be packaged into the plug-in jar but instead be copied into the APP-INF/lib directory of the communication service EARs that utilizes this shared library. All jars in this directory are available for each of the plug-ins in the .ear.