我需要使用Java代码中的PDI SDK动态生成转换。转换输入是SQL select,输出是文本文件。
下面的代码正确连接到输入步骤的数据库(TableInputMeta):
String dbXML = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
"<connection>" +
"<name>source</name>" +
"<server>localhost</server>" +
"<type>MYSQL</type>" +
"<access>Native</access>" +
"<database>db</database>" +
"<port>3306</port>" +
"<username>user</username>" +
"<password>pwdk</password>" +
"</connection>";
DatabaseMeta dbm = new DatabaseMeta(dbXML);
TableInputMeta in = new TableInputMeta();
in.setDatabaseMeta(dbm);
但我不想存储用户和密码。此外,我在已经拥有数据库连接池的应用程序服务器中运行此代码。这就是我想要实现的目标:
// get connection from JNDI
Context initCtx = new InitialContext();
DataSource ds = (DataSource) initCtx.lookup(jndiName);
java.sql.Connection conn = ds.getConnection();
// reuse connection
DatabaseMeta dbm = new DatabaseMeta();
dbm.setConnection(conn); // this has not been implemented
其中setConnection(conn)
将现有连接与DatabaseMeta对象链接。有什么想法吗?
更新
我在Spoon中创建了一个JNDI连接,这是XML,但我无法弄清楚如何调整它以使其工作:
<?xml version="1.0" encoding="UTF-8"?>
<connection>
<name>JNDI_CONNECT</name>
<server/>
<type>MYSQL</type>
<access>JNDI</access>
<database>JNDI_NAME</database>
<port>1521</port>
<username/>
<password>Encrypted </password>
<servername/>
<data_tablespace>TAB_DATA</data_tablespace>
<index_tablespace>TAB_IND</index_tablespace>
<attributes>
<attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
<attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
<attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
<attribute><code>PORT_NUMBER</code><attribute>1521</attribute></attribute>
<attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
<attribute><code>STREAM_RESULTS</code><attribute>Y</attribute></attribute>
<attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>N</attribute></attribute>
<attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
</attributes>
</connection>
这是我用Java连接到JNDI的方式:
Context initCtx = new InitialContext();
Context envCtx = (Context) initCtx.lookup("java:comp/env");
DataSource ds = (DataSource) envCtx.lookup("jdbc/mydb");
Connection cn = ds.getConnection();
非常感谢任何见解/工作示例。
答案 0 :(得分:0)
上面的示例XML将访问类型设置为“Native”,它将使用指定的参数。如果您想使用JNDI,则应将访问类型设置为JNDI。要获得XML的工作片段,请尝试在Spoon中创建相同的连接以进行一些示例转换,将转换保存到磁盘,然后检查.ktr文件以查找具有该名称的连接。您应该找到一个可用的XML片段,它将使DatabaseMeta使用JNDI而不是提供的参数。