Data Point Details No Graph - Unlicensed Module - How to Register License?
-
Ever since I upgraded to core 2.7.10 none of the charts work on any of the pages I've tested:
- data_point_details.shtm
- point_details.shtm
- watch_list.shtm
- graphical views.shtm
I cleared the cache on both Firefox 45 and Chromium 48. The module versions in ma.log match the modules page, namely:
Loading module 'graphicalViews', v1.6.5 Loading module 'dataPointDetailsView', v1.0.5 Loading module 'watchlists', v1.7.4 Loading module 'dashboards', v1.1.3 Loading module 'mangoApi', v1.1.5
Typical ma.log entry:
ERROR (org.apache.taglibs.log.LoggerTag.doStartTag:97) - java.lang.NoSuchMethodError: org.jfree.data.Range.combineIgnoringNaN(Lorg/jfree/data/Range;Lorg/jfree/data/Range;)Lorg/jfree/data/Range; at org.jfree.data.time.TimeSeriesCollection.getRangeBounds(TimeSeriesCollection.java:742) at org.jfree.data.general.DatasetUtilities.findRangeBounds(DatasetUtilities.java:898) at org.jfree.chart.renderer.xy.AbstractXYItemRenderer.findRangeBounds(AbstractXYItemRenderer.java:785) at org.jfree.chart.renderer.xy.AbstractXYItemRenderer.findRangeBounds(AbstractXYItemRenderer.java:739) at org.jfree.chart.plot.XYPlot.getDataRange(XYPlot.java:4471) at org.jfree.chart.axis.NumberAxis.autoAdjustRange(NumberAxis.java:433) at org.jfree.chart.axis.NumberAxis.configure(NumberAxis.java:415) at org.jfree.chart.plot.XYPlot.configureRangeAxes(XYPlot.java:1257) at org.jfree.chart.plot.XYPlot.datasetChanged(XYPlot.java:4540) at org.jfree.chart.plot.XYPlot.setDataset(XYPlot.java:1396) at com.serotonin.m2m2.util.chart.ImageChartUtils.writeChart(ImageChartUtils.java:110) at com.serotonin.m2m2.util.chart.ImageChartUtils.getChartData(ImageChartUtils.java:63) at com.serotonin.m2m2.util.chart.ImageChartUtils.getChartData(ImageChartUtils.java:55) at com.serotonin.m2m2.web.servlet.ImageChartServlet.getImageData(ImageChartServlet.java:229) at com.serotonin.m2m2.web.servlet.ImageChartServlet.doGet(ImageChartServlet.java:69) at javax.servlet.http.HttpServlet.service(HttpServlet.java:687) at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:808) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1669) at com.serotonin.m2m2.web.filter.UrlRewriteFilter.doFilter(UrlRewriteFilter.java:63) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652) at org.eclipse.jetty.servlets.UserAgentFilter.doFilter(UserAgentFilter.java:83) at org.eclipse.jetty.servlets.GzipFilter.doFilter(GzipFilter.java:364) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652) at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:585) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143) at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:577) at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:223) at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1127) at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:515) at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185) at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1061) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:215) at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97) at org.eclipse.jetty.server.Server.handle(Server.java:499) at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:310) at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:257) at org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:540) at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635) at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555) at java.lang.Thread.run(Thread.java:745)
-
Hi Pedro,
Someone else had a similar issue. They resolved it by moving back to the 1.0.14 jar for jfree chart. Does this resolve your issue?
-
How exactly do I move back to jfree chart?
And are you implying that some people don't have this issue? -
I don't have this issue, for instance. I haven't cornered this bug to investigate it, only vicariously.
That client reported they had definitely not overridden classes and that swapping the old JAR in fixed their issue. I will email you a copy, Pedro.
You would remove the 1.0.19 JAR from Mango/lib and place the 1.0.14 JAR in its place.
-
Thanks. I saved mango/lib/jfreechart-1.0.14.jar and moved jfreechart-1.0.19.jar to another directory, then restarted Mango. Now the charts are working again. Let me know if you need more information from my ma.log file.
In case it's relevant, I only tested this on Linux browsers, and the Mango server is Ubuntu.
-
Thanks for the update Pedro, glad that resolved it!
If you can check your ma.log and you feel there is something relevant, I would certainly appreciate seeing it. I think that stack trace is the same as the other I saw, and it is bizarre because that method really appears to exist in the class signature. I wonder what version of Java you're using. Perhaps it could also be useful if you wanted to respond to the email I sent you my .14 jar with your .19 (renamed so as to avoid getting bounced by email filters).
-
Phillip, thanks for addressing this problem. I sent an email with a more detailed error log. I just remembered that I had not deleted the mango/work directory after updating. Is this done by the built-in upgrade process, or do I still have to delete it manually? It makes sense to add it to the update function. I wonder if that would cause this problem. If so, that may explain why not everyone received that error.
-
It is done by the built-in process, done in the upgrade shell script. Also, that doesn't feel to me like an error that would be caused by a stale JSP. Jfree charts renders everything on the server and returns only an image, and look how nestled the call stack is into the JFree code. I don't rule it out, though.