[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Newsgroup Home]
|
[news.eclipse.birt] Re: Problems providing BIRT a JDBC connection using ODA driverBridge
|
What birt version are you using?
In fact, in BIRT2.3.1, you can just pass a java.sql.Connection instance into
BIRT through appContext.
java.sql.Connection conn = connPool.getConnection();
appContext.put("OdaJDBCDriverPassInConnection", conn);
see https://bugs.eclipse.org/bugs/show_bug.cgi?id=236565
--
Thanks,
Wenjie
"Mike " <mniki25@xxxxxxxxx> wrote in message
news:6ba76285ef7d78a9148c52dbeecb194e$1@xxxxxxxxxxxxxxxxxx
>I have a JEE application that has a JDBC connection pool. I want to
>provide a connection from this pool to BIRT, which is integrated into this
>app using the BIRT Report Engine API.
>
> This post on BIRT World outlines exactly what I need, however I've not
> been able to get it working.
>
> http://birtworld.blogspot.com/2007/01/birt-connection-pooling-continued.html
>
> Here is what I've done and I'll try to provide as much detail as possible
> in case someone out there can see where I've gone wrong. When my app
> starts it loads BIRT and sets the parent classloader:
>
> engine.getConfig().getAppContext().put(
> EngineConstants.APPCONTEXT_CLASSLOADER_KEY, getClass().getClassLoader() );
>
> I then created a plug-in with the following plugin.xml:
>
> <?xml version="1.0" encoding="UTF-8"?>
> <?eclipse version="3.2"?>
> <plugin>
> <extension
> id="x.y.z.reporting.birtjdbc"
>
> point="org.eclipse.datatools.connectivity.oda.consumer.driverBridge">
> <bridge
> driverType="net.sourceforge.jtds.jdbc.Driver"
> bridgeId="x.y.z.reporting.birtjdbc">
> </bridge>
> </extension>
> <extension point="org.eclipse.datatools.connectivity.oda.dataSource">
> <dataSource odaVersion="3.0" driverClass="x.y.z.reporting.BirtJdbcDriver"
> defaultDisplayName="My JDBC Driver Bridge"
> setThreadContextClassLoader="false" id="x.y.z.reporting.birtjdbc"/>
> </extension> </plugin>
>
> I did not use the Eclipse PDE to create the plugin, rather I created it by
> hand using the example in the blog post. I then created a directory
> called x.y.z.reporting.birtjdbc under my ReportEngine/plugins directory
> and copied the plugin.xml file to it.
>
> Next I created the class x.y.z.reporting.BirtJdbcDriver, which extends
> OdaJdbcDriver. This class is identical to the example except that it
> looks for the Connection using the key "x.y.z.reporting.BirtJdbcDriver".
> This class is packaged up with my JEE app, but should be accessible to
> BIRT because I've set its parent classloader.
>
> Before I run any report task, I add my JDBC connection to the appContext
> from the task:
>
> appContext.put( "x.y.z.reporting.BirtJdbcDriver", myJdbcConnection );
>
> My reports are designed with a datasource set to use the jTDS driver
> net.sourceforge.jtds.jdbc.Driver. In the BIRT designer I can run reports
> that access a database with the defined JDBC URL and I can see results
> from the database.
>
> However when I try to run these reports in my app server I was seeing
> ClassNotFoundError's on the jTDS driver. I thought setting the parent
> classloader in BIRT would take care of this since that lib is in my apps
> classpath. Next I dropped my jtds.jar file in the drivers directory of my
> oda.jdbc plugin and fired up my app again. This time BIRT loaded my JDBC
> driver but it used the connection information defined in my report to talk
> to the database, not my driverBridge plugin.
>
> I've turned up the logging in BIRT to FINEST but it does not emit anything
> to the log about failing to load my plugin, and I've debugged my app and
> it doesn't attempt to create a new instance of my BirtJdbcDriver class.
>
> So at this point I have two problems, which could be related. First is
> that BIRT can't load my JDBC driver if I do not put the library in the
> drivers directory of the oda.jdbc plugin. Second is BIRT does not use my
> configured driverBridge plugin. Does anyone have any thoughts on how I
> can resolve either of these issues. Thanks
>