IdentityService jbpm: Cannot create group, error while validating
This is what I get when debugging at my IdentityService variable ident:
ident -> commandService = null
-> commandService = RetryInterceptor(id=68)
In my jbpm.cfg.xml I have:
<jbpm-configuration>
...
<import resource="jbpm.identity.cfg.xml" />
...
</jbpm-configuration>
//I tried using my own IdentityService class, but it didn't work...
Then I have a class where I use IdentityService, called simpleProcessService, with getter and setter.
public class SimpleProcessServiceImpl implements SimpleProcessService{
...
private IdentityService identityService;
...
public IdentityService getIdentityService()
{
return identityService;
}
public void setIdentityService(IdentityService identityService)
{
this.identityService = identityService;
}
...
}
In my applicationContext-process I have:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
...>
<bean id="transactionManagerJbpm"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactoryJbpm" />
<property name="dataSource" ref="dataSourceJbpm" />
</bean>
<bean id="springHelper" class="org.jbpm.pvm.internal.processengine.SpringHelper">
<property name="jbpmCfg" value="jbpm.cfg.xml"/>
</bean>
<bean id="processEngine" factory-bean="springHelper" factory-method="createProcessEngine" />
<!-- <bean id="repositoryService" factory-bean="processEngine" factory-method="getRepositoryService" />-->
<!-- <bean id="executionService" factory-bean="processEngine" factory-method="getExecutionService" />-->
<!-- <bean id="taskService" factory-bean="processEngine" factory-method="getTaskService" />-->
<bean id="identityService" factory-bean="processEngine" factory-method="getIdentityService" />
....
<bean id="simpleProcessService"
class="com.playence.platform.services.jbpm.impl.SimpleProcessServiceImpl">
<property name="repositoryService" value="#{processEngine.repositoryService}"/>
<property name="executionService" value="#{processEngine.executionService}"/>
<property name="taskService" value="#{processEngine.taskService}"/>
<property name="identityService" value="#{processEngine.IdentityService}"/>
</bean>
...
</beans>
In my test file, I have:
public void testGroups()
{
SimpleProcessService simpleProcessService =(SimpleProcessService)ctx.getBean("simpleProcessService");
TaskService taskService = simpleProcessService.getTaskService();
IdentityService ident = simpleProcessService.getIdentityService();
fin开发者_Go百科al int nTasks = 1;
List<Map<String, Object>> vars= new ArrayList<Map<String, Object>>(nTasks);
System.out.println("executing process");
String processKey = "";
String internalURI = "";
Map<String,Object> x = new HashMap<String,Object>();
ProcessInstance processInstance =null;
List<String> processInstanceIds = new ArrayList<String>();
//Create nTasks for annotation
for(int i = 0; i <nTasks ; i++)
{
processKey = Long.toString(System.currentTimeMillis());
internalURI = "/videos/test"+i+".flv_" + processKey;
x = new HashMap<String,Object>();
x.put("internalURI", internalURI);
x.put("content", "good");
vars.add(i,x);
processInstance = simpleProcessService.startProcess("groups", vars.get(i), processKey);
processInstanceIds.add(processInstance.getId());
}
ident.createGroup("anotacion");
ident.createUser("silver", "johndoe", "John", "Doe");
ident.createMembership("silver", "anotacion");
ident.createUser("david", "joesmoe", "Joe", "Smoe");
ident.createMembership("david", "anotacion");
ident.createUser("blanca", "joesmoe", "Joe", "Smoe");
ident.createMembership("blanca", "anotacion");
....
}
The exception is thrown when I try to create a group, it seems that though ident is not null, it contains null objects...
Any ideas?
Dámaris.
In my test class, I access IdentityService like this:
ProcessEngine processEngine = new Configuration().buildProcessEngine();
IdentityService id = processEngine.getIdentityService();
Having this in my applicationContext-process:
<bean id="processEngine" factory-bean="springHelper" factory-method="createProcessEngine" />
And having implemented a class IdentityServiceImpl that basically calls to IdentityService methods:
public class IdentityServiceImpl extends UserServiceImpl implements IdentityService{
public IdentityServiceImpl()
{
//Load users and groups from the DB
}
public void createUser(String userId, String givenName, String familyName) {
//throw new UnsupportedOperationException("Use method TODO name method");
createUser(userId,givenName,familyName);
}
public void createUser(String userId, String givenName, String familyName,
String businessEmail) {
throw new UnsupportedOperationException("Use method TODO name method");
}
public User findUserById(String userId) {
try{
GenericUser gU = loadUser(userId);
UserImpl user = new UserImpl(gU.getUsername(),gU.getFirstname(), gU.getLastname());
return user;
}
catch (ValidationErrors e) {
e.printStackTrace();
} catch (ServiceExecutionException e) {
e.printStackTrace();
}
return null;
}
public List<User> findUsers() {
try {
List<GenericUser> gUList = listUsers();
List<User> userList = new ArrayList<User>();
for(GenericUser gU : gUList)
{
userList.add(new UserImpl(gU.getUsername(),gU.getFirstname(), gU.getLastname()));
}
//If there are no users return null, otherwise return the users
if(userList.size() == 0)
return null;
else
return userList;
} catch (ServiceExecutionException e) {
e.printStackTrace();
}
return null;
}
public void deleteUser(String userId) {
throw new UnsupportedOperationException("Use method TODO name method");
}
public String createGroup(String groupName) {
return createGroup(groupName);
//TODO UserService
}
public String createGroup(String groupName, String groupType) {
return createGroup(groupName, groupType);
}
public String createGroup(String groupName, String groupType,
String parentGroupId) {
return createGroup(groupName, groupType, parentGroupId);
}
public Group findGroupById(String groupId) {
return findGroupById(groupId);
}
public List<Group> findGroupsByUserAndGroupType(String userId,
String groupType) {
return findGroupsByUserAndGroupType(userId, groupType);
}
public List<Group> findGroupsByUser(String userId) {
return findGroupsByUser(userId);
}
public List<String> findGroupIdsByUser(String userId) {
return findGroupIdsByUser(userId);
}
public void deleteGroup(String groupId) {
deleteGroup(groupId);
}
public void createMembership(String userId, String groupId) {
createMembership(userId, groupId);
}
public void createMembership(String userId, String groupId, String role) {
createMembership(userId, groupId, role);
}
public void deleteMembership(String userId, String groupId, String role) {
deleteMembership(userId, groupId, role);
}
}
In my cfg.jpdl.xml I just have this:
<?xml version="1.0" encoding="UTF-8"?>
<jbpm-configuration>
<import resource="jbpm.default.cfg.xml" />
<import resource="jbpm.tx.spring.cfg.xml" />
<import resource="jbpm.jpdl.cfg.xml" />
<import resource="jbpm.bpmn.cfg.xml" />
<import resource="jbpm.identity.cfg.xml" />
<import resource="jbpm.businesscalendar.cfg.xml" />
<import resource="jbpm.console.cfg.xml" />
<!-- Commented out for dev environment only. -->
<import resource="jbpm.jobexecutor.cfg.xml" />
<process-engine-context>
<repository-service />
<repository-cache />
<execution-service />
<history-service />
<management-service />
<identity-service />
<task-service />
<command-service name="txRequiredCommandService">
<skip-interceptor />
<retry-interceptor />
<environment-interceptor />
<standard-transaction-interceptor />
</command-service>
<command-service name="newTxRequiredCommandService">
<retry-interceptor />
<environment-interceptor policy="requiresNew" />
<standard-transaction-interceptor />
</command-service>
</process-engine-context>
<transaction-context>
<!--<object class="com.playence.platform.services.impl.IdentityServiceImpl" /> -->
<hibernate-session current="true" />
</transaction-context>
</jbpm-configuration>
I hope it helps
Dámaris.
精彩评论