cancel
Showing results for 
Search instead for 
Did you mean: 

Issues after Activiti explorer LDAP integration

aimingxu
Champ in-the-making
Champ in-the-making
Hi Guys,
I followed Activiti User Guide to integrate Activiti explorer 5.17.0 with LDAP because in activiti database, the password is clear text. I was able to integrate with LDAP though configuration without code changes. However, after the integration and login to explorer, I experienced several fetal errors.

1. click Users and Groups tabs under Manage tab will cause fetal error:
SEVERE: Servlet.service() for servlet [Vaadin Application Servlet] in context with path [/activiti-explorer] threw exception
java.lang.NullPointerException
        at org.activiti.explorer.ExplorerApp.terminalError(ExplorerApp.java:246)
        at com.vaadin.terminal.gwt.server.AbstractApplicationServlet.handleServiceException(AbstractApplicationServlet.java:1003)
       …..

2. click Processes tab will cause: deployment didn't put process definition in the cache error

Anyone experience the same issues? Any solutions? Does this means that customer code changes are needed because configuration alone will not work?

Thanks,
Aiming
8 REPLIES 8

jbarrez
Star Contributor
Star Contributor
Not sure what's going on here, but do remember that Explorer is a demonstration application, and not meant as an end product.

About your points:
1. That seems to be possible, as the methods from the default Ldap impl class is throwing an exception for the fetching all users/groups

2. Can you elaborate on this one? Is this an exception you get in the UI? Do you have a stacktrace on the server side?

