src/main/java/org/embulk/output/oracle/oci/OCI.java in embulk-output-oracle-0.2.3 vs src/main/java/org/embulk/output/oracle/oci/OCI.java in embulk-output-oracle-0.2.4

- old
+ new

@@ -1,139 +1,139 @@ -package org.embulk.output.oracle.oci; - -import java.io.File; -import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URISyntaxException; -import java.net.URL; - -import org.embulk.spi.Exec; -import org.slf4j.Logger; - -import com.google.common.io.Files; - - -public class OCI -{ - private static final Logger logger = Exec.getLogger(OCI.class); - - private static final String PLUGIN_NAME = "embulk-output-oracle"; - - static { - try { - loadLibrary(); - } catch (URISyntaxException | IOException e) { - throw new RuntimeException(e); - } - } - - public native byte[] createContext(); - - public native byte[] getLasetMessage(byte[] context); - - public native boolean open(byte[] context, String dbName, String userName, String password); - - public native boolean prepareLoad(byte[] context, TableDefinition tableDefinition); - - public native boolean loadBuffer(byte[] context, byte[] buffer, int rowCount); - - public native boolean commit(byte[] context); - - public native boolean rollback(byte[] context); - - public native void close(byte[] context); - - private static void loadLibrary() throws URISyntaxException, IOException - { - loadLibrary(getPluginRoot()); - } - - private static File getPluginRoot() throws MalformedURLException, URISyntaxException - { - URL url = OCI.class.getResource("/" + OCI.class.getName().replace('.', '/') + ".class"); - if (url.toString().startsWith("jar:")) { - url = new URL(url.toString().replaceAll("^jar:", "").replaceAll("![^!]*$", "")); - } - - File folder = new File(url.toURI()).getParentFile(); - for (;; folder = folder.getParentFile()) { - if (folder == null) { - String message = String.format("OCI : %s folder not found.", PLUGIN_NAME); - throw new RuntimeException(message); - } - - if (folder.getName().startsWith(PLUGIN_NAME)) { - return folder; - } - } - } - - private static void loadLibrary(File folder) throws IOException - { - File lib = new File(new File(folder, "lib"), "embulk"); - - String osName = System.getProperty("os.name"); - String osArch = System.getProperty("os.arch"); - - String libraryName = System.mapLibraryName(PLUGIN_NAME); - File libFolder = null; - - if (osName.startsWith("Windows")) { - if (osArch.endsWith("64")) { - libFolder = new File(lib, "win_x64"); - } else if (osArch.equals("x86")) { - libFolder = new File(lib, "win_x86"); - } - } else if (osName.equals("Linux")) { - if (osArch.endsWith("64")) { - libFolder = new File(lib, "linux_x64"); - } else if (osArch.equals("x86")) { - libFolder = new File(lib, "linux_x86"); - } - } - - if (libFolder == null) { - logger.error(String.format("OCI : library \"%s\" for %s %s doesn't exist in lib folder.", libraryName, osName, osArch)); - return; - } - - File libFile = new File(libFolder, libraryName); - if (!libFile.exists()) { - logger.error(String.format("OCI : library \"%s\" doesn't exist.", libFile.getAbsolutePath())); - return; - } - - logger.info(String.format("OCI : load library \"%s\".", libFile.getAbsolutePath())); - - File tempFolder = new File(lib, "temp"); - tempFolder.mkdirs(); - - long currentTime = System.currentTimeMillis(); - File[] files = tempFolder.listFiles(); - if (files != null) { - for (File file : files) { - // delete old temporary files. - // if another plugin is using a file, it cannot be deleted. - // don't delete a recent file because another plugin may intend to use it. - if (file.isFile() && file.getName().startsWith(PLUGIN_NAME) && file.lastModified() < currentTime - 60000) { - file.delete(); - } - } - } - - String extension = libraryName.replaceAll("^[^\\.]*", ""); - for (int i = 0; i < 10; i++) { - File tempLibFile = new File(tempFolder, PLUGIN_NAME + "-" + currentTime + "-" + i + extension); - if (tempLibFile.createNewFile()) { - // copy and load the library because different plugins cannot load the same library. - logger.info(String.format("OCI : create temporary library \"%s\".", tempLibFile.getAbsolutePath())); - Files.copy(libFile, tempLibFile); - System.load(tempLibFile.getAbsolutePath()); - tempLibFile.deleteOnExit(); - // but may not be deleted because loaded as a library. - return; - } - } - - logger.error("OCI : cannot create temporary library."); - } -} +package org.embulk.output.oracle.oci; + +import java.io.File; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URISyntaxException; +import java.net.URL; + +import org.embulk.spi.Exec; +import org.slf4j.Logger; + +import com.google.common.io.Files; + + +public class OCI +{ + private static final Logger logger = Exec.getLogger(OCI.class); + + private static final String PLUGIN_NAME = "embulk-output-oracle"; + + static { + try { + loadLibrary(); + } catch (URISyntaxException | IOException e) { + throw new RuntimeException(e); + } + } + + public native byte[] createContext(); + + public native byte[] getLasetMessage(byte[] context); + + public native boolean open(byte[] context, String dbName, String userName, String password); + + public native boolean prepareLoad(byte[] context, TableDefinition tableDefinition); + + public native boolean loadBuffer(byte[] context, byte[] buffer, int rowCount); + + public native boolean commit(byte[] context); + + public native boolean rollback(byte[] context); + + public native void close(byte[] context); + + private static void loadLibrary() throws URISyntaxException, IOException + { + loadLibrary(getPluginRoot()); + } + + private static File getPluginRoot() throws MalformedURLException, URISyntaxException + { + URL url = OCI.class.getResource("/" + OCI.class.getName().replace('.', '/') + ".class"); + if (url.toString().startsWith("jar:")) { + url = new URL(url.toString().replaceAll("^jar:", "").replaceAll("![^!]*$", "")); + } + + File folder = new File(url.toURI()).getParentFile(); + for (;; folder = folder.getParentFile()) { + if (folder == null) { + String message = String.format("OCI : %s folder not found.", PLUGIN_NAME); + throw new RuntimeException(message); + } + + if (folder.getName().startsWith(PLUGIN_NAME)) { + return folder; + } + } + } + + private static void loadLibrary(File folder) throws IOException + { + File lib = new File(new File(folder, "lib"), "embulk"); + + String osName = System.getProperty("os.name"); + String osArch = System.getProperty("os.arch"); + + String libraryName = System.mapLibraryName(PLUGIN_NAME); + File libFolder = null; + + if (osName.startsWith("Windows")) { + if (osArch.endsWith("64")) { + libFolder = new File(lib, "win_x64"); + } else if (osArch.equals("x86")) { + libFolder = new File(lib, "win_x86"); + } + } else if (osName.equals("Linux")) { + if (osArch.endsWith("64")) { + libFolder = new File(lib, "linux_x64"); + } else if (osArch.equals("x86")) { + libFolder = new File(lib, "linux_x86"); + } + } + + if (libFolder == null) { + logger.error(String.format("OCI : library \"%s\" for %s %s doesn't exist in lib folder.", libraryName, osName, osArch)); + return; + } + + File libFile = new File(libFolder, libraryName); + if (!libFile.exists()) { + logger.error(String.format("OCI : library \"%s\" doesn't exist.", libFile.getAbsolutePath())); + return; + } + + logger.info(String.format("OCI : load library \"%s\".", libFile.getAbsolutePath())); + + File tempFolder = new File(lib, "temp"); + tempFolder.mkdirs(); + + long currentTime = System.currentTimeMillis(); + File[] files = tempFolder.listFiles(); + if (files != null) { + for (File file : files) { + // delete old temporary files. + // if another plugin is using a file, it cannot be deleted. + // don't delete a recent file because another plugin may intend to use it. + if (file.isFile() && file.getName().startsWith(PLUGIN_NAME) && file.lastModified() < currentTime - 60000) { + file.delete(); + } + } + } + + String extension = libraryName.replaceAll("^[^\\.]*", ""); + for (int i = 0; i < 10; i++) { + File tempLibFile = new File(tempFolder, PLUGIN_NAME + "-" + currentTime + "-" + i + extension); + if (tempLibFile.createNewFile()) { + // copy and load the library because different plugins cannot load the same library. + logger.info(String.format("OCI : create temporary library \"%s\".", tempLibFile.getAbsolutePath())); + Files.copy(libFile, tempLibFile); + System.load(tempLibFile.getAbsolutePath()); + tempLibFile.deleteOnExit(); + // but may not be deleted because loaded as a library. + return; + } + } + + logger.error("OCI : cannot create temporary library."); + } +}