Abstract:
In accordance with various embodiments, systems and methods are provided which facilitate composing a telecommunication application by orchestrating application components. Embodiments of the invention enhance the use of simplified programming constructs for user activities in a telecommunications network providing an invocation manager which invokes event functions in an order identified by an orchestrator. The orchestrator holds all specified event functions each with trigger chance and priority value. The event functions can be defined in Communication Beans with annotations and may be updated and selected by an XML file.

Description:
COPYRIGHT NOTICE 
       [0001]    A portion of the disclosure of this patent document contains material which is subject to copyright protection. The copyright owner has no objection to the facsimile reproduction by anyone of the patent document or the patent disclosure, as it appears in the Patent and Trademark Office patent file or records, but otherwise reserves all copyright rights whatsoever. 
       FIELD OF THE INVENTION 
       [0002]    The current invention relates to a system and method for composing a telecommunication application by orchestrating application components. 
       BACKGROUND 
       [0003]    With the explosive proliferation of IP-enabled mobile and fixed devices capable of offering Web, telecommunications and entertainment services, such as 3G/4G-enabled smartphones, TVs, home appliances, gaming consoles, and automobiles, among others, operators of mobile, broadband and fixed networks are faced with the operational and business challenges of delivering innovative IP-based communication services with maximum profitability. In order to achieve this goal, customers are increasingly migrating away from expensive, closed, proprietary and application-specific legacy platforms, and towards low-cost, open, standards-based unified converged application platforms, which dramatically lowers the time and cost of adding new features and extensions to existing IP-based communication services. 
         [0004]    Session Initiation Protocol (SIP) is a control (signaling) protocol developed to manage interactive multimedia IP sessions including IP telephony, presence, and instant messaging. SIP Servlet provides a standard Java API programming model for delivering SIP-based services. SIP Servlet APIs expose the full capabilities of the SIP protocol in a Java and Java EE middleware solution. The SIP Servlet APIs also enable multiple applications to execute on the same request or response, independently of one another. Thus application developers can write applications providing features that are independent of each other, but can be deployed to the same host SIP Servlet container. SIP Servlet APIs thereby provide a programming model that is as well suited to meet the needs of the application developer and the operational requirements of the service provider. 
         [0005]    There are many use cases in which a converged application operating on multiple services/protocols is desirable. A converged application using both SIP and HTTP functions can be used, for example, for: conferencing; click-to-call applications; Presence; and User Agent Configuration Management applications. A converged telecommunication application framework is a framework designed to abstract complexities for SIP Servlets to provide a set of easily usable artifacts which enable easy creation of programs. The SIP Servlet API is closely aligned with the Java EE specifications and containers that host SIP Servlet applications can also make Java EE features such as a HTTP Servlet container available to developers. Converged applications can also combine other protocols such as Diameter to perform advanced functions such as modifying subscriber profile data. A converged application server can, thus, deliver a converged application container, offering integrated support for Java EE, SIP, Web Services, and IMS standards. 
       SUMMARY 
       [0006]    Oracle Communications Converged Application Server (OCCAS) provides a carrier-grade, open, standards-based converged Web-telecom application platform based on the SIP Servlet, Java EE, Web Services, and IMS standards. It is designed for a wide-range of IP-based, communication-enabled applications, such as VoIP, multimedia conferencing, SIP/IMS-based call control and messaging services. OCCAS includes a converged telecommunication application framework designed to abstract the complexities of SIP Servlets and provide a set of easily usable artifacts which enable easy creation of programs without detailed knowledge of the underlying SIP level protocol and events. OCCAS provides what are called “Communication Beans” which provide event functions. The event functions of Communication Beans handle the SIP protocol (and many other industry specifications from OMA, 3GPP and IETF) event. The developer can write logic to modify the behavior of the event functions. This is done from the perspective of modifying the behavior of “communication” it is handling rather than modifying the SIP protocol actions. 
         [0007]    However, ahead of this invention, if multiple application components, such as SIP Servlets, which are interested in the same event (such as triggered by incoming SIP message), the converged application framework sequentially forwards the event to applications which these components belong to one by one. The developer is thus unable to orchestrate activity of these components without preparing multiple applications, and SIP protocol level application router code to handle the orchestration of the applications. Managing multiple applications is cost intensive both from an administration perspective and also from a runtime perspective. When there are multiple applications, there are effectively multiple SIP runtime environments managed by the container. Hence the messages that need to traverse multiple applications will have to incur all the costs of a SIP stack like transaction layer, dialog layer, etc. 
         [0008]    In accordance with embodiments of the invention, the converged application framework of a converged application server is extended to facilitate the creation and deployment of converged applications. The current invention enhances the use of simplified programming constructs for user activities in a telecommunications network. Embodiments of the present invention allow composition of event function components into a single application. Particular embodiments of the invention, provided a developer with the ability to write multiple Communication Beans in a single SIP/Converged application, each Communication Bean containing one or multiple event functions, each event function for handling specified event ( event functions in different Communication Beans can be for same event). Communication Beans provide for logic organization, classification and management of event functions. Thus, embodiments of the invention reduce the need to create and multiple applications and the need for preparing custom application router code at the protocol level to handle the orchestration of the applications. Furthermore, embodiments of the invention reduce runtime complexity by reducing the number of SIP runtime environments managed by a container and reducing or eliminating the overhead incurred by messages that traverse multiple applications such as an SIP stack like transaction layer, dialog layer, etc. 
         [0009]    In accordance with embodiments of the invention the converged application framework of a converged application server is extended by providing a system and method for composing a telecommunication application by composing and orchestrating event function components in a single application container. The framework allows a developer to compose an application by effectively routing the events to separate event function components for processing events using an orchestration system. In embodiments of the invention a simple annotation (and/or an XML file) can be used to specify the event function component that will handle the event and, thereby, orchestrate execution of components of the application. 
         [0010]    In accordance with various embodiments, systems and methods are provided which facilitate composing a telecommunication application by orchestrating application components. Embodiments of the invention enhance the use of simplified programming constructs for user activities in a telecommunications network providing an invocation manager which invokes event functions in an order identified by an orchestrator. The orchestrator holds all specified event functions definition each with trigger chance and priority value. The event functions can be defined by annotations in Communication Beans and may be updated and selected by an XML file. 
         [0011]    In accordance with a particular embodiment, the invention provides a system for controlling invocation of event functions in a Communication Bean in response to an event, wherein the system includes a plurality of event functions which operate on an event; an orchestrator which identifies a sequence in which to invoke said plurality of event functions; and an invocation manager operating on one or more microprocessor, wherein, in response to occurrence of said event, the invocation manager repeatedly calls the orchestrator to identify an event function to invoke, and sequentially invokes the event functions identified by the orchestrator, thereby invoking each of the plurality of event functions subscribed to the event in the sequence identified by the orchestrator. The system allows for selectable integration of a plurality of event functions into a Communication Bean application with control over the priority and trigger chance for invoking the event functions within the application. Here the Communication Bean application refers to a SIP/converged application incorporating the features of the present invention. The system allows developers to flexibly assemble event functions into Communication Beans according to elastic criteria. The criteria include, for example, Call Barring related event functions which may be defined in the same Communication Bean; Call or Conference related event functions which are usually defined in different Communication Beans; event functions for general JSR309 media control which may be provided by same Communication Bean, and so on. The system enables developers to determine criteria for organizing event functions by themselves. An event function with a specified trigger chance and specified priority value would have same invocation effect no matter whether it is from Communication Bean-A or Communication Bean-B. Here trigger chance includes two aspects, the first and the key one is the event which is interested or subscribed by the event function, another is some additional trigger criteria described in 0024. 
         [0012]    Other objects and advantages of the present invention will become apparent to those skilled in the art from the following detailed description of the various embodiments, when read in light of the accompanying drawings. 
     
    
     
       BRIEF DESCRIPTION OF THE DRAWINGS 
         [0013]      FIG. 1  shows event handling in a prior art converged application server. 
           [0014]      FIG. 2  shows event handing in a converged application server according to an embodiment of the present invention. 
           [0015]      FIG. 3A  shows an orchestration interface for providing orchestration plug-ins to a converged application server according to an embodiment of the present invention. 
           [0016]      FIG. 3B  shows an orchestrator factory for pre-building an orchestrator according to an embodiment of the present invention. 
           [0017]      FIG. 4  shows the procedure to apply present invention in a converged application and the work flow at runtime. 
       
    
    
     DETAILED DESCRIPTION 
       [0018]    In the following description, the invention will be illustrated by way of example and not by way of limitation in the figures of the accompanying drawings. References to various embodiments in this disclosure are not necessarily to the same embodiment, and such references mean at least one. While specific implementations are discussed, it is understood that this is provided for illustrative purposes only. A person skilled in the relevant art will recognize that other components and configurations may be used without departing from the scope and spirit of the invention. 
         [0019]    Furthermore, in certain instances, numerous specific details will be set forth to provide a thorough description of the invention. However, it will be apparent to those skilled in the art that the invention may be practiced without these specific details. In other instances, well-known features have not been described in as much detail so as not to obscure the invention. 
         [0020]    Common reference numerals are used to indicate like elements throughout the drawings and detailed description; therefore, reference numerals used in a figure may or may not be referenced in the detailed description specific to such figure if the element is described elsewhere. The first digit in a three digit reference numeral indicates the series of figures in which the element first appears. Likewise the first two digits in a four digit reference numeral. 
         [0021]      FIG. 1  shows event handling in a prior art converged application server.  FIG. 1  illustrates an event  100  in the SIP Protocol Layer  110 . As shown in  FIG. 1 , three SIP Servlets  101 ,  102 ,  103  are interested in the same event  100  occurring in the SIP Protocol Layer  110 . The converged application framework  120  sequentially forwards the event  100  to the SIP Servlets  101 ,  102 ,  103 , one by one. The developer is thus unable to orchestrate activity of the SIP Servlets  101 ,  102 ,  103  without preparing multiple applications and SIP protocol level application router code to handle the orchestration of the applications. Moreover, each of SIP Servlets  101 ,  102 ,  103  operates in a separate application container instance  121 ,  122 ,  123 . Thus, information/messages passed between SIP Servlets  101 ,  102 ,  103  occur in the SIP Protocol Layer  110 , and incur all the costs of a SIP stack, e.g. transaction layer, dialog layer, etc. 
         [0022]    In accordance with embodiments of the invention the converged application framework of a converged application server (for example OCCAS) is extended by providing a system and method for composing a telecommunication application by composing and orchestrating components in a single application container. The enhanced converged application framework allows a developer to compose an application by effectively routing the events to separate application components known as event functions using an orchestration system. In embodiments of the invention, simple annotation can be used to define trigger chance (event subscribed by event function plus some optional criteria) and priority for event function so as to let orchestrator can select the event functions that will handle the event and, thereby, orchestrate sequential execution of event functions of application. 
         [0023]      FIG. 2  shows event handling in an enhanced converged application server having an enhanced converged application framework  220  according to an embodiment of the present invention. As shown in  FIG. 2 , three event functions  201 ,  202 ,  203  are interested in the same event  100  occurring in the SIP Protocol Layer  110 . In this case, event  100  is routed through an invocation manager  224 . Invocation manager  224  utilizes orchestrator  222  to determine which of event functions  201 ,  202 ,  203  to invoke and in what order. Invocation manager  224  consults orchestrator  222  and invokes/calls the selected event functions  201 ,  202 ,  203  in the order specified by the orchestrator  222 . 
         [0024]    The application framework  220  may supports filtering event functions by additional criteria at runtime. Only certain event functions meeting the specified criteria are handed to the orchestrator to take effect when the event occurs. Event functions not meeting the specified criteria are eliminated and therefore not performed in response to the event although they subscribed the event. Certain event functions can be selected or deselected based upon the call context or other rules, for example, time of day, type of caller, type of user equipment etc. Such kind of filtering can be implemented by annotation scanning and matching. However, for the convenience of simplicity, in the subsequent description, when we say trigger chance of event functions, we will ignore the additional criteria said here, and assume the trigger chance only refers to event which the event function subscribed. 
         [0025]    In accordance with a particular embodiment of the invention, the converged application framework  220  provides for controlling invocation of event functions  201 ,  202 ,  203  in response to an event  100 , wherein the system includes a plurality of selected event functions  201 ,  202 ,  203  subscribed to an event  100 ; an orchestrator  222  which identifies a sequence in which to invoke said plurality of event functions  201 ,  202 ,  203 ; and an invocation manager  224  operating on one or more microprocessor, wherein, in response to occurrence of said event, the invocation manager  224  repeatedly calls the orchestrator  222  to identify which of event functions  202 ,  202 , or  203  to invoke, and sequentially invokes the event function  201 ,  202 , or  203  identified by the orchestrator  222 , thereby invoking each of the plurality of event function  201 ,  202 ,  203  subscribed to the event  100  in the sequence identified by the orchestrator  222 . 
         [0026]    The developer is thus able to orchestrate activity of the event functions  201 ,  202 ,  203  using the orchestrator  222  and without preparing multiple applications and SIP protocol level application router code to handle the orchestration of the applications. This reduces administration complexity and overhead. Moreover, each of event functions  201 ,  202 ,  203  is invoked in the same application container instance  221  thereby reducing runtime complexity. Thus, information/messages passed between event functions  201 ,  202 ,  203  occur within the application framework  220  and thus avoid the costs of a SIP stack, e.g. transaction layer, dialog layer, etc. The ability to compose components into a single application reduces complexity and makes the composition, effectively, a simple method call. 
         [0027]    Orchestrator  222  can be a pre-built XML-based orchestrator, an annotation-based orchestrator, and a custom orchestrator. Each type of orchestrator allows the developer to customize the invocation sequence. With respect to the annotation-based orchestrator, the application framework provides an annotation named “EventOrchestration” (see Example 1, below). The annotation definition allows a Communication Bean to define a priority value for handling an event. The priority value is a non-negative integer no greater than 100. Lower values represent higher (earlier) priority. The priority value is used to determine the order to deliver event to the event functions. That is to say that an event function with a smaller priority value will be triggered prior to an event function with a bigger priority value. The default priority value is set to 100. 
       EXAMPLE 1 
       [0028]      
         [0000]    
       
         
               
             
           
               
                   
               
             
             
               
                 @Target ({ ElementType.METHOD }) 
               
               
                 @Retention (retentionPolicy.RUNTIME) 
               
               
                 public @interface EVENTOrchestration { 
               
               
                 / ** 
               
               
                 * The priority to handle the event. 
               
               
                 * This filed is used to determine the order to deliver event to the event 
               
               
                 functions in Communication Beans. 
               
               
                 * Small value means higher priority. 
               
               
                 * Or say event function with smaller priority value will be triggered prior 
               
               
                 to function with bigger value. 
               
               
                 * The default value is 100. 
               
               
                 @return 
               
               
                 */ 
               
               
                 int priority( ) default 100; 
               
               
                 } 
               
               
                   
               
             
          
         
       
     
         [0029]    The EventOrchestration annotation is used in conjunction with the event annotation to identify the priority to receive the event. In Example 2 and Example 3 below, an event function in the form of a Communication Bean “Test 1” is defined having an Event Orchestration annotation which includes the priority value of 1; and an event function in the form of a Communication Bean “Test 2” is defined having an Event Orchestration annotation which includes the priority value of 2. Both the “Test 1” and “Test 2” Communication Beans subscribe for the same event. (ParticipantEvent.Type.JOINING indicates the first message from calling party or called party is received, to a conversation/call, it throws when framework receives INVITE from calling party or 180 response from called party to inform Communication Bean application that calling party or called party is joining in the call), Thus when the event is detected the orchestration specifies that the event is first handled by ““Test 1” (priority value=1) and then by “Test 2” (priority value=2). 
       EXAMPLE 2 
       [0030]      
         [0000]    
       
         
               
             
               
               
             
               
             
           
               
                   
               
             
             
               
                 @CommunicationBean 
               
               
                 Public class Test1 { 
               
               
                 @Context 
               
             
          
           
               
                   
                 CommunicationContext&lt;?, UserParticipant,?&gt; ctx; 
               
               
                   
                 @EventOrchestration( priority=1 ) 
               
               
                   
                 @ParticipantEvent(type= ParticipantEvent.Type.JOINING, 
               
               
                   
                 communicationType = Conversation.class) 
               
               
                   
                 Public void handleStatedEvent( ) { 
               
               
                   
                 System.out.println(“&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Test 1 is called”); 
               
               
                   
                 } 
               
             
          
           
               
                 } 
               
               
                   
               
             
          
         
       
     
       EXAMPLE 3 
       [0031]      
         [0000]    
       
         
               
             
               
               
             
               
             
           
               
                   
               
             
             
               
                 @CommunicationBean 
               
               
                 Public class Test2 { 
               
               
                 @Context 
               
             
          
           
               
                   
                 CommunicationContext&lt;?, UserParticipant,?&gt; ctx; 
               
               
                   
                 @EventOrchestration( priority=2 ) 
               
               
                   
                 @ParticipantEvent(type= ParticipantEvent.Type.JOINING, 
               
               
                   
                 communicationType = Conversation.class) 
               
               
                   
                 Public void handleStatedEvent( ) { 
               
               
                   
                 System.out.println(“&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Test 2 is called”); 
               
               
                   
                 } 
               
             
          
           
               
                 } 
               
               
                   
               
             
          
         
       
     
         [0032]    Application framework also provides another orchestrator named XML-based orchestrator. By reading a sft.xml file, XML-based orchestrator can specify which communication bean and event functions will be applied by application framework, it can apply all event functions or only apply part of event functions which originally defined in Communication Beans; sft.xml can also specify new priority values for one or more event functions to overwrite original priority values defined by annotation, thus to adjust their invocation order when handling an event. In our application framework, XML-based orchestrator is actually an enhanced annotation-based orchestrator. As before, the priority value is a non-negative integer no greater than 100 with lower values representing higher (earlier) priority. An event function with a smaller priority value identified in the XML file will be triggered prior to an event function with a bigger priority value. An example of a suitable sft.xml file is provided in Example 3, below. 
       EXAMPLE 4 
       [0033]      
         [0000]    
       
         
               
             
               
               
             
               
               
             
               
               
             
               
               
             
               
               
             
               
             
               
               
             
               
               
             
               
               
             
               
               
             
               
             
               
               
             
               
             
           
               
                   
               
             
             
               
                 &lt;?xml version=”1.0” encoding=”UTF-8”?&gt; 
               
               
                 &lt;sft-app xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” 
               
             
          
           
               
                   
                 xsi:schemaLocation=”http://ww.oracle.com/sdp/sft sft.xsd” 
               
               
                   
                 xmlns=” http://ww.oracle.com/sdp/sft”&gt; 
               
             
          
           
               
                   
                 &lt;communication-bean&gt; 
               
             
          
           
               
                   
                 &lt;class-name&gt;com.oracle.sft.test.Test1&lt;/class-name&gt; 
               
               
                   
                 &lt;event communication-type=”Conversation” event- 
               
               
                   
                 type=”ParticipantEvent.Type.JOINING”&gt; 
               
             
          
           
               
                   
                 &lt;orchestration priority=”2” /&gt; 
               
             
          
           
               
                   
                 &lt;/event&gt; 
               
             
          
           
               
                 &lt;/communication-bean&gt; 
               
             
          
           
               
                   
                 &lt;communication-bean&gt; 
               
             
          
           
               
                   
                 &lt;class-name&gt;com.oracle.sft.test.Test2&lt;/class-name&gt; 
               
               
                   
                 &lt;event communication-type=”Conversation” event- 
               
               
                   
                 type=”ParticipantEvent.Type.JOINING”&gt; 
               
             
          
           
               
                   
                 &lt;orchestration priority=”1” /&gt; 
               
             
          
           
               
                   
                 &lt;/event&gt; 
               
             
          
           
               
                 &lt;/communication-bean&gt; 
               
               
                 &lt;annotation-scanning load-strategy=″INCLUDE″&gt; 
               
             
          
           
               
                   
                 &lt;packages/&gt; 
               
             
          
           
               
                 &lt;/ annotation-scanning&gt; 
               
               
                   
               
             
          
         
       
     
         [0034]    In Example 4, above, there are two event functions in the form of Communication Beans named “Test1” and “Test2” which are both interested in the same event—“ParticipantEvent.Type.JOINING”. When the event occurs it will be routed first to Test2 (priority=1) and then to Test1 (priority=2) according the priority specified in the sft.xml file. 
         [0035]    As mentioned in 0032, if XML-based orchestrator is used, developer can load and apply all event functions or part of event functions originally defined in Communication Beans. Or say this invention support filtering event functions when load them into orchestrator. An attribute named load-strategy is introduced for &lt;annotation-scanning&gt;. load-strategy supports three values ALL, INCLUDE or EXCLUDE for loading and applying all event functions or only applying event functions specified in sft.xml or only exclude event functions specified in sft.xml. More concretely, If load-strategy is ALL, then all event functions defined in Communication Bean will be load and applied, and all &lt;communication-bean&gt; in sft.xml will be ignored; If load-strategy is INCLUDE, then only event functions specified within &lt;communication-bean&gt; will be loaded and applied, to a Communication Bean, if it is not specified in sft.xml, in other word, if there is no &lt;communication-bean&gt; in sft.xml matches the Bean, then all event functions defined in this bean will be ignored, if a Communication Bean is specified in sft.xml, then only its event functions specified by &lt;event&gt; sub tags (event sub tag represents and matches trigger chance of event function) will be applied, and priority values of these event function will be overwritten by priority values of &lt;orchestration&gt;; If load-strategy is EXCLUDE, then all event functions not present in sft.xml will be loaded and applied, in this case, if a Communication Bean is not specified in sft.xml, then all its event functions will be applied; if a Communication Bean is specified in sft.xml, then only event functions not specified by &lt;event&gt; tags of corresponding &lt;communication-bean&gt; will be applied, in these case, no priority overwriting will be performed. Before performing certain load-strategy, annotation-scanning mechanism can also first filter Communication Beans by specified package paths. For example, if &lt;packages&gt; &lt;package&gt;com.oracle.sft.conversation&lt;/package&gt; &lt;package&gt;com.oracle.sft.conference&lt;/package&gt; &lt;packages&gt; is defined under &lt;annotation-scanning&gt;, then only Communication Beans which leading package paths match specified two package paths have chance to be as candidate for performing certain load-strategy to be determined which Communication Beans with their event functions will be applied finally. We can see in Example 4, no packages&#39; filtering is used. Developers can adjust or rewrite strategy and rules by providing customized orchestrators. 
         [0036]      FIG. 3A  shows an orchestration interface for providing orchestration plug-ins to a converged application server according to an embodiment of the present invention. As shown in  FIG. 3A , an orchestration interface  310  utilizes a plurality of plug-ins  312 ,  314 ,  316 , to provide orchestration capability to application framework  220 . Orchestration interface  310  can load customized orchestration plug-in  312 , XML-based orchestration plug-in  314  and annotation-based orchestration plug-in  316  to augment the functionality of application framework  220 . 
         [0037]      FIG. 3B  shows an orchestrator factory for pre-building an orchestrator according to an embodiment of the present invention. As shown in  FIG. 3B , when the application framework starts, an Orchestrator Factory  330  is initialized. In an embodiment of the invention, the Orchestrator Factory  330  decides to load a pre-build orchestrator  340 . To do this, Orchestrator Factory  330  first looks up the sft.xml file in an application. If the sft.xml file is not present, the Orchestrator Factory uses the annotation-based priority values  346  to build the orchestrator  340 . To load the annotation-based priority values  346 , an annotation processor is used to scan annotations in the Communication Beans of an application and read the annotation-based priority values  346 . If the sft.xml file exists, the XML-based priority values  344  in sft.xml will overwrite annotation-based priority values and are used to build the orchestrator  340 . 
         [0038]      FIG. 4  shows the procedure to apply present invention in a converged application and the work flow at runtime. As shown in  FIG. 4 , a developer provides event functions in Communication Beans in step  410 . In step  420  the developer specifies the trigger chances (the event it interests in or it subscribes) and the priority values (lower values are implemented earlier than higher values) for the event functions by annotations in Communication Beans. At step  430 , the developer may screen out parts of event functions using an XML file (sft.xml). In this manner, the developer is not required to apply all event functions defined by Communication Beans and annotations in the code. The developer can, using the XML file (sft.xml), selectively apply a subset of the total group of code defined event functions for certain deployment/customer environment. The developer may also modify priority values of the selected event functions using the same XML file to thereby adjust the order in which the selected event functions are invoked. At step  440 , when the application framework is initiated, the orchestrator factory reads valid event functions with their trigger chances and priority values (as provided above) and assembles these event functions into an orchestrator. 
         [0039]    At runtime framework, the invocation manager receives an event thrown by application framework at step  450 . At step  460  the invocation manager accesses the orchestrator to identify the expected event function for handling the event. At step  470 , based on the trigger chance and priority, the orchestrator identifies the first or next matched event function and returns it to invocation manager. The invocation manager invokes the identified event function at step  480 . Subsequently the invocation manager repeats step  460 , accessing the orchestrator to identify the next event function. Steps  460 - 480  repeat until all event functions interested in a particular event have handled the event. 
         [0040]    Although the invention has been described above with respect to communication services in a telecommunications network, the invention also finds application in any situation where it is necessary or desirable to compose components into a single application with a configurable prioritization. 
         [0041]    The present invention may be conveniently implemented using one or more conventional general purpose or specialized digital computer, computing device, machine, or microprocessor, and/or network of same, programmed according to the teachings of the present disclosure. 
         [0042]    Appropriate software coding can readily be prepared by skilled programmers based on the teachings of the present disclosure, as will be apparent to those skilled in the software art. The invention may also be implemented by the preparation of application specific integrated circuits or by interconnecting an appropriate network of conventional component circuits, as will be readily apparent to those skilled in the art. 
         [0043]    The various embodiments include a computer program product which is a storage medium (media) having instructions stored thereon/in which can be used to program a general purpose or specialized computing processor(s)/device(s) to perform any of the features presented herein. The storage medium can include, but is not limited to, one or more of the following: any type of physical media including floppy disks, optical discs, DVDs, CD-ROMs, microdrives, magneto-optical disks, holographic storage, ROMs, RAMs, PRAMS, EPROMs, EEPROMs, DRAMs, VRAMs, flash memory devices, magnetic or optical cards, nanosystems (including molecular memory ICs); paper or paper-based media; and any type of media or device suitable for storing instructions and/or information. The computer program product can be transmitted in whole or in parts and over one or more public and/or private networks wherein the transmission includes instructions which can be used by one or more processors to perform any of the features presented herein. The transmission may include a plurality of separate transmissions. In accordance with certain embodiments, however, the computer storage medium containing the instructions is non-transitory (i.e. not in the process of being transmitted) but rather is persisted on a physical device. 
         [0044]    The foregoing description of the preferred embodiments of the present invention has been provided for purposes of illustration and description. It is not intended to be exhaustive or to limit the invention to the precise forms disclosed. Many modifications and variations can be apparent to the practitioner skilled in the art. Embodiments were chosen and described in order to best explain the principles of the invention and its practical application, thereby enabling others skilled in the relevant art to understand the invention. It is intended that the scope of the invention be defined by the following claims and their equivalents.