Trying already 3 weeks to implement custom EntityManagerSessionFactory w/o success. Please advice how to do it.
Need to have same entity manager in EJB and Activiti.
<java>
public class CMPEntityManagerSessionFactory implements SessionFactory {
public Class<?> getSessionType() {
return EntityManagerSession.class;
}
private EntityManager lookupEntityManager() {
try {
return InitialContext.doLookup("java:jboss/myEntityManager");
} catch (NamingException e) {
throw new RuntimeException("Unable to lookup entity manager.", e);
}
}
public Session openSession() {
return new EntityManagerSessionImpl( null, lookupEntityManager(), false, false );
}
}
</java>
I start Process engine with ProcessEngineLookup :
<java>
public ProcessEngine getProcessEngine() {
CdiJtaProcessEngineConfiguration processEngineConfiguration = new CdiJtaProcessEngineConfiguration();
processEngineConfiguration.setProcessEngineName("default");
processEngineConfiguration.setDataSourceJndiName("java:jboss/datasources/ACTIVITD");
processEngineConfiguration.setTransactionManager( lookupTransactionManager() );
processEngineConfiguration.setDatabaseSchemaUpdate( ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE );
processEngineConfiguration.setHistory( HistoryLevel.FULL.getKey() );
ArrayList<BpmnParseHandler> handlers = new ArrayList<BpmnParseHandler>();
handlers.add( new org.activiti.cdi.impl.event.CdiEventSupportBpmnParseHandler() );
processEngineConfiguration.setPostBpmnParseHandlers( handlers );
processEngineConfiguration.setJobExecutorActivate(true);
// processEngineConfiguration.setJpaEntityManagerFactory( lookupEntityManagerFactory() );
processEngineConfiguration.setTransactionsExternallyManaged( true );
processEngineConfiguration.setJpaHandleTransaction( false );
processEngineConfiguration.setJpaCloseEntityManager( false );
processEngine = processEngineConfiguration.buildProcessEngine();
List<SessionFactory> sessionFactories = sessionFactories = new ArrayList<SessionFactory>();
sessionFactories.add( new LdapUserManagerFactory() );
sessionFactories.add( new CMPEntityManagerSessionFactory() );
if( processEngineConfiguration.getCustomSessionFactories() == null )
processEngineConfiguration.setCustomSessionFactories( sessionFactories );
else
processEngineConfiguration.getCustomSessionFactories().addAll( sessionFactories );
processEngine = processEngineConfiguration.buildProcessEngine();
return processEngine;
}
</java>
and having:
<code>
org.activiti.engine.ActivitiException: unknown variable type name jpa-entity
</code>