aimingxu
Champ in-the-making
Champ in-the-making
Hi joram,
Thank you for your reply. The second issue was not there before LDAP integration so I assume it was caused by adding LDAP module to explorer. I got this exception from UI. Next to the Processes tab, there is a red exclamation. when mouse over it, it will show the following:
Exception
com.vaadin.event.ListenerMethod$MethodException: Invocation of method buttonClick in org.activiti.explorer.ui.mainlayout.MainMenuBar$ShowProcessDefinitionsClickListener failed.
at com.vaadin.event.ListenerMethod.receiveEvent(ListenerMethod.java:530)
at com.vaadin.event.EventRouter.fireEvent(EventRouter.java:164)
at com.vaadin.ui.AbstractComponent.fireEvent(AbstractComponent.java:1219)
at com.vaadin.ui.Button.fireClick(Button.java:567)
at com.vaadin.ui.Button.changeVariables(Button.java:223)
at com.vaadin.terminal.gwt.server.AbstractCommunicationManager.changeVariables(AbstractCommunicationManager.java:1460)
at com.vaadin.terminal.gwt.server.AbstractCommunicationManager.handleVariableBurst(AbstractCommunicationManager.java:1404)
at com.vaadin.terminal.gwt.server.AbstractCommunicationManager.handleVariables(AbstractCommunicationManager.java:1329)
at com.vaadin.terminal.gwt.server.AbstractCommunicationManager.doHandleUidlRequest(AbstractCommunicationManager.java:761)
at com.vaadin.terminal.gwt.server.CommunicationManager.handleUidlRequest(CommunicationManager.java:325)
at com.vaadin.terminal.gwt.server.AbstractApplicationServlet.service(AbstractApplicationServlet.java:501)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.activiti.explorer.filter.ExplorerFilter.doFilter(ExplorerFilter.java:42)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:423)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1079)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:620)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2476)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2465)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:722)
Caused by: com.vaadin.event.ListenerMethod$MethodException: Invocation of method valueChange in org.activiti.explorer.ui.process.ProcessDefinitionPage$1 failed.
at com.vaadin.event.ListenerMethod.receiveEvent(ListenerMethod.java:530)
at com.vaadin.event.EventRouter.fireEvent(EventRouter.java:164)
at com.vaadin.ui.AbstractComponent.fireEvent(AbstractComponent.java:1219)
at com.vaadin.ui.AbstractField.fireValueChange(AbstractField.java:897)
at com.vaadin.ui.AbstractField.setValue(AbstractField.java:529)
at com.vaadin.ui.AbstractSelect.setValue(AbstractSelect.java:676)
at com.vaadin.ui.AbstractSelect.setValue(AbstractSelect.java:645)
at com.vaadin.ui.Table.setValue(Table.java:3572)
at com.vaadin.ui.AbstractSelect.select(AbstractSelect.java:1422)
at org.activiti.explorer.ui.AbstractTablePage.selectElement(AbstractTablePage.java:81)
at org.activiti.explorer.ui.process.ProcessDefinitionPage.initUi(ProcessDefinitionPage.java:78)
at org.activiti.explorer.ui.AbstractPage.attach(AbstractPage.java:43)
at com.vaadin.ui.AbstractComponent.setParent(AbstractComponent.java:560)
at com.vaadin.ui.AbstractComponentContainer.addComponent(AbstractComponentContainer.java:211)
at com.vaadin.ui.CssLayout.addComponent(CssLayout.java:95)
at org.activiti.explorer.ui.mainlayout.MainLayout.setMainContent(MainLayout.java:58)
at org.activiti.explorer.ui.MainWindow.switchView(MainWindow.java:79)
at org.activiti.explorer.DefaultViewManager.switchView(DefaultViewManager.java:347)
at org.activiti.explorer.DefaultViewManager.showDeployedProcessDefinitionPage(DefaultViewManager.java:207)
at org.activiti.explorer.ui.mainlayout.MainMenuBar$ShowProcessDefinitionsClickListener.buttonClick(MainMenuBar.java:201)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at com.vaadin.event.ListenerMethod.receiveEvent(ListenerMethod.java:510)
… 35 more
Caused by: org.activiti.engine.ActivitiException: deployment '5001' didn't put process definition 'ereview_marketing_review:1:5004' in the cache
at org.activiti.engine.impl.persistence.deploy.DeploymentManager.resolveProcessDefinition(DeploymentManager.java:125)
at org.activiti.engine.impl.persistence.deploy.DeploymentManager.findDeployedProcessDefinitionById(DeploymentManager.java:69)
at org.activiti.engine.impl.cmd.GetDeploymentProcessDefinitionCmd.execute(GetDeploymentProcessDefinitionCmd.java:36)
at org.activiti.engine.impl.cmd.GetDeploymentProcessDefinitionCmd.execute(GetDeploymentProcessDefinitionCmd.java:26)
at org.activiti.engine.impl.interceptor.CommandInvoker.execute(CommandInvoker.java:24)
at org.activiti.engine.impl.interceptor.CommandContextInterceptor.execute(CommandContextInterceptor.java:57)
at org.activiti.spring.SpringTransactionInterceptor$1.doInTransaction(SpringTransactionInterceptor.java:47)
at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:133)
at org.activiti.spring.SpringTransactionInterceptor.execute(SpringTransactionInterceptor.java:45)
at org.activiti.engine.impl.interceptor.LogInterceptor.execute(LogInterceptor.java:31)
at org.activiti.engine.impl.cfg.CommandExecutorImpl.execute(CommandExecutorImpl.java:40)
at org.activiti.engine.impl.cfg.CommandExecutorImpl.execute(CommandExecutorImpl.java:35)
at org.activiti.engine.impl.RepositoryServiceImpl.getProcessDefinition(RepositoryServiceImpl.java:130)
at org.activiti.explorer.ui.process.AbstractProcessDefinitionDetailPanel.<init>(AbstractProcessDefinitionDetailPanel.java:77)
at org.activiti.explorer.ui.process.ProcessDefinitionDetailPanel.<init>(ProcessDefinitionDetailPanel.java:46)
at org.activiti.explorer.ui.process.ProcessDefinitionPage.showProcessDefinitionDetail(ProcessDefinitionPage.java:129)
at org.activiti.explorer.ui.process.ProcessDefinitionPage$1.valueChange(ProcessDefinitionPage.java:114)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

aimingxu
Champ in-the-making
Champ in-the-making
Hi Hari,
Did you remove Users and Groups tabs through source code changes? Because the issues are fatal, once I click either Users or Groups tab, activiti explorer no longer usable. Do you have to make any code change to LDAP module since many functions were not supported by LDAP module and it just throw an exception and say LDAP does not support this function.
I think there are 2 type of users and groups: one type for activiti explorer and rest access control and another type for task assignment. We want to use LDAP for access control only and want to continue use activiti user and group management for task assignment purpose. Has anyone implemented the same use cases.

