Rhinoで動的に.jarファイルのクラスを読み込んで利用する方法
タイトルのような事をしたい場合、URLClassLoaderを使えばいいらしいので、簡単なラッパーを作ってみた。
function JarClassLoader(pathList) { var urls = []; for(var i = 0, len = pathList.length; i < len; i++) { urls.push( (new java.io.File(pathList[i])).toURL() ); } this._classLoader = new java.net.URLClassLoader(urls); } JarClassLoader.prototype.loadClass = function(name) { return this._classLoader.loadClass(name); }
このJarClassLoaderでSQLiteのJDBCドライバを使ってみる。
function getSqliteConnection(url) { var jar = ["C:\\lib\\sqlitejdbc-v048-nested.jar"]; var loader = new JarClassLoader(jar); var jdbcClass = loader.loadClass("org.sqlite.JDBC"); var jdbcDriver = jdbcClass.newInstance(); var props = new java.util.Properties(); return jdbcDriver.connect(url, props); } var conn = getSqliteConnection("jdbc:sqlite:C:/test1.db"); // 以下、普通にJDBC使うのとほぼ同じなので省略