JBPM - 存储过程数据(PostgreSQL)

时间:2011-11-18 12:28:07

标签: postgresql jbpm

我正在尝试使用PostgreSQL存储JBPM流程数据(使用独立的Java应用程序来启动流程)。 JBPM - 5.1(在JBoss 5.1上)。 Postgresql - 9.1。 JDBC驱动程序(在应用程序的类路径中) - postgresql-9.1-901.jdbc4。

我的persistence.xml(基于JBPM用户指南,第7.1.3章)是:

<persistence version="1.0" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd http://java.sun.com/xml/ns/persistence/orm http://java.sun.com/xml/ns/persistence/orm_1_0.xsd"
    xmlns:orm="http://java.sun.com/xml/ns/persistence/orm"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/persistence">
    <persistence-unit name="org.jbpm.persistence.jpa">
         <provider>org.hibernate.ejb.HibernatePersistence</provider>
         <jta-data-source>jdbc/JbpmDS</jta-data-source>
         <class>org.drools.persistence.info.SessionInfo</class>
         <class>org.jbpm.persistence.processinstance.ProcessInstanceInfo</class>
         <class>org.drools.persistence.info.WorkItemInfo</class>
         <properties>
           <property name="hibernate.max_fetch_depth" value="3"/>
           <property name="hibernate.hbm2ddl.auto" value="update"/>
           <property name="hibernate.show_sql" value="true"/>
           <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect"/>    
           <property name="hibernate.connection.driver_class" value="org.postgresql.Driver"/>
           <property name="hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.JBossTransactionManagerLookup" /></properties></persistence-unit>
    </persistence>

和应用代码:

    PoolingDataSource ds = new PoolingDataSource();         
                ds.setDatabaseName("jbpm");
                ds.setUser("jbpmmanager");
                ds.setPassword("jbpm");     
                ds.setDataSourceName("jdbc/JbpmDS");
                ds.setServerName("localhost");
                ds.setPortNumber(5432);
                ds.setMaxConnections(3);            
                ds.initialize();            

                EntityManagerFactory emf = Persistence.createEntityManagerFactory( "org.jbpm.persistence.jpa"); 
.... //other code there
....

当我运行它时,最后一行给出了一个例外:

2011-11-18 13:15:02 org.hibernate.util.NamingHelper getInitialContext
INFO: JNDI InitialContext properties:{}
2011-11-18 13:15:02 org.hibernate.connection.DatasourceConnectionProvider configure
SEVERE: Could not find datasource: jdbc/JbpmDS
javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file:  java.naming.factory.initial
    at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:645)
    at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288)
    at javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:325)
    at javax.naming.InitialContext.lookup(InitialContext.java:392)
    at org.hibernate.connection.DatasourceConnectionProvider.configure(DatasourceConnectionProvider.java:75)
    at org.hibernate.connection.ConnectionProviderFactory.newConnectionProvider(ConnectionProviderFactory.java:137)
    at org.hibernate.ejb.InjectionSettingsFactory.createConnectionProvider(InjectionSettingsFactory.java:29)
    at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:89)
    at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2101)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1325)
    at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:867)
    at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:669)
    at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:126)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:52)
    at com.sample.ProcessTester.main(ProcessTester.java:64)
javax.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:52)
    at com.sample.ProcessTester.main(ProcessTester.java:64)
Caused by: org.hibernate.HibernateException: Could not find datasource
    at org.hibernate.connection.DatasourceConnectionProvider.configure(DatasourceConnectionProvider.java:79)
    at org.hibernate.connection.ConnectionProviderFactory.newConnectionProvider(ConnectionProviderFactory.java:137)
    at org.hibernate.ejb.InjectionSettingsFactory.createConnectionProvider(InjectionSettingsFactory.java:29)
    at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:89)
    at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2101)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1325)
    at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:867)
    at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:669)
    ... 3 more
Caused by: javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file:  java.naming.factory.initial
    at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:645)
    at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288)
    at javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:325)
    at javax.naming.InitialContext.lookup(InitialContext.java:392)
    at org.hibernate.connection.DatasourceConnectionProvider.configure(DatasourceConnectionProvider.java:75)
    ... 10 more

可能我需要做或配置其他东西......但我被困住了:(

2 个答案:

答案 0 :(得分:1)

如果您尝试在JBoss中部署应用程序,则应在容器内创建数据源,而不是像在任何容器外部运行的单元测试中那样从源代码创建数据源。 干杯

答案 1 :(得分:1)

如果jndi.properties不起作用(jvm找不到它),只需在JVM中设置该属性即可 -Djava.naming.factory.initial = bitronix.tm.jndi.BitronixInitialContextFactory

请参阅http://docs.codehaus.org/display/BTM/Jndi2x