I have just upgraded to GH 6.0.6. When enabling Epic from labs, all rapidboards stop working. They only display a Error - Internal server error
The epic enabling causes a NullPointerException on the server:
Log:
2012-10-26 10:35:46,909 http-8080-1 ERROR mkn 635x463x1 127uqc0 10.100.0.99,172.20.0.10 /rest/greenhopper/1.0/xboard/plan/backlog/data.json server.impl.application.WebApplicationImpl Internal server error
java.lang.NullPointerException
at com.atlassian.greenhopper.service.rapid.RapidViewClauseServiceImpl.getPlanModeClause(RapidViewClauseServiceImpl.java:134)
at com.atlassian.greenhopper.service.rapid.RapidViewClauseServiceImpl.getClauseForBuilder(RapidViewClauseServiceImpl.java:70)
at com.atlassian.greenhopper.service.rapid.RapidViewQueryServiceImpl.getBacklogQuery(RapidViewQueryServiceImpl.java:189)
at com.atlassian.greenhopper.service.rapid.RapidViewQueryServiceImpl.getBacklogQuery(RapidViewQueryServiceImpl.java:167)
at com.atlassian.greenhopper.web.rapid.list.RapidIssueEntryQueryServiceImpl.collectBacklogIssues(RapidIssueEntryQueryServiceImpl.java:164)
at com.atlassian.greenhopper.web.rapid.plan.PlanningModeResource.loadBacklogData(PlanningModeResource.java:208)
at com.atlassian.greenhopper.web.rapid.plan.PlanningModeResource.access$300(PlanningModeResource.java:53)
at com.atlassian.greenhopper.web.rapid.plan.PlanningModeResource$1.call(PlanningModeResource.java:118)
at com.atlassian.greenhopper.web.rapid.plan.PlanningModeResource$1.call(PlanningModeResource.java:103)
at com.atlassian.greenhopper.web.util.RestCall.response(RestCall.java:48)
at com.atlassian.greenhopper.web.AbstractResource.response(AbstractResource.java:48)
at com.atlassian.greenhopper.web.rapid.plan.PlanningModeResource.getBacklogData(PlanningModeResource.java:102)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.atlassian.plugins.rest.common.interceptor.impl.DispatchProviderHelper$ResponseOutInvoker$1.invoke(DispatchProviderHelper.java:206)
at com.atlassian.plugins.rest.common.interceptor.impl.DispatchProviderHelper$1.intercept(DispatchProviderHelper.java:90)
at com.atlassian.plugins.rest.common.interceptor.impl.DefaultMethodInvocation.invoke(DefaultMethodInvocation.java:61)
at com.atlassian.plugins.rest.common.expand.interceptor.ExpandInterceptor.intercept(ExpandInterceptor.java:38)
at com.atlassian.plugins.rest.common.interceptor.impl.DefaultMethodInvocation.invoke(DefaultMethodInvocation.java:61)
at com.atlassian.plugins.rest.common.interceptor.impl.DispatchProviderHelper.invokeMethodWithInterceptors(DispatchProviderHelper.java:98)
at com.atlassian.plugins.rest.common.interceptor.impl.DispatchProviderHelper.access$100(DispatchProviderHelper.java:28)
at com.atlassian.plugins.rest.common.interceptor.impl.DispatchProviderHelper$ResponseOutInvoker._dispatch(DispatchProviderHelper.java:202)
at com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:67)
at com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:163)
at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:111)
at com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:71)
at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:111)
at com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:63)
at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:654)
at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:612)
at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:603)
at com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:309)
at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:425)
at com.atlassian.plugins.rest.module.RestDelegatingServletFilter$JerseyOsgiServletContainer.doFilter(RestDelegatingServletFilter.java:171)
at com.sun.jersey.spi.container.servlet.ServletContainer.doFilter(ServletContainer.java:689)
at com.atlassian.plugins.rest.module.RestDelegatingServletFilter.doFilter(RestDelegatingServletFilter.java:70)
at com.atlassian.plugin.servlet.filter.DelegatingPluginFilter.doFilter(DelegatingPluginFilter.java:74)
at com.atlassian.plugin.servlet.filter.IteratingFilterChain.doFilter(IteratingFilterChain.java:42)
at com.atlassian.plugin.servlet.filter.ServletFilterModuleContainerFilter.doFilter(ServletFilterModuleContainerFilter.java:77)
at com.atlassian.plugin.servlet.filter.ServletFilterModuleContainerFilter.doFilter(ServletFilterModuleContainerFilter.java:63)
at com.atlassian.plugin.servlet.filter.DelegatingPluginFilter.doFilter(DelegatingPluginFilter.java:74)
at com.atlassian.plugin.servlet.filter.IteratingFilterChain.doFilter(IteratingFilterChain.java:42)
at com.atlassian.plugin.servlet.filter.DelegatingPluginFilter$1.doFilter(DelegatingPluginFilter.java:66)
at com.atlassian.plugins.rest.module.servlet.RestServletUtilsUpdaterFilter.doFilterInternal(RestServletUtilsUpdaterFilter.java:26)
at com.atlassian.plugins.rest.module.servlet.RestServletUtilsUpdaterFilter.doFilter(RestServletUtilsUpdaterFilter.java:40)
at com.atlassian.plugin.servlet.filter.DelegatingPluginFilter.doFilter(DelegatingPluginFilter.java:74)
at com.atlassian.plugin.servlet.filter.IteratingFilterChain.doFilter(IteratingFilterChain.java:42)
at com.atlassian.plugin.servlet.filter.DelegatingPluginFilter$1.doFilter(DelegatingPluginFilter.java:66)
at com.atlassian.applinks.core.rest.context.ContextFilter.doFilter(ContextFilter.java:25)
at com.atlassian.plugin.servlet.filter.DelegatingPluginFilter.doFilter(DelegatingPluginFilter.java:74)
at com.atlassian.plugin.servlet.filter.IteratingFilterChain.doFilter(IteratingFilterChain.java:42)
at com.atlassian.plugin.servlet.filter.ServletFilterModuleContainerFilter.doFilter(ServletFilterModuleContainerFilter.java:77)
at com.atlassian.plugin.servlet.filter.ServletFilterModuleContainerFilter.doFilter(ServletFilterModuleContainerFilter.java:63)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.atlassian.jira.web.filters.accesslog.AccessLogFilter.executeRequest(AccessLogFilter.java:104)
at com.atlassian.jira.web.filters.accesslog.AccessLogFilter.doFilter(AccessLogFilter.java:88)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.atlassian.jira.security.xsrf.XsrfTokenAdditionRequestFilter.doFilter(XsrfTokenAdditionRequestFilter.java:54)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.atlassian.plugin.servlet.filter.IteratingFilterChain.doFilter(IteratingFilterChain.java:46)
at com.atlassian.plugin.servlet.filter.ServletFilterModuleContainerFilter.doFilter(ServletFilterModuleContainerFilter.java:77)
at com.atlassian.plugin.servlet.filter.ServletFilterModuleContainerFilter.doFilter(ServletFilterModuleContainerFilter.java:63)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.atlassian.seraph.filter.SecurityFilter.doFilter(SecurityFilter.java:234)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.atlassian.security.auth.trustedapps.filter.TrustedApplicationsFilter.doFilter(TrustedApplicationsFilter.java:98)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.atlassian.seraph.filter.BaseLoginFilter.doFilter(BaseLoginFilter.java:157)
at com.atlassian.jira.web.filters.JiraLoginFilter.doFilter(JiraLoginFilter.java:70)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.atlassian.plugin.servlet.filter.IteratingFilterChain.doFilter(IteratingFilterChain.java:46)
at com.atlassian.plugin.servlet.filter.DelegatingPluginFilter$1.doFilter(DelegatingPluginFilter.java:66)
at com.atlassian.oauth.serviceprovider.internal.servlet.OAuthFilter.doFilter(OAuthFilter.java:71)
at com.atlassian.plugin.servlet.filter.DelegatingPluginFilter.doFilter(DelegatingPluginFilter.java:74)
at com.atlassian.plugin.servlet.filter.IteratingFilterChain.doFilter(IteratingFilterChain.java:42)
at com.atlassian.plugin.servlet.filter.DelegatingPluginFilter$1.doFilter(DelegatingPluginFilter.java:66)
at com.atlassian.plugins.rest.module.servlet.RestSeraphFilter.doFilter(RestSeraphFilter.java:40)
at com.atlassian.plugin.servlet.filter.DelegatingPluginFilter.doFilter(DelegatingPluginFilter.java:74)
at com.atlassian.plugin.servlet.filter.IteratingFilterChain.doFilter(IteratingFilterChain.java:42)
at com.atlassian.plugin.servlet.filter.DelegatingPluginFilter$1.doFilter(DelegatingPluginFilter.java:66)
at com.atlassian.bonfire.web.filters.BonfireP3PFilter.doFilter(BonfireP3PFilter.java:57)
at com.atlassian.plugin.servlet.filter.DelegatingPluginFilter.doFilter(DelegatingPluginFilter.java:74)
at com.atlassian.plugin.servlet.filter.IteratingFilterChain.doFilter(IteratingFilterChain.java:42)
at com.atlassian.plugin.servlet.filter.ServletFilterModuleContainerFilter.doFilter(ServletFilterModuleContainerFilter.java:77)
at com.atlassian.plugin.servlet.filter.ServletFilterModuleContainerFilter.doFilter(ServletFilterModuleContainerFilter.java:63)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.atlassian.johnson.filters.AbstractJohnsonFilter.doFilter(AbstractJohnsonFilter.java:71)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.java:350)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.atlassian.gzipfilter.GzipFilter.doFilterInternal(GzipFilter.java:81)
at com.atlassian.gzipfilter.GzipFilter.doFilter(GzipFilter.java:51)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.atlassian.plugin.servlet.filter.IteratingFilterChain.doFilter(IteratingFilterChain.java:46)
at com.atlassian.plugin.servlet.filter.DelegatingPluginFilter$1.doFilter(DelegatingPluginFilter.java:66)
at com.sysbliss.jira.plugins.workflow.servlet.JWDSendRedirectFilter.doFilter(JWDSendRedirectFilter.java:25)
at com.atlassian.plugin.servlet.filter.DelegatingPluginFilter.doFilter(DelegatingPluginFilter.java:74)
at com.atlassian.plugin.servlet.filter.IteratingFilterChain.doFilter(IteratingFilterChain.java:42)
at com.atlassian.plugin.servlet.filter.ServletFilterModuleContainerFilter.doFilter(ServletFilterModuleContainerFilter.java:77)
at com.atlassian.plugin.servlet.filter.ServletFilterModuleContainerFilter.doFilter(ServletFilterModuleContainerFilter.java:63)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.atlassian.jira.web.filters.steps.ChainedFilterStepRunner.doFilter(ChainedFilterStepRunner.java:78)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.atlassian.core.filters.cache.AbstractCachingFilter.doFilter(AbstractCachingFilter.java:33)
at com.atlassian.core.filters.AbstractHttpFilter.doFilter(AbstractHttpFilter.java:31)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.atlassian.core.filters.encoding.AbstractEncodingFilter.doFilter(AbstractEncodingFilter.java:41)
at com.atlassian.core.filters.AbstractHttpFilter.doFilter(AbstractHttpFilter.java:31)
at com.atlassian.jira.web.filters.PathMatchingEncodingFilter.doFilter(PathMatchingEncodingFilter.java:45)
at com.atlassian.core.filters.AbstractHttpFilter.doFilter(AbstractHttpFilter.java:31)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.atlassian.jira.web.monitor.ActiveRequestsFilter$PassToChainFilterFunc.doFilter(ActiveRequestsFilter.java:346)
at com.atlassian.jira.web.monitor.ActiveRequestsFilter$DebugLogFilterFunc.doFilter(ActiveRequestsFilter.java:463)
at com.atlassian.jira.web.monitor.ActiveRequestsFilter.doFilter(ActiveRequestsFilter.java:173)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.atlassian.jira.startup.JiraStartupChecklistFilter.doFilter(JiraStartupChecklistFilter.java:75)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.atlassian.multitenant.servlet.MultiTenantServletFilter.doFilter(MultiTenantServletFilter.java:91)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.atlassian.jira.web.filters.steps.ChainedFilterStepRunner.doFilter(ChainedFilterStepRunner.java:78)
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:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:554)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:864)
at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:579)
at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1665)
at java.lang.Thread.run(Thread.java:662)
Hi Mikkel,
We have verified this issue is caused by a major bug in Greenhopper 6.0.6. The problem is happens if the user deletes the original Epic issue type and add it back. Please refer to this bug report: https://jira.atlassian.com/browse/GHS-6495
Unfortunately, there is no workaround currently. At the moment, you will have to disable the Epic feature from the Greenhopper Lab. For now, I would recommend that you do the following in the bug report :
* Watch it, so that you will receive any and all updates
* Comment, and give your opinion on the matter
Please note that all bug fixes falls under our bug fixing policy : https://confluence.atlassian.com/display/Support/Atlassian+Bug+Fixing+Policy
Cheers,
Joe
Waiting for JIRA Support. They have trouble finding the issue
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
I manually created the "Epic" and "Story" issue types (my JIRA instance did not have them) and now it is working.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Other than creating Issue Types of "Epic" and "Story" (is this exactly what they are called?) did you add them to anything else? Did you create anything else or link anything else in the system? I've created these and am still having a "Server Error" when I try to access a scrum planning board.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
try running this query on your JIRA DB:
SELECT ID, PROPERTY_KEY, (SELECT propertyvalue FROM jiradb.propertynumber WHERE propertynumber.ID = propertyentry.ID) as value, (CASE WHEN PROPERTY_KEY LIKE "%customfield%" THEN (SELECT cfname FROM jiradb.customfield WHERE customfield.ID = (SELECT propertyvalue FROM jiradb.propertynumber WHERE propertynumber.ID = propertyentry.ID)) WHEN PROPERTY_KEY LIKE "%linktype%" THEN (SELECT pstyle FROM jiradb.issuelinktype WHERE issuelinktype.ID = (SELECT propertyvalue FROM jiradb.propertynumber WHERE propertynumber.ID = propertyentry.ID)) END) as valuetranslation FROM jiradb.propertyentry WHERE ENTITY_NAME = "GreenHopper.properties" AND propertytype = 3
The results should look similar to:
14579 | GreenHopper.Rank.customfield.id | 10500 | Global Rank | |
23842 | GreenHopper.Upgrade.Latest.Upgraded.Version | 24 | ||
23844 | GreenHopper.Rank.Default.customfield.id | 10900 | Rank | |
25049 | GreenHopper.Sprint.Default.customfield.id | 11003 | Sprint | |
50831 | GreenHopper.EpicLink.Default.customfield.id | 11600 | Epic Link | |
50832 | GreenHopper.EpicLabel.Default.customfield.id | 11601 | Epic Label | |
50833 | GreenHopper.EpicStatus.Default.customfield.id | 11602 | Epic Status | |
50834 | GreenHopper.EpicColor.Default.customfield.id | 11603 | Epic Colour | |
50835 | GreenHopper.Epic.Default.linktype.id | 10700 | jira_gh_epic_story |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Thanks for the suggestion... it looks like it's missing a bunch of stuff... I have a ticket open with Atlassian on the bigger issue and they have duplicated the issue... but in the meantime I'd love to figure it out.
+-------+---------------------------------------------+-------+--------------------+
| ID | PROPERTY_KEY | value | valuetranslation |
+-------+---------------------------------------------+-------+--------------------+
| 10372 | GreenHopper.Rank.customfield.id | 10000 | Global Rank |
| 11609 | GreenHopper.Upgrade.Latest.Upgraded.Version | 24 | NULL |
| 11611 | GreenHopper.Rank.Default.customfield.id | 10200 | Rank |
| 12231 | GreenHopper.Sprint.Default.customfield.id | 10300 | Sprint |
| 12728 | GreenHopper.EpicLink.Default.customfield.id | 10400 | Epic Link |
| 12741 | GreenHopper.Epic.Default.linktype.id | 10200 | jira_gh_epic_story |
+-------+---------------------------------------------+-------+--------------------+
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
The error only occurs when trying to view the planning board
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
I manually created the Epic issue type, and now i get this:
2012-10-26 12:01:50,950 http-8080-6 ERROR 721x1503x1 dkr3i3 10.3.10.17 /rest/greenhopper/1.0/xboard/plan/backlog/data.json [common.error.jersey.ThrowableExceptionMapper] Uncaught exception thrown by REST service java.lang.NullPointerException at com.atlassian.greenhopper.web.rapid.plan.PlanningModeResource.createEpicsData(PlanningModeResource.java:261) at com.atlassian.greenhopper.web.rapid.plan.PlanningModeResource.loadBacklogData(PlanningModeResource.java:230) at com.atlassian.greenhopper.web.rapid.plan.PlanningModeResource.access$300(PlanningModeResource.java:53) at com.atlassian.greenhopper.web.rapid.plan.PlanningModeResource$1.call(PlanningModeResource.java:118) at com.atlassian.greenhopper.web.rapid.plan.PlanningModeResource$1.call(PlanningModeResource.java:103) at com.atlassian.greenhopper.web.util.RestCall.response(RestCall.java:48) at com.atlassian.greenhopper.web.AbstractResource.response(AbstractResource.java:48) at com.atlassian.greenhopper.web.rapid.plan.PlanningModeResource.getBacklogData(PlanningModeResource.java:102)
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
I also am seeing this. There is no 'Epic' Issue type in my JIRA instance, and when I tried to uninstall greenhopper and reinstall, it still didn't create one.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Online forums and learning are now in one easy-to-use experience.
By continuing, you accept the updated Community Terms of Use and acknowledge the Privacy Policy. Your public name, photo, and achievements may be publicly visible and available in search engines.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.