JBoss Community

Problem to use JBPM on gwt project

created by sahar mohebi in jBPM Development - View the full discussion

Hi friends,

 

I am new on jbpm with many problems!!!

I want to use jbpm on my gwt project  and mysql.

 

I get error when I want to create EntityManagerFactory:

 

 

 

avax.persistence.PersistenceException: PersistenceUnit: org.jbpm.persistence.jpa Unable to build EntityManagerFactory

    at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:677)

    at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:126)

    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:51)

    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:33)

    at com.ayriksoft.desktopapp.server.TaskServiceManager.getInstance(TaskServiceManager.java:319)

    at com.ayriksoft.desktopapp.server.JBPMServiceImpl.setup(JBPMServiceImpl.java:116)

    at com.ayriksoft.desktopapp.server.JBPMServiceImpl.initializeJbpmSession(JBPMServiceImpl.java:51)

    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

    at java.lang.reflect.Method.invoke(Method.java:597)

    at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:561)

    at com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:208)

    at com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.java:248)

    at com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractRemoteServiceServlet.java:62)

    at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)

    at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)

    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)

    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)

    at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)

    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)

    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)

    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)

    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)

    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)

    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)

    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)

    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936)

    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)

    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)

    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004)

    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)

    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)

    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)

    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)

    at java.lang.Thread.run(Thread.java:619)

Caused by: org.hibernate.HibernateException: Could not obtain BTM transaction manager instance

    at org.hibernate.transaction.BTMTransactionManagerLookup.getTransactionManager(BTMTransactionManagerLookup.java:50)

    at org.hibernate.impl.SessionFactoryImpl.(BitronixTransactionManager.java:62)

    ... 45 more

 

 

 

Its my gwt service class:

 

public class JBPMServiceImpl extends RemoteServiceServlet implements JBPMService {

 

    protected StatefulKnowledgeSession session;

    private MockWorkItemHandler mockWorkItemHandler;

    Map<Resource, ResourceType> resources;

     TaskServiceManager tc;

 

    @Override

    public boolean initializeJbpmSession() {

 

        try {

            setup();

 

            session = tc.getSession();//kbase.newStatefulKnowledgeSession();

            KnowledgeRuntimeLoggerFactory.newConsoleLogger(session);

 

            session.addEventListener(new DefaultAgendaEventListener() {

                @Override

                public void afterRuleFlowGroupActivated(org.drools.event.rule.RuleFlowGroupActivatedEvent event) {

                    session.fireAllRules();

                }

            });

 

            session.addEventListener(new DefaultProcessEventListener() {

                @Override

                public void beforeProcessStarted(ProcessStartedEvent event) {

                    session.insert(event.getProcessInstance());

                }

            });

 

 

 

        } catch (Exception ex) {

            ex.printStackTrace();

            return false;

        }

 

        return true;

    }

 

    protected Map<Resource, ResourceType> getResources() {

        try {

            if (resources == null) {

                resources = new HashMap<Resource, ResourceType>();

                resources.put(ResourceFactory.newFileResource(System.getProperty("user.home") + "/V1/EmergencyBedRequestV1.bpmn"), ResourceType.BPMN2);

                resources.put(ResourceFactory.newFileResource(System.getProperty("user.home") + "/V1/bedAssignmentV1.drl"), ResourceType.DRL);

            }

        } catch (Exception ex) {

            ex.printStackTrace();

        }

        return resources;

    }

 

    public void setup() {

        try {

           

              tc=TaskServiceManager.getInstance();

//            tc.startService();

                     

            session = tc.getSession();

            tc.connect();

 

            KnowledgeRuntimeLogger logger = KnowledgeRuntimeLoggerFactory.newThreadedFileLogger(session, "testlog", 1000);

            CommandBasedWSHumanTaskHandler taskHandler = new CommandBasedWSHumanTaskHandler(session);

            session.getWorkItemManager().registerWorkItemHandler("Human Task", taskHandler);

            session.getWorkItemManager().registerWorkItemHandler("Notification System", taskHandler);

            taskHandler.connect();

 

        } catch (Exception ex) {

            Logger.getLogger(JBPMServiceImpl.class.getName()).log(Level.SEVERE, null, ex);

            ex.printStackTrace();

      throw new RuntimeException("error while creating session", ex);

 

        }

 

    }

 

 

 

 

and Its my TaskServiceManager.java:

 

 

 

 

public class TaskServiceManager {

 

