以前一直用润乾报表,现在突然改成了birt,还真是有点不适应!整个动态数据源,也搞了好些天,资料太少,先记录下看到
的几种方法:
- 第一种和第二种都要配置一下几个报表参数(odaDriverClass 、odaURL、odaUser 、odaPassword )
- 同时需要在Property Binding中将JDBC的参数值绑定到报表参数
- 图片上不来
第一种:读配置文件(已经测试通过)
importPackage( Packages.java.io,Packages.java.util,Packages.java.net );
importPackage( Packages.javax.servlet.http );
req = reportContext.getHttpServletRequest( );
propPath = new String(params["propFile"].value); // 把配置文件名用参数传进来
if ( propPath.charAt(0) != "/" )
propPath = "/" + propPath;
url = req.getSession( ).getServletContext( ).getResource( propPath ); // 获得配置文件的相对路径
if ( url != null ) // 如果文件的相对路径不为空,则读取配置文件
{
props = new java.util.Properties( );
props.load( url.openStream( ) );
odaURL = new String(props.getProperty("url"));
odaDriverClass = new String(props.getProperty("driver"));
odaUser = new String(props.getProperty("userid"));
odaPassword = new String(props.getProperty("password"));
}
第二种:共用项目架构中的spring配置文件(不过我没有测试成功)
importPackage(Packages.org.springframework.context.support); //引用Spring类
importPackage(Packages.org.apache.commons.dbcp); //应用Datasource类
var ctx = new ClassPathXmlApplicationContext("applicationContext.xml"); //读取Spring配置文件
var dataSource = ctx.getBean("dataSourceName"); //读取DataSource
extensionProperties.odaURL = new String(dataSource.getUrl()); //读取Url并赋值
extensionProperties.odaUser = new String(dataSource.getUsername()); //读取Username并赋值
extensionProperties.odaPassword = new String(dataSource.getPassword()); //读取Password并赋值
第三种:为报表创建一个连接池,在报表中通过JNDI来获取连接信息(推荐采用这一种)
配置连接池(context.xml),配置的方法好像是tomcat版本不一样,方法也不一样,我是5.5
<Context>
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<Resource
auth="Container"
name="jdbc/birtDS"
type="javax.sql.DataSource"
maxIdle="5"
maxWait="-1"
driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
username="sa"
password="123"
url="jdbc:sqlserver://127.0.0.1:1433;databaseName=rcwss"
maxActive="10"/>
</Context>
然后在BIRT JDBC Data Source 中配置好JNDI URL , 我的是:java:comp/env/jdbc/birtDS
保存即可!