[Jboss-cvs] JBossAS SVN: r56104 - branches/JBoss_4_0_3_SP1_JBAS_3453/connector/src/main/org/jboss/resource/adapter/jdbc
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Mon Aug 21 11:18:32 EDT 2006
Author: weston.price at jboss.com
Date: 2006-08-21 11:18:30 -0400 (Mon, 21 Aug 2006)
New Revision: 56104
Added:
branches/JBoss_4_0_3_SP1_JBAS_3453/connector/src/main/org/jboss/resource/adapter/jdbc/JdbcExternalCodeHandler.java
branches/JBoss_4_0_3_SP1_JBAS_3453/connector/src/main/org/jboss/resource/adapter/jdbc/JdbcSupportCodeDocumentLoader.java
branches/JBoss_4_0_3_SP1_JBAS_3453/connector/src/main/org/jboss/resource/adapter/jdbc/JdbcSupportCodeDocumentLoaderException.java
branches/JBoss_4_0_3_SP1_JBAS_3453/connector/src/main/org/jboss/resource/adapter/jdbc/JdbcSupportCodeHandler.java
branches/JBoss_4_0_3_SP1_JBAS_3453/connector/src/main/org/jboss/resource/adapter/jdbc/JdbcSupportLoader.java
Log:
[JBAS-3453] Adding Jdbc support handling.
Added: branches/JBoss_4_0_3_SP1_JBAS_3453/connector/src/main/org/jboss/resource/adapter/jdbc/JdbcExternalCodeHandler.java
===================================================================
--- branches/JBoss_4_0_3_SP1_JBAS_3453/connector/src/main/org/jboss/resource/adapter/jdbc/JdbcExternalCodeHandler.java 2006-08-21 15:12:02 UTC (rev 56103)
+++ branches/JBoss_4_0_3_SP1_JBAS_3453/connector/src/main/org/jboss/resource/adapter/jdbc/JdbcExternalCodeHandler.java 2006-08-21 15:18:30 UTC (rev 56104)
@@ -0,0 +1,105 @@
+package org.jboss.resource.adapter.jdbc;
+
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.jboss.logging.Logger;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
+public class JdbcExternalCodeHandler implements ExceptionSorter, StaleConnectionChecker
+{
+ private static final Logger logger = Logger.getLogger(JdbcExternalCodeHandler.class);
+
+ private final boolean debug = logger.isDebugEnabled();
+ private final boolean trace = logger.isTraceEnabled();
+ private static final String STALE_CODE_ELEMENT = "stale-code";
+ private static final String FATAL_CODE_ELEMENT = "fatal-code";
+
+ private List staleCodes = new ArrayList();
+ private List fatalCodes = new ArrayList();
+
+ public JdbcExternalCodeHandler(final Document doc)
+ {
+ NodeList stale = doc.getElementsByTagName(STALE_CODE_ELEMENT);
+
+
+ for(int i = 0; i < stale.getLength(); i++)
+ {
+ Node staleNode = (Element)stale.item(i);
+ String content = staleNode.getTextContent();
+ Integer code;
+
+ try
+ {
+
+ code = Integer.valueOf(content);
+ staleCodes.add(code);
+
+ } catch (NumberFormatException e)
+ {
+ if(trace)
+ {
+ logger.trace("Stale error code with value " + content + " could not be parsed", e);
+
+ }
+ }
+
+
+ }
+
+ NodeList fatal = doc.getElementsByTagName(FATAL_CODE_ELEMENT);
+
+ for(int i = 0; i < fatal.getLength(); i++)
+ {
+ Node fatalNode = (Element)stale.item(i);
+ String content = fatalNode.getTextContent();
+ try
+ {
+
+ Integer code = Integer.valueOf(content);
+ fatalCodes.add(code);
+
+ } catch (NumberFormatException e)
+ {
+
+ logger.trace("Fatal error code with value " + content + " could not be parsed", e);
+
+ }
+
+
+ }
+ }
+
+ public JdbcExternalCodeHandler(List staleList, List fatalList)
+ {
+ this.staleCodes = staleList;
+ this.fatalCodes = fatalList;
+ }
+
+ public void setStaleCodes(List staleCodes)
+ {
+ this.staleCodes = staleCodes;
+ }
+
+ public void setFatalCodes(List fatalCodes)
+ {
+ this.fatalCodes = fatalCodes;
+ }
+ public boolean isExceptionFatal(SQLException e)
+ {
+ int fatalCode = e.getErrorCode();
+ return fatalCodes.contains(Integer.valueOf(fatalCode));
+ }
+
+ public boolean isStaleConnection(SQLException e)
+ {
+ int staleCode = e.getErrorCode();
+ return staleCodes.contains(Integer.valueOf(staleCode));
+
+ }
+
+}
Added: branches/JBoss_4_0_3_SP1_JBAS_3453/connector/src/main/org/jboss/resource/adapter/jdbc/JdbcSupportCodeDocumentLoader.java
===================================================================
--- branches/JBoss_4_0_3_SP1_JBAS_3453/connector/src/main/org/jboss/resource/adapter/jdbc/JdbcSupportCodeDocumentLoader.java 2006-08-21 15:12:02 UTC (rev 56103)
+++ branches/JBoss_4_0_3_SP1_JBAS_3453/connector/src/main/org/jboss/resource/adapter/jdbc/JdbcSupportCodeDocumentLoader.java 2006-08-21 15:18:30 UTC (rev 56104)
@@ -0,0 +1,120 @@
+package org.jboss.resource.adapter.jdbc;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+import java.io.IOException;
+import java.io.InputStream;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+
+import org.jboss.logging.Logger;
+import org.w3c.dom.Document;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+
+public class JdbcSupportCodeDocumentLoader
+{
+ private static final Logger logger = Logger.getLogger(JdbcSupportCodeDocumentLoader.class);
+
+ public static Document loadDocument(final String fileName) throws JdbcSupportCodeDocumentLoaderException
+ {
+ File f = new File(fileName);
+
+ if(!f.exists())
+ {
+ return loadDocumentFromClassPathResource(fileName);
+ }
+ else
+ {
+ return loadDocument(f);
+
+ }
+
+
+ }
+
+ public static Document loadDocument(final File file) throws JdbcSupportCodeDocumentLoaderException
+ {
+ try
+ {
+ InputSource source = new InputSource(new FileReader(file));
+ return loadDocument(source);
+
+ } catch (FileNotFoundException e) {
+
+ logger.error("Error loading JdbcSupportCode file from external source " + file.getAbsolutePath(), e);
+ throw new JdbcSupportCodeDocumentLoaderException(e.getMessage(), e);
+
+ }
+
+ }
+
+ public static Document loadDocumentFromClassPathResource(final String fileName) throws JdbcSupportCodeDocumentLoaderException
+ {
+ InputStream is = null;
+ InputSource source = null;
+
+ is = Thread.currentThread().getContextClassLoader().getResourceAsStream(fileName);
+
+ try
+ {
+ if(is != null)
+ {
+ source = new InputSource(is);
+
+ }else
+ {
+ throw new JdbcSupportCodeDocumentLoaderException("Error loading JdbcSupportCode file from externalSource.");
+
+ }
+
+ return loadDocument(source);
+
+ }
+ finally
+ {
+ if(is != null)
+ {
+ try
+ {
+ is.close();
+
+ } catch (IOException ignore)
+ {
+ }
+ }
+ }
+
+ }
+
+ private static Document loadDocument(final InputSource source) throws JdbcSupportCodeDocumentLoaderException
+ {
+
+ try {
+
+ DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
+ Document doc = builder.parse(source);
+ return doc;
+
+ } catch (ParserConfigurationException e) {
+
+ logger.error("Error parsing JdbcSupportCode resource ", e);
+ throw new JdbcSupportCodeDocumentLoaderException(e.getMessage(), e);
+
+
+ } catch (SAXException e) {
+
+ logger.error("Error parsing JdbcSupportCode resource ", e);
+ throw new JdbcSupportCodeDocumentLoaderException(e.getMessage(), e);
+
+ } catch (IOException e) {
+
+ logger.error("Error parsing JdbcSupportCode resource ", e);
+ throw new JdbcSupportCodeDocumentLoaderException(e.getMessage(), e);
+ }
+
+ }
+}
Added: branches/JBoss_4_0_3_SP1_JBAS_3453/connector/src/main/org/jboss/resource/adapter/jdbc/JdbcSupportCodeDocumentLoaderException.java
===================================================================
--- branches/JBoss_4_0_3_SP1_JBAS_3453/connector/src/main/org/jboss/resource/adapter/jdbc/JdbcSupportCodeDocumentLoaderException.java 2006-08-21 15:12:02 UTC (rev 56103)
+++ branches/JBoss_4_0_3_SP1_JBAS_3453/connector/src/main/org/jboss/resource/adapter/jdbc/JdbcSupportCodeDocumentLoaderException.java 2006-08-21 15:18:30 UTC (rev 56104)
@@ -0,0 +1,26 @@
+package org.jboss.resource.adapter.jdbc;
+
+public class JdbcSupportCodeDocumentLoaderException extends Exception {
+
+ private static final long serialVersionUID = -6263968193990175525L;
+
+ public JdbcSupportCodeDocumentLoaderException()
+ {
+ }
+
+ public JdbcSupportCodeDocumentLoaderException(String arg0)
+ {
+ super(arg0);
+ }
+
+ public JdbcSupportCodeDocumentLoaderException(Throwable arg0)
+ {
+ super(arg0);
+ }
+
+ public JdbcSupportCodeDocumentLoaderException(String arg0, Throwable arg1)
+ {
+ super(arg0, arg1);
+ }
+
+}
Added: branches/JBoss_4_0_3_SP1_JBAS_3453/connector/src/main/org/jboss/resource/adapter/jdbc/JdbcSupportCodeHandler.java
===================================================================
--- branches/JBoss_4_0_3_SP1_JBAS_3453/connector/src/main/org/jboss/resource/adapter/jdbc/JdbcSupportCodeHandler.java 2006-08-21 15:12:02 UTC (rev 56103)
+++ branches/JBoss_4_0_3_SP1_JBAS_3453/connector/src/main/org/jboss/resource/adapter/jdbc/JdbcSupportCodeHandler.java 2006-08-21 15:18:30 UTC (rev 56104)
@@ -0,0 +1,79 @@
+package org.jboss.resource.adapter.jdbc;
+
+import java.sql.Connection;
+import java.sql.SQLException;
+
+import org.jboss.logging.Logger;
+
+public class JdbcSupportCodeHandler implements StaleConnectionChecker,
+ ExceptionSorter, ValidConnectionChecker {
+
+ private static final Logger logger = Logger.getLogger(JdbcSupportCodeHandler.class);
+
+ private ExceptionSorter exceptionSorter;
+ private ValidConnectionChecker connectionChecker;
+ private JdbcExternalCodeHandler externalCodeHandler;
+
+ private JdbcSupportCodeHandler(JdbcExternalCodeHandler ext, ValidConnectionChecker valid, ExceptionSorter sorter)
+ {
+ this.externalCodeHandler = ext;
+ this.connectionChecker = valid;
+ this.exceptionSorter = sorter;
+
+ }
+
+
+ public static JdbcSupportCodeHandler getInstance(String supportCodeUrl, String exceptionSorterClassName, String validConnectionCheckerClassName, String validConnectionSql)
+ {
+
+ JdbcExternalCodeHandler ext = JdbcSupportLoader.loadExternalCodeHandler(supportCodeUrl);
+ ValidConnectionChecker valid = JdbcSupportLoader.loadValidConnectionChecker(validConnectionCheckerClassName, validConnectionSql);
+ ExceptionSorter sorter = JdbcSupportLoader.loadExceptionSorter(exceptionSorterClassName);
+ return new JdbcSupportCodeHandler(ext, valid, sorter);
+
+ }
+
+ public boolean isStaleConnection(SQLException e) {
+
+ boolean isStale = false;
+
+ if(externalCodeHandler != null)
+ {
+ isStale = externalCodeHandler.isStaleConnection(e);
+
+ }
+
+ return isStale;
+ }
+
+ public boolean isExceptionFatal(SQLException e)
+ {
+ boolean isFatal = false;
+
+ if(externalCodeHandler != null)
+ {
+ isFatal = externalCodeHandler.isExceptionFatal(e);
+
+ }else if(exceptionSorter != null)
+ {
+ isFatal = exceptionSorter.isExceptionFatal(e);
+
+ }
+
+ return isFatal;
+ }
+
+ public SQLException isValidConnection(Connection c)
+ {
+
+ if(connectionChecker != null)
+ {
+ return connectionChecker.isValidConnection(c);
+
+ }
+
+ return null;
+ }
+
+
+}
Added: branches/JBoss_4_0_3_SP1_JBAS_3453/connector/src/main/org/jboss/resource/adapter/jdbc/JdbcSupportLoader.java
===================================================================
--- branches/JBoss_4_0_3_SP1_JBAS_3453/connector/src/main/org/jboss/resource/adapter/jdbc/JdbcSupportLoader.java 2006-08-21 15:12:02 UTC (rev 56103)
+++ branches/JBoss_4_0_3_SP1_JBAS_3453/connector/src/main/org/jboss/resource/adapter/jdbc/JdbcSupportLoader.java 2006-08-21 15:18:30 UTC (rev 56104)
@@ -0,0 +1,81 @@
+package org.jboss.resource.adapter.jdbc;
+
+import org.jboss.logging.Logger;
+import org.w3c.dom.Document;
+
+public class JdbcSupportLoader
+{
+ private static final Logger logger = Logger.getLogger(JdbcSupportLoader.class);
+
+ public static JdbcExternalCodeHandler loadExternalCodeHandler(String fileName)
+ {
+ JdbcExternalCodeHandler extHandler = null;
+
+ try {
+
+ Document doc = JdbcSupportCodeDocumentLoader.loadDocument(fileName);
+ extHandler = new JdbcExternalCodeHandler(doc);
+
+ } catch (JdbcSupportCodeDocumentLoaderException e)
+ {
+
+ }
+
+ return extHandler;
+
+ }
+
+ public static ValidConnectionChecker loadValidConnectionChecker(final String validConnectionCheckerClassName, final String validConnectionSql)
+ {
+ ValidConnectionChecker connectionChecker = null;
+
+ if (validConnectionCheckerClassName != null)
+ {
+ try
+ {
+ ClassLoader cl = Thread.currentThread().getContextClassLoader();
+ Class clazz = cl.loadClass(validConnectionCheckerClassName);
+ connectionChecker = (ValidConnectionChecker) clazz.newInstance();
+
+ }
+ catch (Exception e)
+ {
+ logger.warn("Exception trying to create connection checker (disabling):", e);
+ connectionChecker = new NullValidConnectionChecker();
+ }
+ }
+
+ // SQL statement specified
+ if (validConnectionSql != null)
+ {
+ connectionChecker = new CheckValidConnectionSQL(validConnectionSql);
+ }
+
+ return connectionChecker;
+
+ }
+
+ public static ExceptionSorter loadExceptionSorter(final String exceptionSorterClassName)
+ {
+ ExceptionSorter exceptionSorter = null;
+
+ if (exceptionSorterClassName != null)
+ {
+ try
+ {
+ ClassLoader cl = Thread.currentThread().getContextClassLoader();
+ Class clazz = cl.loadClass(exceptionSorterClassName);
+ exceptionSorter = (ExceptionSorter)clazz.newInstance();
+ }
+ catch (Exception e2)
+ {
+ logger.warn("exception trying to create exception sorter (disabling):", e2);
+ exceptionSorter = new NullExceptionSorter();
+ }
+ }
+
+ return exceptionSorter;
+ }
+
+
+}
More information about the jboss-cvs-commits
mailing list