BIRT運行採用自己的connection

 注:本文實現的思路不是原創,思路原文來自:

http://birtworld.blogspot.com/2005/12/using-supplied-connection-with-birt.html

 

   本文將介紹BIRT2.2 詳細的擴展與配置:

 

   在ECLIPSE中新建一個工程 new-> Bussiness Intelligence Report Tools -> Web Project 名字:MyBirt

並設置好服務器信息(本文選用Tomcat5.5、JDK1.5)。

   建好工程以後,需要添家JDBC驅動程序到報表引擎中,本例連接ORACLE,因此將ORACLE的JDBC驅動包複製到 工程站點下的 /WEB-INF/platform/plugins/org.eclipse.birt.report.data.oda.jdbc_xxxxxxx/drivers目錄下。

   接下來就是繼承OdaJdbcDriver類了,再此之前需要在ClassPath中Add oda-jdbc.jar 和 org.eclipse.datatools.connectivity.oda_xxxxxxxxxxxx.jar這兩個包,前者位於上邊提到的drivers路徑的上一級,後着則在plugins下。 新建一個Class:MyJdbcDriver,指定到某個包路徑下,代碼如下:

Java代碼 複製代碼
  1. package com.wenmin.birt.data.oda.jdbc;   
  2.   
  3. import org.eclipse.birt.report.data.oda.jdbc.OdaJdbcDriver;   
  4. import java.sql.Connection;   
  5. import java.util.HashMap;   
  6. import java.util.Properties;   
  7.   
  8. import org.eclipse.birt.report.data.oda.jdbc.*;   
  9. import org.eclipse.datatools.connectivity.oda.IConnection;   
  10. import org.eclipse.datatools.connectivity.oda.OdaException;   
  11.   
  12. public class MyJdbcDriver extends OdaJdbcDriver    
  13. {   
  14.   
  15.     private Connection passedInConnection;   
  16.     public static final String DATASOURCE_KEY_CONNECTION = "com.wenmin.birt.data.odb.jdbc.MyJdbcDriver";   
  17.        
  18.     public void setAppContext( Object context ) throws OdaException   
  19.     {   
  20.         HashMap ctx = (HashMap)context;   
  21.         passedInConnection = (java.sql.Connection)ctx.get(DATASOURCE_KEY_CONNECTION);   
  22.        
  23.     }      
  24.        
  25.     public IConnection getConnection(String connectionClassName) throws OdaException   
  26.     {   
  27.         if( passedInConnection != null){   
  28.             return new appContextDBConnection();   
  29.         }else{   
  30.             return new org.eclipse.birt.report.data.oda.jdbc.Connection();   
  31.         }   
  32.     }   
  33.        
  34.   
  35.   
  36.     private class appContextDBConnection extends org.eclipse.birt.report.data.oda.jdbc.Connection   
  37.     {   
  38.        
  39.                
  40.         public void open(Properties connProperties) throws OdaException   
  41.         {   
  42.             super.jdbcConn = passedInConnection;               
  43.            
  44.         }   
  45.            
  46.         public void close( ) throws OdaException   
  47.         {   
  48.             if ( jdbcConn == null )   
  49.             {   
  50.                 return;   
  51.             }   
  52.             //should have call to return connection to the pool   
  53.             jdbcConn = null;                           
  54.         }                  
  55.            
  56.            
  57.            
  58.     }   
  59. }  
package com.wenmin.birt.data.oda.jdbc;

import org.eclipse.birt.report.data.oda.jdbc.OdaJdbcDriver;
import java.sql.Connection;
import java.util.HashMap;
import java.util.Properties;

import org.eclipse.birt.report.data.oda.jdbc.*;
import org.eclipse.datatools.connectivity.oda.IConnection;
import org.eclipse.datatools.connectivity.oda.OdaException;

public class MyJdbcDriver extends OdaJdbcDriver 
{

