Status: Accepted
Owner: EMMartins
Labels: Type-Enhancement Priority-Medium Component-JainSLEE Version-2.2.0 Roadmap-Issue

New issue 1586 by EMMartins: SLEE 1.1 Extensions: Annotations
http://code.google.com/p/mobicents/issues/detail?id=1586

Some XML descriptors can be easily replaced by Java Annotations. Additionally Java Annotations can alos be use for injection of objects such as CMP Fields. Here is an example for SBBs:

@SbbAbstractClass
public class ExampleSbbExt extends Sbb {

        @SbbContext     
        private SbbContextExt sbbContext;
        
        @Tracer
        private Tracer tracer;
        
        @ActivityContextInterfaceFactory(ra-entity-link="SipRA")
private SipActivityContextInterfaceFactory sipActivityContextInterfaceFactory;
        
@ResourceAdaptorObject(ra-entity-link="SipRA", ra-type-name="", ra-type-vendor="", ra-type-version="")
        private SleeSipProvider sipProvider;
        
        // cmp field automatically loaded with sbbLoad() and stored in 
sbbStore()
        @CmpField
        private ActivityContextInterface incomingDialogAci;
        
        // cmp field with no injection, load on demand
        @CmpField
        public abstract ActivityContextInterface getOutgoingDialogAci();
        public abstract void setOutgoingDialogAci(ActivityContextInterface aci);
        
@EventHandler(name="javax.sip.message.Request.INVITE",vendor="net.java.slee",version="1.2",initial-event="True")
        public onInviteEvent(RequestEvent event, ActivityContextInterface aci) {
                // ACI is the server transaction activity
                try {
                        // Create the dialogs representing the incoming and 
outgoing call
                        // legs.
                        final DialogActivity incomingDialog = (DialogActivity) 
sipProvider
                                        
.getNewDialog(event.getServerTransaction());
                        final DialogActivity outgoingDialog = 
sipProvider.getNewDialog(
                                        incomingDialog, true);
                        // Obtain the dialog activity contexts and attach to 
them
ActivityContextInterface outgoingDialogACI = sipActivityContextInterfaceFactory
                                        
.getActivityContextInterface(outgoingDialog);
                        setOutgoingDialogAci(outgoingDialogACI);
                        incomingDialogACI = sipActivityContextInterfaceFactory
                                        
.getActivityContextInterface(incomingDialog);
                        SbbLocalObject sbbLocalObject = sbbContextExt
                                        .getSbbLocalObject();
                        incomingDialogACI.attach(sbbLocalObject);
                        outgoingDialogACI.attach(sbbLocalObject);
                        // Record which dialog is which, so we can find the 
peer dialog
                        // when forwarding messages between dialogs.
                        forwardRequest(event, outgoingDialog);
                } catch (Throwable e) {
                        tracer.severe("Failed to process incoming INVITE.", e); 
                      
                }
        }

        ...


A wiki page should be created for community discussion what annotations and injections to be done.

Note, it's not expected to have all annotations and injections done for 2.2.0!!

Reply via email to