0
我需要使用Java代碼中的PDI SDK動態生成轉換。轉換輸入是一個SQL選擇並輸出一個文本文件。PDI SDK:在輸入步驟中重用SQL連接
下面的代碼正確地連接到數據庫的輸入步驟(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);
但是我寧願不存儲用戶名和密碼。而且,我在已經有一個DB連接池的應用服務器上運行這段代碼。這就是我想要實現:
// 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對象的現有連接。有任何想法嗎?
UPDATE:
我創建了勺子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();
任何見解/工作示例將不勝感激。
謝謝,馬特。我添加了一個更新,似乎XML具有與JNDI無關的屬性,例如數據庫類型和端口號。 – ps0604 2014-09-23 01:48:18