	private Connection passedInConnection;
	public static final String DATASOURCE_KEY_CONNECTION = "com.wenmin.birt.data.odb.jdbc.MyJdbcDriver";
	
	public void setAppContext( Object context ) throws OdaException
	{
	    HashMap ctx = (HashMap)context;
	    passedInConnection = (java.sql.Connection)ctx.get(DATASOURCE_KEY_CONNECTION);
	
	}	
	
	public IConnection getConnection(String connectionClassName) throws OdaException
	{
		if( passedInConnection != null){
			return new appContextDBConnection();
		}else{
			return new org.eclipse.birt.report.data.oda.jdbc.Connection();
		}
	}
	


	private class appContextDBConnection extends org.eclipse.birt.report.data.oda.jdbc.Connection
	{
	
			
		public void open(Properties connProperties) throws OdaException
		{
			super.jdbcConn = passedInConnection;			
		
		}
		
		public void close( ) throws OdaException
		{
			if ( jdbcConn == null )
			{
				return;
			}
			//should have call to return connection to the pool
			jdbcConn = null;						
		}				
		
		
		
	}
}

 

OK,接下來我們來打個包,利用ECLIPSE EXPORT一個 jar包,(“怎麼做?”,“。。。拖下去,暴頭!”)。

本例導出包名字爲:cst_driver.jar,拷貝到/WEB-INF/platform/plugins/org.eclipse.birt.report.data.oda.jdbc_xxxxxxx/目錄下。

      最後就是修改配置文件,第一個需要改的文件plugin.xml位於 /WEB-INF/platform/plugins/org.eclipse.birt.report.data.oda.jdbc_xxxxxxx/目錄下

找到如下節點:

Xml代碼 複製代碼
  1. ...   
  2. <extension  
  3.          point="org.eclipse.datatools.connectivity.oda.dataSource">  
  4.       <dataSource  
  5.             odaVersion="3.1"  
  6.             driverClass="org.eclipse.birt.report.data.oda.jdbc.OdaJdbcDriver"  
  7.             defaultDisplayName="%datasource.name"  
  8.             setThreadContextClassLoader="false"  
  9.             id="%oda.data.source.id">  
  10. ....  

 

修改爲:

Xml代碼 複製代碼
  1. ...   
  2. <extension  
  3.          point="org.eclipse.datatools.connectivity.oda.dataSource">  
  4.       <dataSource  
  5.             odaVersion="3.1"  
  6.             driverClass="com.wenmin.birt.data.oda.jdbc.MyJdbcDriver"  
  7.             defaultDisplayName="%datasource.name"  
  8.             setThreadContextClassLoader="false"  
  9.             id="%oda.data.source.id">  
  10. ...  

 其他內容不需要改變。

 然後在META-INF下的MANIFEST.MF中找到如下位置,添加剛纔導出的包cst_driver.jar

Xml代碼 複製代碼
  1. Bundle-ClassPath: oda-jdbc.jar,derby.jar,cst_driver.jar  

 

大功告成,接下來在程序中使用:

Java代碼 複製代碼
  1. //....      
  2.      HashMap contextMap = new HashMap();     
//....   
     HashMap contextMap = new HashMap();   
Java代碼 複製代碼
  1. //...   
  2.  contextMap.put(MyJdbcDriver.DATASOURCE_KEY_CONNECTION, conn);  //conn爲系統中獲得的數據庫連接   
  3. task.setAppContext( contextMap );   //IRunAndRenderTask    
  4. .  
    //...
     contextMap.put(MyJdbcDriver.DATASOURCE_KEY_CONNECTION, conn);  //conn爲系統中獲得的數據庫連接
    task.setAppContext( contextMap );   //IRunAndRenderTask 
//...

 這樣,無論在設計時指定了什麼數據源,都會在運行時通過已有的conn連接數據庫了。

 由於是這兩天才接觸的BIRT,文章有不足之處還請多多指正,謝謝。

發佈了33 篇原創文章 · 獲贊 1 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章