Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring 从BundleContextAware类访问应用程序上下文_Spring_Osgi_Springsource Dm Server - Fatal编程技术网

Spring 从BundleContextAware类访问应用程序上下文

Spring 从BundleContextAware类访问应用程序上下文,spring,osgi,springsource-dm-server,Spring,Osgi,Springsource Dm Server,我已经从现有的遗留战争中创建了一个osgi包。应用程序有一个实现spring接口ApplicationContextAware的类,然后它使用上下文以编程方式获取bean(不确定为什么,但最终需要重构)。该应用程序现在使用OsgiBundleXmlApplicationContext,但我认为使用该方法存在一个问题,即在任何实现ApplicationContextAware的类中都不会调用setApplicationContext方法,因此该类中的上下文现在总是空的 因此,作为一种解决方法,我实

我已经从现有的遗留战争中创建了一个osgi包。应用程序有一个实现spring接口ApplicationContextAware的类,然后它使用上下文以编程方式获取bean(不确定为什么,但最终需要重构)。该应用程序现在使用OsgiBundleXmlApplicationContext,但我认为使用该方法存在一个问题,即在任何实现ApplicationContextAware的类中都不会调用setApplicationContext方法,因此该类中的上下文现在总是空的

因此,作为一种解决方法,我实现了BundleContextAware,这样我就可以获得对已发布上下文的引用,并以这种方式访问bean。这可以正常工作,但是上下文中唯一的bean是warDeployer(应该提到的是,我正在使用spring dm bundle spring extender来部署war)。上下文中存在的bundle是我的bundle,因此我无法理解为什么我得到的上下文中没有我的bean。我必须获取应用程序上下文的代码是:

ServiceReference ref=bundleContext.getServiceReference(ApplicationContext.class.getName()); applicationContext=(OsgiBundleXmlApplicationContext)bundleContext.getService(ref);

我可以在日志中看到我的大部分上下文都被创建了,所以我看不出为什么它们不在我得到的上下文中

有人能告诉我哪里出了问题吗?我知道这种方法有点粗糙,但在重构现有代码之前,它是暂时的

提前谢谢


Barry

我相信ApplicationContext服务是由SpringDM extender异步注册的。因此,您可能有一个竞争条件,即在服务实际注册之前请求服务


你可以引入一个延迟,但随后你就进入了令人讨厌的黑客领域。最好弄清楚
ApplicationContextAware
bean上的
setApplicationContext
方法没有被设置的原因。您应该尝试提出这是针对Spring DM的bug,或者在Spring DM Google组中询问。

您好,谢谢您的回复。我认为这可能是一个bug,因为我没有看到任何文档表明这不应该工作。今年3月有一个jira登录()但没有针对它采取任何行动。我通过使用BeanFactoryAware接口解决了这个问题,该接口工作正常。Thanks@user521065 .. 如果您收到此消息,请提供一些建议,说明如何使用BeanFactoryAware接口解决此问题?我将ApplicationContextAware替换为BeanFactoryAware,但spring仍然无法设置工厂,从而导致空值。