首页 文章

JIRA活动对象异常

提问于
浏览
1

我是jira活动对象实现的新手 . 使用jTrick http://www.j-tricks.com/tutorials/active-objects-injection实现活动对象时发现错误

“无法创建新的引用LazyLoadedServletReference {descriptor = com.atlassian.jira.demo.aoDemo:address-list(要添加和列出地址的servlet),servletContext =org.apache.catalina.core.ApplicationContextFacade@3a0a701} [INFO] [talledLocalContainer] com.atlassian.util.concurrent.LazyReference $ InitializationException:java.lang.NullPointerException:插件容器访问器为null . 插件:com.atlassian.jira.demo.aoDemo . 模块名称:com.atlassian.jira.demo . Servlet.AddressServlet“ .

IAOService.java的代码

public interface IAOService {
public ActiveObjects getActiveObjects();}

IAOServiceImpl的代码

public class IAOServiceImpl implements IAOService {
private final ActiveObjects ao;

public IAOServiceImpl(ActiveObjects ao) {
    System.out.println("Initializing constructor impl");
    System.out.println("IAOServiceImpl constructor found active object ::"+ao);
    this.ao=ao;         
}
public ActiveObjects getActiveObjects() {
    return this.ao;
}}

我在servlet构造函数中注入依赖项

依赖代码

