[jboss-user] [Spring Integration] - Can't get a reference to parent context.

Crucifix do-not-reply at jboss.com
Mon Aug 24 18:39:00 EDT 2009

I've got an EAR deployment with multiple JARs - each JAR contains its own Spring context via jboss-spring.xml files.  The challenge I'm facing is that I want my main application to be able to instantiate Spring beans from these child contexts.

Now, I haven't a lot of experience with Spring, but I'm assuming that through the parent/child hierarchy of contexts (using 'BeanFactory=(xxx) and ParentBeanFactory=(xxx)'), the children can get beans from the parent, but not vice versa.

That doesn't work for me - I need access to those beans, so I'm trying to register the child beans directly into the parent context using a BeanPostProcessor that finds the parent and stuffs it in there instead.

Maybe this isn't such a good idea (could be other dependency issues?), but that's beside the point. :)  The trouble is, I can't get a reference to the parent context... NamedXmlApplicationContext.getParent() always returns null.

I wrote a simple ApplicationListener (see below) to dump out all my beans and their context name.  It also logs the parent context name for the given context, if it's there, but it never is (see log output below).

Note that if I change my module order, I get errors in the child context that the parent BeanFactory is not bound, so I know that in my normal setup, my parent is definitely being registered (I also see it in the JNDI tree).

  | @Component
  | public class SpringContextListener implements ApplicationListener {
  |     private static final Logger logger = Logger.getLogger(SpringContextListener.class);
  |     public void onApplicationEvent(ApplicationEvent applicationEvent) {
  |         if (logger.isTraceEnabled()) {
  |             if (applicationEvent.getSource() instanceof NamedXmlApplicationContext) {
  |                 NamedXmlApplicationContext context = (NamedXmlApplicationContext) applicationEvent.getSource();
  |                 NamedXmlApplicationContext parentContext = (NamedXmlApplicationContext) context.getParent();
  |                 String[] registeredBeans = context.getBeanDefinitionNames();
  |                 for (String bean : registeredBeans) {
  |                     if (parentContext == null) {
  |                         logger.trace(String.format("Spring Bean (%s,NoParent): %s", context.getName(), bean));
  |                     } else {
  |                         logger.trace(String.format("Spring Bean (%s,%s): %s", context.getName(), parentContext.getName(), bean));
  |                     }
  |                 }
  |             }
  |         }
  |     }
  | }

Log output:

  | 2009-08-24 15:32:48,956 TRACE [com.mydomain.listeners.SpringContextListener] Spring Bean (DiagnosticPlugin-BeanFactory,NoParent): org.springframework.context.annotation.internalPersistenceAnnotationProcessor
  | 2009-08-24 15:32:48,962 TRACE [com.mydomain.listeners.SpringContextListener] Spring Bean (DiagnosticPlugin-BeanFactory,NoParent): org.springframework.context.annotation.internalCommonAnnotationProcessor
  | 2009-08-24 15:32:48,968 TRACE [com.mydomain.listeners.SpringContextListener] Spring Bean (DiagnosticPlugin-BeanFactory,NoParent): org.springframework.context.annotation.internalAutowiredAnnotationProcessor
  | 2009-08-24 15:32:48,974 TRACE [com.mydomain.listeners.SpringContextListener] Spring Bean (DiagnosticPlugin-BeanFactory,NoParent): org.springframework.context.annotation.internalRequiredAnnotationProcessor
  | ... etc ...

Description for parent jboss-spring.xml:

  | <description>BeanFactory=(Main-BeanFactory)</description>

Description for child jboss-spring.xml:

  | <description>BeanFactory=(DiagnosticPlugin-BeanFactory) ParentBeanFactory=(Main-BeanFactory)</description>

Any ideas on what I've done wrong, and how I can gain access to the parent context?

View the original post : http://www.jboss.org/index.html?module=bb&op=viewtopic&p=4251327#4251327

Reply to the post : http://www.jboss.org/index.html?module=bb&op=posting&mode=reply&p=4251327

More information about the jboss-user mailing list