Exception using LoginApi.login (BPM 6.2.6)

Hi,

I’m trying to retrieve or create a sessionID using Bonita APIs.

In the documentation, i saw this script :

// First of all, log in: final LoginAPI loginAPI = TenantAPIAccessor.getLoginAPI(); APISession session = loginAPI.login(userName, password);

I use it to create a session so i can get the id of this session.

When i execute this with the studio, i’m getting an Exception :

WARNING: Error while executing connector with id 8 org.bonitasoft.engine.expression.exception.SExpressionEvaluationException: Script throws an exceptionSExpressionImpl [name=fff, content=import org.bonitasoft.engine.api.LoginAPI;

import org.bonitasoft.engine.api.TenantAPIAccessor;

import org.bonitasoft.engine.session.APISession;

LoginAPI loginAPI = TenantAPIAccessor.getLoginAPI();

APISession session = loginAPI.login(“super”, “super”);

return session.getId();, returnType=java.lang.Object, dependencies=, expressionKind=ExpressionKind [interpreter=GROOVY, type=TYPE_READ_ONLY_SCRIPT]]
at org.bonitasoft.engine.expression.impl.GroovyScriptExpressionExecutorCacheStrategy.evaluate(GroovyScriptExpressionExecutorCacheStrategy.java:111)
at org.bonitasoft.engine.expression.impl.ExpressionServiceImpl.evaluate(ExpressionServiceImpl.java:98)
at org.bonitasoft.engine.core.expression.control.api.impl.ExpressionResolverServiceImpl.evaluateExpressionWithResolvedDependencies(ExpressionResolverServiceImpl.java:151)
at org.bonitasoft.engine.core.expression.control.api.impl.ExpressionResolverServiceImpl.evaluateExpressionsFlatten(ExpressionResolverServiceImpl.java:110)
at org.bonitasoft.engine.core.expression.control.api.impl.ExpressionResolverServiceImpl.evaluate(ExpressionResolverServiceImpl.java:73)
at org.bonitasoft.engine.core.connector.impl.ConnectorServiceImpl.evaluateInputParameters(ConnectorServiceImpl.java:326)
at org.bonitasoft.engine.connector.ConnectorServiceDecorator.evaluateInputParameters(ConnectorServiceDecorator.java:105)
at org.bonitasoft.engine.execution.work.ExecuteConnectorWork$EvaluateParameterAndGetConnectorInstance.call(ExecuteConnectorWork.java:184)
at org.bonitasoft.engine.execution.work.ExecuteConnectorWork$EvaluateParameterAndGetConnectorInstance.call(ExecuteConnectorWork.java:148)
at org.bonitasoft.engine.transaction.JTATransactionServiceImpl.executeInTransaction(JTATransactionServiceImpl.java:257)
at org.bonitasoft.engine.execution.work.ExecuteConnectorWork.work(ExecuteConnectorWork.java:120)
at org.bonitasoft.engine.execution.work.FailureHandlingBonitaWork.work(FailureHandlingBonitaWork.java:73)
at org.bonitasoft.engine.work.BonitaWork.run(BonitaWork.java:56)
at org.bonitasoft.engine.work.SequenceRunnableExecutor.innerRun(SequenceRunnableExecutor.java:45)
at org.bonitasoft.engine.work.BonitaRunnable.run(BonitaRunnable.java:35)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:724)
Caused by: org.bonitasoft.engine.platform.LoginException: org.bonitasoft.engine.transaction.STransactionCreationException: We do not support nested calls to the transaction service.
at org.bonitasoft.engine.api.impl.LoginAPIImpl.login(LoginAPIImpl.java:62)
at sun.reflect.GeneratedMethodAccessor73.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.bonitasoft.engine.api.impl.ServerAPIImpl.invokeAPI(ServerAPIImpl.java:294)
at org.bonitasoft.engine.api.impl.ServerAPIImpl.invokeAPI(ServerAPIImpl.java:219)
at org.bonitasoft.engine.api.impl.ServerAPIImpl.invokeMethod(ServerAPIImpl.java:107)
at org.bonitasoft.engine.api.impl.ClientInterceptor.invoke(ClientInterceptor.java:88)
at com.sun.proxy.$Proxy6.login(Unknown Source)
at org.bonitasoft.engine.api.LoginAPI$login.call(Unknown Source)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:42)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:120)
at Script1.run(Script1.groovy:11)
at org.bonitasoft.engine.expression.impl.GroovyScriptExpressionExecutorCacheStrategy.evaluate(GroovyScriptExpressionExecutorCacheStrategy.java:97)
… 19 more
Caused by: org.bonitasoft.engine.transaction.STransactionCreationException: We do not support nested calls to the transaction service.
at org.bonitasoft.engine.transaction.JTATransactionServiceImpl.begin(JTATransactionServiceImpl.java:61)
at org.bonitasoft.engine.transaction.JTATransactionServiceImpl.executeInTransaction(JTATransactionServiceImpl.java:255)
at org.bonitasoft.engine.execution.TransactionExecutorImpl.execute(TransactionExecutorImpl.java:50)
at org.bonitasoft.engine.api.impl.LoginAPIImpl.login(LoginAPIImpl.java:87)
at org.bonitasoft.engine.api.impl.LoginAPIImpl.login(LoginAPIImpl.java:60)
… 33 more

Any ideas ?

Thanks.

The code sample that you found in the documentation is not meant to be used as a script in your process, but from an external client. This external client/application needs to create a session in order to get access to the Bonita BPM engine. While you are in a process, you do not need to create a session, as one already exists, and you can directly make API calls.
Hope this helps,
Haris

Where do you use this script, in your process?

Yep.

I have a simple process with 2 activity :

  • The first is a service task with a connector containing this script
  • The second is a human task where i show the value of the sessionId

Ok, but do you know how can i get the existing session using a groovy script ?

Why do you need to get the session, what is the purpose? It is a matter of security, session is created while logging in.

I’m trying to get the sessionID to verifiy that a webservice is called through Bonita.
I’m sending the sessionID as parameter of my webservice, then, i verify that the sessionID exists using RestAPI.