Regards,
Aiming

aimingxu
Champ in-the-making
Champ in-the-making
I want to make a correction. The second issue that click Processes tab will cause: deployment didn't put process definition in the cache error is not LDAP integration related and can be ignored. The first issue is critical. Again, has anyone implemented this use case: use LDAP for access control only and  use activiti user and group management for task assignment purpose?

Regards,
Aiming

hari
Star Contributor
Star Contributor
I didnot remove users or groups as we do not expose the explorer to our clients. Its only used by us to deploy the bpms.
And yes I have experienced the same when I go to users/groups it was no longer usable in 5.17. I just closed and opened a different window and didnt go to users or groups again.

I think you are using Activiti Explorer completely as your application UI. The best way is to use it as an admin tool to deploy your bpms and have your UI's and other application logic built separately. This is how we are using and it works perfectly well. Didnt face any kind of issues and we are very much happy using it.  Let me know if you need any further help.

hari
Star Contributor
Star Contributor
I have integrated Activiti 5.17 with LDAP and stayed away from Users and Groups in Activiti as it used to throw some issues. But it didnt really bother me as I manage them in LDAP, I really need not go to users and groups in Activiti Explorer. Rest of all worked perfectly without any issues.

rajannavagare
Champ in-the-making
Champ in-the-making
Can You Please guide me How Can I configure activiti 5.17 and ldap ?
as ldap xml configuration file is not there in  activiti 5.17 (activiti-cfg-context.xml is missing in 5.17)


i tried  to configure ldap in activiti-custom-context.xml file but then activiti wont boot up again.
i tried to find out but nothing helped me,
if u have done integration then please help me .


any response will be appreciated!!

aimingxu
Champ in-the-making
Champ in-the-making
ativiti User Guide is good place to start. Then you have to tweak based on your company LDAP properties. Here are my changes:

activiti-custom-context.xml:
….

    <property name="customFormTypes">
      <list>
        <bean class="org.activiti.explorer.form.UserFormType"/>
        <bean class="org.activiti.explorer.form.ProcessDefinitionFormType"/>
        <bean class="org.activiti.explorer.form.MonthFormType"/>  
      </list>
    </property>
     <!– Following added for LDAP Integration : start –>
   <property name="configurators">
          <list>
              <bean class="org.activiti.ldap.LDAPConfigurator">
                <!– Server connection params –>
                <property name="server" value="${ldap.server}" />
                <property name="port" value="${ldap.port}" />
                <property name="user" value="${ldap.user}" />
                <property name="password" value="${ldap.password}" />
                <!– Query params –>
                <property name="baseDn" value="ou=PeopleAuthSrch,dc=fmr, dc=com" />
                <property name="queryUserByUserId" value="(&amp;(objectClass=Person)(uid={0}))" />
                <property name="queryUserByFullNameLike" value="(&amp;(objectClass=Person)(|({0}=*{1}*)({2}=*{3}*)))" />
                <property name="queryGroupsForUser" value="(&amp;(objectClass=groupOfUniqueNames)(uniqueMember={0}))" />

                <!– Attribute config –>
                <property name="userIdAttribute" value="uid" />
                <property name="userFirstNameAttribute" value="givenName" />
                <property name="userLastNameAttribute" value="sn" />
                <property name="userEmailAttribute" value="mail" />


                <property name="groupIdAttribute" value="cn" />
                <property name="groupNameAttribute" value="cn" />

              </bean>
          </list>
        </property>
  </bean>

activiti-ui-context.xml:

    <property name="simpleWorkflowJsonConverter" ref="simpleWorkflowJsonConverter" />
    <property name="adminGroups">
   <list>
   <value>${ldap.admingroup}</value>
   </list>
  </property>
  <property name="userGroups">
   <list>
   <value>${ldap.usergroup}</value>
   </list>
  </property> 
  </bean>

pom.xml: add
  <dependency>
   <groupId>org.activiti</groupId>
   <artifactId>activiti-ldap</artifactId>
   <version>${activiti.version}</version>
  </dependency>
Hope it help.

Aiming