ClassNotFoundException: com.sun.jndi.ldap.LdapCtxFactory not found from bundle

Symptoms:

The CMJ deployment fails with this error.

Unable to add internal group with name 'group': org.springframework.transaction.CannotCreateTransactionException: Could not create DirContext instance for transaction; nested exception is org.springframework.ldap.NoInitialContextException: Cannot instantiate class: com.sun.jndi.ldap.LdapCtxFactory; nested exception is javax.naming.NoInitialContextException: Cannot instantiate class: com.sun.jndi.ldap.LdapCtxFactory [Root exception is java.lang.ClassNotFoundException: com.sun.jndi.ldap.LdapCtxFactory not found from bundle [com.botronsoft.jira.rollout.configuration-manager]]



Cause:

The probable cause is related to https://jira.atlassian.com/browse/JRASERVER-29896.

There's a limitation of the Jira platform - an internal Java class cannot be instantiated when CMJ tries to make a call to Jira's API for creating a user/group.

Resolution:

The best way to avoid such problems is to first synchronize the users on the target system so that you have all required users present there before deploying the configuration. This is described in this article - Move Projects (with Issue Data)


Another option to work around this is to disable CMJ's usage of native JIRA transactions. This can be done from CMJ's settings page. However, if you decide to give this a try, make sure you do a DB backup of the target before performing the deployment, because CMJ will not be able to fully roll back all changes if an error occurs.