The following classes and interfaces are used by the Processor:
The InputBean is generated and synchronized, tied to the parameters of the atomic action (has set and get methods for all parameters of the atomic action), and provides setters and getters for manipulating parameters.
If the parameter is a scaler (simple type), it is received as a string and can be used immediately
If the parameter is a compound parameter with named members, the InputBean returns another bean that represents the compound. The returned bean has convenience methods to get the members within the compound. A compound bean for every defined type of compound parameter is created. You also get a set of instances of these beans based on the work order (you get a list of these). If the compound parameter does not have named members, it provides a vector of the members.
Note:
Specify the compound members whenever possible. Indicating the members will simplify the coding required and eliminate possible code to mode synchronization issues.Multi-instance Compound parameters start at index one (e.g. CMPD[1]).
Bracket type (Index Parameter Identification Tokens) and delimiter (Indexed Parameter Delimiter) settings are configured on the Project editor Cartridge Locations tab in the Code Generation area. Design Studio applies these settings to all generated code within the cartridge. The following examples assume the defaults (square brackets with a period delimiter).
The following example shows a scalar parameter.
Service Action Parameter Name: SCALAR Atomic Action Parameter Name: SCALAR Order Format: SCALAR Usage: String myscalar = parms.getMyScalar();
The following example shows a compound parameter with no members specified.
Service Action Parameter Name: CMPD Atomic Action Parameter Name: CMPD Order Format: Entries will have the compound name as a prefix. There may be multiple entries with that prefix. For example, a compound named "CMPD" may have the following entries on an order. CMPD CMPD.X CMPD.Y CMPD.Z Usage: String mycmpd = parms.getMyCmpd String x = parms.getMyCmpd ("X"); String y = parms.getMyCmpd ("Y"); String z = parms.getMyCmpd ("Z");
The following example shows a compound parameter with members.
Service Action Parameter Name: CMPDMBR Atomic Action Parameter Name: CMPDMBR Order Format: CMPDMBR.A CMPDMBR.B CMPDMBR.C Usage: MyCmdMbrBean mycmpdmbr = parms.getMyCmpdMbr(); mycmpdmbr.getA(); mycmpdmbr.getB(); mycmpdmbr.getC();
The following example shows a multi-instance compound parameter with no members specified.
Service Action Parameter Name: CMPDMULTI Atomic Action Parameter Name: CMPDMULTI Order Format: Entries will have the compound name as a prefix. There may be multiple entries with that prefix. For example, a compound named "CMPDMULTI" may have the following entries on an order. CMPDMULTI[1] CMPDMULTI[1].X CMPDMULTI[1].Y CMPDMULTI[1].Z CMPDMULTI[2].X CMPDMULTI[2].Y CMPDMULTI[2].Z Usage: String mycmpdmulti = parms.getMyCmpdMulti (); String x1 = parms.getMyCmpdMulti (1, "X"); String y1 = parms.getMyCmpdMulti (1, "Y"); String z1 = parms.getMyCmpdMulti (1, "Z"); String x2 = parms.getMyCmpdMulti (2, "X"); String y2 parms.getMyCmpdMulti (2, "Y"); String z2 = parms.getMyCmpdMulti (2,"Z");
The following example shows a multi-instance compound parameter with members.
Service Action Parameter Name: CMPDMULTIMBR Atomic Action Parameter Name: CMPDMULTIMBR Order Format: CMPDMULTIMBR[1].A CMPDMULTIMBR[1].B CMPDMULTIMBR[1].C CMPDMULTIMBR[2].A CMPDMULTIMBR[2].B CMPDMULTIMBR[2].C Usage: MyCmpdMultiMbrBean[] mycmpdmultimbr = parms.getMyCmpdMultiMbr(); for (int i = 0; i <mycmpdmultimbr.length; i++) { MyCmpdMultiMbrBean bean = mycmpdmultimbr[i]; bean.getA(); bean.getB(); bean.getC(); }
The following example shows an indexed compound parameter with no members.
Service Action Parameter Name: CMPDIDX[++] Atomic Action Parameter Name: CMPDIDX Order Format: Entries will have the compound name as a prefix. There may be multiple entries with that prefix. For example, a compound named "CMPDIDX" may have the following entries on an order. CMPDIDX[0] CMPDIDX[0].X CMPDIDX[0].Y CMPDIDX[0].Z CMPDIDX[1].X CMPDIDX[1].Y CMPDIDX[1].Z Usage: String mycmpdidx = parms.getMyCmpdIdx(); String x = parms.getMyCmpdIdx ("X"); String y = parms.getMyCmpdIdx ("Y"); String z = parms.getMyCmpdIdx ("Z");
Note:
The implementation will be called multiple times, providing one instance of the compound during each call.The following example shows a compound parameter with members.
Service Action Parameter Name: CMPDIDXMBR[++] Atomic Action Parameter Name: CMPDIDXMBR Order Format: CMPDIDXMBR[0].A CMPDIDXMBR[0].B CMPDIDXMBR[0].C CMPDIDXMBR[1].A CMPDIDXMBR[1].B CMPDIDXMBR[1].C Usage: MyCmpdIdxMbrBean mycmpdidxmbr = parms.getMyCmpdIdxMbr(); mycmpdidxmbr.getA(); mycmpdidxmbr.getB(); mycmpdidxmbr.getC();
Notes:
The implementation will be called multiple times providing one instance of the compound during each call.
For multi-instance compounds, member parameters cannot be set as required because the system cannot determine whether a member is present or if there are additional entries.
The Output class enables you to populate output parameters. There are convenience methods for populating parameters to varying scope within a work order. Examples of parameters are as follows:
Action parameters are available to the service action.
Input parameters.
Global parameters are available to everything.
Rollback parameters enable you to populate for the rollback action if it is defined within the atomic action.
Note:
The output parameters are not explicitly defined in the model, so there are no convenience methods. To set a parameter you need to know its string name and include it.ILogger
is an interface for debug logs. When the processor is running on the Oracle Communications ASAP system, it logs to the Diagnosis log. If you are running the processor in JUnit, you can use other implementations of logger to log to the console instead.
IExitType
enables you to set the exit type explicitly or by matching a response string against the user-defined exit types.
IConnectionHandler
is an instance of the Connection Handler that is associated with the vendor, technology, and software load of the action processor. For the Telnet Connection Handler, the basic methods on the interface can be used to send requests (because it is string-based). For technologies (for example, SOAP or XML) that provide multiple convenience methods, the Processor may want to test the type of Connection Handler and pass it to a more specific Connection Handler to obtain access to the convenience methods. If you want to expose more explicit methods when writing a Connection Handler, you can define an interface that extends the IConnectionHandler
and ensure that those methods are available through that interface. The Processor should always use an interface when interacting with the ConnectionHandler, to achieve the implementation in more than one way and allow for unit testing. For more information about unit testing, see "Understanding Unit Testing".
Processor
needs to implement the processor interface, which is generated in the code generation and kept synchronized with the model.
Proxy
is situated between the NEP and Processor class and manages the interaction between them. Proxy
sets up all classes used by the Processor and initiates and calls the Processor. Most importantly, the proxy simplifies the work required by the Processor by:
Creating all instances of the InputBean and initializes CompoundBeans so they are available and populated through the processor.
Performing much of the standard logging, including the entry and exit of the processor and the contents of the parameters passed in for debugging.
Extending the JProcessor. This isolates the portion of the Java processor code that needs to relate directly to the version of the activation, and allows the processor, its interface, and all its related classes and interfaces to run outside of the ASAP system and, therefore, to be unit tested
Note:
When creating a Java processor from the action processor editor, the resulting class name is "Proxy" because the proxy gets initiated by the NEP (Proxy is registered to be called in the activation). When you open that implementation it opens to theProcessor
class, where you write your code for editing.Understanding Java with Code Generation