on 04-05-2013 2:21 PM
Hi Experts,
I am trying to call BRM from UDF using the public BRM API.
The following blog is used as inspiration.
http://help.sap.com/saphelp_nwce72/helpdata/en/2f/b0c8182e3a4aa0af3931938679fe58/frameset.htm
I get an error when calling the invokeRuleset part of the code from from a message mapping.
jndiName = "com.sap.brms.RuleEngine"
if (ruleEngine == null) {
InitialContext context = new InitialContext()
Object obj = context.lookup(jndiName);
RuleEngineHome home = (RuleEngineHome) PortableRemoteObject.narrow(obj,
RuleEngineHome.class);
ruleEngine = (RuleEngine) home.create();
}
The error message i get in the Try/Catch is the following: com.sap.brms.qrules.ejb.RuleEngineHome
Let me know if more info is needed?
error message is just com.sap.brms.qrules.ejb.RuleEngineHome?
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Here is the StackTrace:
com.sap.engine.services.cross.PortableRemoteObjectContainer.narrow(PortableRemoteObjectContainer.java:238) com.sap.engine.system.PortableRemoteObjectProxy.narrow(PortableRemoteObjectProxy.java:24) javax.rmi.PortableRemoteObject.narrow(PortableRemoteObject.java:137) xxxx.com_xxxx_1._.XXXXFunctions.readDecisionTable(XXXXFunctions.java:70) sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) java.lang.reflect.Method.invoke(Method.java:597) com.sap.aii.mappingtool.tf7.rt.MethodImplementedIteratorHelper.executeMethod(MethodImplementedIteratorHelper.java:177) com.sap.aii.mappingtool.tf7.rt.FunctionWrapper.calculateCurrentValue(FunctionWrapper.java:106) com.sap.aii.mappingtool.tf7.rt.AbstractFunctionWrapper.cacheValue(AbstractFunctionWrapper.java:31) com.sap.aii.mappingtool.tf7.rt.AbstractFunctionWrapper.gotoNextContext(AbstractFunctionWrapper.java:41) com.sap.aii.mappingtool.tfapi.ResIteratorDump.dump(ResIteratorDump.java:54) com.sap.aii.mappingtool.tf7.AMappingProgram.dumpIterators(AMappingProgram.java:731) com.sap.aii.mappingtool.tf7.AMappingProgram.start(AMappingProgram.java:511) com.sap.aii.mappingtool.tf7.Transformer.start(Transformer.java:145) com.sap.aii.mappingtool.tf7.AMappingProgram.transform(AMappingProgram.java:645) com.sap.aii.ibrep.server.mapping.exec.ExecuteXiMappingCommand.transformInternal(ExecuteXiMappingCommand.java:198) com.sap.aii.ibrep.server.mapping.exec.ExecuteXiMappingCommand.execute(ExecuteXiMappingCommand.java:95) com.sap.aii.ib.server.mapping.exec.CommandManager.execute(CommandManager.java:43) com.sap.aii.ibrep.server.mapping.ServerMapService.execute(ServerMapService.java:40) com.sap.aii.ibrep.server.mapping.MapServiceBean.execute(MapServiceBean.java:40) sun.reflect.GeneratedMethodAccessor767.invoke(Unknown Source) sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) java.lang.reflect.Method.invoke(Method.java:597) com.sap.engine.services.ejb3.runtime.impl.RequestInvocationContext.proceedFinal(RequestInvocationContext.java:47) com.sap.engine.services.ejb3.runtime.impl.AbstractInvocationContext.proceed(AbstractInvocationContext.java:166) com.sap.engine.services.ejb3.runtime.impl.Interceptors_StatesTransition.invoke(Interceptors_StatesTransition.java:19) com.sap.engine.services.ejb3.runtime.impl.AbstractInvocationContext.proceed(AbstractInvocationContext.java:179) com.sap.engine.services.ejb3.runtime.impl.Interceptors_Resource.invoke(Interceptors_Resource.java:50) com.sap.engine.services.ejb3.runtime.impl.AbstractInvocationContext.proceed(AbstractInvocationContext.java:179) com.sap.engine.services.ejb3.runtime.impl.Interceptors_Transaction.doWorkWithAttribute(Interceptors_Transaction.java:37) com.sap.engine.services.ejb3.runtime.impl.Interceptors_Transaction.invoke(Interceptors_Transaction.java:21) com.sap.engine.services.ejb3.runtime.impl.AbstractInvocationContext.proceed(AbstractInvocationContext.java:179) com.sap.engine.services.ejb3.runtime.impl.Interceptors_MethodRetry.invoke(Interceptors_MethodRetry.java:46) com.sap.engine.services.ejb3.runtime.impl.AbstractInvocationContext.proceed(AbstractInvocationContext.java:179) com.sap.engine.services.ejb3.runtime.impl.AbstractInvocationContext.proceed(AbstractInvocationContext.java:191) com.sap.engine.services.ejb3.runtime.impl.Interceptors_StatelessInstanceGetter.invoke(Interceptors_StatelessInstanceGetter.java:23) com.sap.engine.services.ejb3.runtime.impl.AbstractInvocationContext.proceed(AbstractInvocationContext.java:179) com.sap.engine.services.ejb3.runtime.impl.Interceptors_SecurityCheck.invoke(Interceptors_SecurityCheck.java:25) com.sap.engine.services.ejb3.runtime.impl.AbstractInvocationContext.proceed(AbstractInvocationContext.java:179) com.sap.engine.services.ejb3.runtime.impl.Interceptors_ExceptionTracer.invoke(Interceptors_ExceptionTracer.java:17) com.sap.engine.services.ejb3.runtime.impl.AbstractInvocationContext.proceed(AbstractInvocationContext.java:179) com.sap.engine.services.ejb3.runtime.impl.DefaultInvocationChainsManager.startChain(DefaultInvocationChainsManager.java:138) com.sap.engine.services.ejb3.runtime.impl.DefaultEJBProxyInvocationHandler.invoke(DefaultEJBProxyInvocationHandler.java:164) $Proxy982.execute(Unknown Source) sun.reflect.GeneratedMethodAccessor766.invoke(Unknown Source) sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) java.lang.reflect.Method.invoke(Method.java:597) com.sap.engine.services.rmi_p4.P4DynamicSkeleton.dispatch(P4DynamicSkeleton.java:240) com.sap.engine.services.rmi_p4.DispatchImpl._runInternal(DispatchImpl.java:466) com.sap.engine.services.rmi_p4.server.ServerDispatchImpl.run(ServerDispatchImpl.java:69) com.sap.engine.services.rmi_p4.P4Message.process(P4Message.java:72) com.sap.engine.services.rmi_p4.P4Message.execute(P4Message.java:43) com.sap.engine.services.cross.fca.FCAConnectorImpl.executeRequest(FCAConnectorImpl.java:999) com.sap.engine.services.rmi_p4.P4Message.process(P4Message.java:59) com.sap.engine.services.cross.fca.MessageReader.run(MessageReader.java:55) com.sap.engine.core.thread.execution.Executable.run(Executable.java:122) com.sap.engine.core.thread.execution.Executable.run(Executable.java:101) com.sap.engine.core.thread.execution.CentralExecutor$SingleThread.run(CentralExecutor.java:328) |
Here is the UDF code.
public class XXXXFunctions {
private static String projectName = "demo.sap.com~ratecalculation";
private static String rulesetName = "ratecalcrules";
@LibraryMethod(title="readDecisionTable", description="Read Decision Table", category="User-Defined", type=ExecutionType.SINGLE_VALUE)
public String readDecisionTable (
@Argument(title="connProvider") String connProvider,
@Argument(title="destCountry") String destCountry,
@Argument(title="originCountry") String originCountry,
@Argument(title="typeOfLine") String typeOfLine,
Container container) throws StreamTransformationException{
String result = "";
try {
//Remote Lookup of the Rules Engine
InitialContext context = new InitialContext();
Object obj = context.lookup(RuleEngineHome.JNDI_NAME);
RuleEngineHome home = (RuleEngineHome) PortableRemoteObject.narrow(obj,
RuleEngineHome.class);
RuleEngineRemote remote = home.create();
RuleEngine engine = (RuleEngine) remote;
//Invoking a Ruleset
RulesetContext ruleContext = engine.createRulesetContext(projectName, rulesetName);
} catch (Exception e) {
StackTraceElement[] stack = e.getStackTrace();
String exception = "";
for (StackTraceElement s : stack) {
exception = exception + s.toString() + "\n\t\t";
}
messageLog("ErrorMessage: " + e.getMessage(), container);
messageLog("ErrorTrace: " + exception, container);
}
return result;
}
public static void messageLog(String traceInput, Container container) {
AbstractTrace trace = container.getTrace();
trace.addInfo(traceInput);
}
@Init(description="")
public void init (
GlobalContainer container) throws StreamTransformationException{
}
@Cleanup
public void cleanup (
GlobalContainer container) throws StreamTransformationException{
}
}
When i run the inspiration scenario i get the following data in obj.
Object obj = context.lookup(jndiName);
obj |
---|
RMI_P4: Local Dynamic Stub for impl -> com.sap.engine.services.ejb3.runtime.impl.DefaultEJBProxyInvocationHandler@d2e210b6 ------ P4 Remote Object Info : com.sap.engine.services.rmi_p4.server.P4ServerObjectInfo@12a |- broker id : 1120312513 |- server id : 3779250 |- client Id : -1 |- local Id : 3779250 |- is redirectable : false |- redir Ident : |- factory Name : null |- objId : null |- server loader name : null |- connected : false |- supportOptimization : true |- protocol : 76 31 v1 Remote Interfaces : Interface : [0] = com.sap.brms.qrules.ejb.RuleEngineRemote Interface : [1] = com.sap.engine.services.ejb3.runtime.ComponentInterface ========================================= Connection profiles : connection profile : [0] = None:10.118.226.187:50004 ========================================= |
The response i get from my UDF is the following:
obj |
---|
RMI_P4: Local Dynamic Stub for impl -> com.sap.engine.services.ejb3.runtime.impl.DefaultEJBProxyInvocationHandler@d2e210b6 ------ P4 Remote Object Info : com.sap.engine.services.rmi_p4.server.P4ServerObjectInfo@129 |- broker id : 1120312513 |- server id : 3779250 |- client Id : -1 |- local Id : 3779250 |- is redirectable : false |- redir Ident : |- factory Name : null |- objId : null |- server loader name : null |- connected : false |- supportOptimization : true |- protocol : 76 31 v1 Remote Interfaces : Interface : [0] = com.sap.brms.qrules.ejb.RuleEngineHome Interface : [1] = com.sap.engine.services.ejb3.runtime.ComponentInterface ========================================= Connection profiles : connection profile : [0] = None:10.118.226.187:50004 ========================================= |
The only real difference i can see is the Interface[0]
com.sap.brms.qrules.ejb.RuleEngineRemote
com.sap.brms.qrules.ejb.RuleEngineHome
All ideas are welcome 🙂
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
87 | |
10 | |
10 | |
10 | |
7 | |
6 | |
6 | |
5 | |
5 | |
4 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.