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!!