--- /dev/null
+/* $Id: DriverWrapper.java 413 2011-07-28 23:05:11Z dobashi $\r
+ * created: 2005/05/24\r
+ *\r
+ */\r
+package com.lavans.luz2.sql;\r
+\r
+import java.sql.Connection;\r
+import java.sql.Driver;\r
+import java.sql.DriverManager;\r
+import java.sql.DriverPropertyInfo;\r
+import java.sql.SQLException;\r
+import java.util.Properties;\r
+\r
+import org.apache.commons.logging.Log;\r
+import org.apache.commons.logging.LogFactory;\r
+import org.w3c.dom.Element;\r
+import org.w3c.dom.Node;\r
+import org.w3c.dom.NodeList;\r
+\r
+import com.lavans.luz2.util.Config;\r
+\r
+/**\r
+ * Driverラッパークラス。\r
+ * DBManagerを直接使用できない環境でClusterConnectionを使用するためのラッパー。\r
+ * lavansutil.xmlのdatabase-defaultに定義したDB接続情報でConnectionを返す。\r
+ *\r
+ * DriverWrapperを使用する場合はlavansutil.xmlの設定ではなく\r
+ * 渡されたurlを元に\r
+ * @author dobashi\r
+ *\r
+ */\r
+public class DriverWrapper implements Driver{\r
+ /** Logger */\r
+ private static final Log logger = LogFactory.getLog(DriverWrapper.class);\r
+\r
+ /**\r
+ * 設定ファイル名。\r
+ */\r
+ private static final String CONFIG_FILE ="lavansutil.xml";\r
+\r
+ /**\r
+ * 設定ファイルのセクション名。\r
+ */\r
+ private static final String CONFIG_SECTION="database";\r
+\r
+ /**\r
+ * DriverWrapperを呼び出す側で設定する接続url\r
+ */\r
+ private static final String DRIVER_URL="jdbc:lavans";\r
+\r
+ /** 処理移譲先 */\r
+ private Driver driver = null;\r
+\r
+ static{\r
+ try {\r
+ DriverManager.registerDriver(new DriverWrapper());\r
+ } catch (Exception e) {\r
+ logger.error("driver resgister failed.", e);\r
+\r
+ e.printStackTrace();\r
+ }\r
+ }\r
+\r
+ /**\r
+ * コンストラクタ\r
+ */\r
+ public DriverWrapper() {\r
+ Element conf = (Element)Config.getInstance(CONFIG_FILE).getNode(CONFIG_SECTION);\r
+ NodeList nodeList = conf.getChildNodes();\r
+ String driverName = null;\r
+ for(int i=0; i<nodeList.getLength(); i++){\r
+ if((nodeList.item(i).getNodeType()==Node.TEXT_NODE) ||\r
+ (nodeList.item(i).getNodeType()==Node.COMMENT_NODE) ){\r
+ continue;\r
+ }\r
+ Element dbConf = (Element)nodeList.item(i);\r
+ String name = dbConf.getNodeName();\r
+ if(name.equals("default")){\r
+ driverName = dbConf.getAttribute("driver");\r
+ break;\r
+ }\r
+ }\r
+\r
+\r
+ if(driverName==null){\r
+ logger.error("database-default設定情報が見つからない。");\r
+ return;\r
+ }\r
+\r
+ try{\r
+ driver = (Driver)Class.forName(driverName).newInstance();\r
+ logger.debug("load success.["+ driver.getClass().getName() +"]");\r
+ }catch (Exception e) {\r
+ logger.error("load failed.["+ driver.getClass().getName() +"]", e);\r
+ }\r
+ }\r
+\r
+ /**\r
+ * @param arg0\r
+ * @param arg1\r
+ * @return\r
+ * @throws java.sql.SQLException\r
+ */\r
+ public Connection connect(String arg0, Properties arg1) throws SQLException {\r
+ logger.debug("DriverWrapper#connect()");\r
+ return DBManager.getConnection();\r
+ }\r
+\r
+ /**\r
+ * 接続urlを受け付けるかどうかの判定。\r
+ * @param url\r
+ * @return\r
+ * @throws java.sql.SQLException\r
+ */\r
+ public boolean acceptsURL(String url) throws SQLException {\r
+ logger.debug("DriverWrapper#acceptsURL()");\r
+ return url.startsWith(DRIVER_URL);\r
+ }\r
+\r
+ //以下すべてただの委譲メソッド\r
+ /* (非 Javadoc)\r
+ * @see java.lang.Object#equals(java.lang.Object)\r
+ */\r
+ @Override\r
+ public boolean equals(Object arg0) {\r
+ return driver.equals(arg0);\r
+ }\r
+ /**\r
+ * @return\r
+ */\r
+ public int getMajorVersion() {\r
+ return driver.getMajorVersion();\r
+ }\r
+ /**\r
+ * @return\r
+ */\r
+ public int getMinorVersion() {\r
+ return driver.getMinorVersion();\r
+ }\r
+ /**\r
+ * @param arg0\r
+ * @param arg1\r
+ * @return\r
+ * @throws java.sql.SQLException\r
+ */\r
+ public DriverPropertyInfo[] getPropertyInfo(String arg0, Properties arg1)\r
+ throws SQLException {\r
+ return driver.getPropertyInfo(arg0, arg1);\r
+ }\r
+ /* (非 Javadoc)\r
+ * @see java.lang.Object#hashCode()\r
+ */\r
+ @Override\r
+ public int hashCode() {\r
+ return driver.hashCode();\r
+ }\r
+ /**\r
+ * @return\r
+ */\r
+ public boolean jdbcCompliant() {\r
+ return driver.jdbcCompliant();\r
+ }\r
+ /* (非 Javadoc)\r
+ * @see java.lang.Object#toString()\r
+ */\r
+// public String toString() {\r
+// return driver.toString();\r
+// }\r
+}\r