楔子
java 调用kettle,kettle数据源使用jndi方式,并且共享的方式
JNDI数据源配置
KettleEnvironment.init(true)
会进行配置JNDI文件位置
public static void initJNDI() throws KettleException {
String path = Const.JNDI_DIRECTORY;
if ( path == null || path.equals( "" ) ) {
try {
File file = new File( "simple-jndi" );
path = file.getCanonicalPath();
} catch ( Exception e ) {
throw new KettleException( "Error initializing JNDI", e );
}
Const.JNDI_DIRECTORY = path;
}
System.setProperty( "java.naming.factory.initial", "org.osjava.sj.SimpleContextFactory" );
System.setProperty( "org.osjava.sj.root", path );
System.setProperty( "org.osjava.sj.delimiter", "/" );
}
上述是配置JNDI位置的相关内容。
但是System.setProperty( "org.osjava.sj.root", path );
中path 明明是字符串,但是下面的代码给定字符串却报错。如下代码
public static void main(String[] args) throws URISyntaxException, IOException {
// TODO 配置JNDI文件位置
URL jndiFile = KettleFile.class.getClassLoader().getResource("conf/simple-jndi");
String path = Paths.get(jndiFile.toURI()).toFile().getCanonic