diff options
Diffstat (limited to '0001-fix-problems-with-OracleDB-and-configuration-storage.patch')
-rw-r--r-- | 0001-fix-problems-with-OracleDB-and-configuration-storage.patch | 1158 |
1 files changed, 0 insertions, 1158 deletions
diff --git a/0001-fix-problems-with-OracleDB-and-configuration-storage.patch b/0001-fix-problems-with-OracleDB-and-configuration-storage.patch deleted file mode 100644 index c03696599..000000000 --- a/0001-fix-problems-with-OracleDB-and-configuration-storage.patch +++ /dev/null @@ -1,1158 +0,0 @@ -From fa3f73a46151d06c4f80eb0c43d3eda6c23c3709 Mon Sep 17 00:00:00 2001 -From: Thomas Lenz <tlenz@iaik.tugraz.at> -Date: Tue, 15 Sep 2015 12:55:30 +0200 -Subject: [PATCH 1/3] fix problems with OracleDB and configuration storage - implementation - ---- - .../config/ConfigurationProvider.java | 7 + - .../validation/oa/OAPVP2ConfigValidation.java | 6 +- - .../moa-id-configtool.properties | 1 + - .../data/deploy/conf/moa-id/moa-id.properties | 1 + - .../PropertyBasedAuthConfigurationProvider.java | 12 +- - .../id/storage/AuthenticationSessionStoreage.java | 569 ++++++++++++--------- - .../main/resources/moaid.configuration.beans.xml | 2 +- - .../config/persistence/MOAIDConfiguration.java | 12 + - .../config/persistence/MOAIDConfigurationImpl.java | 110 ++-- - .../moa/id/commons/db/MOASessionDBUtils.java | 10 +- - .../moa/id/commons/db/NewConfigurationDBRead.java | 7 +- - .../db/dao/config/DatabaseConfigPropertyImpl.java | 35 +- - .../src/main/resources/moaid.migration.beans.xml | 2 +- - 13 files changed, 494 insertions(+), 280 deletions(-) - -diff --git a/id/ConfigWebTool/src/main/java/at/gv/egovernment/moa/id/configuration/config/ConfigurationProvider.java b/id/ConfigWebTool/src/main/java/at/gv/egovernment/moa/id/configuration/config/ConfigurationProvider.java -index 849e819..e2a55db 100644 ---- a/id/ConfigWebTool/src/main/java/at/gv/egovernment/moa/id/configuration/config/ConfigurationProvider.java -+++ b/id/ConfigWebTool/src/main/java/at/gv/egovernment/moa/id/configuration/config/ConfigurationProvider.java -@@ -188,6 +188,13 @@ public class ConfigurationProvider { - - - /** -+ * @return the props -+ */ -+ public Properties getConfigurationProperties() { -+ return props; -+ } -+ -+ /** - * @return the deprecatedDBWrite - */ - public FileBasedUserConfiguration getUserManagement() { -diff --git a/id/ConfigWebTool/src/main/java/at/gv/egovernment/moa/id/configuration/validation/oa/OAPVP2ConfigValidation.java b/id/ConfigWebTool/src/main/java/at/gv/egovernment/moa/id/configuration/validation/oa/OAPVP2ConfigValidation.java -index 18452ed..35b6927 100644 ---- a/id/ConfigWebTool/src/main/java/at/gv/egovernment/moa/id/configuration/validation/oa/OAPVP2ConfigValidation.java -+++ b/id/ConfigWebTool/src/main/java/at/gv/egovernment/moa/id/configuration/validation/oa/OAPVP2ConfigValidation.java -@@ -76,7 +76,11 @@ public class OAPVP2ConfigValidation { - - else { - try { -- Map<String, String> oa = ConfigurationProvider.getInstance().getDbRead().getOnlineApplicationKeyValueWithId(oaID); -+ //OracleDB does not allow the selection of a lob in SQL where expression -+ String dbDriver = ConfigurationProvider.getInstance().getConfigurationProperties().getProperty("hibernate.connection.driver_class"); -+ boolean backupVersion = MiscUtil.isNotEmpty(dbDriver) && dbDriver.startsWith("oracle.jdbc."); -+ -+ Map<String, String> oa = ConfigurationProvider.getInstance().getDbRead().getOnlineApplicationKeyValueWithId(oaID, backupVersion); - if (oa != null && - MiscUtil.isNotEmpty(oa.get(MOAIDConfigurationConstants.SERVICE_PROTOCOLS_PVP2X_CERTIFICATE))) { - certSerialized = Base64Utils.decode(oa.get(MOAIDConfigurationConstants.SERVICE_PROTOCOLS_PVP2X_CERTIFICATE), false); -diff --git a/id/server/data/deploy/conf/moa-id-configuration/moa-id-configtool.properties b/id/server/data/deploy/conf/moa-id-configuration/moa-id-configtool.properties -index 9a3b367..825a9f1 100644 ---- a/id/server/data/deploy/conf/moa-id-configuration/moa-id-configtool.properties -+++ b/id/server/data/deploy/conf/moa-id-configuration/moa-id-configtool.properties -@@ -35,6 +35,7 @@ dbcp.maxWaitMillis=-1 - dbcp.testOnBorrow=true - dbcp.testOnReturn=false - dbcp.testWhileIdle=false -+dbcp.validationQuery=SELECT 1 - - ##Mail - general.mail.host=smtp.localhost... -diff --git a/id/server/data/deploy/conf/moa-id/moa-id.properties b/id/server/data/deploy/conf/moa-id/moa-id.properties -index 66f9afa..49e69c5 100644 ---- a/id/server/data/deploy/conf/moa-id/moa-id.properties -+++ b/id/server/data/deploy/conf/moa-id/moa-id.properties -@@ -107,6 +107,7 @@ configuration.dbcp.maxWaitMillis=-1 - configuration.dbcp.testOnBorrow=true - configuration.dbcp.testOnReturn=false - configuration.dbcp.testWhileIdle=false -+configuration.dbcp.validationQuery=SELECT 1 - - # - #Hibnerate configuration for MOA-ID 2.0 advanced statistic logging -diff --git a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/config/auth/PropertyBasedAuthConfigurationProvider.java b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/config/auth/PropertyBasedAuthConfigurationProvider.java -index 190c5f0..6458314 100644 ---- a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/config/auth/PropertyBasedAuthConfigurationProvider.java -+++ b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/config/auth/PropertyBasedAuthConfigurationProvider.java -@@ -980,9 +980,17 @@ public class PropertyBasedAuthConfigurationProvider extends ConfigurationProvide - * @return the requested online application or {@code null} - */ - public Map<String, String> getActiveOnlineApplication(String id) { -- Logger.trace("Get active OnlineApplication with ID " + id + " from database."); -+ Logger.trace("Get active OnlineApplication with ID " + id + " from database."); -+ Map<String, String> oaConfig = null; - try { -- Map<String, String> oaConfig = configuration.getOnlineApplication(id); -+ //OracleDB does not allow the selection of a lob in SQL where expression -+ String dbDriver = properties.getProperty("configuration.hibernate.connection.driver_class"); -+ if (MiscUtil.isNotEmpty(dbDriver) && dbDriver.startsWith("oracle.jdbc.")) -+ oaConfig = configuration.getOnlineApplicationBackupVersion(id); -+ -+ else -+ oaConfig = configuration.getOnlineApplication(id); -+ - if (oaConfig != null) { - String isActiveString = oaConfig.get(MOAIDConfigurationConstants.SERVICE_ISACTIVE); - if (isActiveString != null && Boolean.valueOf(isActiveString)) -diff --git a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/storage/AuthenticationSessionStoreage.java b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/storage/AuthenticationSessionStoreage.java -index 4b4b5dd..829383c 100644 ---- a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/storage/AuthenticationSessionStoreage.java -+++ b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/storage/AuthenticationSessionStoreage.java -@@ -206,26 +206,34 @@ public class AuthenticationSessionStoreage { - Session session = MOASessionDBUtils.getCurrentSession(); - - List<AuthenticatedSessionStore> result; -- -- synchronized (session) { -- -- session.beginTransaction(); -- Query query = session.getNamedQuery("getSessionWithID"); -- query.setParameter("sessionid", moaSessionID); -- result = query.list(); -- -- -- Logger.trace("Found entries: " + result.size()); -+ Transaction tx = null; -+ try { -+ synchronized (session) { -+ -+ tx = session.beginTransaction(); -+ Query query = session.getNamedQuery("getSessionWithID"); -+ query.setParameter("sessionid", moaSessionID); -+ result = query.list(); -+ - -- //Assertion requires an unique artifact -- if (result.size() != 1) { -- Logger.trace("No entries found."); -- throw new MOADatabaseException("No session found with this sessionID"); -+ Logger.trace("Found entries: " + result.size()); -+ -+ //Assertion requires an unique artifact -+ if (result.size() != 1) { -+ Logger.trace("No entries found."); -+ throw new MOADatabaseException("No session found with this sessionID"); -+ } -+ -+ AuthenticatedSessionStore dbsession = (AuthenticatedSessionStore) result.get(0); -+ tx.commit(); -+ cleanDelete(dbsession); - } - -- AuthenticatedSessionStore dbsession = (AuthenticatedSessionStore) result.get(0); -- session.getTransaction().commit(); -- cleanDelete(dbsession); -+ } catch (Exception e) { -+ if (tx != null && !tx.wasCommitted()) -+ tx.rollback(); -+ throw e; -+ - } - - } -@@ -290,28 +298,36 @@ public class AuthenticationSessionStoreage { - Session session = MOASessionDBUtils.getCurrentSession(); - - List<AuthenticatedSessionStore> result; -- -- synchronized (session) { -- session.beginTransaction(); -- Query query = session.getNamedQuery("getSessionWithSSOID"); -- query.setParameter("sessionid", SSOSessionID); -- result = query.list(); -+ Transaction tx = null; -+ try { -+ synchronized (session) { -+ -+ tx = session.beginTransaction(); -+ Query query = session.getNamedQuery("getSessionWithSSOID"); -+ query.setParameter("sessionid", SSOSessionID); -+ result = query.list(); - -- //send transaction -- session.getTransaction().commit(); -- } -+ //send transaction -+ tx.commit(); -+ -+ } - -- Logger.trace("Found entries: " + result.size()); -+ Logger.trace("Found entries: " + result.size()); - -- //Assertion requires an unique artifact -- if (result.size() != 1) { -- Logger.trace("No entries found."); -- return null; -+ //Assertion requires an unique artifact -+ if (result.size() != 1) { -+ Logger.trace("No entries found."); -+ return null; - -- } else { -- return result.get(0).getSessionid(); -+ } else { -+ return result.get(0).getSessionid(); - -- } -+ } -+ } catch (Exception e) { -+ if (tx != null && !tx.wasCommitted()) -+ tx.rollback(); -+ throw e; -+ } - } - - public static boolean isSSOSession(String sessionID) throws MOADatabaseException { -@@ -331,27 +347,33 @@ public class AuthenticationSessionStoreage { - Session session = MOASessionDBUtils.getCurrentSession(); - - List<AuthenticatedSessionStore> result; -- -- synchronized (session) { -- session.beginTransaction(); -- Query query = session.getNamedQuery("getSessionWithSSOID"); -- query.setParameter("sessionid", SSOId); -- result = query.list(); -+ Transaction tx = null; -+ try { -+ synchronized (session) { -+ tx = session.beginTransaction(); -+ Query query = session.getNamedQuery("getSessionWithSSOID"); -+ query.setParameter("sessionid", SSOId); -+ result = query.list(); -+ -+ //send transaction -+ tx.commit(); -+ } -+ -+ Logger.trace("Found entries: " + result.size()); - -- //send transaction -- session.getTransaction().commit(); -+ //Assertion requires an unique artifact -+ if (result.size() != 1) { -+ Logger.trace("No entries found."); -+ return null; -+ -+ } else { -+ return result.get(0); -+ } -+ } catch (Exception e) { -+ if (tx != null && !tx.wasCommitted()) -+ tx.rollback(); -+ throw e; - } -- -- Logger.trace("Found entries: " + result.size()); -- -- //Assertion requires an unique artifact -- if (result.size() != 1) { -- Logger.trace("No entries found."); -- return null; -- -- } else { -- return result.get(0); -- } - } - - public static void addSSOInformation(String moaSessionID, String SSOSessionID, -@@ -453,13 +475,15 @@ public class AuthenticationSessionStoreage { - - } catch(HibernateException e) { - Logger.warn("Error during database saveOrUpdate. Rollback.", e); -- tx.rollback(); -- throw new AuthenticationException("SSO Session information can not be stored! --> SSO is deactivated", null); -- } -+ if (tx != null && !tx.wasCommitted()) -+ tx.rollback(); -+ throw new AuthenticationException("SSO Session information can not be stored! --> SSO is deactivated", null); -+ } - } - - public static List<OASessionStore> getAllActiveOAFromMOASession(AuthenticationSession moaSession) { - MiscUtil.assertNotNull(moaSession, "MOASession"); -+ Session session = null; - - try { - List<OASessionStore> oas = new ArrayList<OASessionStore>(); -@@ -467,7 +491,7 @@ public class AuthenticationSessionStoreage { - AuthenticatedSessionStore dbsession = searchInDatabase(moaSession.getSessionID(), false); - oas.addAll(dbsession.getActiveOAsessions()); - -- Session session = MOASessionDBUtils.getCurrentSession(); -+ session = MOASessionDBUtils.getCurrentSession(); - session.getTransaction().commit(); - - return oas; -@@ -475,6 +499,14 @@ public class AuthenticationSessionStoreage { - } catch (MOADatabaseException e) { - Logger.warn("NO session information found for sessionID " + moaSession.getSessionID(), e); - -+ } catch (Exception e) { -+ if (session != null && session.getTransaction() != null -+ && !session.getTransaction().wasCommitted()) { -+ session.getTransaction().rollback(); -+ throw e; -+ -+ } -+ - } - - return null; -@@ -482,13 +514,13 @@ public class AuthenticationSessionStoreage { - - public static List<InterfederationSessionStore> getAllActiveIDPsFromMOASession(AuthenticationSession moaSession) { - MiscUtil.assertNotNull(moaSession, "MOASession"); -- -+ Session session = null; - try { - List<InterfederationSessionStore> idps = new ArrayList<InterfederationSessionStore>(); - AuthenticatedSessionStore dbsession = searchInDatabase(moaSession.getSessionID(), false); - idps.addAll(dbsession.getInderfederation()); - -- Session session = MOASessionDBUtils.getCurrentSession(); -+ session = MOASessionDBUtils.getCurrentSession(); - session.getTransaction().commit(); - - return idps; -@@ -496,6 +528,14 @@ public class AuthenticationSessionStoreage { - } catch (MOADatabaseException e) { - Logger.warn("NO session information found for sessionID " + moaSession.getSessionID(), e); - -+ } catch (Exception e) { -+ if (session != null && session.getTransaction() != null -+ && !session.getTransaction().wasCommitted()) { -+ session.getTransaction().rollback(); -+ throw e; -+ -+ } -+ - } - - return null; -@@ -507,35 +547,42 @@ public class AuthenticationSessionStoreage { - Logger.trace("Get moaSession for userNameID " + userNameID + " and OA " - + oaID + " from database."); - Session session = MOASessionDBUtils.getCurrentSession(); -- -- List<AuthenticatedSessionStore> result; -+ Transaction tx = null; - -- synchronized (session) { -- session.beginTransaction(); -- Query query = session.getNamedQuery("getMOASessionWithNameIDandOAID"); -- query.setParameter("oaID", oaID); -- query.setParameter("nameID", userNameID); -- result = query.list(); -+ List<AuthenticatedSessionStore> result = null;; -+ try { -+ synchronized (session) { -+ tx = session.beginTransaction(); -+ Query query = session.getNamedQuery("getMOASessionWithNameIDandOAID"); -+ query.setParameter("oaID", oaID); -+ query.setParameter("nameID", userNameID); -+ result = query.list(); -+ -+ //send transaction -+ tx.commit(); -+ } - -- //send transaction -- session.getTransaction().commit(); -- } -- -- Logger.trace("Found entries: " + result.size()); -- -- //Assertion requires an unique artifact -- if (result.size() != 1) { -- Logger.trace("No unique entry found."); -- return null; -- -- } -- try { -- return decryptSession(result.get(0)); -+ Logger.trace("Found entries: " + result.size()); -+ -+ //Assertion requires an unique artifact -+ if (result.size() != 1) { -+ Logger.trace("No unique entry found."); -+ return null; -+ -+ } -+ -+ return decryptSession(result.get(0)); - - } catch (BuildException e) { -- Logger.warn("MOASession deserialization-exception by using MOASessionID=" + result.get(0).getSessionid(), e); -+ Logger.warn("MOASession deserialization-exception by using MOASessionID=" + result.get(0).getSessionid(), e); - return null; -+ -+ } catch (Exception e) { -+ if (tx != null && !tx.wasCommitted()) -+ tx.rollback(); -+ throw e; - } -+ - } - - public static OASessionStore searchActiveOASSOSession(AuthenticationSession moaSession, String oaID, String protocolType) { -@@ -547,29 +594,36 @@ public class AuthenticationSessionStoreage { - Session session = MOASessionDBUtils.getCurrentSession(); - - List<AuthenticatedSessionStore> result; -- -- synchronized (session) { -- session.beginTransaction(); -- Query query = session.getNamedQuery("getActiveOAWithSessionIDandOAIDandProtocol"); -- query.setParameter("sessionID", moaSession.getSessionID()); -- query.setParameter("oaID", oaID); -- query.setParameter("protocol", protocolType); -- result = query.list(); -+ Transaction tx = null; -+ try { -+ synchronized (session) { -+ tx = session.beginTransaction(); -+ Query query = session.getNamedQuery("getActiveOAWithSessionIDandOAIDandProtocol"); -+ query.setParameter("sessionID", moaSession.getSessionID()); -+ query.setParameter("oaID", oaID); -+ query.setParameter("protocol", protocolType); -+ result = query.list(); -+ -+ //send transaction -+ tx.commit(); -+ } - -- //send transaction -- session.getTransaction().commit(); -- } -- -- Logger.trace("Found entries: " + result.size()); -- -- //Assertion requires an unique artifact -- if (result.size() == 0) { -- Logger.trace("No entries found."); -- return null; -- -- } -- -- return result.get(0).getActiveOAsessions().get(0); -+ Logger.trace("Found entries: " + result.size()); -+ -+ //Assertion requires an unique artifact -+ if (result.size() == 0) { -+ Logger.trace("No entries found."); -+ return null; -+ -+ } -+ -+ return result.get(0).getActiveOAsessions().get(0); -+ -+ } catch (Exception e) { -+ if (tx != null && !tx.wasCommitted()) -+ tx.rollback(); -+ throw e; -+ } - } - - public static String getPendingRequestID(String sessionID) { -@@ -584,6 +638,7 @@ public class AuthenticationSessionStoreage { - } - - public static AuthenticationSession getSessionWithPendingRequestID(String pedingRequestID) { -+ Transaction tx = null; - try { - MiscUtil.assertNotNull(pedingRequestID, "pedingRequestID"); - Logger.trace("Get authenticated session with pedingRequestID " + pedingRequestID + " from database."); -@@ -592,13 +647,13 @@ public class AuthenticationSessionStoreage { - List<AuthenticatedSessionStore> result; - - synchronized (session) { -- session.beginTransaction(); -+ tx = session.beginTransaction(); - Query query = session.getNamedQuery("getSessionWithPendingRequestID"); - query.setParameter("sessionid", pedingRequestID); - result = query.list(); - - //send transaction -- session.getTransaction().commit(); -+ tx.commit(); - } - - Logger.trace("Found entries: " + result.size()); -@@ -613,8 +668,13 @@ public class AuthenticationSessionStoreage { - - } catch (Throwable e) { - Logger.warn("MOASession deserialization-exception by using MOASessionID=" + pedingRequestID); -+ -+ if (tx != null && !tx.wasCommitted()) -+ tx.rollback(); -+ - return null; -- } -+ -+ } - } - - public static boolean deleteSessionWithPendingRequestID(String id) { -@@ -623,34 +683,39 @@ public class AuthenticationSessionStoreage { - Session session = MOASessionDBUtils.getCurrentSession(); - - List<AuthenticatedSessionStore> result; -- -- synchronized (session) { -- session.beginTransaction(); -- Query query = session.getNamedQuery("getSessionWithPendingRequestID"); -- query.setParameter("sessionid", id); -- result = query.list(); -+ Transaction tx = null; -+ try { -+ synchronized (session) { -+ tx = session.beginTransaction(); -+ Query query = session.getNamedQuery("getSessionWithPendingRequestID"); -+ query.setParameter("sessionid", id); -+ result = query.list(); -+ -+ //send transaction -+ tx.commit(); -+ } - -- //send transaction -- session.getTransaction().commit(); -- } -- -- Logger.trace("Found entries: " + result.size()); -- -- //Assertion requires an unique artifact -- if (result.size() != 1) { -- Logger.trace("No entries found."); -- return false; -- -- } else { -- cleanDelete(result.get(0)); -- return true; -- } -- -- -+ Logger.trace("Found entries: " + result.size()); -+ -+ //Assertion requires an unique artifact -+ if (result.size() != 1) { -+ Logger.trace("No entries found."); -+ return false; -+ -+ } else { -+ cleanDelete(result.get(0)); -+ return true; -+ } -+ } catch (Exception e) { -+ if (tx != null && !tx.wasCommitted()) -+ tx.rollback(); -+ throw e; -+ } - } - - public static AuthenticationSession getSessionWithUserNameID(String nameID) { - -+ Transaction tx = null; - try { - MiscUtil.assertNotNull(nameID, "nameID"); - Logger.trace("Get authenticated session with pedingRequestID " + nameID + " from database."); -@@ -659,13 +724,13 @@ public class AuthenticationSessionStoreage { - List<AuthenticatedSessionStore> result; - - synchronized (session) { -- session.beginTransaction(); -+ tx = session.beginTransaction(); - Query query = session.getNamedQuery("getMOAISessionWithUserNameID"); - query.setParameter("usernameid", StringEscapeUtils.escapeHtml(nameID)); - result = query.list(); - - //send transaction -- session.getTransaction().commit(); -+ tx.commit(); - } - - Logger.trace("Found entries: " + result.size()); -@@ -679,7 +744,9 @@ public class AuthenticationSessionStoreage { - return decryptSession(result.get(0)); - - } catch (Throwable e) { -- Logger.warn("MOASession deserialization-exception by using MOASessionID=" + nameID); -+ Logger.warn("MOASession deserialization-exception by using MOASessionID=" + nameID); -+ if (tx != null && !tx.wasCommitted()) -+ tx.rollback(); - return null; - } - -@@ -691,27 +758,33 @@ public class AuthenticationSessionStoreage { - Session session = MOASessionDBUtils.getCurrentSession(); - - List<AuthenticatedSessionStore> result; -- -- synchronized (session) { -- session.beginTransaction(); -- Query query = session.getNamedQuery("getInterfederatedIDPForSSOWithSessionID"); -- query.setParameter("sessionID", sessionID); -- result = query.list(); -+ Transaction tx = null; -+ try { -+ synchronized (session) { -+ tx = session.beginTransaction(); -+ Query query = session.getNamedQuery("getInterfederatedIDPForSSOWithSessionID"); -+ query.setParameter("sessionID", sessionID); -+ result = query.list(); -+ -+ //send transaction -+ tx.commit(); -+ } - -- //send transaction -- session.getTransaction().commit(); -- } -- -- Logger.trace("Found entries: " + result.size()); -- -- //Assertion requires an unique artifact -- if (result.size() == 0) { -- Logger.trace("No entries found."); -- return null; -- -- } -- -- return result.get(0).getInderfederation().get(0); -+ Logger.trace("Found entries: " + result.size()); -+ -+ //Assertion requires an unique artifact -+ if (result.size() == 0) { -+ Logger.trace("No entries found."); -+ return null; -+ -+ } -+ -+ return result.get(0).getInderfederation().get(0); -+ } catch (Exception e) { -+ if (tx != null && !tx.wasCommitted()) -+ tx.rollback(); -+ throw e; -+ } - } - - public static InterfederationSessionStore searchInterfederatedIDPFORSSOWithMOASessionIDPID(String sessionID, String idpID) { -@@ -721,28 +794,34 @@ public class AuthenticationSessionStoreage { - Session session = MOASessionDBUtils.getCurrentSession(); - - List<AuthenticatedSessionStore> result; -- -- synchronized (session) { -- session.beginTransaction(); -- Query query = session.getNamedQuery("getInterfederatedIDPForSSOWithSessionIDIDPID"); -- query.setParameter("sessionID", sessionID); -- query.setParameter("idpID", idpID); -- result = query.list(); -+ Transaction tx = null; -+ try { -+ synchronized (session) { -+ tx = session.beginTransaction(); -+ Query query = session.getNamedQuery("getInterfederatedIDPForSSOWithSessionIDIDPID"); -+ query.setParameter("sessionID", sessionID); -+ query.setParameter("idpID", idpID); -+ result = query.list(); -+ -+ //send transaction -+ tx.commit(); -+ } - -- //send transaction -- session.getTransaction().commit(); -- } -- -- Logger.trace("Found entries: " + result.size()); -- -- //Assertion requires an unique artifact -- if (result.size() == 0) { -- Logger.trace("No entries found."); -- return null; -- -- } -- -- return result.get(0).getInderfederation().get(0); -+ Logger.trace("Found entries: " + result.size()); -+ -+ //Assertion requires an unique artifact -+ if (result.size() == 0) { -+ Logger.trace("No entries found."); -+ return null; -+ -+ } -+ -+ return result.get(0).getInderfederation().get(0); -+ } catch (Exception e) { -+ if (tx != null && !tx.wasCommitted()) -+ tx.rollback(); -+ throw e; -+ } - } - - public static String createInterfederatedSession(IRequest req, boolean isAuthenticated, String ssoID) throws MOADatabaseException, AssertionAttributeExtractorExeption, BuildException { -@@ -847,27 +926,33 @@ public class AuthenticationSessionStoreage { - Session session = MOASessionDBUtils.getCurrentSession(); - - List<AuthenticatedSessionStore> result; -- -- synchronized (session) { -- session.beginTransaction(); -- Query query = session.getNamedQuery("getInterfederatedIDPForAttributeQueryWithSessionID"); -- query.setParameter("sessionID", moaSession.getSessionID()); -- result = query.list(); -+ Transaction tx = null; -+ try { -+ synchronized (session) { -+ tx = session.beginTransaction(); -+ Query query = session.getNamedQuery("getInterfederatedIDPForAttributeQueryWithSessionID"); -+ query.setParameter("sessionID", moaSession.getSessionID()); -+ result = query.list(); -+ -+ //send transaction -+ tx.commit(); -+ } - -- //send transaction -- session.getTransaction().commit(); -- } -- -- Logger.trace("Found entries: " + result.size()); -- -- //Assertion requires an unique artifact -- if (result.size() == 0) { -- Logger.trace("No entries found."); -- return null; -- -- } -- -- return result.get(0).getInderfederation().get(0); -+ Logger.trace("Found entries: " + result.size()); -+ -+ //Assertion requires an unique artifact -+ if (result.size() == 0) { -+ Logger.trace("No entries found."); -+ return null; -+ -+ } -+ -+ return result.get(0).getInderfederation().get(0); -+ } catch (Exception e) { -+ if (tx != null && !tx.wasCommitted()) -+ tx.rollback(); -+ throw e; -+ } - } - - /** -@@ -930,28 +1015,34 @@ public class AuthenticationSessionStoreage { - - List<AuthenticatedSessionStore> results; - Session session = MOASessionDBUtils.getCurrentSession(); -- -- synchronized (session) { -- session.beginTransaction(); -- Query query = session.getNamedQuery("getMOAISessionsWithTimeOut"); -- query.setTimestamp("timeoutcreate", expioredatecreate); -- query.setTimestamp("timeoutupdate", expioredateupdate); -- results = query.list(); -- session.getTransaction().commit(); -- } -- -- if (results.size() != 0) { -- for(AuthenticatedSessionStore result : results) { -- try { -- cleanDelete(result); -- Logger.info("Authenticated session with sessionID=" + result.getSessionid() -- + " after session timeout."); -- -- } catch (HibernateException e){ -- Logger.warn("Authenticated session with sessionID=" + result.getSessionid() -- + " not removed after timeout! (Error during Database communication)", e); -- } -- } -+ Transaction tx = null; -+ try { -+ synchronized (session) { -+ tx = session.beginTransaction(); -+ Query query = session.getNamedQuery("getMOAISessionsWithTimeOut"); -+ query.setTimestamp("timeoutcreate", expioredatecreate); -+ query.setTimestamp("timeoutupdate", expioredateupdate); -+ results = query.list(); -+ tx.commit(); -+ } -+ -+ if (results.size() != 0) { -+ for(AuthenticatedSessionStore result : results) { -+ try { -+ cleanDelete(result); -+ Logger.info("Authenticated session with sessionID=" + result.getSessionid() -+ + " after session timeout."); -+ -+ } catch (HibernateException e){ -+ Logger.warn("Authenticated session with sessionID=" + result.getSessionid() -+ + " not removed after timeout! (Error during Database communication)", e); -+ } -+ } -+ } -+ } catch (Exception e) { -+ if (tx != null && !tx.wasCommitted()) -+ tx.rollback(); -+ throw e; - } - } - -@@ -1004,26 +1095,32 @@ public class AuthenticationSessionStoreage { - Session session = MOASessionDBUtils.getCurrentSession(); - - List result; -- -- synchronized (session) { -- session.beginTransaction(); -- Query query = session.getNamedQuery("getSessionWithID"); -- query.setParameter("sessionid", sessionID); -- result = query.list(); -+ Transaction tx = null; -+ try { -+ synchronized (session) { -+ tx = session.beginTransaction(); -+ Query query = session.getNamedQuery("getSessionWithID"); -+ query.setParameter("sessionid", sessionID); -+ result = query.list(); -+ -+ //send transaction -+ if (commit) -+ tx.commit(); -+ } - -- //send transaction -- if (commit) -- session.getTransaction().commit(); -- } -- -- Logger.trace("Found entries: " + result.size()); -- -- //Assertion requires an unique artifact -- if (result.size() != 1) { -- Logger.trace("No entries found."); -- throw new MOADatabaseException("No session found with this sessionID"); -- } -- -- return (AuthenticatedSessionStore) result.get(0); -+ Logger.trace("Found entries: " + result.size()); -+ -+ //Assertion requires an unique artifact -+ if (result.size() != 1) { -+ Logger.trace("No entries found."); -+ throw new MOADatabaseException("No session found with this sessionID"); -+ } -+ -+ return (AuthenticatedSessionStore) result.get(0); -+ } catch (Exception e) { -+ if (tx != null && !tx.wasCommitted() && commit) -+ tx.rollback(); -+ throw e; -+ } - } - } -diff --git a/id/server/idserverlib/src/main/resources/moaid.configuration.beans.xml b/id/server/idserverlib/src/main/resources/moaid.configuration.beans.xml -index 206fde8..7e319e2 100644 ---- a/id/server/idserverlib/src/main/resources/moaid.configuration.beans.xml -+++ b/id/server/idserverlib/src/main/resources/moaid.configuration.beans.xml -@@ -29,7 +29,7 @@ - <property name="testOnBorrow" value="${configuration.dbcp.testOnBorrow}" /> - <property name="testOnReturn" value="${configuration.dbcp.testOnReturn}" /> - <property name="testWhileIdle" value="${configuration.dbcp.testWhileIdle}" /> -- <property name="validationQuery" value="SELECT 1" /> -+ <property name="validationQuery" value="${configuration.dbcp.validationQuery}" /> - </bean> - - <bean id="jpaVendorAdapter" class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"> -diff --git a/id/server/moa-id-commons/src/main/java/at/gv/egovernment/moa/id/commons/config/persistence/MOAIDConfiguration.java b/id/server/moa-id-commons/src/main/java/at/gv/egovernment/moa/id/commons/config/persistence/MOAIDConfiguration.java -index 223f29a..4bd459f 100644 ---- a/id/server/moa-id-commons/src/main/java/at/gv/egovernment/moa/id/commons/config/persistence/MOAIDConfiguration.java -+++ b/id/server/moa-id-commons/src/main/java/at/gv/egovernment/moa/id/commons/config/persistence/MOAIDConfiguration.java -@@ -61,4 +61,16 @@ public interface MOAIDConfiguration extends Configuration { - * @throws ConfigurationException in case of an configuration access error - */ - public Map<String, String> getOnlineApplication(String publicURLPrefix) throws ConfigurationException; -+ -+ -+ /** -+ * Load an OnlineApplication configuration and remove the OA key prefix -+ * This is a backup version if direct UniqueID selection does not work -+ * -+ * @param publicURLPrefix: Unique identifier of online application -+ * @return Properties of the online application or null if no OA is found -+ * @throws ConfigurationException in case of an configuration access error -+ */ -+ public Map<String, String> getOnlineApplicationBackupVersion(String publicURLPrefix) throws ConfigurationException; -+ - } -\ No newline at end of file -diff --git a/id/server/moa-id-commons/src/main/java/at/gv/egovernment/moa/id/commons/config/persistence/MOAIDConfigurationImpl.java b/id/server/moa-id-commons/src/main/java/at/gv/egovernment/moa/id/commons/config/persistence/MOAIDConfigurationImpl.java -index 297c63d..b9b5ad6 100644 ---- a/id/server/moa-id-commons/src/main/java/at/gv/egovernment/moa/id/commons/config/persistence/MOAIDConfigurationImpl.java -+++ b/id/server/moa-id-commons/src/main/java/at/gv/egovernment/moa/id/commons/config/persistence/MOAIDConfigurationImpl.java -@@ -1,5 +1,7 @@ - package at.gv.egovernment.moa.id.commons.config.persistence; - -+import java.sql.SQLSyntaxErrorException; -+import java.util.ArrayList; - import java.util.HashMap; - import java.util.Iterator; - import java.util.List; -@@ -131,13 +133,88 @@ public class MOAIDConfigurationImpl extends DatabaseConfigPropertyImpl implement - String keyId = MOAIDConfigurationConstants.PREFIX_MOAID_SERVICES - + ".%." - + MOAIDConfigurationConstants.SERVICE_UNIQUEIDENTIFIER; -- -+ -+ List<ConfigProperty> oaSearchResult = null; - TypedQuery<ConfigProperty> oaSearchQuery = em.createQuery("select dbconfig from ConfigProperty dbconfig where dbconfig.key like :key and dbconfig.value = SUBSTRING(:uniqueID, 1, LENGTH(dbconfig.value))", ConfigProperty.class); - oaSearchQuery.setParameter("key", keyId); - oaSearchQuery.setParameter("uniqueID", publicURLPrefix); -- List<ConfigProperty> oaSearchResult = oaSearchQuery.getResultList(); -+ oaSearchResult = oaSearchQuery.getResultList(); -+ -+ return postProcessLoadOnlineApplication(em, oaSearchResult); -+ -+ } -+ -+ /* (non-Javadoc) -+ * @see at.gv.egovernment.moa.id.commons.config.persistence.MOAIDConfiguration#getOnlineApplicationBackupVersion(java.lang.String) -+ */ -+ @Override -+ public Map<String, String> getOnlineApplicationBackupVersion( -+ String publicURLPrefix) throws ConfigurationException { -+ Logger.debug("Use backup implementation to query configuration database"); -+ -+ EntityManager em = this.getPersistenceContext(); -+ if (null == em) { -+ Logger.error("No EntityManager set!"); -+ throw new ConfigurationException("No EntityManager set!"); -+ -+ } -+ -+ //search key prefix for online application with this publicURLPrefix -+ String keyId = MOAIDConfigurationConstants.PREFIX_MOAID_SERVICES -+ + ".%." -+ + MOAIDConfigurationConstants.SERVICE_UNIQUEIDENTIFIER; - -- if (oaSearchResult.size() == 0) { -+ List<ConfigProperty> oaSearchResult = new ArrayList<ConfigProperty>(); -+ -+ TypedQuery<ConfigProperty> oaSearchQuery = em.createQuery("select dbconfig from ConfigProperty dbconfig where dbconfig.key like :key", ConfigProperty.class); -+ oaSearchQuery.setParameter("key", keyId); -+ List<ConfigProperty> intermResult = oaSearchQuery.getResultList(); -+ if (intermResult != null) { -+ for (ConfigProperty el : intermResult) { -+ if (publicURLPrefix.startsWith(el.getValue())) -+ oaSearchResult.add(el); -+ -+ } -+ } -+ -+ return postProcessLoadOnlineApplication(em, oaSearchResult); -+ -+ } -+ -+ /** -+ * Small helper method. NOTE: may return empty configuration properties, but never {@code null}. -+ * -+ * @param propPrefix: the prefix of the desired property. -+ * @param input: List of database objects with key/value information. -+ * @param removePrefix: Indicates if the prefix should be removed from the result key -+ * @return the {@link Map} of configuration properties -+ */ -+ private Map<String, String> getKeyValueFromDatabaseDAO(Iterator<ConfigProperty> input, final String prefix, boolean removePrefix) { -+ Map<String, String> configProp = new HashMap<String, String>(); -+ while (input.hasNext()) { -+ ConfigProperty el = input.next(); -+ if (removePrefix) { -+ if (el.getKey().startsWith(prefix)) { -+ String propertyName = KeyValueUtils.removePrefixFromKey(el.getKey(), prefix); -+ configProp.put(propertyName, el.getValue()); -+ -+ } -+ } else -+ configProp.put(el.getKey(), el.getValue()); -+ -+ } -+ return configProp; -+ } -+ -+ /** -+ * Online-Application load operation post-processing -+ * -+ * @param em EntityManager for Database access -+ * @param oaSearchResult Search result of first OA selection operation -+ * @return Map of post-processed OA configuration key/value pairs -+ */ -+ private Map<String, String> postProcessLoadOnlineApplication(EntityManager em, List<ConfigProperty> oaSearchResult) { -+ if (oaSearchResult == null || oaSearchResult.size() == 0) { - Logger.debug("No entries found."); - return null; } - -@@ -170,31 +247,6 @@ public class MOAIDConfigurationImpl extends DatabaseConfigPropertyImpl implement - result.put(MOAIDConfigurationConstants.PREFIX_MOAID_SERVICES, oaType); - - return result; -+ - } -- -- /** -- * Small helper method. NOTE: may return empty configuration properties, but never {@code null}. -- * -- * @param propPrefix: the prefix of the desired property. -- * @param input: List of database objects with key/value information. -- * @param removePrefix: Indicates if the prefix should be removed from the result key -- * @return the {@link Map} of configuration properties -- */ -- private Map<String, String> getKeyValueFromDatabaseDAO(Iterator<ConfigProperty> input, final String prefix, boolean removePrefix) { -- Map<String, String> configProp = new HashMap<String, String>(); -- while (input.hasNext()) { -- ConfigProperty el = input.next(); -- if (removePrefix) { -- if (el.getKey().startsWith(prefix)) { -- String propertyName = KeyValueUtils.removePrefixFromKey(el.getKey(), prefix); -- configProp.put(propertyName, el.getValue()); -- -- } -- } else -- configProp.put(el.getKey(), el.getValue()); -- -- } -- return configProp; -- } -- - } -diff --git a/id/server/moa-id-commons/src/main/java/at/gv/egovernment/moa/id/commons/db/MOASessionDBUtils.java b/id/server/moa-id-commons/src/main/java/at/gv/egovernment/moa/id/commons/db/MOASessionDBUtils.java -index 7621552..49e0634 100644 ---- a/id/server/moa-id-commons/src/main/java/at/gv/egovernment/moa/id/commons/db/MOASessionDBUtils.java -+++ b/id/server/moa-id-commons/src/main/java/at/gv/egovernment/moa/id/commons/db/MOASessionDBUtils.java -@@ -163,8 +163,9 @@ public final class MOASessionDBUtils { - - } catch(HibernateException e) { - Logger.warn("Error during MOASession database saveOrUpdate. Rollback.", e); -- tx.rollback(); -- throw new MOADatabaseException(e); -+ if (tx != null) -+ tx.rollback(); -+ throw new MOADatabaseException(e); - } - } - -@@ -183,8 +184,9 @@ public final class MOASessionDBUtils { - - } catch(HibernateException e) { - Logger.warn("Error during MOASession database delete. Rollback.", e); -- tx.rollback(); -- return false; -+ if (tx != null) -+ tx.rollback(); -+ return false; - } - } - -diff --git a/id/server/moa-id-commons/src/main/java/at/gv/egovernment/moa/id/commons/db/NewConfigurationDBRead.java b/id/server/moa-id-commons/src/main/java/at/gv/egovernment/moa/id/commons/db/NewConfigurationDBRead.java -index 0f157f1..c049eeb 100644 ---- a/id/server/moa-id-commons/src/main/java/at/gv/egovernment/moa/id/commons/db/NewConfigurationDBRead.java -+++ b/id/server/moa-id-commons/src/main/java/at/gv/egovernment/moa/id/commons/db/NewConfigurationDBRead.java -@@ -41,9 +41,12 @@ public class NewConfigurationDBRead { - - } - -- public Map<String, String> getOnlineApplicationKeyValueWithId(String id) { -+ public Map<String, String> getOnlineApplicationKeyValueWithId(String id, boolean backupVersion) { - try { -- return conf.getOnlineApplication(id); -+ if (backupVersion) -+ return conf.getOnlineApplicationBackupVersion(id); -+ else -+ return conf.getOnlineApplication(id); - - } catch (ConfigurationException e) { - Logger.warn("OnlineApplication with Id: " + id + " not found.", e); -diff --git a/id/server/moa-id-commons/src/main/java/at/gv/egovernment/moa/id/commons/db/dao/config/DatabaseConfigPropertyImpl.java b/id/server/moa-id-commons/src/main/java/at/gv/egovernment/moa/id/commons/db/dao/config/DatabaseConfigPropertyImpl.java -index f59e39a..aad830d 100644 ---- a/id/server/moa-id-commons/src/main/java/at/gv/egovernment/moa/id/commons/db/dao/config/DatabaseConfigPropertyImpl.java -+++ b/id/server/moa-id-commons/src/main/java/at/gv/egovernment/moa/id/commons/db/dao/config/DatabaseConfigPropertyImpl.java -@@ -1,6 +1,10 @@ - package at.gv.egovernment.moa.id.commons.db.dao.config; - -+import java.util.ArrayList; -+import java.util.Iterator; - import java.util.List; -+import java.util.Map.Entry; -+import java.util.regex.Pattern; - - import javax.persistence.EntityManager; - import javax.persistence.PersistenceContext; -@@ -137,10 +141,33 @@ public class DatabaseConfigPropertyImpl extends AbstractConfigurationImpl { - throw new ConfigurationException("No EntityManager set!"); - } - -- TypedQuery<String> query = em.createQuery("select key from ConfigProperty dbconfig where dbconfig.value like :value", String.class); -- query.setParameter("value", searchString.replace("*", "%")); -- List<String> result = query.getResultList(); -- return result.toArray(new String[result.size()]); -+ TypedQuery<ConfigProperty> query = em.createQuery("select * from ConfigProperty dbconfig", ConfigProperty.class); -+ List<ConfigProperty> all = query.getResultList(); -+ -+ searchString = searchString.replace(".", "\\."); -+ String regex = searchString.replace("*", ".*"); -+ regex = regex.replace("%", "\\w*"); -+ log.debug("Searching with regex: {}", regex); -+ Pattern pattern = Pattern.compile(regex); -+ -+ List<String> keyList = new ArrayList<String>(); -+ Iterator<ConfigProperty> keyIt; -+ if (all != null) { -+ keyIt = all.iterator(); -+ while(keyIt.hasNext()) { -+ ConfigProperty entry = keyIt.next(); -+ String value = entry.getValue(); -+ String key = entry.getKey(); -+ -+ if(pattern.matcher(value).matches()) { -+ keyList.add(key); -+ } -+ } -+ } -+ -+ String[] result = new String[keyList.size()]; -+ return keyList.toArray(result); -+ - } - - /* (non-Javadoc) -diff --git a/id/server/moa-id-commons/src/main/resources/moaid.migration.beans.xml b/id/server/moa-id-commons/src/main/resources/moaid.migration.beans.xml -index 3bd1222..c758e23 100644 ---- a/id/server/moa-id-commons/src/main/resources/moaid.migration.beans.xml -+++ b/id/server/moa-id-commons/src/main/resources/moaid.migration.beans.xml -@@ -31,7 +31,7 @@ - <property name="testOnBorrow" value="${dbcp.testOnBorrow}" /> - <property name="testOnReturn" value="${dbcp.testOnReturn}" /> - <property name="testWhileIdle" value="${dbcp.testWhileIdle}" /> -- <property name="validationQuery" value="SELECT 1" /> -+ <property name="validationQuery" value="${dbcp.validationQuery}" /> - </bean> - - --- -1.9.5.msysgit.0 - |