Document Roadmap
Document Scope and Audience
Guide to This Document
Terminology
Related Documentation
Overview of the Platform Development Studio
Creating New Communication Services
The Eclipse Wizard
Example Communication Service
The Platform Test Environment
Integration and Customization
Service Interceptors
Subscriber-centric Policy
Integration with External Systems
Using the Eclipse Wizard
About the Eclipse Wizard
Configure Eclipse
Prerequisites
Basic configuration of Eclipse environment
Configuring of the Eclipse Wizard
Using the Eclipse Wizard
Generating a Communication Service Project
Adding a Plug-in to a Communication Service Project
Removing a Plug-in from a Communication Service Project
Description of a Generated Project
Generated project
Communication Service Project
RESTFul Service Facade
Default RESTful Service Facade
Customize the RESTful Service Facade
Plug-in
SOAP2SOAP Plug-in
SIP Plug-in
Diameter Plug-in
Generated classes for a Plug-in
Interface: ManagedPluginService
Interface: PluginInstanceFactory
Interface: PluginServiceLifecycle
PluginService
PluginInstance
PluginNorth
RequestFactory Skeleton
Generated classes for a SOAP2SOAP Plug-in
Comparison with a Non-SOAP2SOAP Plug-in
Client Stubs
<Web Services Interface>Service_Impl
<Web Services Interface>Service
PluginInstance
PluginNorth
PluginSouth
RequestFactory
Build Files and Targets for a Communication Service Project
Main Build File
Communication Service Common Build File
Plug-in Build File
Ant Tasks
Communication Service Example
Overview
High-level Flow for sendData (Flow A)
High-level Flow for startNotification and stopNotification (Flow B)
High-level flow for notifyDataReception (Flow C)
Interfaces
Web Service Interface Definition
Interface: NotificationManager
Operation: startEventNotification
Operation: stopEventNotification
Interface: NotificationListener
Operation: notifyDataReception
Network Interface Definition
Directory Structure
Directories for WSDL
$PDS_HOME/example/communication_service/example/common/wsdl/service
$PDS_HOME/example/communication_service/example/common/wsdl/callback
Directories for Java Source
$PDS_HOME/example/communication_service/example/common/src
$PDS_HOME/example/communication_service/example/plugins/netex/src
Directories for resources
$PDS_HOME/example/communication_service/example/common/resources/at/META-INF
$PDS_HOME/example/communication_service/example/common/resources/nt/META-INF
Directories for Configuration of Plug-in
$PDS_HOME/example/communication_service/example/plugins/netex/config/edr
$PDS_HOME/example/communication_service/example/plugins/netex/instance_factory
$PDS_HOME/example/communication_service/example/plugins/netex/storage
Directories for Build and Configuration of Builds
$PDS_HOME/example/communication_service/
$PDS_HOME/example/communication_service/example/common
$PDS_HOME/example/communication_service/example/plugins/netex
Directories for Classes, JAR, and EAR Files
$PDS_HOME/example/communication_service/example/dist
$PDS_HOME/example/communication_service/example/common/dist
$PDS_HOME/example/communication_service/example/common/dist/request_factory_skel
$PDS_HOME/example/communication_service/example/plugins/netex/dist
$PDS_HOME/example/communication_service/example/plugins/netex/dist/mbean_generationdir
Classes
Communication Service Common
NotificationManagerPluginFactory
public void validateRequest(Method method, Object... args)
public RequestInfo createRequestInfo(Class<? extends Plugin> type, Method method, Object... args)
public Throwable convertEx(Method method, Throwable e)
private Throwable convertEx(Method method, PluginException e)
Plug-in Layer
public void translate(Object param, ContextInfo info)
public String[] getSupportedSchemes()
public void init(String id, PluginPool pool)
public void handleSuspending(CompletionBarrier barrier)
public void handleForceSuspending()
public ServiceType getServiceType()
public String getNetworkProtocol()
private void rethrowServiceDeploymentException(Exception e)
public ConfigurationStoreHandler getConfigurationStore()
public NetworkProxy getNetworkProxy()
public void setLocalInteger(String key, Integer value),
public Integer getLocalInteger(String key),
public void setLocalString(String key, String value), and
public String getLocalString(String key)
public void deliver(String data, String destinationAddress, String originatingAddress)
private NotificationCallback getNotificationCallback()
private NotificationData getNotificationData(String destinationAddress)
NetworkToNotificationPluginAdapter
public void setNotificationHandler(NotificationHandlerNorth notificationHandlerNorth)
NetworkToNotificationPluginAdapterImpl
public void setNotificationHandler(NotificationHandlerNorth notificationHandlerNorth)
public String resolveAppInstanceGroupdId(ContextMapperInfo info)
NotificationManagerPluginNorth
public void setPluginToNetworkAdapter(SendDataPluginToNetworkAdapter adapter)
public SendDataResponse sendData(@ContextTranslate(ContextTranslatorImpl.class) SendData parameters)
public void send(NetworkProxy proxy, String address, String data)
public String resolveAppInstanceGroupdId(ContextMapperInfo info)
public void prepareRequestContext(RequestContext ctx, ContextMapperInfo info))
SendDataPluginToNetworkAdapter
SendDataPluginToNetworkAdapterImpl
public SendDataPluginToNetworkAdapterImpl()
public void setNetworkProxy(NetworkProxy networkProxy)
public void send(String address, String data)
public boolean matches(Object value)
public void setParameters(Serializable ... parameters)
public static StoreHelper getInstance()
public void addNotificationData(URI address, NotificationData notificationData)
public void removeNotificationData(String correlator)
public NotificationData getNotificationData(String destinationAddress)
private Store<String, NotificationData> getStore()
public ExamplePluginInstance(String id, ExamplePluginService parent)
public void handleSuspending()
public int customMatch(RequestInfo requestInfo)
private void rethrowDeploymentException(Exception e)
public ConfigurationStoreHandler getConfigurationStore()
public TimerManager getTimerManager()
public String[] getSupportedSchemes()
public void init(String id, PluginPool pool)
public void doStopped()/public void doActivated()/public void doDeactivated()
public void handleSuspending(CompletionBarrier barrier)
public void handleForceSuspending ()
public ServiceType getServiceType()
public String getNetworkProtocol()
public ManagedPluginInstance createInstance(String pluginInstanceId)
Store configuration
SLA Example
Service Enabler Example with SIP plug-in
Overview
High-level Flow for sendData (Flow A)
High-level Flow for startNotification and stopNotification (Flow B)
High-level flow for notifyDataReception (Flow C)
Interfaces
Web Service Interface Definition
Network Interface Definition
Directory Structure
Differences Compared to the Example netex Plug-in
Configuration Files and Artifacts
Classes
ExampleServlet
ExampleSipHelper
public void init(ServletContext servletContext)
public SipSessionsUtil getSessionsUtil()
public SipFactory getSipFactory()
public synchronized void registerCallback(NetworkCallback callback)
public synchronized void unregisterCallback(NetworkCallback callback)
public synchronized void notifyCallbacks(String fromAddress, String toAddress, String message)
SendDataPluginSouth
public void send(String address, String data)
public String resolveAppInstanceGroupdId(ContextMapperInfo info)
public void prepareRequestContext(RequestContext ctx, ContextMapperInfo info))
NotificationHandlerSouth
public NotificationHandlerNorth()
public String resolveAppInstanceGroupdId(ContextMapperInfo info)
public void prepareRequestContext(RequestContext ctx, ContextMapperInfo info))
ExampleMBean
SLA
Container Services
Container service APIs
Class: InstanceFactory
Class: ClusterHelper
Service: EventChannel Service
Interface: EventChannelListener
Service: Statistics service
Plug-in
Management
EDR
SLA Enforcement
Service Correlation
Interface: ExternalInvocation
Class: ExternalInvocatorFactory
Class: ServiceCorrelation
Implementing the ExternalInvocation Interface
Parameter Tunneling
Storage Services
ConfigurationStore
StorageService
Shared libraries
Communication Service Description
High-level Components
Communication Service Common
Plug-in
Plug-in Service and Plug-in Instance
States
PluginPool
Interface: Plugin
Interface: PluginNorth
Interface: PluginNorthCallBack
Interface: PluginSouth
Interface: ManagedPluginService
Interface: PluginInstanceFactory
Interface: PluginServiceLifecycle
Interface: ManagedPluginInstance
Interface: PluginInstanceLifecycle
Class: RequestFactory
Class: CallbackFactory
Interface: Callback
Class: RequestInfo
Class: ServiceType
Interface: ContextMapperInfo
Interface: RequestContext
Class: ManagedPlugin
Class: AbstractManagedPlugin
Management
SLA Enforcement
Shared libraries
Annotations, EDRs, Alarms, and CDRs
About aspects and annotations
How aspects are applied
Context Aspect
EDR Generation
Exception scenarios
Adding data to the RequestContext
Trigger an EDR programmatically
EDR Content
RequestContext and EDR
Categorizing EDRs
The EDR descriptor
Boolean semantic of the filters
Example 5: filter with corresponding code for manually triggering a matching EDR
Check-list for EDR generation
Frequently Asked Questions about EDRs and EDR filters
Alarm generation
Trigger an alarm programmatically
Alarm content
CDR generation
Triggering a CDR
Trigger a CDR programmatically
CDR content
Excluded keys (EdrConstants if not specified):
Out-of-the box (OOTB) CDR support
Making Communication Services Manageable
Overview
Create Standard JMX MBeans
Create an MBean Interface
Implement the MBean
Register the MBean with the Runtime MBean Server
Use the Configuration Store to Persist Values
Service Interceptors
Overview
Interceptor Decisions and Request Flow
Decisions
Flow Control
Changing the invocation order
Standard Interceptors
Retry functionality for plug-ins
Custom Interceptors
Developing Custom Interceptors
Deploying Custom Interceptors
Custom Service Level Agreements
Introduction
Custom SLAs and XSDs
Custom SLA Enforcement
Get an SLA using a DOM Object
Get an SLA using a Custom Parser
Example
Custom SLA Schema and Example SLA
Enforcement Logic
Subscriber-centric Policy
Service Classes and the Subscriber SLA
The <reference> tag
The <restriction> tag
Managing the Subscriber SLA
The Profile Provider SPI and Subscriber Contracts
Deploying the Custom Profile Provider
Subscriber Policy Enforcement
Do Relevant Subscriber Contracts Exist
Is There Adequate Budget for the Contracts
Creating an EDR Listener and Generating SNMP MIBs
Overview of External EDR listeners
Example using a pure JMS listener
Example using JMSListener utility with no filter
Using JMSListener utility with a filter
Description of EDR listener utility
Class JMSListener
Class EdrFilterFactory
Class EdrData
Class ConfigDescriptor
Class EdrConfigDescriptor
Class AlarmConfigDescriptor
Class CdrConfigDescriptor
Updating EDR configuration files
Generating SNMP MIBs
Converting Traffic Paths and Plug-ins to Communication Services
Converting Network Protocol Plug-ins
Converting Traffic Paths
Checklist
Policy
Overview
Policy Request Data
Adding a New Rule
Mapping PolicyRequest Data
Creating a New Rule File by Extending an Existing File: an Example
Using RequestContext Parameters Defined in Service Level Agreements
Callable Policy Web Service
Introduction
Callable Policy Web Service interface definition
Endpoints
Detailed service description
XML Schema data type definition
AdditionalDataValueType enumeration
Interface: Policy
Input message: evaluateRequest
Output message: evaluateResponse
Interface: PolicyManagement
Output message: viewRuleFileResponse
Output message: deleteRuleFileResponse
Output message: loadRulesResponse
Output message: listRuleFilesResponse
Rule files
Checklist