-
1. Re: Separate database for jBPM
monkeyden Mar 24, 2007 1:04 AM (in response to irvega)So when you say "separate database" I assume you have multiple persistence units defined in persistence.xml (and components.xml if you're using Seam managed). Did you specify the unitName attribute for the EntityManager in your @PersistenceContext? Otherwise, how would the container know which to use?
-
2. Re: Separate database for jBPM
irvega Mar 24, 2007 11:32 AM (in response to irvega)Thanks monkeyden. As I wrote, I have been trying various combinations of the things you mention while I try to learn how to develop a Seam application, about JBoss and Hibernate.
The idea is to have 2 separate databases; one to store the dvdstore business data only (my dvdstore hsqldb database) and the other, only for jBPM's use (my jBPM hsqldb database).
For all EntityManger declarations in the java code I have added unitName="dvdDatadtabase" to the PersistenceContext annotation ( eg in the AcceptAction class I have@PersistenceContext(unitName="dvdDatabase",type=PersistenceContextType.EXTENDED) EntityManager em;
).
I am running hsqldb in server mode (ie the jdbc driver and urls have been changed). I delete both databases manually, undeploy and then deploy the application (using the ant scripts which work perfectly well before I change the database settings). However, on successful deployment, my jBPM database has all the domain tables (ORDERS etc) and my dvdsore database has both sets of tables jBPM tables (ORDERS etc, plus, JBPM_EVENT etc).
The key config I have added/changed (in bold in the config files below) are
1 - In persistence.xml I have added a new persistence-unit name="dvdDatabasejBPM" pointing at the jBPM database
2 - In dvd-ds.xml I have added a new local-tx-datasource with jndi-name dvdDatasourcejBPM
3 - I have created jBPM.hibernate.cfg.xml, which is exactly the same as the hibernate.cfg.xml except have changed the connection.datasource property to java:/dvdDatasourcejBPM (I have not changed hibernate.cfg.xml)
4 - I have added to jBPM.cfg.xml .
Nothing else has changed and all the files are packaged up correctly in the ear and contained war and jar.
Any ideas on what I am missing? Is there something I can read that tells me the relationships between all these files (and if settings in any of them take precedence over the other) and the differences between seam managed and other database settings?
Here are my configuration files:
--------------------------------------------------------
persistence.xml<?xml version="1.0" encoding="UTF-8"?> <persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" version="1.0"> <persistence-unit name="dvdDatabase"> <provider>org.hibernate.ejb.HibernatePersistence</provider> <jta-data-source>java:/dvdDatasource</jta-data-source> <properties> <property name="hibernate.hbm2ddl.auto" value="create-drop"/> <property name="hibernate.cache.use_query_cache" value="true"/> <property name="hibernate.show_sql" value="true"/> <property name="hibernate.cache.provider_class" value="org.hibernate.cache.HashtableCacheProvider"/> </properties> </persistence-unit> <persistence-unit name="dvdDatabasejBPM"> <provider>org.hibernate.ejb.HibernatePersistence</provider> <jta-data-source>java:/dvdDatasourcejBPM</jta-data-source> <properties> <property name="hibernate.hbm2ddl.auto" value="create-drop"/> <property name="hibernate.cache.use_query_cache" value="true"/> <property name="hibernate.show_sql" value="true"/> <property name="hibernate.cache.provider_class" value="org.hibernate.cache.HashtableCacheProvider"/> </properties> </persistence-unit> </persistence>
--------------------------------------------------------
dvd-ds.xml<?xml version="1.0" encoding="UTF-8"?> <datasources> <local-tx-datasource> <jndi-name>dvdDatasource</jndi-name> <!--<connection-url>jdbc:hsqldb:${jboss.server.data.dir}${/}hypersonic${/}dvd</connection-url> --> <connection-url> jdbc:hsqldb:hsql://localhost/dvd_server </connection-url> <driver-class>org.hsqldb.jdbcDriver</driver-class> <user-name>sa</user-name> <password></password> </local-tx-datasource> <local-tx-datasource> <jndi-name>dvdDatasourcejBPM</jndi-name> <connection-url> jdbc:hsqldb:hsql://localhost/jBPM </connection-url> <driver-class>org.hsqldb.jdbcDriver</driver-class> <user-name>sa</user-name> <password></password> </local-tx-datasource> </datasources>
--------------------------------------------------------
jBPM.cfg.xml<jbpm-configuration> <jbpm-context> <string name="resource.hibernate.cfg.xml" value="jbpm.hibernate.cfg.xml" /> <service name="persistence"> <factory> <bean class="org.jbpm.persistence.db.DbPersistenceServiceFactory"> <field name="isTransactionEnabled"><false/></field> </bean> </factory> </service> <service name="message" factory="org.jbpm.msg.db.DbMessageServiceFactory" /> <service name="scheduler" factory="org.jbpm.scheduler.db.DbSchedulerServiceFactory" /> <service name="logging" factory="org.jbpm.logging.db.DbLoggingServiceFactory" /> <service name="authentication" factory="org.jbpm.security.authentication.DefaultAuthenticationServiceFactory" /> </jbpm-context> </jbpm-configuration>
--------------------------------------------------------
jBPM.hibernate.cfg.xml<?xml version='1.0' encoding='utf-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <property name="show_sql">true</property> <property name="connection.datasource">java:/dvdDatasourcejBPM</property> <property name="transaction.factory_class">org.hibernate.transaction.JTATransactionFactory</property> <property name="transaction.manager_lookup_class">org.hibernate.transaction.JBossTransactionManagerLookup</property> <property name="cache.provider_class">org.hibernate.cache.HashtableCacheProvider</property> <property name="hbm2ddl.auto">create-drop</property> <!--property name="transaction.flush_before_completion">true</property--> <!-- ############################################ --> <!-- # mapping files with external dependencies # --> <!-- ############################################ --> <!-- following mapping file has a dependendy on --> <!-- 'bsh-{version}.jar'. --> <!-- uncomment this if you don't have bsh on your --> <!-- classpath. you won't be able to use the --> <!-- script element in process definition files --> <!-- <mapping resource="org/jbpm/graph/action/Script.hbm.xml"/> --> <!-- following mapping files have a dependendy on --> <!-- 'jbpm-identity-{version}.jar', mapping files --> <!-- of the pluggable jbpm identity component. --> <!-- comment out the following 3 lines if you don't--> <!-- want to use the default jBPM identity mgmgt --> <!-- component --> <!-- <mapping resource="org/jbpm/identity/User.hbm.xml"/> <mapping resource="org/jbpm/identity/Group.hbm.xml"/> <mapping resource="org/jbpm/identity/Membership.hbm.xml"/> --> <!-- ###################### --> <!-- # jbpm mapping files # --> <!-- ###################### --> <!-- hql queries and type defs --> <mapping resource="org/jbpm/db/hibernate.queries.hbm.xml" /> <!-- graph.def mapping files --> <mapping resource="org/jbpm/graph/def/ProcessDefinition.hbm.xml"/> <mapping resource="org/jbpm/graph/def/Node.hbm.xml"/> <mapping resource="org/jbpm/graph/def/Transition.hbm.xml"/> <mapping resource="org/jbpm/graph/def/Event.hbm.xml"/> <mapping resource="org/jbpm/graph/def/Action.hbm.xml"/> <mapping resource="org/jbpm/graph/def/SuperState.hbm.xml"/> <mapping resource="org/jbpm/graph/def/ExceptionHandler.hbm.xml"/> <mapping resource="org/jbpm/instantiation/Delegation.hbm.xml"/> <!-- graph.node mapping files --> <mapping resource="org/jbpm/graph/node/StartState.hbm.xml"/> <mapping resource="org/jbpm/graph/node/EndState.hbm.xml"/> <mapping resource="org/jbpm/graph/node/ProcessState.hbm.xml"/> <mapping resource="org/jbpm/graph/node/Decision.hbm.xml"/> <mapping resource="org/jbpm/graph/node/Fork.hbm.xml"/> <mapping resource="org/jbpm/graph/node/Join.hbm.xml"/> <mapping resource="org/jbpm/graph/node/State.hbm.xml"/> <mapping resource="org/jbpm/graph/node/TaskNode.hbm.xml"/> <!-- context.def mapping files --> <mapping resource="org/jbpm/context/def/ContextDefinition.hbm.xml"/> <mapping resource="org/jbpm/context/def/VariableAccess.hbm.xml"/> <!-- taskmgmt.def mapping files --> <mapping resource="org/jbpm/taskmgmt/def/TaskMgmtDefinition.hbm.xml"/> <mapping resource="org/jbpm/taskmgmt/def/Swimlane.hbm.xml"/> <mapping resource="org/jbpm/taskmgmt/def/Task.hbm.xml"/> <mapping resource="org/jbpm/taskmgmt/def/TaskController.hbm.xml"/> <!-- module.def mapping files --> <mapping resource="org/jbpm/module/def/ModuleDefinition.hbm.xml"/> <!-- bytes mapping files --> <mapping resource="org/jbpm/bytes/ByteArray.hbm.xml"/> <!-- file.def mapping files --> <mapping resource="org/jbpm/file/def/FileDefinition.hbm.xml"/> <!-- scheduler.def mapping files --> <mapping resource="org/jbpm/scheduler/def/CreateTimerAction.hbm.xml"/> <mapping resource="org/jbpm/scheduler/def/CancelTimerAction.hbm.xml"/> <!-- graph.exe mapping files --> <mapping resource="org/jbpm/graph/exe/Comment.hbm.xml"/> <mapping resource="org/jbpm/graph/exe/ProcessInstance.hbm.xml"/> <mapping resource="org/jbpm/graph/exe/Token.hbm.xml"/> <mapping resource="org/jbpm/graph/exe/RuntimeAction.hbm.xml"/> <!-- module.exe mapping files --> <mapping resource="org/jbpm/module/exe/ModuleInstance.hbm.xml"/> <!-- context.exe mapping files --> <mapping resource="org/jbpm/context/exe/ContextInstance.hbm.xml"/> <mapping resource="org/jbpm/context/exe/TokenVariableMap.hbm.xml"/> <mapping resource="org/jbpm/context/exe/VariableInstance.hbm.xml"/> <mapping resource="org/jbpm/context/exe/variableinstance/ByteArrayInstance.hbm.xml"/> <mapping resource="org/jbpm/context/exe/variableinstance/DateInstance.hbm.xml"/> <mapping resource="org/jbpm/context/exe/variableinstance/DoubleInstance.hbm.xml"/> <mapping resource="org/jbpm/context/exe/variableinstance/HibernateLongInstance.hbm.xml"/> <mapping resource="org/jbpm/context/exe/variableinstance/HibernateStringInstance.hbm.xml"/> <mapping resource="org/jbpm/context/exe/variableinstance/LongInstance.hbm.xml"/> <mapping resource="org/jbpm/context/exe/variableinstance/NullInstance.hbm.xml"/> <mapping resource="org/jbpm/context/exe/variableinstance/StringInstance.hbm.xml"/> <!-- msg.db mapping files --> <mapping resource="org/jbpm/msg/Message.hbm.xml"/> <mapping resource="org/jbpm/msg/db/TextMessage.hbm.xml"/> <mapping resource="org/jbpm/command/ExecuteActionCommand.hbm.xml"/> <mapping resource="org/jbpm/command/ExecuteNodeCommand.hbm.xml"/> <mapping resource="org/jbpm/command/SignalCommand.hbm.xml"/> <mapping resource="org/jbpm/command/TaskInstanceEndCommand.hbm.xml"/> <!-- taskmgmt.exe mapping files --> <mapping resource="org/jbpm/taskmgmt/exe/TaskMgmtInstance.hbm.xml"/> <mapping resource="org/jbpm/taskmgmt/exe/TaskInstance.hbm.xml"/> <mapping resource="org/jbpm/taskmgmt/exe/PooledActor.hbm.xml"/> <mapping resource="org/jbpm/taskmgmt/exe/SwimlaneInstance.hbm.xml"/> <!-- scheduler.exe mapping files --> <mapping resource="org/jbpm/scheduler/exe/Timer.hbm.xml"/> <!-- logging mapping files --> <mapping resource="org/jbpm/logging/log/ProcessLog.hbm.xml"/> <mapping resource="org/jbpm/logging/log/MessageLog.hbm.xml"/> <mapping resource="org/jbpm/logging/log/CompositeLog.hbm.xml"/> <mapping resource="org/jbpm/graph/log/ActionLog.hbm.xml"/> <mapping resource="org/jbpm/graph/log/NodeLog.hbm.xml"/> <mapping resource="org/jbpm/graph/log/ProcessInstanceCreateLog.hbm.xml"/> <mapping resource="org/jbpm/graph/log/ProcessInstanceEndLog.hbm.xml"/> <mapping resource="org/jbpm/graph/log/SignalLog.hbm.xml"/> <mapping resource="org/jbpm/graph/log/TokenCreateLog.hbm.xml"/> <mapping resource="org/jbpm/graph/log/TokenEndLog.hbm.xml"/> <mapping resource="org/jbpm/graph/log/TransitionLog.hbm.xml"/> <mapping resource="org/jbpm/context/log/VariableLog.hbm.xml"/> <mapping resource="org/jbpm/context/log/VariableCreateLog.hbm.xml"/> <mapping resource="org/jbpm/context/log/VariableDeleteLog.hbm.xml"/> <mapping resource="org/jbpm/context/log/VariableUpdateLog.hbm.xml"/> <mapping resource="org/jbpm/context/log/variableinstance/ByteArrayUpdateLog.hbm.xml"/> <mapping resource="org/jbpm/context/log/variableinstance/DateUpdateLog.hbm.xml"/> <mapping resource="org/jbpm/context/log/variableinstance/DoubleUpdateLog.hbm.xml"/> <mapping resource="org/jbpm/context/log/variableinstance/HibernateLongUpdateLog.hbm.xml"/> <mapping resource="org/jbpm/context/log/variableinstance/HibernateStringUpdateLog.hbm.xml"/> <mapping resource="org/jbpm/context/log/variableinstance/LongUpdateLog.hbm.xml"/> <mapping resource="org/jbpm/context/log/variableinstance/StringUpdateLog.hbm.xml"/> <mapping resource="org/jbpm/taskmgmt/log/TaskLog.hbm.xml"/> <mapping resource="org/jbpm/taskmgmt/log/TaskCreateLog.hbm.xml"/> <mapping resource="org/jbpm/taskmgmt/log/TaskAssignLog.hbm.xml"/> <mapping resource="org/jbpm/taskmgmt/log/TaskEndLog.hbm.xml"/> <mapping resource="org/jbpm/taskmgmt/log/SwimlaneLog.hbm.xml"/> <mapping resource="org/jbpm/taskmgmt/log/SwimlaneCreateLog.hbm.xml"/> <mapping resource="org/jbpm/taskmgmt/log/SwimlaneAssignLog.hbm.xml"/> </session-factory> </hibernate-configuration>
-
3. Re: Separate database for jBPM
gavin.king Mar 24, 2007 1:53 PM (in response to irvega)Basically, the configuration of jBPM persistence is completely in the hibernate.cfg.xml file. So all you need to do is create a second datasource (jbpm-ds.xml), and point hibernate.cfg.xml to that.
AFAIK you should not need to modify any components.xml or persistence.xml files. -
4. Re: Separate database for jBPM
irvega Mar 24, 2007 4:31 PM (in response to irvega)That's done the trick, thanks.
So if I understand correctly,
1 - In the dvdstore app, hibernate.cfg.xml effects only jBPM. It has no impact on how the entity beans are persisted.
2 - jboss-beans.xml is not relevant at all for the dvdstore example (I've deleted it with no apparent side-effects).
3 - each deployed SEAM (with jBPM) application can provide its own jBPM database with a separate *-ds.xml (as long as it uses a unique jndi name).
4 - the app-server (jboss/hibernate/seam ...) will try to run import.sql against all persistence-units that are loaded (?). This is good for my dvdstore database but no good for the jBPM database (throws an exception when it can't delete from one of the domain tables (ORDERLINES) -
5. Re: Separate database for jBPM
gavin.king Mar 24, 2007 4:54 PM (in response to irvega)1. Right.
2. jboss-beans.xml is *always* for tests only
3. sure
4. um. probably .... -
6. Re: Separate database for jBPM
irvega Mar 25, 2007 10:25 AM (in response to irvega)Thanks Gavin.
-
7. Re: Separate database for jBPM
milh_cbt Dec 17, 2007 10:24 PM (in response to irvega)I have 2 seam-jbpm application, both have jbpm-ds.xml point to deferent database. when I Start Jboss-app 4.2 and deploy those applications, jboss-app 42 only create 1 set of jbpm tables. why? when I use separate app server, both application work fine.
thanks -
8. Re: Separate database for jBPM
pmuir Dec 20, 2007 8:14 AM (in response to irvega)But what datasource are you pointing at in hibernate.cfg.xml?