public AddressServlet(IAOService aoService){if(aoService!= null){this.aoService = aoService;否则this.aoService = null;我在我的插件中禁用了atlassian-plugin-scanner功能 .

请帮我解决这个问题 .

我还在插件描述符文件中提到了ao模块 .

插件描述符代码:

<ao key="ao-module">
<description>Configuration of active object service</description>
<entity>sample.AddressEntity</entity>
<component-import key="ao" name="Active Objects service" interface="com.atlassian.activeobjects.external.ActiveObjects">
<description>Component to access Active Objects functionality from the plugin</description></component-import>

Pom代码

<pluginArtifact>
    <groupId>com.atlassian.activeobjects</groupId>
    <artifactId>activeobjects-plugin</artifactId>
    <version>${ao.version}</version>
</pluginArtifact>
<pluginArtifact>
    <groupId>com.atlassian.activeobjects</groupId>
    <artifactId>activeobjects-jira-spi</artifactId>
    <version>${ao.version}</version>
</pluginArtifact>

Ao.version是0.18

异常堆栈

[INFO] [talledLocalContainer] 2016-09-14 11:26:37,451 http-nio-2990-exec-2 DEBUG admin 686x211x1 1x1imyf 172.17.20.51 /rest/plugins/1.0/com.atlassian.jira.demo.aoDemo- key [caactiveobjects.osgi.OsgiServiceUtilsImpl]使用接口net.java.ao.schema.TableNameConverter和properties {com.atlassian.plugin.key = com.atlassian.jira注册服务net.java.ao.atlassian.AtlassianTableNameConverter@677b0082 . demo.aoDemo} [INFO] [talledLocalContainer] 2016-09-14 11:26:37,453 http-nio-2990-exec-2 DEBUG admin 686x211x1 1x1imyf 172.17.20.51 /rest/plugins/1.0/com.atlassian.jira.demo .aoDemo-key [caactiveobjects.osgi.OsgiServiceUtilsImpl]使用接口com.atlassian.activeobjects.config.ActiveObjectsConfiguration和properties [INFO] [talledLocalContainer] 2016-09-14 11:26:37,457 http-nio-2990-exec-2 DEBUG admin 686x211x1 1x1im yf 172.17.20.51 /rest/plugins/1.0/com.atlassian.jira.demo.aoDemo-key [caactiveobjects.osgi.ActiveObjectsServiceFactory] onPluginModuleEnabledEvent为[com.atlassian.jira.demo.aoDemo]存储未附加的配置模块[INFO] [talledLocalContainer] 2016-09-14 11:26:37,463 http-nio-2990-exec-2 DEBUG admin 686x211x1 1x1imyf 172.17.20.51 /rest/plugins/1.0/com.atlassian.jira.demo.aoDemo-key [caactiveobjects .osgi.ActiveObjectsServiceFactory] onPluginEnabledEvent将未绑定附加到[com.atlassian.jira.demo.aoDemo] [INFO] [talledLocalContainer] 2016-09-14 11:26:37,463 http-nio-2990-exec-2 DEBUG admin 686x211x1 1x1imyf 172.17 .20.51 /rest/plugins/1.0/com.atlassian.jira.demo.aoDemo-key [caactiveobjects.osgi.TenantAwareActiveObjects] init bundle [com.atlassian.jira.demo.aoDemo] [INFO] [talledLocalContainer] 2016-09 -14 11:26:37,464 http-nio-2990-exec-2 DEBUG admin 686x211x1 1x1imyf 172.17.20.51 /rest/plugins/1.0/com.atlassian.jira.demo.aoDemo-key [caactiveobjects.osgi.TenantAwareAct iveObjects] bundle [com.atlassian.jira.demo.aoDemo]为JiraTenantImpl加载新的AO承诺 [INFO] [talledLocalContainer] 2016-09-14 11:26:37,464 http-nio-2990-exec -2 DEBUG admin 686x211x1 1x1imyf 172.17.20.51 /rest/plugins/1.0/com.atlassian.jira.demo.aoDemo-key [caactiveobjects.osgi.TenantAwareActiveObjects] setAoConfiguration [com.atlassian.jira.demo.aoDemo] [INFO] [talledLocalContainer] 2016-09-14 11:26:37,464 http-nio-2990-exec-2 DEBUG admin 686x211x1 1x1imyf 172.17.20.51 /rest/plugins/1.0/com.atlassian.jira.demo.aoDemo-key [caactiveobjects .osgi.TenantAwareActiveObjects] bundle [com.atlassian.jira.demo.aoDemo]得到ActiveObjectsConfiguration [INFO] [talledLocalContainer] 2016-09-14 11:26:37,474 active-objects-init-JiraTenantImpl - 0 DEBUG admin [caactiveobjects.osgi.TenantAwareActiveObjects] bundle [com.atlassian.jira.demo.aoDemo]创建ActiveObjects [INFO] [talledLocalContainer] 2016-09-14 11:26:37,488 active-objects-init-JiraTenantImpl -0 DEBUG admin [caactiveobjects.osgi.TenantAwareActiveObjects] bundle [com.atlassian.jira.demo.aoDemo]创建ActiveObjects [INFO] [talledLocalContainer] 2016-09-14 11:26:47,872 http-nio-2990- exec-9 ERROR admin 686x226x1 1x1imyf 172.17.20.51 / plugins / servlet / addressservlet [caplugin.servlet.DefaultServletModuleManager]无法创建新引用LazyLoadedServletReference {descriptor = com.atlassian.jira.demo.aoDemo:address-list(一个servlet to添加和列表地址),servletContext =org.apache.catalina.core.ApplicationContextFacade@3a0a701} [INFO] [talledLocalContainer] com.atlassian.util.concurrent.LazyReference $ InitializationException:java.lang.NullPointerException:插件容器访问器为空 . 插件:com.atlassian.jira.demo.aoDemo . 模块名称:com.atlassian.jira.demo.Servlet.AddressServlet . [INFO] [talledLocalContainer] at com.atlassian.util.concurrent.LazyReference.getInterruptibly(LazyReference.java:149)[INFO] [talledLocalContainer] at com.atlassian.util.concurrent.LazyReference.get(LazyReference.java:112) [INFO] [talledLocalContainer] at com.atlassian.plugin.servlet.DefaultServletModuleManager.getInstance(DefaultServletModuleManager.java:374)[INFO] [talledLocalContainer] at com.atlassian.plugin.servlet.DefaultServletModuleManager.getServlet(DefaultServletModuleManager.java:353) [INFO] [talledLocalContainer] at com.atlassian.plugin.servlet.DefaultServletModuleManager.getServlet(DefaultServletModuleManager.java:171)[INFO] [talledLocalContainer] at com.atlassian.plugin.servlet.ServletModuleContainerServlet.service(ServletModuleContainerServlet.java:36) [INFO] [talledLocalContainer]在javax.servlet.http.HttpServlet.service(HttpServlet.java:725)[INFO] [talledLocalContainer] ... 70过滤了[INFO] [talledLocalContainer] com.atlassian.labs.httpservice.resource .Resourc eFilter.doFilter(ResourceFilter.java:59)[INFO] [talledLocalContainer] ... 38过滤[INFO] [talledLocalContainer] com.atlassian.jira.security.JiraSecurityFilter.doFilter(JiraSecurityFilter.java:70)[INFO] [ talledLocalContainer] ... 91过滤了[INFO] [talledLocalContainer] java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)[INFO] [talledLocalContainer] at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor) .java:617)[INFO] [talledLocalContainer] at org.apache.tomcat.util.threads.TaskThread $ WrappingRunnable.run(TaskThread.java:61)[INFO] [talledLocalContainer] at java.lang.Thread.run(Thread .java:745)[INFO] [talledLocalContainer]引起:java.lang.NullPointerException:插件容器访问器为空 . 插件:com.atlassian.jira.demo.aoDemo . 模块名称:com.atlassian.jira.demo.Servlet.AddressServlet . [INFO] [talledLocalContainer]位于com.google.common.base.Preconditions.checkNotNull(Preconditions.java:250)[INFO] [talledLocalContainer] at com.atlassian.plugin.module.ClassPrefixModuleFactory.createModule(ClassPrefixModuleFactory.java:32) [INFO] [talledLocalContainer]位于com.atlassian.plugin.module.PrefixDelegatingModuleFactory.createModule(PrefixDelegatingModuleFactory.java:88)[INFO] [talledLocalContainer] at com.atlassian.plugin.servlet.descriptors.ServletModuleDescriptor.getModule(ServletModuleDescriptor.java: 43)[INFO] [talledLocalContainer] at com.atlassian.plugin.servlet.DelegatingPluginServlet . (DelegatingPluginServlet.java:30)[INFO] [talledLocalContainer] at com.atlassian.plugin.servlet.DefaultServletModuleManager $ LazyLoadedServletReference.create(DefaultServletModuleManager.java :456)[INFO] [talledLocalContainer] at com.atlassian.util.concurrent.LazyReference $ Sync.run(LazyReference.java:325)[INFO] [talledLocalContainer] at com.atlassian.util.concurrent.LazyReference.getInte rruptibly(LazyReference.java:143)[INFO] [talledLocalContainer] ... 211更多

1 回答

  • 0

    您应该将ActiveObjects注入到servlet的构造函数中,而不是调用 ComponentAccessor.getOSGIComponentInstanceOfType . 无论如何,这是推荐的设计模式,并且at least one source建议不使用注入访问AO将以与上述类似的方式中断 .

    我相信这是因为GetOSGIComponentInstanceOfType从主JIRA(Pico)容器返回单个AO上下文,该容器不知道您的插件,而您想要为插件自己的实体配置AO .

    请注意,servlet已经自动连接,因此您无需创建单独的 <component> ,如上面的链接所示 - 只需将ActiveObjects作为构造函数参数添加到您的servlet中,并将其保存在您的类中以供以后使用 .

相关问题