Possible circular dependency problem with org.adempiere.report.jasper.* plugins

Description

It seems as if JasperReports is not working in iDempiere. When a Jasper report is used for, for instance an Invoice the following error message occurs:

-----------> ProcessUtil.startJavaProcess: org.compiere.report.ReportStarter [13]
java.lang.ClassNotFoundException: org.compiere.report.ReportStarter
at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:513)
at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:429)
at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:417)
at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at org.adempiere.util.ProcessUtil.startJavaProcess(ProcessUtil.java:180)
at org.adempiere.util.ProcessUtil.startJavaProcess(ProcessUtil.java:137)
at org.adempiere.util.ProcessUtil.startJavaProcess(ProcessUtil.java:126)
at org.compiere.process.ServerProcessCtl.startProcess(ServerProcessCtl.java:413)
at org.compiere.process.ServerProcessCtl.run(ServerProcessCtl.java:279)
at org.compiere.process.ServerProcessCtl.process(ServerProcessCtl.java:106)
at org.compiere.print.ServerReportCtl.runJasperProcess(ServerReportCtl.java:107)
at org.compiere.print.ReportCtl.startDocumentPrint(ReportCtl.java:315)
at org.compiere.print.ReportCtl.startDocumentPrint(ReportCtl.java:282)
at org.compiere.print.ReportCtl.start(ReportCtl.java:126)
at org.compiere.print.ReportCtl.start(ReportCtl.java:98)
at org.compiere.apps.AbstractProcessCtl.run(AbstractProcessCtl.java:279)

Looking at the plugin dependencies the class org.compiere.report.ReportStarter is located in plugin org.adempiere.report.jasper and the org.adempiere.util.ProcessUtil class which is in plugin org.adempiere.base tries to load the ReportStarter class.

If I understand osgi correctly, the base plugin only see the classes of the plugins on which it depends. org.adempiere.base doesn't depend on org.adempiere.report.jasper.

org.adempiere.report.jasper depends on org.adempiere.base so org.adempiere.base can't depend on org.adempiere.report.jasper.

When checking the "legacy report format" I see that the code for that resides in the org.adempiere.base plugin.

The way I see it, some classes must move. Either ProcessUtil moves out of org.adempiere.base or org.adempiere.report.jasper moves into org.adempiere.base.

Any suggestions? Have I understood the problem correct?

Environment

None

Activity

Show:

Daniel TammJune 22, 2012 at 4:01 PM

Nice work Was it only a dependency in org.adempiere.ui.swing? That was a lot easier solution than mine!

Hesham AhmedJune 18, 2012 at 7:35 PM

Hi Daniel,

One way is to join iDempiere weekly meeting (Every Wednesday 1PM UTC, room #idempiere on irc.freenode.net) and mention the ticket and fix there. Usually its reviewed and accepted at the same time.

Hesham

Daniel TammJune 18, 2012 at 4:20 PM

OK, no problem. Is it possible to add states in the workflow that will show that the issue is resolved but not accepted?

Or in other words, how do I best notify that a bug/fix is ready for acceptance testing?

Let me know and I'll document the development process in our wiki

Heng Sin LowJune 18, 2012 at 8:31 AM

please don't mark issue as resolve until it have been accepted into head, thanks.

Fixed

Details

Assignee

Reporter

Due date

Original estimate

Time tracking

3h logged

Components

Fix versions

Affects versions

Priority

Created June 14, 2012 at 2:34 AM
Updated March 13, 2014 at 2:18 PM
Resolved June 22, 2012 at 7:37 AM