    private static String ipAddress = "127.0.0.1";

    //private static int port = 5445;

    private static int port = 9123;

    private static TaskClient client;

    private static Map<String, List<String>> groupListMap = new HashMap();

    private static StatefulKnowledgeSession ksession;

 

static TaskServiceManager instance = null;

    static Thread thread;

 

    private TaskServiceManager() {

    }

 

    public static TaskServiceManager getInstance() {

        if (instance == null) {

 

 

            instance = new TaskServiceManager();

 

            EntityManagerFactory emf = Persistence.createEntityManagerFactory("org.jbpm.persistence.jpa");

 

            TaskService taskService = new TaskService(emf, SystemEventListenerFactory.getSystemEventListener());

 

            MinaTaskServer server = new MinaTaskServer(taskService);

 

           

            Thread thread = new Thread(server);

 

            thread.start();

 

        }

        return instance;

    }

 

 

    public void setConnection(String ipAddress, int port) {

        ipAddress = ipAddress;

        port = port;

    }

 

    public void connect() {

        if (client == null) {

         client = new TaskClient(new MinaTaskClientConnector("client 1",

         new  MinaTaskClientHandler(SystemEventListenerFactory.getSystemEventListener())));

          client.connect("127.0.0.1", 9123);

            boolean connected = client.connect(ipAddress, port);

            if (!connected) {

                throw new IllegalArgumentException(

                        "Could not connect task client");

            }

        }

}

 

  public KnowledgeBase readKnowledgeBase(Map<Resource, ResourceType> resources)

            throws Exception {

 

        KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();

        for (Map.Entry<Resource, ResourceType> entry : this.getResources().entrySet()) {

            kbuilder.add(entry.getKey(), entry.getValue());

        }

          if (kbuilder.hasErrors()) {

            KnowledgeBuilderErrors errors = kbuilder.getErrors();

 

            for (KnowledgeBuilderError error : errors) {

                System.out.println(">>> Error:" + error.getMessage());

 

            }

            throw new IllegalStateException(">>> Knowledge couldn't be parsed! ");

        }

        KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();

        kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());

 

        return kbase;

    }

 

    public StatefulKnowledgeSession getSession()

            throws Exception {

        if (ksession == null) {

            ksession = createSession();

        }

        return ksession;

    }

 

    public StatefulKnowledgeSession createSession()

            throws Exception {

        System.out.print("ok1");

        KnowledgeBase kbase = readKnowledgeBase(getResources());

        System.out.print("ok2");

        EntityManagerFactory emf = Persistence.createEntityManagerFactory("org.jbpm.persistence.jpa");

        System.out.print("ok3");

        Environment env = KnowledgeBaseFactory.newEnvironment();

        env.set("drools.persistence.jpa.EntityManagerFactory", emf);

        env.set("drools.transaction.TransactionManager", TransactionManagerServices.getTransactionManager());

        env.set("drools.Globals", new MapGlobalResolver());

//

        Properties properties = new Properties();

        properties.put("drools.processInstanceManagerFactory", "org.jbpm.persistence.processinstance.JPAProcessInstanceManagerFactory");

        properties.put("drools.processSignalManagerFactory", "org.jbpm.persistence.processinstance.JPASignalManagerFactory");

        KnowledgeSessionConfiguration config = KnowledgeBaseFactory.newKnowledgeSessionConfiguration(properties);

             

        return JPAKnowledgeService.newStatefulKnowledgeSession(kbase , config, env);

    }

    static Map<Resource, ResourceType> resources;

 

    static Map<Resource, ResourceType> getResources() {

 

        try {

 

            if (resources == null) {

                resources = new HashMap<Resource, ResourceType>();

                resources.put(ResourceFactory.newFileResource(System.getProperty("user.home") + "/V1/EmergencyBedRequestV1.bpmn"), ResourceType.BPMN2);

                resources.put(ResourceFactory.newFileResource(System.getProperty("user.home") + "/V1/bedAssignmentV1.drl"), ResourceType.DRL);

            }

        } catch (Exception ex) {

            ex.printStackTrace();

        }

        return resources;

    }

}

 

 

and its my persistence.xml fil in META_INF:

 

 

 

 

Reply to this message by going to Community

Start a new discussion in jBPM Development at Community