Bug #56101 NullPointerException when loading new Advisor with expired key in MEM
Submitted: 19 Aug 2010 0:21 Modified: 5 Jan 2011 17:46
Reporter: Jonathon Coombes Email Updates:
Status: Closed Impact on me:
None 
Category:MySQL Enterprise Monitor: Server Severity:S3 (Non-critical)
Version:2.2.2.1730 OS:Any
Assigned to: Josh Sled CPU Architecture:Any
Tags: advisor, key, license, mem, Merlin

[19 Aug 2010 0:21] Jonathon Coombes
Description:
When trying to load a new advisor.jar file when using an expired key results in the following NPE error and stack trace:

2010-08-11 10:45:34,092 ERROR [http-18443-52:com.mysql.misc.com.mysql.merlin.ui.actions.DoSetup] importing jar from file
java.lang.NullPointerException
	at com.mysql.etools.monitor.bo.JarAdvisorBundle.checkLicenseCompatibility(JarAdvisorBundle.java:134)
	at com.mysql.etools.monitor.bo.Manager.importResources(Manager.java:867)
	at com.mysql.etools.monitor.bo.Manager.importAdvisorBundle(Manager.java:830)
	at com.mysql.etools.monitor.bo.Manager.importAdvisorBundle(Manager.java:823)
	at com.mysql.merlin.ui.actions.DoSetup.importJarFromFile(DoSetup.java:221)
	at com.mysql.merlin.ui.actions.DoSetup.doImportJarFromFile(DoSetup.java:170)
	at com.mysql.merlin.ui.actions.DoSetup.executeInner(DoSetup.java:369)
	at com.mysql.merlin.ui.actions.BaseSubmitAction.exec(BaseSubmitAction.java:51)
	at com.mysql.merlin.ui.actions.BaseAction$1.call(BaseAction.java:2013)
	at com.mysql.merlin.ui.actions.BaseAction$1.call(BaseAction.java:2012)
	at com.mysql.merlin.ui.actions.BaseAction.execute(BaseAction.java:1996)
	at com.mysql.merlin.ui.actions.BaseAction.execute(BaseAction.java:2011)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:404)
	at com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:267)
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:229)
	at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:167)
	at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86)
	at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
	at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:1)
	at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
	at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:170)
	at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
	at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:1)
	at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
	at com.mysql.merlin.ui.interceptors.InitializeInterceptor.intercept(InitializeInterceptor.java:82)
	at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
	at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:1)
	at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
	at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:176)
	at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
	at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:1)
	at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
	at org.apache.struts2.interceptor.TokenInterceptor.handleValidToken(TokenInterceptor.java:172)
	at org.apache.struts2.interceptor.TokenInterceptor.doIntercept(TokenInterceptor.java:138)
	at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86)
	at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
	at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:1)
	at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
	at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:50)
	at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:507)
	at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:421)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at net.sf.ehcache.constructs.web.filter.GzipFilter.doFilter(GzipFilter.java:81)
	at net.sf.ehcache.constructs.web.filter.Filter.doFilter(Filter.java:92)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at com.mysql.merlin.server.RequestCounterFilter.doFilter(RequestCounterFilter.java:117)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at com.mysql.merlin.ui.filters.AccessLogFilter.doFilter(AccessLogFilter.java:56)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
	at java.lang.Thread.run(Unknown Source)

How to repeat:
Try to load an advisor.jar with an expired key

Suggested fix:
Avoid NPE
[1 Oct 2010 22:37] Enterprise Tools JIRA Robot
Marcos Palacios writes: 
Monitor build 2.3.0.2025 (Beta) resolves this issue since product keys are no longer needed.
[5 Jan 2011 17:46] John Russell
Since the change in licensing is a global thing in 2.3, no specific changelog entry for this bug.