2014-09-21 58 views
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(); 

任何見解/工作示例將不勝感激。

回答

0

您上面的示例XML的訪問類型設置爲「Native」,它將使用指定的參數。如果您想使用JNDI,則應該將訪問類型設置爲JNDI。要獲得XML的工作片段,請嘗試在Spoon中爲某些示例轉換創建相同的連接,將轉換保存到磁盤,然後檢查.ktr文件以查找具有該名稱的連接。您應該找到一個可用的XML片段,它將使DatabaseMeta使用JNDI而不是提供的參數。

+0

謝謝,馬特。我添加了一個更新,似乎XML具有與JNDI無關的屬性,例如數據庫類型和端口號。 – ps0604 2014-09-23 01:48:18