search-server/spacewalk-search/src/java/com/redhat/satellite/search/db/DatabaseManager.java
| 43 ++++++++--
search-server/spacewalk-search/src/java/com/redhat/satellite/search/scheduler/tasks/GenericIndexTask.java
| 1
2 files changed, 39 insertions(+), 5 deletions(-)
New commits:
commit 219276e9b7209db0d3aa05c5767bd8400c40dbaa
Author: Tomas Lestach <tlestach(a)redhat.com>
Date: Wed Oct 30 10:25:04 2013 +0100
1023669 - set Session Time Zone for Oracle connections
addressing:
com.ibatis.common.jdbc.exception.NestedSQLException:
--- The error occurred in com/redhat/satellite/search/db/server.xml.
--- The error occurred while applying a result map.
--- Check the getServerByIdOrDate-AutoResultMap.
--- Check the result mapping for the 'registered' property.
--- Cause: java.sql.SQLException: Session Time Zone not set!
similar to 6e364cdc
diff --git
a/search-server/spacewalk-search/src/java/com/redhat/satellite/search/db/DatabaseManager.java
b/search-server/spacewalk-search/src/java/com/redhat/satellite/search/db/DatabaseManager.java
index 269b3ed..7ecb7b1 100644
---
a/search-server/spacewalk-search/src/java/com/redhat/satellite/search/db/DatabaseManager.java
+++
b/search-server/spacewalk-search/src/java/com/redhat/satellite/search/db/DatabaseManager.java
@@ -21,7 +21,9 @@ import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
+import java.lang.reflect.Method;
import java.util.Properties;
+import java.util.TimeZone;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;
@@ -29,6 +31,8 @@ import com.ibatis.sqlmap.client.SqlMapSession;
import com.redhat.satellite.search.config.Configuration;
import com.redhat.satellite.search.config.ConfigException;
+import org.apache.log4j.Logger;
+
/**
* Manages DB activity - connections, running queries, etc
* @version $Rev$
@@ -36,6 +40,9 @@ import com.redhat.satellite.search.config.ConfigException;
public class DatabaseManager {
private SqlMapClient client = null;
+ private boolean isOracle;
+ private static Logger log = Logger.getLogger(DatabaseManager.class);
+
/**
* Constructor
@@ -66,7 +73,8 @@ public class DatabaseManager {
for (String option : options) {
overrides.setProperty(option, config.getString(option));
}
- if (config.getString("db_backend").equals("oracle")) {
+ isOracle = config.getString("db_backend").equals("oracle");
+ if (isOracle) {
overrides.setProperty("db_name", "@" +
overrides.getProperty("db_name"));
} else {
String dbHost = config.getString("db_host");
@@ -105,8 +113,7 @@ public class DatabaseManager {
* @return query object
*/
public <T> Query<T> getQuery(String name) {
- SqlMapSession session = client.openSession();
- return new Query<T>(session, name);
+ return new Query<T>(openSession(), name);
}
/**
@@ -115,7 +122,7 @@ public class DatabaseManager {
* @return query object
*/
public WriteQuery getWriterQuery(String name) {
- SqlMapSession session = client.openSession();
+ SqlMapSession session = openSession();
return new WriteQuery(session, name);
}
@@ -124,6 +131,32 @@ public class DatabaseManager {
* @return connection object
*/
public Connection getConnection() {
- return new Connection(client.openSession());
+ return new Connection(openSession());
+ }
+
+ private SqlMapSession openSession() {
+ SqlMapSession session = client.openSession();
+ setSessionTimeZone();
+ return session;
+ }
+
+ public void setSessionTimeZone() {
+ if (isOracle) {
+ try {
+ java.sql.Connection proxyConn = client.getDataSource().getConnection();
+ // this is a trick, how to get OracleConnection from the Proxy object
+ java.sql.Connection oraConn =
proxyConn.createStatement().getConnection();
+ Method setSessionTimeZoneMethod = Class.forName(
+ "oracle.jdbc.driver.OracleConnection").getMethod(
+ "setSessionTimeZone", String.class);
+ if (setSessionTimeZoneMethod != null) {
+ setSessionTimeZoneMethod.invoke(oraConn,
TimeZone.getDefault().getID());
+ }
+ }
+ catch (Exception e) {
+ log.warn("Unable to set session timezone.");
+ e.printStackTrace();
+ }
+ }
}
}
diff --git
a/search-server/spacewalk-search/src/java/com/redhat/satellite/search/scheduler/tasks/GenericIndexTask.java
b/search-server/spacewalk-search/src/java/com/redhat/satellite/search/scheduler/tasks/GenericIndexTask.java
index f997ed8..9b575bf 100644
---
a/search-server/spacewalk-search/src/java/com/redhat/satellite/search/scheduler/tasks/GenericIndexTask.java
+++
b/search-server/spacewalk-search/src/java/com/redhat/satellite/search/scheduler/tasks/GenericIndexTask.java
@@ -88,6 +88,7 @@ public abstract class GenericIndexTask implements Job {
getIndexName() + ">");
}
catch (SQLException e) {
+ e.printStackTrace();
throw new JobExecutionException(e);
}
catch (IndexingException e) {