Closed shahzad80 closed 1 year ago
What did you do to configure/add this additional library to your specialized runtime?
Thank you for your prompt reply.
I simply went through this option as I clicked on add button and it asked me to the path where the drivers are located and its located on /root
I just selected both drivers but only one driver was appearing when I clicked on driver class was
I'm sure the experts will chime in later, but it seems to me one thing to get it working in the IDE and other to ensure that these additional jars are actually deployed in the runtime. But I could be wrong, and of course there must be some way to do this...
If you are using the non-OSGI runtime, it suffices to have the JAR included in the program's ClassPath, e.g. like this (example is for Oracle DB on Windows):
CLASSPATH=C:\your-application-class.abc.jar;...;C:\birt-runtime\ReportEngine\lib\*;C:\instantclient\ojdbc8.jar
Thank you for your reply.
I am using non-OSGI runtime. if I use OSGI runtime BIRT 4.14 then do I not need to define classpath on C:
a snapshot was taken from the Linux machine and installed eclipse 2023 was in it and used BIRT report designer from Eclipse and design test report but db connection was fine as I mentioned earlier in this thread and on runtime it displayed jdbc error that I mentioned in above snapshots.
when I tried this from a Windows machine to connect db (Mariadb version 10.15) that exists on Linux machine BIRT report designer it didn't get a db connection successful.
CLASSPATH=C:\your-application-class.abc.jar;...;C:\birt-runtime\ReportEngine\lib*;C:\instantclient\ojdbc8.jar
where should I exactly define this classpath I mean on which file or do I need to define this setting in global variables of windows 10 machine?
another thing is that does it require an ojdbc8.jar file and needs to be downloaded?
do both Platform Linux and Windows require ojdbc8.jar in order to run rptdesign file?
If you use the OSGI-version then the location of the drivers is clear defined here:
Thank you for your reply @speckyspooky
For Non-OSGI-version you can try to put the driver directly there: \webapps\birt\WEB-INF\lib
which driver should I copy into the above path ojdbc8.jar or mariadb-java-client-2.7.9.jar?
For testing reasons I would start with ojdbc and an Oracle connection report and afterwards with mariadb. At the end if it works you can copy both there because the driver supports different databases. So there shouldn't be cross effects.
Thanks again for your prompt reply.
will get back to you shortly after testing this
Thanks again for giving an exact solution.
it worked on Linux I copied both files one by one but mariadb-java-client-2.7.9.jar worked out and reports are working on Linux machine. I deleted all extra Java drivers as you said that It might cause conflict with other drivers.
please note that all processes were done on a Linux machine.
now I am doing the same process from the Windows machine and trying to establish a data connection from the Birt data source but it showing an error. the database does not exist on the Windows machine it is present on a remote machine and MariaDB is running on the remote machine(Linux).
I copied same jar file on a Windows machine which I copied on the Linux machine to establish a data connection and for running reports smoothly.
Regarding "which driver": My example was for Oracle DB, as I said. JDBC drivers are DB specific. For the Oracle DB, you need the driver from ojdbc8.jar
, for other DBs like MariaDB, you need a different drivers from a different JAR file.
Regarding: "where should I define the Class Path": This depends on how you start your application. It is required basic knowledge for using your application.
I have two DB instances one is Mariadb(10.5.21-MariaDB) and another is MYSQL(8.0.30) both are hosted on a different Linux machine.
I copied both files ojdbc8.jar and mariadb-java-client-2.7.9.jar one after one on the below path on my Windows machine but it's not working and still Birt Designer is not able to connect remote database.
C:\Users\shahzad\Downloads\birt-setup\4.14\eclipse\plugins\org.eclipse.birt.report.data.oda.jdbc_4.14.0.v202306231510
after copying those jar files they show up on driver class drop-down list.
can you give me a hint on where to find .jar file for connecting the remote mysql database? I found a link but couldn't figure out which jar file is best suited for a MySQL database connection.
http://www.java2s.com/Code/Jar/m/Downloadmysqlconnectorjar.htm
ojdbc8.jar
is for Oracle RDBMS - it is not related to MySQL or MariaDB. Forget about it.
And you should never download JAR files from somewhere where you are not absolutely sure if it's the official download location. It's a security risk.
At the end for the eclipse-designer you have to add the driver-classes via "Manage Drivers" to your designer and restart the designer. With the restart the driver will be loaded and you should be able to configure your connection from designer side.
For the jdbc driver you can also try the original driver version of Oracle for MySQL: https://dev.mysql.com/downloads/connector/j/
I have already tried this link. It provides an rpm file that is already installed when you install MySQL db on a Linux machine and tried all of them. it does not provide any jar file that make use of copy jar file in a particular folder or it can be added to Driver class through Driver manager.
on the other side windows birt designer requires a jar file in order to connect your local db that exists on the same machine or remote machine.
MySQL Community Downloads on this page it is providing an MSI file of SQL connector and I think it will be of no use to install on my machine.
Yes, you have to download the MSI-Installer and here the light way version (2.4M) because it is only executable to define your components which should be downloaded. If you have downloaded the MSI-file start it select "custom" product selection and then you are able to select only connectors and there you can define which version should be downloaded and "installed". The installation here is only a copy process in a volde and there you will find the jdbc-driver of MySQL:
Then you have it and you can copy it to your driver folder and you cann add them on the "Driver Manager".
Thank you for your reply.
I have followed all your steps but still, BIRT is not able to make a connection to a remote database. the error says to verify the connection properties.
I have done it in two ways to add a driver first I added a driver through driver manager from birt designer and when it didn't work I manually copied this driver to Eclipse folder but no luck.
here is the detailed error information that was displayed while making a db connection through birt designer.
I am giving this setting on birt report designer
Driver Class: com.mysql.cj.jdbc.Driver (v8.0) Databse URL: jdbc:mysql://172.30.100.200:3306/cpsp
org.eclipse.datatools.connectivity.oda.OdaException: Failed to create a connection. Please verify the connection properties. at org.eclipse.birt.report.data.oda.jdbc.ui.profile.JDBCSelectionPageHelper$TestInProcessDialog$TestConnectionJob$1.run(JDBCSelectionPageHelper.java:191) at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40) at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:132) at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:4047) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3663) at org.eclipse.jface.window.Window.runEventLoop(Window.java:823) at org.eclipse.jface.window.Window.open(Window.java:799) at org.eclipse.jface.dialogs.MessageDialog.open(MessageDialog.java:609) at org.eclipse.birt.report.data.oda.jdbc.ui.profile.JDBCSelectionPageHelper$8.widgetSelected(JDBCSelectionPageHelper.java:908) at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:252) at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:89) at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4274) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1066) at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4072) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3660) at org.eclipse.jface.window.Window.runEventLoop(Window.java:823) at org.eclipse.jface.window.Window.open(Window.java:799) at org.eclipse.birt.report.designer.data.ui.actions.NewDataSourceAction.run(NewDataSourceAction.java:117) at org.eclipse.jface.action.Action.runWithEvent(Action.java:474) at org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:580) at org.eclipse.jface.action.ActionContributionItem.lambda$4(ActionContributionItem.java:414) at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:89) at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4274) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1066) at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4072) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3660) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1155) at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:342) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1046) at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:643) at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:342) at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:550) at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:171) at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:152) at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:136) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:402) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:568) at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:651) at org.eclipse.equinox.launcher.Main.basicRun(Main.java:588) at org.eclipse.equinox.launcher.Main.run(Main.java:1459)
Here we must be exact, the issue isn't by default a birt issue. The topic is to setup the correct connection properties. And I know the creation of the correct db-URL-connection-string can be hard. But this has is depended on the driver, the DB and your database settings.
The topic is I haven't a MySQL DB in my concept so I haven't testing options here.
I don't know what am I missing in creating a database string.
this one is working fine on maria db jdbc:mariadb://localhost:3306/cpsp If a database is hosted on the same machine and it does not work on a remote database.
This is not a BIRT topic and not related to the title of this issue. Please ask for help in the MariaDB community. Come back if you manage to connect to your DB in the same network situation with a different Java client program and not with BIRT.
Driver was not an issue it was a grant privileges issue on a database.
I am able to connect a remote database from a Windows machine that has running Birt report designer on it.
I want to confirm one thing that can I not add multiple drivers on Birt Designer likewise I have two db instances on two different remote machines so I will be able to connect and run reports by adding multiple drivers on a single Birt report designer.
@speckyspooky thanks for sharing the steps on how to find MySQL driver and add it to Birt Designer your suggested steps also worked that resolve JDBC driver issue that was started from the beginning of this thread.
I would like to thank you all for your great and prompt support.
@shahzad80, how about you or your employer make a big donation to the Eclipse Foundation:
Thanks again for your great support.
I am sharing and sending your messages to the higher authorities.
I have tried to connect Mariadb through Birt data source and I input these settings into the data source page.
when I tested a database connection it showed the connection as successful but I tried to run this report through Birt run time it's displaying a JDBC Driver error.
org.eclipse.birt.report.engine.api.EngineException: An exception occurred during processing. Please see the following message for details: Cannot open the connection for the driver: org.eclipse.birt.report.data.oda.jdbc. org.eclipse.birt.report.data.oda.jdbc.JDBCException: Cannot load JDBC Driver class: org.mariadb.jdbc.Driver. at org.eclipse.birt.report.engine.executor.ExecutionContext.addException(ExecutionContext.java:1060) at org.eclipse.birt.report.engine.executor.ExecutionContext.addException(ExecutionContext.java:1045) at org.eclipse.birt.report.engine.executor.QueryItemExecutor.executeQuery(QueryItemExecutor.java:83) at org.eclipse.birt.report.engine.executor.TableItemExecutor.execute(TableItemExecutor.java:60) at org.eclipse.birt.report.engine.internal.executor.wrap.WrappedReportItemExecutor.execute(WrappedReportItemExecutor.java:45) at org.eclipse.birt.report.engine.internal.executor.emitter.ReportItemEmitterExecutor.execute(ReportItemEmitterExecutor.java:45) at org.eclipse.birt.report.engine.internal.executor.dup.SuppressDuplicateItemExecutor.execute(SuppressDuplicateItemExecutor.java:41) at org.eclipse.birt.report.engine.internal.executor.wrap.WrappedReportItemExecutor.execute(WrappedReportItemExecutor.java:45) at org.eclipse.birt.report.engine.internal.executor.l18n.LocalizedReportItemExecutor.execute(LocalizedReportItemExecutor.java:34) at org.eclipse.birt.report.engine.layout.html.HTMLBlockStackingLM.layoutNodes(HTMLBlockStackingLM.java:62) at org.eclipse.birt.report.engine.layout.html.HTMLPageLM.layout(HTMLPageLM.java:92) at org.eclipse.birt.report.engine.layout.html.HTMLReportLayoutEngine.layout(HTMLReportLayoutEngine.java:97) at org.eclipse.birt.report.engine.presentation.ReportDocumentBuilder.build(ReportDocumentBuilder.java:226) at org.eclipse.birt.report.engine.api.impl.RunTask.doRun(RunTask.java:224) at org.eclipse.birt.report.engine.api.impl.RunTask.run(RunTask.java:85) at org.eclipse.birt.report.service.ReportEngineService.runReport(ReportEngineService.java:1086) at org.eclipse.birt.report.service.BirtViewerReportService.runReport(BirtViewerReportService.java:146) at org.eclipse.birt.report.service.actionhandler.BirtRunReportActionHandler.execute(BirtRunReportActionHandler.java:79) at org.eclipse.birt.report.service.actionhandler.BirtGetPageActionHandler.checkDocumentExists(BirtGetPageActionHandler.java:56) at org.eclipse.birt.report.service.actionhandler.AbstractGetPageActionHandler.prepareParameters(AbstractGetPageActionHandler.java:114) at org.eclipse.birt.report.service.actionhandler.AbstractGetPageActionHandler.execute(AbstractGetPageActionHandler.java:100) at org.eclipse.birt.report.service.actionhandler.AbstractBaseActionHandler.execute(AbstractBaseActionHandler.java:88) at org.eclipse.birt.report.soapengine.processor.AbstractBaseDocumentProcessor.executeAction(AbstractBaseDocumentProcessor.java:45) at org.eclipse.birt.report.soapengine.processor.AbstractBaseComponentProcessor.executeAction(AbstractBaseComponentProcessor.java:132) at org.eclipse.birt.report.soapengine.processor.BirtDocumentProcessor.handleGetPage(BirtDocumentProcessor.java:83) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:568) at org.eclipse.birt.report.soapengine.processor.AbstractBaseComponentProcessor.process(AbstractBaseComponentProcessor.java:107) at org.eclipse.birt.report.soapengine.endpoint.BirtSoapBindingImpl.getUpdatedObjects(BirtSoapBindingImpl.java:67) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:568) at org.apache.axis.providers.java.RPCProvider.invokeMethod(RPCProvider.java:397) at org.apache.axis.providers.java.RPCProvider.processMessage(RPCProvider.java:186) at org.apache.axis.providers.java.JavaProvider.invoke(JavaProvider.java:321) at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32) at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118) at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83) at org.apache.axis.handlers.soap.SOAPService.invoke(SOAPService.java:420) at org.apache.axis.server.AxisServer.invoke(AxisServer.java:281) at org.apache.axis.transport.http.AxisServlet.doPost(AxisServlet.java:684) at org.eclipse.birt.report.servlet.BirtSoapMessageDispatcherServlet.doPost(BirtSoapMessageDispatcherServlet.java:227) at javax.servlet.http.HttpServlet.service(HttpServlet.java:555) at org.apache.axis.transport.http.AxisServletBase.service(AxisServletBase.java:332) at javax.servlet.http.HttpServlet.service(HttpServlet.java:623) at org.eclipse.birt.report.servlet.BirtSoapMessageDispatcherServlet.service(BirtSoapMessageDispatcherServlet.java:115) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) at org.eclipse.birt.report.filter.ViewerFilter.doFilter(ViewerFilter.java:71) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:673) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791) at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.base/java.lang.Thread.run(Thread.java:833) Caused by: org.eclipse.birt.report.data.adapter.api.AdapterException: An exception occurred during processing. Please see the following message for details: Cannot open the connection for the driver: org.eclipse.birt.report.data.oda.jdbc. org.eclipse.birt.report.data.oda.jdbc.JDBCException: Cannot load JDBC Driver class: org.mariadb.jdbc.Driver. at org.eclipse.birt.report.data.adapter.impl.DataRequestSessionImpl.execute(DataRequestSessionImpl.java:607) at org.eclipse.birt.report.engine.data.dte.DteDataEngine.doExecuteQuery(DteDataEngine.java:138) at org.eclipse.birt.report.engine.data.dte.DataGenerationEngine.doExecuteQuery(DataGenerationEngine.java:74) at org.eclipse.birt.report.engine.data.dte.AbstractDataEngine.execute(AbstractDataEngine.java:254) at org.eclipse.birt.report.engine.executor.ExecutionContext.executeQuery(ExecutionContext.java:1624) at org.eclipse.birt.report.engine.executor.QueryItemExecutor.executeQuery(QueryItemExecutor.java:73) ... 71 more Caused by: org.eclipse.birt.data.engine.odaconsumer.OdaDataException: Cannot open the connection for the driver: org.eclipse.birt.report.data.oda.jdbc. org.eclipse.birt.report.data.oda.jdbc.JDBCException: Cannot load JDBC Driver class: org.mariadb.jdbc.Driver. at org.eclipse.birt.data.engine.odaconsumer.ExceptionHandler.newException(ExceptionHandler.java:56) at org.eclipse.birt.data.engine.odaconsumer.ConnectionManager.openConnection(ConnectionManager.java:169) at org.eclipse.birt.data.engine.executor.DataSource.newConnection(DataSource.java:210) at org.eclipse.birt.data.engine.executor.DataSource.open(DataSource.java:199) at org.eclipse.birt.data.engine.impl.DataSourceRuntime.openOdiDataSource(DataSourceRuntime.java:195) at org.eclipse.birt.data.engine.impl.QueryExecutor.openDataSource(QueryExecutor.java:418) at org.eclipse.birt.data.engine.impl.QueryExecutor.prepareExecution(QueryExecutor.java:302) at org.eclipse.birt.data.engine.impl.PreparedQuery.doPrepare(PreparedQuery.java:388) at org.eclipse.birt.data.engine.impl.PreparedDataSourceQuery.produceQueryResults(PreparedDataSourceQuery.java:164) at org.eclipse.birt.data.engine.impl.PreparedDataSourceQuery.execute(PreparedDataSourceQuery.java:153) at org.eclipse.birt.data.engine.impl.PreparedOdaDSQuery.execute(PreparedOdaDSQuery.java:172) at org.eclipse.birt.report.data.adapter.impl.DataRequestSessionImpl.execute(DataRequestSessionImpl.java:594) ... 76 more Caused by: org.eclipse.birt.report.data.oda.jdbc.JDBCException: Cannot load JDBC Driver class: org.mariadb.jdbc.Driver. at org.eclipse.birt.report.data.oda.jdbc.JDBCDriverManager.findDriver(JDBCDriverManager.java:775) at org.eclipse.birt.report.data.oda.jdbc.JDBCDriverManager.loadAndRegisterDriver(JDBCDriverManager.java:856) at org.eclipse.birt.report.data.oda.jdbc.JDBCDriverManager.loadAndRegisterDriver(JDBCDriverManager.java:838) at org.eclipse.birt.report.data.oda.jdbc.JDBCDriverManager.doConnect(JDBCDriverManager.java:265) at org.eclipse.birt.report.data.oda.jdbc.JDBCDriverManager.getConnection(JDBCDriverManager.java:222) at org.eclipse.birt.report.data.oda.jdbc.Connection.connectByUrl(Connection.java:220) at org.eclipse.birt.report.data.oda.jdbc.Connection.open(Connection.java:142) at org.eclipse.datatools.connectivity.oda.consumer.helper.OdaConnection.open(OdaConnection.java:250) at org.eclipse.birt.data.engine.odaconsumer.ConnectionManager.openConnection(ConnectionManager.java:160) ... 86 more
The driver I am using is mariadb-java-client-2.7.9.jar which is downloaded from this given link.
https://dlm.mariadb.com/browse/java8_connector/138/1681/connector-java-2.7.9/
It is working fine because Birt is connected successfully as I provide a snapshot in this thread.
I have uploaded a design file for your further reference.
dbtest.rptdesign.txt