J'ai développé une application Web utilisant jBPM 3.2.1 (librairie jbpm-jpdl 3.2.1), déployée sur WAS 5.1.
jBPM est configuré pour accéder via Hibernate à une base de données Oracle en utilisant une référence locale vers un datasource.
Jusque là tout va bien, j'accède à la base de données au travers du datasource, jBPM récupère correctement les tâches, etc : donc la configuration est correcte, ainsi que le déploiement.
Le problème survient lorsque je veut déployer la servlet JobExecutorServlet. Dés son démarrage j'ai une exception me spécifiant que le datasource n'a pu être trouvé, en précisant le nom JNDI de la référence locale au datasource du serveur.
J'ai donc déployé mon application en ne mettant pas cette servlet en démarrage automatique. Là tout se passe bien, l'application fonctionne en utilisant la référence JNDI vers mon datasource. Mais dés que j'accède à la servlet JobExecutorServlet pour la démarrer j'ai à nouveau cette erreur de NameNotFound, alors que la servlet utilise les mêmes fichiers de configuration que l'application (même si elle instancie sa propre configuration).
On dirait que la classe JobExecutorThread utilisée par la JobExecutorServlet n'est pas exécutée dans le même contexte que l'application, alors que la servlet est déclarée dans le web.xml où est aussi déclaré la référence local à mon datasource !
Quelqu'un a-t-il déjà rencontré le problème
Voici mon fichier jbpm.cfg.xml
Ainsi que le début du fichier hibernate.cfg.xml
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 <jbpm-configuration> <jbpm-context> <service name="persistence" factory="org.jbpm.persistence.db.DbPersistenceServiceFactory" /> <service name="tx" factory="org.jbpm.tx.TxServiceFactory" /> <service name='scheduler' factory='org.jbpm.scheduler.db.DbSchedulerServiceFactory' /> </jbpm-context> <string name='resource.hibernate.cfg.xml' value='bpm/hibernate.cfg.xml' /> <string name='resource.business.calendar' value='org/jbpm/calendar/jbpm.business.calendar.properties' /> <string name='resource.default.modules' value='org/jbpm/graph/def/jbpm.default.modules.properties' /> <string name='resource.converter' value='org/jbpm/db/hibernate/jbpm.converter.properties' /> <string name='resource.action.types' value='org/jbpm/graph/action/action.types.xml' /> <string name='resource.node.types' value='org/jbpm/graph/node/node.types.xml' /> <string name='resource.varmapping' value='org/jbpm/context/exe/jbpm.varmapping.xml' /> <!-- taille des colonnes stockant les objets serialises (pas de Blob) --> <int name='jbpm.byte.block.size' value="1024" singleton="true" /> </jbpm-configuration>
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 <hibernate-configuration> <session-factory> <!-- hibernate dialect --> <property name="hibernate.dialect">org.hibernate.dialect.Oracle9Dialect</property> <property name="hibernate.query.substitutions">true 1, false 0</property> <!-- JDBC connection properties (end) --> <property name="hibernate.cache.provider_class">org.hibernate.cache.HashtableCacheProvider</property> <property name="hibernate.cglib.use_reflection_optimizer">true</property> <!-- DataSource properties (begin) --> <property name="hibernate.connection.datasource">java:comp/env/jdbc/dsP6</property> <!-- DataSource properties (end) --> <property name="hibernate.transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</property> <property name="current_session_context_class">thread</property>
Et enfin l'exception retournée par l'application
Merci d'avance
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 Could not find datasource: java:comp/env/jdbc/dsP6 org.hibernate.connection.DatasourceConnectionProvider TRAS0014I: L'exception suivante a été consignée : javax.naming.NameNotFoundException: Name comp/env/jdbc not found in context "java:". at com.ibm.ws.naming.ipbase.NameSpace.getParentCtxInternal(NameSpace.java:1663) at com.ibm.ws.naming.ipbase.NameSpace.lookupInternal(NameSpace.java:1009) at com.ibm.ws.naming.ipbase.NameSpace.lookup(NameSpace.java:932) at com.ibm.ws.naming.urlbase.UrlContextImpl.lookup(UrlContextImpl.java:1261) at com.ibm.ws.naming.java.javaURLContextRoot.lookup(javaURLContextRoot.java:194) at com.ibm.ws.naming.java.javaURLContextRoot.lookup(javaURLContextRoot.java:135) at javax.naming.InitialContext.lookup(InitialContext.java:361) at org.hibernate.connection.DatasourceConnectionProvider.configure(DatasourceConnectionProvider.java:52) at org.hibernate.connection.ConnectionProviderFactory.newConnectionProvider(ConnectionProviderFactory.java:124) at org.hibernate.connection.ConnectionProviderFactory.newConnectionProvider(ConnectionProviderFactory.java:56) at org.hibernate.cfg.SettingsFactory.createConnectionProvider(SettingsFactory.java:366) at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:60) at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:1859) at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1152) at org.jbpm.persistence.db.DbPersistenceServiceFactory.getSessionFactory(DbPersistenceServiceFactory.java:91) at org.jbpm.persistence.db.DbPersistenceService.getSessionFactory(DbPersistenceService.java:94) at org.jbpm.persistence.db.DbPersistenceService.getSession(DbPersistenceService.java:98) at org.jbpm.persistence.db.DbPersistenceService.getJobSession(DbPersistenceService.java:354) at org.jbpm.JbpmContext.getJobSession(JbpmContext.java:563) at org.jbpm.job.executor.JobExecutorThread.acquireJobs(JobExecutorThread.java:109) at org.jbpm.job.executor.JobExecutorThread.run(JobExecutorThread.java:56)
Jacques Desmazières
Partager