Author: jeff.yuchang
Date: 2010-06-02 09:31:07 -0400 (Wed, 02 Jun 2010)
New Revision: 691
Removed:
branches/ODE/ODE-1.x-jpa/dao-jpa/src/main/java/org/apache/ode/dao/jpa/bpel/JpaTxMgrProvider.java
Modified:
branches/ODE/ODE-1.x-jpa/dao-jpa-hibernate/src/main/java/org/apache/ode/dao/jpa/hibernate/BpelDAOConnectionFactoryImpl.java
branches/ODE/ODE-1.x-jpa/dao-jpa-hibernate/src/main/java/org/apache/ode/dao/jpa/hibernate/ConfStoreDAOConnectionFactoryImpl.java
branches/ODE/ODE-1.x-jpa/dao-jpa-hibernate/src/main/java/org/apache/ode/dao/jpa/hibernate/HibernateUtil.java
branches/ODE/ODE-1.x-jpa/dao-jpa/src/main/java/org/apache/ode/dao/jpa/JpaConnection.java
branches/ODE/ODE-1.x-jpa/dao-jpa/src/main/java/org/apache/ode/dao/jpa/bpel/BpelDAOConnectionImpl.java
Log:
* update the JpaConnection, remove the clearOnComplete hooks, as it is not working in
Hibernate.
* refactored the Hibernate EntityManagerFactory initialization.
(with JpaConnection update, it now has the NullPointerException with regard to the
simple_invoke example)
Modified:
branches/ODE/ODE-1.x-jpa/dao-jpa/src/main/java/org/apache/ode/dao/jpa/JpaConnection.java
===================================================================
---
branches/ODE/ODE-1.x-jpa/dao-jpa/src/main/java/org/apache/ode/dao/jpa/JpaConnection.java 2010-06-01
20:24:20 UTC (rev 690)
+++
branches/ODE/ODE-1.x-jpa/dao-jpa/src/main/java/org/apache/ode/dao/jpa/JpaConnection.java 2010-06-02
13:31:07 UTC (rev 691)
@@ -108,7 +108,7 @@
try {
if (_mgr.getStatus() == Status.STATUS_ACTIVE) {
_em.joinTransaction();
- clearOnComplete();
+ //clearOnComplete();
}
} catch (SystemException se) {
__log.error(se);
Modified:
branches/ODE/ODE-1.x-jpa/dao-jpa/src/main/java/org/apache/ode/dao/jpa/bpel/BpelDAOConnectionImpl.java
===================================================================
---
branches/ODE/ODE-1.x-jpa/dao-jpa/src/main/java/org/apache/ode/dao/jpa/bpel/BpelDAOConnectionImpl.java 2010-06-01
20:24:20 UTC (rev 690)
+++
branches/ODE/ODE-1.x-jpa/dao-jpa/src/main/java/org/apache/ode/dao/jpa/bpel/BpelDAOConnectionImpl.java 2010-06-02
13:31:07 UTC (rev 691)
@@ -336,10 +336,14 @@
}
public MessageExchangeDAO getMessageExchange(String mexid) {
- _txCtx.begin();
- MessageExchangeDAO dao = _em.find(MessageExchangeDAOImpl.class, mexid);
+ _txCtx.begin();
+ List l = _em.createQuery("select x from MessageExchangeDAOImpl x where x._id
= ?1").setParameter(1, mexid).getResultList();
_txCtx.commit();
- return dao;
+ if (l.size() == 0) {
+ return null;
+ }
+
+ return (MessageExchangeDAOImpl) l.get(0);
}
public void deleteMessageExchange(MessageExchangeDAO mexDao) {
Deleted:
branches/ODE/ODE-1.x-jpa/dao-jpa/src/main/java/org/apache/ode/dao/jpa/bpel/JpaTxMgrProvider.java
===================================================================
---
branches/ODE/ODE-1.x-jpa/dao-jpa/src/main/java/org/apache/ode/dao/jpa/bpel/JpaTxMgrProvider.java 2010-06-01
20:24:20 UTC (rev 690)
+++
branches/ODE/ODE-1.x-jpa/dao-jpa/src/main/java/org/apache/ode/dao/jpa/bpel/JpaTxMgrProvider.java 2010-06-02
13:31:07 UTC (rev 691)
@@ -1,86 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- *
http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.ode.dao.jpa.bpel;
-
-import javax.transaction.NotSupportedException;
-import javax.transaction.SystemException;
-import javax.transaction.Transaction;
-import javax.transaction.TransactionManager;
-
-import org.apache.openjpa.ee.ManagedRuntime;
-import org.apache.openjpa.util.GeneralException;
-
-public class JpaTxMgrProvider implements ManagedRuntime {
- private TransactionManager _txMgr;
-
- public JpaTxMgrProvider(TransactionManager txMgr) {
- _txMgr = txMgr;
- }
-
- public TransactionManager getTransactionManager() throws Exception {
- return _txMgr;
- }
-
- public void setRollbackOnly(Throwable cause) throws Exception {
- // there is no generic support for setting the rollback cause
- getTransactionManager().getTransaction().setRollbackOnly();
- }
-
- public Throwable getRollbackCause() throws Exception {
- // there is no generic support for setting the rollback cause
- return null;
- }
-
- public Object getTransactionKey() throws Exception, SystemException {
- return _txMgr.getTransaction();
- }
-
- public void doNonTransactionalWork(java.lang.Runnable runnable) throws
NotSupportedException {
- TransactionManager tm = null;
- Transaction transaction = null;
-
- try {
- tm = getTransactionManager();
- transaction = tm.suspend();
- } catch (Exception e) {
- NotSupportedException nse =
- new NotSupportedException(e.getMessage());
- nse.initCause(e);
- throw nse;
- }
-
- runnable.run();
-
- try {
- tm.resume(transaction);
- } catch (Exception e) {
- try {
- transaction.setRollbackOnly();
- }
- catch(SystemException se2) {
- throw new GeneralException(se2);
- }
- NotSupportedException nse =
- new NotSupportedException(e.getMessage());
- nse.initCause(e);
- throw nse;
- }
- }
-}
\ No newline at end of file
Modified:
branches/ODE/ODE-1.x-jpa/dao-jpa-hibernate/src/main/java/org/apache/ode/dao/jpa/hibernate/BpelDAOConnectionFactoryImpl.java
===================================================================
---
branches/ODE/ODE-1.x-jpa/dao-jpa-hibernate/src/main/java/org/apache/ode/dao/jpa/hibernate/BpelDAOConnectionFactoryImpl.java 2010-06-01
20:24:20 UTC (rev 690)
+++
branches/ODE/ODE-1.x-jpa/dao-jpa-hibernate/src/main/java/org/apache/ode/dao/jpa/hibernate/BpelDAOConnectionFactoryImpl.java 2010-06-02
13:31:07 UTC (rev 691)
@@ -18,8 +18,6 @@
*/
package org.apache.ode.dao.jpa.hibernate;
-import java.util.HashMap;
-import java.util.Iterator;
import java.util.Map;
import java.util.Properties;
@@ -33,13 +31,9 @@
import org.apache.commons.logging.LogFactory;
import org.apache.ode.dao.bpel.BpelDAOConnection;
import org.apache.ode.dao.bpel.BpelDAOConnectionFactory;
-import org.apache.ode.dao.jpa.JpaConnection;
import org.apache.ode.dao.jpa.JpaOperator;
import org.apache.ode.dao.jpa.bpel.BpelDAOConnectionImpl;
import org.apache.ode.il.config.OdeConfigProperties;
-import org.apache.ode.utils.GUID;
-import org.hibernate.cfg.Environment;
-import org.hibernate.ejb.EntityManagerImpl;
/**
@@ -47,20 +41,15 @@
public class BpelDAOConnectionFactoryImpl implements BpelDAOConnectionFactory {
static final Log __log = LogFactory.getLog(BpelDAOConnectionFactoryImpl.class);
- static Map _defaultProperties = new HashMap();
- static JpaOperator _operator = new JpaOperatorImpl();
+ JpaOperator _operator = new JpaOperatorImpl();
EntityManagerFactory _emf;
TransactionManager _txm;
DataSource _ds;
- static {
- _defaultProperties.put("javax.persistence.provider",
"org.hibernate.ejb.HibernatePersistence");
- }
-
public void init(Properties odeConfig, TransactionManager txm, Object env) {
this._txm = txm;
this._ds = (DataSource) env;
- Map emfProperties = buildConfig(OdeConfigProperties.PROP_DAOCF + ".",
odeConfig, _txm, _ds);
+ Map emfProperties = HibernateUtil.buildConfig(OdeConfigProperties.PROP_DAOCF +
".", odeConfig, _txm, _ds);
_emf = Persistence.createEntityManagerFactory("ode-bpel",
emfProperties);
}
@@ -69,7 +58,7 @@
final ThreadLocal<BpelDAOConnectionImpl> currentConnection =
BpelDAOConnectionImpl.getThreadLocal();
BpelDAOConnectionImpl conn = (BpelDAOConnectionImpl) currentConnection.get();
- if (conn != null && isOpen(conn)) {
+ if (conn != null && HibernateUtil.isOpen(conn)) {
return conn;
} else {
EntityManager em = _emf.createEntityManager();
@@ -83,89 +72,8 @@
_emf.close();
}
- static Map buildConfig(String prefix, Properties odeConfig, TransactionManager txm,
DataSource ds) {
- Map props = new HashMap(_defaultProperties);
-
- addEntries(prefix, odeConfig, props);
- String guid = new GUID().toString();
- if (ds != null) {
- props.put(Environment.CONNECTION_PROVIDER,
DataSourceConnectionProvider.class.getName());
- HibernateUtil.registerDatasource(guid, ds);
- //props.put(Environment.DIALECT, guessDialect(ds));
- }
- if (txm != null) {
- props.put(Environment.CURRENT_SESSION_CONTEXT_CLASS, "jta");
- props.put(Environment.TRANSACTION_MANAGER_STRATEGY,
HibernateTransactionManagerLookup.class.getName());
- HibernateUtil.registerTransactionManager(guid, txm);
- props.put("javax.persistence.transactionType", "JTA");
- } else {
- props.put("javax.persistence.transactionType",
"RESOURCE_LOCAL");
- }
-
-
- if (ds != null || txm != null) {
- props.put(HibernateUtil.PROP_GUID, guid);
- }
-
- if
(Boolean.valueOf(odeConfig.getProperty(OdeConfigProperties.PROP_DB_EMBEDDED_CREATE,
"true"))) {
- props.put(Environment.HBM2DDL_AUTO, "create-drop");
- __log.debug("create-drop DDL by Hibernate automatically");
- }
-
- // Isolation levels override; when you use a ConnectionProvider, this has no
effect
- //String level = System.getProperty("ode.connection.isolation",
"2");
- //props.put(Environment.ISOLATION, level);
-
-
- if (__log.isDebugEnabled()) {
- __log.debug("========= Hibernate properties ==============");
- for (Iterator it = props.keySet().iterator(); it.hasNext(); ) {
- Object key = it.next();
- __log.debug("key : " + key + ", value : " +
props.get(key));
- }
- __log.debug("==============================================");
- }
-
- return props;
- }
-
- public static void addEntries(String prefix, Properties odeConfig, Map props) {
- if (odeConfig != null) {
- for (Map.Entry me : odeConfig.entrySet()) {
- String key = (String) me.getKey();
- if (key.startsWith(prefix)) {
- String jpaKey = key.substring(prefix.length() - 1);
- String val = (String) me.getValue();
- if (val == null || val.trim().length() == 0) {
- props.remove(jpaKey);
- } else {
- props.put(jpaKey, me.getValue());
- }
- } else if (key.startsWith("hibernate")) {
- props.put(key, me.getValue());
- }
- }
- }
- }
-
- /*
- * For some reason Hibernate does not mark an EntityManager as being closed when
- * the EntityManagerFactory that created it is closed. This method performs a
- * deep introspection to determine if the EntityManager is still viable.
- */
- public static boolean isOpen(JpaConnection conn) {
- EntityManager mgr = conn.getEntityManager();
- if (mgr == null) {
- return false;
- } else if (mgr instanceof EntityManagerImpl) {
- EntityManagerImpl mgrImpl = (EntityManagerImpl) mgr;
- return !mgrImpl.getSession().getSessionFactory().isClosed();
- } else {
- return !conn.isClosed();
- }
- }
- private static final String DEFAULT_HIBERNATE_DIALECT =
"org.hibernate.dialect.DerbyDialect";
+ //private static final String DEFAULT_HIBERNATE_DIALECT =
"org.hibernate.dialect.DerbyDialect";
//Because the JBoss AS 5.1.0.GA uses Hibernate 3.3.1.GA
//While SOA-P 5 uses Hibernate 3.3.2.GA, they are different for guessDialect, so
comment it now.
Modified:
branches/ODE/ODE-1.x-jpa/dao-jpa-hibernate/src/main/java/org/apache/ode/dao/jpa/hibernate/ConfStoreDAOConnectionFactoryImpl.java
===================================================================
---
branches/ODE/ODE-1.x-jpa/dao-jpa-hibernate/src/main/java/org/apache/ode/dao/jpa/hibernate/ConfStoreDAOConnectionFactoryImpl.java 2010-06-01
20:24:20 UTC (rev 690)
+++
branches/ODE/ODE-1.x-jpa/dao-jpa-hibernate/src/main/java/org/apache/ode/dao/jpa/hibernate/ConfStoreDAOConnectionFactoryImpl.java 2010-06-02
13:31:07 UTC (rev 691)
@@ -20,20 +20,20 @@
import java.util.Map;
import java.util.Properties;
+
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.sql.DataSource;
import javax.transaction.TransactionManager;
+
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.apache.ode.dao.jpa.JpaOperator;
import org.apache.ode.dao.jpa.store.ConfStoreDAOConnectionImpl;
-import org.apache.ode.il.config.OdeConfigProperties;
import org.apache.ode.dao.store.ConfStoreDAOConnection;
import org.apache.ode.dao.store.ConfStoreDAOConnectionFactory;
-import static org.apache.ode.dao.jpa.hibernate.BpelDAOConnectionFactoryImpl.isOpen;
-import static org.apache.ode.dao.jpa.hibernate.BpelDAOConnectionFactoryImpl._operator;
-import static org.apache.ode.dao.jpa.hibernate.BpelDAOConnectionFactoryImpl.buildConfig;
+import org.apache.ode.il.config.OdeConfigProperties;
/**
*/
@@ -41,14 +41,15 @@
static final Log __log = LogFactory.getLog(ConfStoreDAOConnectionFactoryImpl.class);
EntityManagerFactory _emf;
- TransactionManager _txm;
- DataSource _ds;
+ TransactionManager _txm;
+ DataSource _ds;
+ JpaOperator _operator = new JpaOperatorImpl();
public void init(Properties odeConfig,TransactionManager txm, Object env) {
- this._txm = txm;
- this._ds = (DataSource) env;
- Map emfProperties = buildConfig(OdeConfigProperties.PROP_DAOCF + ".",
odeConfig, _txm, _ds);
+ this._txm = txm;
+ this._ds = (DataSource) env;
+ Map emfProperties = HibernateUtil.buildConfig(OdeConfigProperties.PROP_DAOCF +
".", odeConfig, _txm, _ds);
_emf = Persistence.createEntityManagerFactory("ode-store", emfProperties);
}
@@ -57,7 +58,7 @@
final ThreadLocal<ConfStoreDAOConnectionImpl> currentConnection =
ConfStoreDAOConnectionImpl.getThreadLocal();
ConfStoreDAOConnectionImpl conn =
(ConfStoreDAOConnectionImpl)currentConnection.get();
- if (conn != null && isOpen(conn)) {
+ if (conn != null && HibernateUtil.isOpen(conn)) {
return conn;
} else {
EntityManager em = _emf.createEntityManager();
Modified:
branches/ODE/ODE-1.x-jpa/dao-jpa-hibernate/src/main/java/org/apache/ode/dao/jpa/hibernate/HibernateUtil.java
===================================================================
---
branches/ODE/ODE-1.x-jpa/dao-jpa-hibernate/src/main/java/org/apache/ode/dao/jpa/hibernate/HibernateUtil.java 2010-06-01
20:24:20 UTC (rev 690)
+++
branches/ODE/ODE-1.x-jpa/dao-jpa-hibernate/src/main/java/org/apache/ode/dao/jpa/hibernate/HibernateUtil.java 2010-06-02
13:31:07 UTC (rev 691)
@@ -22,36 +22,37 @@
import java.sql.SQLException;
import java.util.Collections;
import java.util.HashMap;
+import java.util.Iterator;
import java.util.Map;
import java.util.Properties;
+import javax.persistence.EntityManager;
import javax.sql.DataSource;
import javax.transaction.TransactionManager;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.ode.dao.jpa.JpaConnection;
+import org.apache.ode.il.config.OdeConfigProperties;
+import org.apache.ode.utils.GUID;
+import org.hibernate.cfg.Environment;
+import org.hibernate.ejb.EntityManagerImpl;
+
/**
* Manages datasource and transaction, for hibernate usage.
*
+ * setup Hibernate specific initialization.
+ *
*/
public class HibernateUtil {
-
+ static final Log __log = LogFactory.getLog(HibernateUtil.class);
+
public static final String PROP_GUID = "ode.hibernate.guid";
- private static final Map<String, TransactionManager> _txManagers =
- Collections.synchronizedMap(new HashMap<String,
TransactionManager>());
- private static final Map<String, DataSource> _dataSources =
- Collections.synchronizedMap(new HashMap<String,DataSource>());
+ private static final Map<String, TransactionManager> _txManagers =
Collections.synchronizedMap(new HashMap<String, TransactionManager>());
+ private static final Map<String, DataSource> _dataSources =
Collections.synchronizedMap(new HashMap<String,DataSource>());
- private static final String[] CANNOT_JOIN_FOR_UPDATE_DIALECTS =
- {"org.hibernate.dialect.IngresDialect"};
-
- private final TransactionManager _txManager = null;
-
-
- TransactionManager getTransactionManager() {
- return _txManager;
- }
-
public static void registerTransactionManager(String uuid, TransactionManager txm) {
_txManagers.put(uuid, txm);
}
@@ -60,14 +61,101 @@
_dataSources.put(uuid, ds);
}
-
public static TransactionManager getTransactionManager(Properties props) {
String guid = props.getProperty(PROP_GUID);
- return _txManagers.get(guid);
+ TransactionManager mgr = _txManagers.get(guid);
+ if (__log.isDebugEnabled()) {
+ __log.debug("guid is: " + guid + ", TransactionManager is: "
+ mgr);
+ }
+ return mgr;
}
public static Connection getConnection(Properties props) throws SQLException {
String guid = props.getProperty(PROP_GUID);
- return _dataSources.get(guid).getConnection();
+ Connection conn = _dataSources.get(guid).getConnection();
+ if (__log.isDebugEnabled()) {
+ __log.debug("guid is: " + guid + ", Connection is: " +
conn);
+ }
+ return conn;
}
+
+ public static Map buildConfig(String prefix, Properties odeConfig, TransactionManager
txm, DataSource ds) {
+ Map props = new HashMap();
+ props.put("javax.persistence.provider",
"org.hibernate.ejb.HibernatePersistence");
+
+ addEntries(prefix, odeConfig, props);
+
+ String guid = new GUID().toString();
+ if (ds != null) {
+ props.put(Environment.CONNECTION_PROVIDER,
DataSourceConnectionProvider.class.getName());
+ registerDatasource(guid, ds);
+ }
+ if (txm != null) {
+ props.put(Environment.CURRENT_SESSION_CONTEXT_CLASS, "jta");
+ props.put(Environment.TRANSACTION_MANAGER_STRATEGY,
HibernateTransactionManagerLookup.class.getName());
+ //props.put(Environment.TRANSACTION_STRATEGY,
"org.apache.ode.dao.jpa.hibernate.JotmTransactionFactory");
+ HibernateUtil.registerTransactionManager(guid, txm);
+ props.put("javax.persistence.transactionType", "JTA");
+ } else {
+ props.put("javax.persistence.transactionType",
"RESOURCE_LOCAL");
+ }
+
+ if (ds != null || txm != null) {
+ props.put(HibernateUtil.PROP_GUID, guid);
+ }
+
+ if
(Boolean.valueOf(odeConfig.getProperty(OdeConfigProperties.PROP_DB_EMBEDDED_CREATE,
"true"))) {
+ props.put(Environment.HBM2DDL_AUTO, "create-drop");
+ __log.debug("create-drop DDL by Hibernate automatically");
+ }
+
+ if (__log.isDebugEnabled()) {
+ __log.debug("========= Hibernate properties ==============");
+ for (Iterator it = props.keySet().iterator(); it.hasNext(); ) {
+ Object key = it.next();
+ __log.debug("key : " + key + ", value : " +
props.get(key));
+ }
+ __log.debug("==============================================");
+ }
+
+ return props;
+ }
+
+ private static void addEntries(String prefix, Properties odeConfig, Map props) {
+ if (odeConfig != null) {
+ for (Map.Entry me : odeConfig.entrySet()) {
+ String key = (String) me.getKey();
+ if (key.startsWith(prefix)) {
+ String jpaKey = key.substring(prefix.length() - 1);
+ String val = (String) me.getValue();
+ if (val == null || val.trim().length() == 0) {
+ props.remove(jpaKey);
+ } else {
+ props.put(jpaKey, me.getValue());
+ }
+ } else if (key.startsWith("hibernate")) {
+ props.put(key, me.getValue());
+ }
+ }
+ }
+ }
+
+ /*
+ * For some reason Hibernate does not mark an EntityManager as being closed when
+ * the EntityManagerFactory that created it is closed. This method performs a
+ * deep introspection to determine if the EntityManager is still viable.
+ */
+ public static boolean isOpen(JpaConnection conn) {
+ EntityManager mgr = conn.getEntityManager();
+ if (mgr == null) {
+ return false;
+ } else if (mgr instanceof EntityManagerImpl) {
+ EntityManagerImpl mgrImpl = (EntityManagerImpl) mgr;
+ return !mgrImpl.getSession().getSessionFactory().isClosed();
+ } else {
+ return !conn.isClosed();
+ }
+ }
+
+
}