package org.jbpm.process.workitem.wsht;
import java.lang.reflect.Field;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import org.drools.SystemEventListenerFactory;
import org.drools.runtime.KnowledgeRuntime;
import org.jbpm.process.workitem.wsht.CommandBasedWSHumanTaskHandler;
import org.jbpm.process.workitem.wsht.WSHumanTaskHandler;
import org.jbpm.task.service.TaskClient;
import org.jbpm.task.service.jms.JMSTaskClientConnector;
import org.jbpm.task.service.jms.JMSTaskClientHandler;
import org.jbpm.task.service.jms.WSHumanTaskJMSProperties;
public class CommandBasedWSThroughJMSHumanTaskHandler extends CommandBasedWSHumanTaskHandler {
public CommandBasedWSThroughJMSHumanTaskHandler(KnowledgeRuntime session) {
super(session);
}
@Override
public void connect() {
try {
final Field field = WSHumanTaskHandler.class.getDeclaredField("client");
TaskClient client = (TaskClient) field.get(this);
if (client == null) {
client = new TaskClient(new JMSTaskClientConnector(
"org.drools.process.workitem.wsht.WSThroughJMSHumanTaskHandler",
new JMSTaskClientHandler(SystemEventListenerFactory
.getSystemEventListener()),
WSHumanTaskJMSProperties.getInstance().getProperties(),
new InitialContext(WSHumanTaskJMSProperties.getInstance().getProperties())));
field.set(this, client);
boolean connected = client.connect();
if (!connected) {
throw new IllegalArgumentException("Could not connect to the task client");
}
}
super.connect();
} catch (NoSuchFieldException e) {
throw new RuntimeException("Problem configuring the human task connector", e);
} catch (IllegalAccessException e) {
throw new RuntimeException("Problem accessing the human task connector", e);
} catch (NamingException e) {
throw new RuntimeException("Problem accesing the JNDI directory", e);
}
}
}