on 06-15-2011 9:00 AM
BPM Experts,
We have a BPM process which gets triggered from a JWD application. The issue which we are having is as follows
1.Dynamic allocation of Single user to a task is not working. The approach we have taken is WD application will send User Unique Id from context and it will be mapped to getPrincipal exression.
2.Assign to task to multiple users, first in complex type we are not able to set the cardinality 0..n , it accepting 0..1 or 1..1...To handle this we have appended each of IUsedId sent as string in WD with special characters and tried using tokenize function and then getPrincipals even that also not working
Any quick response and pointers will be highly appreciated
FYI... we cannot use Portal UME groups in this scenario
Best regards,
Prasad
Team,
Any response will be highly appreciated
Thanks again
Best regards,
Prasad
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hi Prasad,
I had to do something similar with an EJB.
For your question: "I am not sure how we need to declare in Complex type in EJB".
You could use the following code:
private static final String NAMESPACE_FUNCTION_PARAMETER = "xxxx";//Your function namespace
private static final String RESULT = "result";
private static final String NAME_PROPERTY_OUTPUT_RESULT = SdoRenamingHelper
.renameXsdElementToSdoProperty(new QName(
NAMESPACE_FUNCTION_PARAMETER, RESULT), false);
public DataObject invokeSdo(DataObject inputDO, IInvocationContext invocationContext) {
DataObject outputDO = invocationContext.createOutputDataObject();
List<String> principals = yourMethodForGetPrincipalIds();
outputDO.setList(outputDO.getType().getProperty(NAME_PROPERTY_OUTPUT_RESULT), principals);
return outputDO;
}
I hope that this information is useful.
Regards,
Julian.
Hi Julian,
Thanks for the reply, I am getting below warning when trying to deploy the EAR which has got EJB as used DC. The same error is coming when I am trying use the same in BPM after deployment at runtime -
com.sap.engine.services.ejb3.runtime.impl.refmatcher.EJBResolvingException: Cannot start application xxxxx.com/devc~eardynamicusers; nested exception is: java.rmi.RemoteException: ASJ.dpl_ds.006125 Error occurred while starting application locally and wait.; nested exception is:
* com.sap.engine.services.deploy.exceptions.ServerDeploymentException: Application [xxxxx.com/devc~eardynamicusers] cannot be started. Reason: it has hard reference to resource [devc~ejbdynamicusers] with type [application], which is not active on the server.*
Hint: 1) Is referred resource deployed? 2) Is referred resource able to start? at com.sap.engine.services.ejb3.runtime.impl.DefaultContainerRepository.startApp(DefaultContainerRepository.java:351)
at com.sap.engine.services.ejb3.runtime.impl.refmatcher.result.SingleResultImpl.add(SingleResultImpl.java:17)
at com.sap.engine.services.ejb3.runtime.impl.refmatcher.BeanMatcher.matchLocalInterfaces(BeanMatcher.java:208)
at com.sap.engine.services.ejb3.runtime.impl.refmatcher.BeanMatcher.matchInterfaces(BeanMatcher.java:83)
at com.sap.engine.services.ejb3.runtime.impl.refmatcher.BeanMatcher.matchReferenceToBean(BeanMatcher.java:46)
at com.sap.engine.services.ejb3.runtime.impl.DefaultContainerRepository.matchBean(DefaultContainerRepository.java:390)
at com.sap.engine.services.ejb3.runtime.impl.DefaultContainerRepository.matchApps(DefaultContainerRepository.java:367)
at com.sap.engine.services.ejb3.runtime.impl.DefaultContainerRepository.getEnterpriseBeansContainers(DefaultContainerRepository.java:95)
at com.sap.engine.services.ejb3.runtime.impl.DefaultRemoteObjectFactory.resolveReference(DefaultRemoteObjectFactory.java:73)
at com.sap.engine.services.ejb3.runtime.impl.EJBObjectFactory.getObjectInstance(EJBObjectFactory.java:145)
at com.sap.engine.services.ejb3.runtime.impl.EJBObjectFactory.getObjectInstance(EJBObjectFactory.java:64)
at com.sap.engine.system.naming.provider.ObjectFactoryBuilderImpl._getObjectInstance(ObjectFactoryBuilderImpl.java:77)
at com.sap.engine.system.naming.provider.ObjectFactoryBuilderImpl.access$100(ObjectFactoryBuilderImpl.java:33)
at com.sap.engine.system.naming.provider.ObjectFactoryBuilderImpl$DispatchObjectFactory.getObjectInstance(ObjectFactoryBuilderImpl.java:228)
at javax.naming.spi.NamingManager.getObjectInstance(NamingManager.java:283)
at com.sap.engine.services.jndi.implclient.ClientContext.lookup(ClientContext.java:450)
at com.sap.engine.services.jndi.implclient.OffsetClientContext.lookup(OffsetClientContext.java:224)
at com.sap.engine.services.jndi.implclient.OffsetClientContext.lookup(OffsetClientContext.java:243)
at javax.naming.InitialContext.lookup(InitialContext.java:392)
at javax.naming.InitialContext.lookup(InitialContext.java:392)
at com.sap.glx.mapping.execution.implementation.function.BeanFunctionProvider.createBeanFunction(BeanFunctionProvider.java:24)
at com.sap.glx.mapping.execution.implementation.Compiler$NativeBeanFunction.invokeNative(Compiler.java:362)
at com.sap.glx.mapping.execution.implementation.rule.invocation.StandardInvocation.step(StandardInvocation.java:133)
at com.sap.glx.mapping.execution.implementation.rule.expression.DeepExpression$Resolver.resolve(DeepExpression.java:45)
at com.sap.glx.mapping.execution.implementation.rule.expression.DeepExpression$Resolver.<init>(DeepExpression.java:27)
at com.sap.glx.mapping.execution.implementation.rule.expression.DeepExpression.internalExpress(DeepExpression.java:77)
at com.sap.glx.mapping.execution.implementation.rule.expression.AbstractExpression.express(AbstractExpression.java:50)
at com.sap.glx.mapping.execution.implementation.rule.part.AbstractPart.processSourceExpression(AbstractPart.java:117)
at com.sap.glx.mapping.execution.implementation.rule.part.TerminalPart.internalPartake(TerminalPart.java:23)
at com.sap.glx.mapping.execution.implementation.rule.part.AbstractPart.partake(AbstractPart.java:87)
at com.sap.glx.mapping.execution.implementation.rule.mapping.NarrowMapping.internalMap(NarrowMapping.java:42)
at com.sap.glx.mapping.execution.implementation.rule.mapping.AbstractMapping.map(AbstractMapping.java:49)
at com.sap.glx.mapping.execution.implementation.rule.invocation.StandardInvocation$ImplementedInput.receive(StandardInvocation.java:77)
at com.sap.glx.mapping.execution.implementation.invoker.MediatedSdoInvoker$Mediator.createInputDataObject(MediatedSdoInvoker.java:110)
at com.sap.glx.mapping.execution.implementation.invoker.MediatedSdoInvoker.invokeNative(MediatedSdoInvoker.java:155)
at com.sap.glx.mapping.execution.implementation.Compiler$NativeBeanFunction.invokeNative(Compiler.java:364)
at com.sap.glx.mapping.execution.implementation.rule.invocation.StandardInvocation.step(StandardInvocation.java:133)
at com.sap.glx.mapping.execution.implementation.rule.expression.DeepExpression$Resolver.resolve(DeepExpression.java:45)
at com.sap.glx.mapping.execution.implementation.rule.expression.DeepExpression$Resolver.<init>(DeepExpression.java:27)
at com.sap.glx.mapping.execution.implementation.rule.expression.DeepExpression.internalExpress(DeepExpression.java:77)
at com.sap.glx.mapping.execution.implementation.rule.expression.AbstractExpression.express(AbstractExpression.java:50)
at com.sap.glx.mapping.execution.implementation.rule.part.AbstractPart.processSourceExpression(AbstractPart.java:117)
at com.sap.glx.mapping.execution.implementation.rule.part.BroadPart.internalPartake(BroadPart.java:38)
at com.sap.glx.mapping.execution.implementation.rule.part.AbstractPart.partake(AbstractPart.java:87)
at com.sap.glx.mapping.execution.implementation.rule.part.BroadPart.internalPartake(BroadPart.java:46)
at com.sap.glx.mapping.execution.implementation.rule.part.AbstractPart.partake(AbstractPart.java:87)
at com.sap.glx.mapping.execution.implementation.rule.mapping.NarrowMapping.internalMap(NarrowMapping.java:42)
at com.sap.glx.mapping.execution.implementation.rule.mapping.AbstractMapping.map(AbstractMapping.java:49)
at com.sap.glx.mapping.execution.implementation.Runner.transform(Runner.java:61)
at com.sap.glx.mapping.execution.implementation.Runner.transform(Runner.java:41)
at com.sap.glx.core.internaladapter.Transformer$TransformerTemplateAccessor$MapperTemplate$ImplementedInvocationHandler.map(Transformer.java:3016)
at com.sap.glx.core.internaladapter.Transformer$TransformerTemplateAccessor$MapperTemplate$ImplementedInvocationHandler.invoke(Transformer.java:2997)
at com.sap.glx.core.internaladapter.Transformer$TransformerInvocationHandler.invoke(Transformer.java:3284)
at com.sap.glx.core.dock.impl.DockObjectImpl.invokeMethod(DockObjectImpl.java:530)
at com.sap.glx.core.kernel.trigger.config.Script$MethodInvocation.execute(Script.java:245)
at com.sap.glx.core.kernel.trigger.config.Script.execute(Script.java:791)
at com.sap.glx.core.kernel.execution.transition.ScriptTransition.execute(ScriptTransition.java:63)
at com.sap.glx.core.kernel.execution.transition.Transition.commence(Transition.java:138)
at com.sap.glx.core.kernel.mmtx.DirectNestedTransaction.inPrepare(DirectNestedTransaction.java:67)
at com.sap.glx.core.kernel.mmtx.AbstractTransaction.do_prepare(AbstractTransaction.java:198)
at com.sap.glx.core.kernel.mmtx.AbstractTransaction.commit(AbstractTransaction.java:81)
at com.sap.glx.core.kernel.mmtx.DirectNestedTransaction.inPrepare(DirectNestedTransaction.java:68)
at com.sap.glx.core.kernel.mmtx.AbstractTransaction.do_prepare(AbstractTransaction.java:198)
at com.sap.glx.core.kernel.mmtx.AbstractTransaction.commit(AbstractTransaction.java:81)
at com.sap.glx.core.kernel.mmtx.PrimaryTransaction.inPrepare(PrimaryTransaction.java:125)
at com.sap.glx.core.kernel.mmtx.AbstractTransaction.do_prepare(AbstractTransaction.java:198)
at com.sap.glx.core.kernel.mmtx.AbstractTransaction.commit(AbstractTransaction.java:81)
at com.sap.glx.core.kernel.execution.LeaderWorkerPool$Follower.run(LeaderWorkerPool.java:129)
at com.sap.glx.core.resource.impl.common.WorkWrapper.run(WorkWrapper.java:58)
at com.sap.glx.core.resource.impl.j2ee.ServiceUserManager$ServiceUserImpersonator$1.run(ServiceUserManager.java:124)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:337)
at com.sap.glx.core.resource.impl.j2ee.ServiceUserManager$ServiceUserImpersonator.run(ServiceUserManager.java:121)
at com.sap.engine.core.thread.impl3.ActionObject.run(ActionObject.java:37)
at java.security.AccessController.doPrivileged(Native Method)
at com.sap.engine.core.thread.impl3.SingleThread.execute(SingleThread.java:182)
at com.sap.engine.core.thread.impl3.SingleThread.run(SingleThread.java:299)
at: NamingException: Exception during lookup operation of object with name xxxxx.com/devc~eardynamicusers/LOCAL/DynamicUsersBean/bean.DynamicUsersBeanLocal, cannot resolve object reference.
Edited by: Hemanth Racharla on Jun 19, 2011 6:18 PM
Hi Prasad,
Try to deploy first the EAR project (with reference to EJB project), and then you should checked if the EJB is deployed correctly (http://<host>:<port>/ejbexplorer).
Later deploy your BPM project, but before checked if the EJB Function have the correct JNDI lookup name for the EJB.
Best Regards,
Julian.
Hi Julian,
Thanks for the details, I've created same I've checked that EJB is deployed as well. But I am getting below error. Though I've given correct JNDI reference name. Appreciate any help from you. Also can please let me know while giving the reference in EAR file do we need to check for Design Deploy and Runtime?
at: IllegalArgumentException: Lookup name 'xxxx.com/devc~eardynamicusers/LOCAL/DynamicUsersBean/bean.DynamicUsersBeanLocal' invalid
at: EJB::xxxx.com/devc~eardynamicusers/LOCAL/DynamicUsersBean/bean.DynamicUsersBeanLocal( "xxxx@xxxx" --> input )
at: EJB::xxxx.com/devc~eardynamicusers/LOCAL/DynamicUsersBean/bean.DynamicUsersBeanLocal( "xxxx@xxxx" --> input )/result merge(relay,void)> principalID
at: Implicit Function Argument Transformation
JNDI name given is :xxxxx.com/devc~eardynamicusers/LOCAL/DynamicUsersBean/bean.DynamicUsersBeanLocal
public class DynamicUsersBean implements DynamicUsersBeanLocal, Function, SdoInvoker {
/**
* Default constructor.
*/
public DynamicUsersBean() {
}
private static final String NAMESPACE_FUNCTION_PARAMETER = "dynamicusers.xxxx.com/bpmprocess";
private static final String SOURCE_LOGONID_PROPERTY = "input";
private static final String RESULT = "result";
private static final String NAME_PROPERTY_OUTPUT_RESULT = SdoRenamingHelper.renameXsdElementToSdoProperty(new QName(NAMESPACE_FUNCTION_PARAMETER, RESULT), false);
//private static final com.sap.tc.logging.Location logger = com.sap.tc.logging.Location.getLocation(DynamicUsersBean.class);
// private static final String NAME_PROPERTY_INPUT_PARAMETER1 = SdoRenamingHelper.renameXsdElementToSdoProperty(new QName(
//NAMESPACE_FUNCTION_PARAMETER, PARAMETER1), false);
//private static final String NAME_PROPERTY_OUTPUT_RESULT = SdoRenamingHelper
// .renameXsdElementToSdoProperty(new QName(
//NAMESPACE_FUNCTION_PARAMETER, RESULT), false);
/**
* @see SdoInvoker#invokeSdo(DataObject, SdoInvoker.InvocationContext)
*/
public DataObject invokeSdo(DataObject sourceDO, SdoInvoker.InvocationContext invocationContext) {
// TODO Auto-generated method stub
// check source DO
System.out.println("<EJB Class>Inside Invoke method");
ArrayList<String> listPrincipal = new ArrayList<String>();
DataObject outputDO = invocationContext.createOutputDataObject();
Property keyvalueProperty = sourceDO.getType().getProperty(SOURCE_LOGONID_PROPERTY);
String keyvalueStr = sourceDO.getString(keyvalueProperty);
System.out.println("<EJB Class>Input String is "+keyvalueStr);
String[] listofUsers = keyvalueStr.split("@");
IUserFactory userFactory = UMFactory.getUserFactory();
IUser user = null;
for(int i=0;i<listofUsers.length;i++){
try {
user = userFactory.getUserByLogonID(listofUsers<i>);
listPrincipal.add(user.getUniqueID());
} catch (UMException e) {
System.err.println(e.getMessage());
}
outputDO.setList(outputDO.getType().getProperty(NAME_PROPERTY_OUTPUT_RESULT), listPrincipal);
}
return(outputDO);
}
}
User | Count |
---|---|
85 | |
10 | |
10 | |
9 | |
6 | |
6 | |
6 | |
5 | |
4 | |
3 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.