[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