2011-11-18 3 views
0

JBPM 프로세스 데이터를 PostgreSQL에 저장하려고합니다 (독립 실행 형 Java 응용 프로그램을 사용하여 프로세스 시작). JBPM - 5.1 (JBoss 5.1에 있음). PostgreSQL - 9.1. JDBC 드라이버 (앱의 클래스 패스에 있음) - postgresql-9.1-901.jdbc4.JBPM - 프로세스 데이터 저장 (PostgreSQL)

내의 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 

는 아마 내가 할 또는 뭔가를 구성해야합니다 ...하지만 난 붙어 :(

+0

응용 프로그램을 어떻게 실행합니까? JNDI 오류는 Tomcat과 같은 일부 웹 서버가 (추가 구성을 추가하지 않고) 대부분의 응용 프로그램 서버가 수행 할 JNDI 환경을 제공하는 프레임 워크에서 실행하지 않는다고 제안합니다. – araqnid

+0

main 메소드가있는 독립적 인 Java 클래스입니다. (음, jBPM을 처음 접했으니 이제 테스트하는 중입니다). jBPM 소스 배포판에서 사용할 수있는 jBPM 가이드 및 jUnit 테스트에 따르면 충분히 빠를 것입니다 (또는 뭔가를 놓쳤습니다 :().) 또한 jndi.properies를 추가하려고했습니다. – Ania

+0

좋아, 솔루션을 직접 찾았지만 아직 답변을 게시 할 수 없습니다. 가능하면 게시 할 것입니다. 누군가 사용할 수있을 것입니다.) – Ania

답변

1

응용 프로그램을 JBoss에 배포하려는 경우 컨테이너 외부에서 실행되는 유닛 테스트와 같이 소스 코드에서 데이터 소스를 만드는 대신 컨테이너 내부에 데이터 소스를 만들어야합니다. jndi.properties가 (JVM을 찾을 수 없습니다) 문제가 해결되지 않으면 건배