Copied: incubator/ode/trunk/bpel-store/src/main/java/org/apache/ode/store/hib/ConfStoreConnectionHib.java (from r469994, incubator/ode/trunk/bpel-store/src/main/java/org/apache/ode/store/dao/ConfStoreConnectionHib.java) URL: http://svn.apache.org/viewvc/incubator/ode/trunk/bpel-store/src/main/java/org/apache/ode/store/hib/ConfStoreConnectionHib.java?view=diff&rev=480340&p1=incubator/ode/trunk/bpel-store/src/main/java/org/apache/ode/store/dao/ConfStoreConnectionHib.java&r1=469994&p2=incubator/ode/trunk/bpel-store/src/main/java/org/apache/ode/store/hib/ConfStoreConnectionHib.java&r2=480340 ============================================================================== --- incubator/ode/trunk/bpel-store/src/main/java/org/apache/ode/store/dao/ConfStoreConnectionHib.java (original) +++ incubator/ode/trunk/bpel-store/src/main/java/org/apache/ode/store/hib/ConfStoreConnectionHib.java Tue Nov 28 18:30:54 2006 @@ -1,226 +1,89 @@ -package org.apache.ode.store.dao; +package org.apache.ode.store.hib; + +import java.util.Collection; +import java.util.Date; + +import javax.xml.namespace.QName; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.apache.ode.bpel.iapi.BpelEngineException; +import org.apache.ode.store.ConfStoreConnection; +import org.apache.ode.store.DeploymentUnitDAO; import org.apache.ode.store.Messages; -import org.apache.ode.store.hobj.HProcessConf; -import org.apache.ode.store.hobj.HProcessProperty; +import org.apache.ode.store.ProcessConfDAO; import org.apache.ode.utils.msg.MessageBundle; import org.hibernate.Criteria; import org.hibernate.HibernateException; -import org.hibernate.MappingException; -import org.hibernate.SessionFactory; -import org.hibernate.cfg.Configuration; -import org.hibernate.cfg.Environment; -import org.hibernate.connection.ConnectionProvider; -import org.hibernate.criterion.Expression; -import org.hibernate.dialect.Dialect; -import org.hibernate.dialect.DialectFactory; - -import javax.sql.DataSource; -import javax.xml.namespace.QName; -import java.io.BufferedInputStream; -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; -import java.sql.Connection; -import java.sql.DatabaseMetaData; -import java.sql.SQLException; -import java.util.*; +import org.hibernate.Transaction; +import org.hibernate.Session; /** + * Connection to a Hibernate data store. Essentially a thin wrapper around Hibernate's + * [EMAIL PROTECTED] org.hibernate.Session} interface. * @author mriou <mriou at apache dot org> */ public class ConfStoreConnectionHib implements ConfStoreConnection { private static final Log __log = LogFactory.getLog(ConfStoreConnectionHib.class); - private static final Messages __msgs = MessageBundle.getMessages(Messages.class); - - private static DataSource _ds; - private final SessionFactory _sessionFactory; - - public ConfStoreConnectionHib(DataSource _ds, File appRoot) { - org.apache.ode.store.dao.ConfStoreConnectionHib._ds = _ds; - Properties properties = new Properties(); - properties.put(Environment.CONNECTION_PROVIDER, DataSourceConnectionProvider.class.getName()); - properties.put(Environment.CURRENT_SESSION_CONTEXT_CLASS, "thread"); - - try { - properties.put(Environment.DIALECT, guessDialect(_ds)); - } catch (Exception ex) { - String errmsg = __msgs.msgOdeInitHibernateDialectDetectFailed(); - __log.error(errmsg,ex); - throw new BpelEngineException(errmsg,ex); - } - - File hibernatePropFile; - String confDir = System.getProperty("org.apache.ode.configDir"); - if (confDir != null) hibernatePropFile = new File(confDir, "hibernate.properties"); - else hibernatePropFile = new File(appRoot, "conf" + File.separatorChar + "hibernate.properties"); - - if (hibernatePropFile.exists()) { - FileInputStream fis; - try { - fis = new FileInputStream(hibernatePropFile); - properties.load(new BufferedInputStream(fis)); - } catch (IOException e) { - String errmsg = __msgs - .msgOdeInitHibernateErrorReadingHibernateProperties(hibernatePropFile); - __log.error(errmsg, e); - throw new BpelEngineException(errmsg, e); - } - } else { - __log.info(__msgs.msgOdeInitHibernatePropertiesNotFound(hibernatePropFile)); - } - - _sessionFactory = getDefaultConfiguration().setProperties(properties).buildSessionFactory(); + private Session _session; + private Transaction _tx; + static final ThreadLocal<Session> _current = new ThreadLocal<Session>(); + + public ConfStoreConnectionHib(Session session) { + _session = session; + _current.set(session); } - public ProcessConfDAO getProcessConf(QName pid) { + public ProcessConfDAO getProcess(QName pid) { try { - Criteria criteria = _sessionFactory.getCurrentSession().createCriteria(HProcessConf.class); - criteria.add(Expression.eq("processId", pid.toString())); - // For the moment we are expecting only one result. - HProcessConf hprocess = (HProcessConf) criteria.uniqueResult(); - return hprocess == null ? null : new ProcessConfDAOHib(_sessionFactory, hprocess); + return (ProcessConfDaoImpl) _session.get(ProcessConfDaoImpl.class,pid.toString()); } catch (HibernateException e) { __log.error("DbError", e); throw e; } } - public List<ProcessConfDAO> getActiveProcesses() { + + public DeploymentUnitDAO createDeploymentUnit(String name) { + DeploymentUnitDaoImpl du = new DeploymentUnitDaoImpl(); + du.setName(name); + du.setDeployDate(new Date()); + _session.save(du); + return du; + } + + public DeploymentUnitDAO getDeploymentUnit(String name) { try { - Criteria criteria = _sessionFactory.getCurrentSession().createCriteria(HProcessConf.class); - criteria.add(Expression.eq("active", Boolean.TRUE)); - // For the moment we are expecting only one result. - List hprocesses = criteria.list(); - ArrayList<ProcessConfDAO> result = new ArrayList<ProcessConfDAO>(hprocesses.size()); - for (Object hprocess : hprocesses) { - HProcessConf hpc = (HProcessConf)hprocess; - result.add(new ProcessConfDAOHib(_sessionFactory, hpc)); - } - return result; + DeploymentUnitDaoImpl du = (DeploymentUnitDaoImpl) _session.get(DeploymentUnitDaoImpl.class,name); + return du; } catch (HibernateException e) { __log.error("DbError", e); throw e; } } - public ProcessConfDAO createProcess(QName pid, QName type) { - HProcessConf process = new HProcessConf(); - process.setProcessId(pid.toString()); - process.setTypeName(type.getLocalPart()); - process.setTypeNamespace(type.getNamespaceURI()); - process.setDeployDate(new Date()); - _sessionFactory.getCurrentSession().save(process); - return new ProcessConfDAOHib(_sessionFactory, process); + @SuppressWarnings("unchecked") + public Collection<DeploymentUnitDAO> getDeploymentUnits() { + Criteria c = _session.createCriteria(DeploymentUnitDaoImpl.class); + return c.list(); } - - public static Configuration getDefaultConfiguration() throws MappingException { - return new Configuration().addClass(HProcessConf.class).addClass(HProcessProperty.class); - } - - private String guessDialect(DataSource dataSource) throws Exception { - String dialect = null; - // Open a connection and use that connection to figure out database - // product name/version number in order to decide which Hibernate - // dialect to use. - Connection conn = dataSource.getConnection(); - try { - DatabaseMetaData metaData = conn.getMetaData(); - if (metaData != null) { - String dbProductName = metaData.getDatabaseProductName(); - int dbMajorVer = metaData.getDatabaseMajorVersion(); - __log.info("Using database " + dbProductName + " major version " - + dbMajorVer); - DialectFactory.DatabaseDialectMapper mapper = HIBERNATE_DIALECTS.get(dbProductName); - if (mapper != null) { - dialect = mapper.getDialectClass(dbMajorVer); - } else { - Dialect hbDialect = DialectFactory.determineDialect(dbProductName, dbMajorVer); - if (hbDialect != null) - dialect = hbDialect.getClass().getName(); - } - } - } finally { - conn.close(); - } - - if (dialect == null) { - __log - .info("Cannot determine hibernate dialect for this database: using the default one."); - dialect = DEFAULT_HIBERNATE_DIALECT; - } - - return dialect; - + public void close() { + _session.close(); } - public static class DataSourceConnectionProvider implements ConnectionProvider { - public DataSourceConnectionProvider() { - } - - public void configure(Properties props) throws HibernateException { - } - - public Connection getConnection() throws SQLException { - return _ds.getConnection(); - } - - public void closeConnection(Connection arg0) throws SQLException { - arg0.close(); - } - - public void close() throws HibernateException { - } - - public boolean supportsAggressiveRelease() { - return true; - } + public void begin() { + _tx=_session.beginTransaction(); } - private static final String DEFAULT_HIBERNATE_DIALECT = "org.hibernate.dialect.DerbyDialect"; - private static final HashMap<String, DialectFactory.VersionInsensitiveMapper> HIBERNATE_DIALECTS = new HashMap<String, DialectFactory.VersionInsensitiveMapper>(); + public void commit() { + _tx.commit(); + } - static { - // Hibernate has a nice table that resolves the dialect from the database - // product name, - // but doesn't include all the drivers. So this is supplementary, and some - // day in the - // future they'll add more drivers and we can get rid of this. - // Drivers already recognized by Hibernate: - // HSQL Database Engine - // DB2/NT - // MySQL - // PostgreSQL - // Microsoft SQL Server Database, Microsoft SQL Server - // Sybase SQL Server - // Informix Dynamic Server - // Oracle 8 and Oracle >8 - HIBERNATE_DIALECTS.put("Apache Derby", - new DialectFactory.VersionInsensitiveMapper( - "org.hibernate.dialect.DerbyDialect")); - } - - /** - * Execute a self-contained database transaction. - * @param callable database transaction - * @return callable result - */ - public <T> T exec(final Callable<T> callable) throws Exception { - try { - _sessionFactory.getCurrentSession().beginTransaction(); - T result = callable.run(); - _sessionFactory.getCurrentSession().getTransaction().commit(); - return result; - } catch (Exception e) { - _sessionFactory.getCurrentSession().getTransaction().rollback(); - throw e; - } + public void rollback() { + _tx.rollback(); + } }
Added: incubator/ode/trunk/bpel-store/src/main/java/org/apache/ode/store/hib/DbConfStoreConnectionFactory.java URL: http://svn.apache.org/viewvc/incubator/ode/trunk/bpel-store/src/main/java/org/apache/ode/store/hib/DbConfStoreConnectionFactory.java?view=auto&rev=480340 ============================================================================== --- incubator/ode/trunk/bpel-store/src/main/java/org/apache/ode/store/hib/DbConfStoreConnectionFactory.java (added) +++ incubator/ode/trunk/bpel-store/src/main/java/org/apache/ode/store/hib/DbConfStoreConnectionFactory.java Tue Nov 28 18:30:54 2006 @@ -0,0 +1,158 @@ +package org.apache.ode.store.hib; + +import java.sql.Connection; +import java.sql.DatabaseMetaData; +import java.sql.SQLException; +import java.util.HashMap; +import java.util.Map; +import java.util.Properties; +import java.util.concurrent.ConcurrentHashMap; + +import javax.sql.DataSource; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.ode.bpel.iapi.BpelEngineException; +import org.apache.ode.store.Messages; +import org.apache.ode.utils.GUID; +import org.apache.ode.utils.msg.MessageBundle; +import org.hibernate.HibernateException; +import org.hibernate.MappingException; +import org.hibernate.SessionFactory; +import org.hibernate.cfg.Configuration; +import org.hibernate.cfg.Environment; +import org.hibernate.connection.ConnectionProvider; +import org.hibernate.dialect.Dialect; +import org.hibernate.dialect.DialectFactory; + +public class DbConfStoreConnectionFactory implements ConfStoreConnectionFactory { + private static final Log __log = LogFactory.getLog(DbConfStoreConnectionFactory.class); + + private static final Messages __msgs = MessageBundle.getMessages(Messages.class); + + private static final String DEFAULT_HIBERNATE_DIALECT = "org.hibernate.dialect.DerbyDialect"; + + private static final HashMap<String, DialectFactory.VersionInsensitiveMapper> HIBERNATE_DIALECTS = new HashMap<String, DialectFactory.VersionInsensitiveMapper>(); + + private static final String _guid = new GUID().toString(); + + private static final Map<String, DataSource> _dataSources = new ConcurrentHashMap<String, DataSource>(); + + static { + // Hibernate has a nice table that resolves the dialect from the database + // product name, + // but doesn't include all the drivers. So this is supplementary, and some + // day in the + // future they'll add more drivers and we can get rid of this. + // Drivers already recognized by Hibernate: + // HSQL Database Engine + // DB2/NT + // MySQL + // PostgreSQL + // Microsoft SQL Server Database, Microsoft SQL Server + // Sybase SQL Server + // Informix Dynamic Server + // Oracle 8 and Oracle >8 + HIBERNATE_DIALECTS.put("Apache Derby", new DialectFactory.VersionInsensitiveMapper("org.hibernate.dialect.DerbyDialect")); + } + + private final DataSource _ds; + + final SessionFactory _sessionFactory; + + public DbConfStoreConnectionFactory(DataSource ds, boolean auto) { + _ds = ds; + + Properties properties = new Properties(); + + __log.debug("using data source: " + ds); + _dataSources.put(_guid, ds); + properties.put("guid", _guid); + properties.put(Environment.CONNECTION_PROVIDER, DataSourceConnectionProvider.class.getName()); + + try { + properties.put(Environment.DIALECT, guessDialect(_ds)); + } catch (Exception ex) { + String errmsg = __msgs.msgOdeInitHibernateDialectDetectFailed(); + __log.error(errmsg, ex); + throw new BpelEngineException(errmsg, ex); + } + + if (auto) { + properties.put(Environment.HBM2DDL_AUTO, "create-drop"); + } + + _sessionFactory = getDefaultConfiguration().setProperties(properties).buildSessionFactory(); + + } + + public ConfStoreConnectionHib getConnection() { + return new ConfStoreConnectionHib(_sessionFactory.openSession()); + } + + private String guessDialect(DataSource dataSource) throws Exception { + + String dialect = null; + // Open a connection and use that connection to figure out database + // product name/version number in order to decide which Hibernate + // dialect to use. + Connection conn = dataSource.getConnection(); + try { + DatabaseMetaData metaData = conn.getMetaData(); + if (metaData != null) { + String dbProductName = metaData.getDatabaseProductName(); + int dbMajorVer = metaData.getDatabaseMajorVersion(); + __log.info("Using database " + dbProductName + " major version " + dbMajorVer); + DialectFactory.DatabaseDialectMapper mapper = HIBERNATE_DIALECTS.get(dbProductName); + if (mapper != null) { + dialect = mapper.getDialectClass(dbMajorVer); + } else { + Dialect hbDialect = DialectFactory.determineDialect(dbProductName, dbMajorVer); + if (hbDialect != null) + dialect = hbDialect.getClass().getName(); + } + } + } finally { + conn.close(); + } + + if (dialect == null) { + __log.info("Cannot determine hibernate dialect for this database: using the default one."); + dialect = DEFAULT_HIBERNATE_DIALECT; + } + + return dialect; + + } + + static Configuration getDefaultConfiguration() throws MappingException { + return new Configuration().addClass(ProcessConfDaoImpl.class).addClass(DeploymentUnitDaoImpl.class); + } + + public static class DataSourceConnectionProvider implements ConnectionProvider { + private String _guid; + + public DataSourceConnectionProvider() { + } + + public void configure(Properties props) throws HibernateException { + _guid = props.getProperty("guid"); + } + + public Connection getConnection() throws SQLException { + return _dataSources.get(_guid).getConnection(); + } + + public void closeConnection(Connection arg0) throws SQLException { + arg0.close(); + } + + public void close() throws HibernateException { + } + + public boolean supportsAggressiveRelease() { + return true; + } + } + +} Added: incubator/ode/trunk/bpel-store/src/main/java/org/apache/ode/store/hib/DeploymentUnitDaoImpl.java URL: http://svn.apache.org/viewvc/incubator/ode/trunk/bpel-store/src/main/java/org/apache/ode/store/hib/DeploymentUnitDaoImpl.java?view=auto&rev=480340 ============================================================================== --- incubator/ode/trunk/bpel-store/src/main/java/org/apache/ode/store/hib/DeploymentUnitDaoImpl.java (added) +++ incubator/ode/trunk/bpel-store/src/main/java/org/apache/ode/store/hib/DeploymentUnitDaoImpl.java Tue Nov 28 18:30:54 2006 @@ -0,0 +1,128 @@ +package org.apache.ode.store.hib; + +import java.util.Collection; +import java.util.Date; +import java.util.HashSet; +import java.util.Set; + +import javax.xml.namespace.QName; + +import org.apache.ode.bpel.iapi.ProcessState; +import org.apache.ode.store.DeploymentUnitDAO; +import org.apache.ode.store.ProcessConfDAO; +import org.apache.ode.utils.stl.CollectionsX; +import org.apache.ode.utils.stl.MemberOfFunction; + +/** + * @author mriou <mriou at apache dot org> + * @hibernate.class table="STORE_DU" + */ +public class DeploymentUnitDaoImpl extends HibObj implements DeploymentUnitDAO { + + private Collection<ProcessConfDaoImpl> _processes = new HashSet<ProcessConfDaoImpl>(); + + /** User that deployed the process. */ + private String _deployer; + + /** Date of last deployment. */ + private Date _deployDate; + + private String _dir; + + private String _name; + + /** + * @hibernate.bag + * lazy="false" + * inverse="true" + * cascade="all" + * role="store_processes" + * @hibernate.collection-key + * column="DU" + * @hibernate.collection-one-to-many + * class="org.apache.ode.store.hib.ProcessConfDaoImpl" + */ + public Collection<? extends ProcessConfDAO> getProcesses() { + return _processes; + } + + + public void setProcesses(Collection<ProcessConfDaoImpl> processes) { + _processes = processes; + } + + /** + * The user that deployed the process. + * @hibernate.property + * column="deployer" + */ + public String getDeployer() { + return _deployer; + } + + public void setDeployer(String deployer) { + _deployer = deployer; + } + + /** + * The date the process was deployed. + * @hibernate.property + * column="DEPLOYDT" + */ + public Date getDeployDate() { + return _deployDate; + } + + public void setDeployDate(Date deployDate) { + _deployDate = deployDate; + } + + /** + * @hibernate.id generator-class="assigned" + * @hibernate.column name="NAME" + */ + public String getName() { + return _name; + } + + public void setName(String name) { + _name = name; + } + + /** + * @hibernate.property column="DIR" + */ + public String getDeploymentUnitDir() { + return _dir; + } + + public void setDeploymentUnitDir(String dir) { + _dir = dir; + } + + public void delete() { + super.delete(); + } + + public ProcessConfDAO createProcess(QName pid, QName type) { + ProcessConfDaoImpl p = new ProcessConfDaoImpl(); + p.setPID(pid); + p.setType(type); + p.setDeploymentUnit(this); + p.setState(ProcessState.ACTIVE); + getSession().save(p); + _processes.add(p); + return p; + } + + public ProcessConfDAO getProcess(final QName pid) { + return CollectionsX.find_if(_processes,new MemberOfFunction<ProcessConfDAO>() { + @Override + public boolean isMember(ProcessConfDAO o) { + return o.getPID().equals(pid); + } + + }); + } + } + Added: incubator/ode/trunk/bpel-store/src/main/java/org/apache/ode/store/hib/HibObj.java URL: http://svn.apache.org/viewvc/incubator/ode/trunk/bpel-store/src/main/java/org/apache/ode/store/hib/HibObj.java?view=auto&rev=480340 ============================================================================== --- incubator/ode/trunk/bpel-store/src/main/java/org/apache/ode/store/hib/HibObj.java (added) +++ incubator/ode/trunk/bpel-store/src/main/java/org/apache/ode/store/hib/HibObj.java Tue Nov 28 18:30:54 2006 @@ -0,0 +1,15 @@ +package org.apache.ode.store.hib; + +import org.hibernate.Session; + + +public class HibObj { + + Session getSession() { + return ConfStoreConnectionHib._current.get(); + } + + protected void delete() { + getSession().delete(this); + } +} Added: incubator/ode/trunk/bpel-store/src/main/java/org/apache/ode/store/hib/ProcessConfDaoImpl.java URL: http://svn.apache.org/viewvc/incubator/ode/trunk/bpel-store/src/main/java/org/apache/ode/store/hib/ProcessConfDaoImpl.java?view=auto&rev=480340 ============================================================================== --- incubator/ode/trunk/bpel-store/src/main/java/org/apache/ode/store/hib/ProcessConfDaoImpl.java (added) +++ incubator/ode/trunk/bpel-store/src/main/java/org/apache/ode/store/hib/ProcessConfDaoImpl.java Tue Nov 28 18:30:54 2006 @@ -0,0 +1,168 @@ +package org.apache.ode.store.hib; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; + +import javax.xml.namespace.QName; + +import org.apache.ode.bpel.iapi.ProcessState; +import org.apache.ode.store.ProcessConfDAO; +import org.apache.ode.utils.stl.CollectionsX; +import org.apache.ode.utils.stl.UnaryFunction; + +/** + * @author mriou <mriou at apache dot org> + * @hibernate.class table="STORE_PROCESS" + */ +public class ProcessConfDaoImpl extends HibObj implements ProcessConfDAO { + + private DeploymentUnitDaoImpl _du; + + /** [EMAIL PROTECTED] HProcessProperty}s for this process. */ + private Map<String,String> _properties = new HashMap<String,String>(); + + /** Simple name of the process. */ + private String _processId; + + /** Process type. */ + private String _type; + + + /** Process version. */ + private int _version; + + /** Process state.*/ + private String _state; + + + /** + * @hibernate.many-to-one + * @hibernate.column name="DU" + */ + public DeploymentUnitDaoImpl getDeploymentUnit() { + return _du; + } + + public void setDeploymentUnit(DeploymentUnitDaoImpl du) { + _du = du; + } + /** + * @hibernate.map table="STORE_PROCESS_PROP" role="properties_" + * @hibernate.collection-key column="propId" + * @hibernate.collection-index column="name" type="string" + * @hibernate.collection-element column="value" type="string" + */ + public Map<String,String> getProperties_() { + return _properties; + } + + public void setProperties_(Map<String,String> properties) { + _properties = properties; + } + + /** + * + * @hibernate.id generator-class="assigned" + * @hibernate.column + * name="PID" + * not-null="true" + */ + public String getPID_() { + return _processId; + } + + public void setPID_(String processId) { + _processId = processId; + } + + + /** + * The type of the process (BPEL process definition name). + * @hibernate.property + * column="TYPE" + */ + public String getType_() { + return _type; + } + + public void setType_(String type) { + _type = type; + } + + + /** + * The process version. + * @hibernate.property + * column="version" + */ + public int getVersion() { + return _version; + } + + public void setVersion(int version) { + _version = version; + } + + /** + * The process state. + * @hibernate.property + * column="STATE" + */ + public String getState_() { + return _state; + } + + public void setState_(String state) { + _state = state; + } + + + public QName getPID() { + return QName.valueOf(getPID_()); + } + + public void setPID(QName pid) { + setPID_(pid.toString()); + } + + public void setState(ProcessState state) { + setState_(state.toString()); + } + + public void setProperty(QName name, String content) { + _properties.put(name.toString(),content); + } + + public void delete() { + super.delete(); + } + + public QName getType() { + return QName.valueOf(getType_()); + } + + public void setType(QName type) { + setType_(type.toString()); + } + + public ProcessState getState() { + return ProcessState.valueOf(getState_()); + } + + public String getProperty(QName name) { + return _properties.get(name.toString()); + } + + public Collection<QName> getPropertyNames() { + return CollectionsX.transform(new ArrayList<QName>(), _properties.keySet(),new UnaryFunction<String,QName>() { + public QName apply(String x) { + return QName.valueOf(x); + } + + }); + } + + +} Added: incubator/ode/trunk/bpel-store/src/test/java/org/apache/ode/store/ProcessStoreTest.java URL: http://svn.apache.org/viewvc/incubator/ode/trunk/bpel-store/src/test/java/org/apache/ode/store/ProcessStoreTest.java?view=auto&rev=480340 ============================================================================== --- incubator/ode/trunk/bpel-store/src/test/java/org/apache/ode/store/ProcessStoreTest.java (added) +++ incubator/ode/trunk/bpel-store/src/test/java/org/apache/ode/store/ProcessStoreTest.java Tue Nov 28 18:30:54 2006 @@ -0,0 +1,63 @@ +package org.apache.ode.store; + +import java.io.File; +import java.net.URL; +import java.util.Collection; +import java.util.List; + +import javax.xml.namespace.QName; + +import junit.framework.TestCase; + +import org.apache.ode.bpel.iapi.ProcessConf; + +public class ProcessStoreTest extends TestCase { + + ProcessStoreImpl _ps; + private File _testdd; + + public void setUp() throws Exception { + _ps = new ProcessStoreImpl(null); + _ps.loadAll(); + URL tdd= getClass().getResource("/testdd/deploy.xml"); + _testdd = new File(tdd.getPath()).getParentFile(); + } + + public void tearDown() throws Exception { + _ps.shutdown(); + } + + public void testSanity() { + assertEquals(0,_ps.getProcesses().size()); + assertEquals(0,_ps.getPackages().size()); + assertNull(_ps.listProcesses("foobar")); + } + + public void testDeploy() { + Collection<QName> deployed = _ps.deploy(_testdd); + assertNotNull(deployed); + assertEquals(1,deployed.size()); + } + + public void testGetProcess() { + Collection<QName> deployed = _ps.deploy(_testdd); + QName pname = deployed.iterator().next(); + assertNotNull(deployed); + assertEquals(1,deployed.size()); + ProcessConf pconf = _ps.getProcessConfiguration(pname); + assertNotNull(pconf); + assertEquals(_testdd.getName(),pconf.getPackage()); + assertEquals(pname, pconf.getProcessId()); + } + + public void testGetProcesses() { + Collection<QName> deployed = _ps.deploy(_testdd); + QName pname = deployed.iterator().next(); + assertNotNull(deployed); + assertEquals(1,deployed.size()); + List<QName> pconfs = _ps.getProcesses(); + assertEquals(pname,pconfs.get(0)); + } + + +} Added: incubator/ode/trunk/bpel-store/src/test/java/org/apache/ode/store/hib/DaoTest.java URL: http://svn.apache.org/viewvc/incubator/ode/trunk/bpel-store/src/test/java/org/apache/ode/store/hib/DaoTest.java?view=auto&rev=480340 ============================================================================== --- incubator/ode/trunk/bpel-store/src/test/java/org/apache/ode/store/hib/DaoTest.java (added) +++ incubator/ode/trunk/bpel-store/src/test/java/org/apache/ode/store/hib/DaoTest.java Tue Nov 28 18:30:54 2006 @@ -0,0 +1,178 @@ +package org.apache.ode.store.hib; + +import javax.xml.namespace.QName; + +import org.apache.ode.store.ConfStoreConnection; +import org.apache.ode.store.DeploymentUnitDAO; +import org.apache.ode.store.ProcessConfDAO; +import org.hsqldb.jdbc.jdbcDataSource; + +import junit.framework.TestCase; + +public class DaoTest extends TestCase { + jdbcDataSource hsqlds; + + ConfStoreConnectionFactory cf; + + public void setUp() throws Exception { + hsqlds = new jdbcDataSource(); + hsqlds.setDatabase("jdbc:hsqldb:mem:test"); + hsqlds.setUser("sa"); + hsqlds.setPassword(""); + + cf = new DbConfStoreConnectionFactory(hsqlds, true); + } + + public void tearDown() throws Exception { + hsqlds.getConnection().createStatement().execute("SHUTDOWN"); + } + + public void testEmpty() { + ConfStoreConnection conn = cf.getConnection(); + conn.begin(); + assertEquals(0, conn.getDeploymentUnits().size()); + assertNull(conn.getDeploymentUnit("foobar")); + conn.commit(); + conn.close(); + } + + public void testCreateDU() { + ConfStoreConnection conn = cf.getConnection(); + conn.begin(); + try { + DeploymentUnitDAO du = conn.createDeploymentUnit("foo"); + assertNotNull(du); + assertEquals("foo", du.getName()); + assertNotNull(du.getDeployDate()); + } finally { + conn.commit(); + conn.close(); + } + + conn = cf.getConnection(); + conn.begin(); + try { + DeploymentUnitDAO du = conn.getDeploymentUnit("foo"); + assertNotNull(du); + assertEquals("foo", du.getName()); + } finally { + conn.commit(); + } + + } + + public void testRollback() { + ConfStoreConnection conn = cf.getConnection(); + conn.begin(); + try { + DeploymentUnitDAO du = conn.createDeploymentUnit("foo"); + assertNotNull(du); + assertEquals("foo", du.getName()); + assertNotNull(du.getDeployDate()); + } finally { + conn.rollback(); + conn.close(); + } + + conn = cf.getConnection(); + conn.begin(); + try { + DeploymentUnitDAO du = conn.getDeploymentUnit("foo"); + assertNull(du); + } finally { + conn.commit(); + } + + } + + public void testGetDeploymentUnits() { + ConfStoreConnection conn = cf.getConnection(); + conn.begin(); + try { + conn.createDeploymentUnit("foo1"); + conn.createDeploymentUnit("foo2"); + conn.createDeploymentUnit("foo3"); + conn.createDeploymentUnit("foo4"); + } finally { + conn.commit(); + conn.close(); + } + conn = cf.getConnection(); + conn.begin(); + try { + assertNotNull(conn.getDeploymentUnit("foo1")); + assertNotNull(conn.getDeploymentUnit("foo2")); + assertNotNull(conn.getDeploymentUnit("foo3")); + assertNotNull(conn.getDeploymentUnit("foo4")); + assertNull(conn.getDeploymentUnit("foo5")); + } finally { + conn.commit(); + } + } + + + public void testCreateProcess() { + QName foobar = new QName("foo","bar"); + ConfStoreConnection conn = cf.getConnection(); + conn.begin(); + try { + DeploymentUnitDAO du = conn.createDeploymentUnit("foo1"); + ProcessConfDAO p = du.createProcess(foobar,foobar); + assertEquals(foobar,p.getPID()); + assertEquals(foobar,p.getType()); + assertNotNull(p.getDeploymentUnit()); + assertEquals("foo1", p.getDeploymentUnit().getName()); + } finally { + conn.commit(); + conn.close(); + } + + conn = cf.getConnection(); + conn.begin(); + try { + DeploymentUnitDAO du = conn.getDeploymentUnit("foo1"); + ProcessConfDAO p = du.getProcess(foobar); + assertNotNull(p); + assertNotNull(du.getProcesses()); + + assertEquals(foobar,p.getPID()); + assertEquals(foobar,p.getType()); + + } finally { + conn.commit(); + conn.close(); + } + + } + + public void testProcessProperties() { + QName foobar = new QName("foo","bar"); + ConfStoreConnection conn = cf.getConnection(); + conn.begin(); + try { + DeploymentUnitDAO du = conn.createDeploymentUnit("foo1"); + ProcessConfDAO p = du.createProcess(foobar,foobar); + p.setProperty(foobar,"baz"); + } finally { + conn.commit(); + conn.close(); + } + + conn = cf.getConnection(); + conn.begin(); + try { + DeploymentUnitDAO du = conn.getDeploymentUnit("foo1"); + ProcessConfDAO p = du.getProcess(foobar); + assertNotNull(p.getProperty(foobar)); + assertEquals("baz", p.getProperty(foobar)); + assertNotNull(p.getPropertyNames()); + assertTrue(p.getPropertyNames().contains(foobar)); + } finally { + conn.commit(); + conn.close(); + } + + + } + +} Added: incubator/ode/trunk/bpel-store/src/test/resources/log4j.properties URL: http://svn.apache.org/viewvc/incubator/ode/trunk/bpel-store/src/test/resources/log4j.properties?view=auto&rev=480340 ============================================================================== --- incubator/ode/trunk/bpel-store/src/test/resources/log4j.properties (added) +++ incubator/ode/trunk/bpel-store/src/test/resources/log4j.properties Tue Nov 28 18:30:54 2006 @@ -0,0 +1,19 @@ +# Set root logger level to WARN and its only appender to CONSOLE +log4j.rootLogger=WARN, CONSOLE + +# log4j properties to work with commandline tools. +log4j.category.org.mortbay=ERROR +log4j.category.org.hibernate.type=WARN +log4j.category.org.objectweb=ERROR +#log4j.category.org.apache.ode.axis2=DEBUG +log4j.category.org.apache.ode.bpel.engine=DEBUG +log4j.category.org.apache.ode.bpel.engine.DebuggerSupport=WARN +log4j.category.org.apache.ode.bpel.runtime.DebuggerSupport=WARN +log4j.category.org.apache.ode.daohib.bpel.CorrelatorDaoImpl=TRACE + +#log4j.category.org.apache.ode.bpel.epr=INFO + +# Console appender +log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender +log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout +log4j.appender.CONSOLE.layout.ConversionPattern=%p - %C{1}.%M(%L) | %m%n Added: incubator/ode/trunk/bpel-store/src/test/resources/testdd/HelloWorld2.bpel URL: http://svn.apache.org/viewvc/incubator/ode/trunk/bpel-store/src/test/resources/testdd/HelloWorld2.bpel?view=auto&rev=480340 ============================================================================== --- incubator/ode/trunk/bpel-store/src/test/resources/testdd/HelloWorld2.bpel (added) +++ incubator/ode/trunk/bpel-store/src/test/resources/testdd/HelloWorld2.bpel Tue Nov 28 18:30:54 2006 @@ -0,0 +1,49 @@ +<process name="HelloWorld2" + targetNamespace="http://ode/bpel/unit-test" + xmlns:bpws="http://schemas.xmlsoap.org/ws/2004/03/business-process/" + xmlns="http://schemas.xmlsoap.org/ws/2004/03/business-process/" + xmlns:tns="http://ode/bpel/unit-test" + xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:test="http://ode/bpel/unit-test.wsdl"> + + <import location="HelloWorld2.wsdl" + namespace="http://ode/bpel/unit-test.wsdl" + importType="http://schemas.xmlsoap.org/wsdl/" /> + + <partnerLinks> + <partnerLink name="helloPartnerLink" + partnerLinkType="test:HelloPartnerLinkType" + myRole="me" /> + </partnerLinks> + + <variables> + <variable name="myVar" messageType="test:HelloMessage"/> + <variable name="tmpVar" type="xsd:string"/> + </variables> + + <sequence> + <receive + name="start" + partnerLink="helloPartnerLink" + portType="test:HelloPortType" + operation="hello" + variable="myVar" + createInstance="yes"/> + + <assign name="assign1"> + <copy> + <from variable="myVar" part="TestPart"/> + <to variable="tmpVar"/> + </copy> + <copy> + <from>concat($tmpVar,' World')"</from> + <to variable="myVar" part="TestPart"/> + </copy> + </assign> + <reply name="end" + partnerLink="helloPartnerLink" + portType="test:HelloPortType" + operation="hello" + variable="myVar"/> + </sequence> +</process> Added: incubator/ode/trunk/bpel-store/src/test/resources/testdd/HelloWorld2.wsdl URL: http://svn.apache.org/viewvc/incubator/ode/trunk/bpel-store/src/test/resources/testdd/HelloWorld2.wsdl?view=auto&rev=480340 ============================================================================== --- incubator/ode/trunk/bpel-store/src/test/resources/testdd/HelloWorld2.wsdl (added) +++ incubator/ode/trunk/bpel-store/src/test/resources/testdd/HelloWorld2.wsdl Tue Nov 28 18:30:54 2006 @@ -0,0 +1,51 @@ +<?xml version="1.0" encoding="utf-8" ?> + +<wsdl:definitions + targetNamespace="http://ode/bpel/unit-test.wsdl" + xmlns="http://schemas.xmlsoap.org/wsdl/" + xmlns:tns="http://ode/bpel/unit-test.wsdl" + xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" + xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" + xmlns:bpws="http://schemas.xmlsoap.org/ws/2004/03/business-process/" + xmlns:plnk="http://schemas.xmlsoap.org/ws/2004/03/partner-link/"> + + <wsdl:message name="HelloMessage"> + <wsdl:part name="TestPart" type="xsd:string"/> + </wsdl:message> + + <wsdl:portType name="HelloPortType"> + <wsdl:operation name="hello"> + <wsdl:input message="tns:HelloMessage" name="TestIn"/> + <wsdl:output message="tns:HelloMessage" name="TestOut"/> + </wsdl:operation> + </wsdl:portType> + + <wsdl:binding name="HelloSoapBinding" type="tns:HelloPortType"> + <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/> + <wsdl:operation name="hello"> + <soap:operation soapAction="" style="rpc"/> + <wsdl:input> + <soap:body + namespace="http://ode/bpel/unit-test.wsdl" + use="literal"/> + </wsdl:input> + <wsdl:output> + <soap:body + namespace="http://ode/bpel/unit-test.wsdl" + use="literal"/> + </wsdl:output> + </wsdl:operation> + </wsdl:binding> + <wsdl:service name="HelloService"> + <wsdl:port name="HelloPort" binding="tns:HelloSoapBinding"> + <soap:address location="http://localhost:8080/ode/processes/helloWorld"/> + </wsdl:port> + </wsdl:service> + + <plnk:partnerLinkType name="HelloPartnerLinkType"> + <plnk:role name="me" portType="tns:HelloPortType"/> + <plnk:role name="you" portType="tns:HelloPortType"/> + </plnk:partnerLinkType> +</wsdl:definitions> + Added: incubator/ode/trunk/bpel-store/src/test/resources/testdd/deploy.xml URL: http://svn.apache.org/viewvc/incubator/ode/trunk/bpel-store/src/test/resources/testdd/deploy.xml?view=auto&rev=480340 ============================================================================== --- incubator/ode/trunk/bpel-store/src/test/resources/testdd/deploy.xml (added) +++ incubator/ode/trunk/bpel-store/src/test/resources/testdd/deploy.xml Tue Nov 28 18:30:54 2006 @@ -0,0 +1,12 @@ +<deploy xmlns="http://ode.fivesight.com/schemas/2006/06/27/dd" + xmlns:pns="http://ode/bpel/unit-test" + xmlns:wns="http://ode/bpel/unit-test.wsdl"> + + + <process name="pns:HelloWorld2"> + <active>true</active> + <provide partnerLink="helloPartnerLink"> + <service name="wns:HelloService" port="HelloPort"/> + </provide> + </process> +</deploy>
