4 Replies Latest reply on Nov 28, 2009 12:57 PM by Marius Bogoevici

    How to access deployed bean reference from a different sprin

    Marius Bogoevici Expert

      Restoring a post moved by mistake: Post 1

      "ivanyuan" wrote:
      Hi Guru,

      I am using JBoss 4.2.2GA and jboss-spring deployer 2.5 (JDK5). I have a spring archive called BillingFramework.spring, which can be deployed successfully by the deployer and can be accessed from different web application as well.

      However I would like to make those deployed beans available to another spring context, which is managed by MULE. Here is the snapshot of my muleApplicationContext.xml, where I want to have the reference of the deployed bean

      
      <beans xmlns=...
      
       <!-- This description tag doesn't work -->
       <description>ParentBeanFactory="BillingFramework"</description>
      
       <!-- access reference of billingBean, which is depoyed in BillingFramework -->
       <bean class="com.iseemedia.billing.Mediation">
       <property name="url">
       <value>https://localhost/test</value>
       </property>
       <property name="billing" ref="billingBean"/>
       </bean>
      ...
      </beans>
      
      


      I tried to put a description tag into the spring bean context, but it is not a recognized tag in spring context. How can I access the deployed bean reference (say billingBean) from this spring bean context file? or if there is any way I can access the deployed bean from the bean defined in above spring context?

      Thank a lot,

      Ivan Yuan


        • 1. Re: How to access deployed bean reference from a different s
          Marius Bogoevici Expert

          Post #2, sorry for moving this by mistake.

          "ivanyuan" wrote:
          Hi Marius,

          I also tried using the following spring bean context file
          
          <?xml version="1.0" encoding="UTF-8"?>
          <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:jaxrs="http://cxf.apache.org/jaxrs"
           xmlns:aop="http://www.springframework.org/schema/aop"
           xmlns:jee="http://www.springframework.org/schema/jee"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
           http://cxf.apache.org/jaxrs
           http://cxf.apache.org/schemas/jaxrs.xsd
           http://www.springframework.org/schema/aop
           http://www.springframework.org/schema/aop/spring-aop.xsd
           http://www.springframework.org/schema/jee
           http://www.springframework.org/schema/jee/spring-jee-2.0.xsd">
          
           <jee:jndi-lookup id="myBeanFactory" jndi-name="ProvisioningBillingFramework"/>
          
           <bean id="myTestBean" class="com.iseemedia.bean.test.TestBean">
           <property name="parentBeanFactory" ref="myBeanFactory"/>
           </bean>
          
          </beans>
          


          But I got the following exception. My question is how to access the bean factory or the deployed bean from a spring context which is outside of the spring archive.

          java.lang.reflect.InvocationTargetException
          
           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:585)
          
           at org.apache.commons.beanutils.MethodUtils.invokeMethod(MethodUtils.java:216)
          
           at org.apache.commons.digester.SetNextRule.end(SetNextRule.java:216)
          
           at org.apache.commons.digester.Rule.end(Rule.java:230)
          
           at org.apache.commons.digester.Digester.endElement(Digester.java:1130)
          
           at org.apache.xerces.parsers.AbstractSAXParser.endElement(Unknown Source)
          
           at org.apache.xerces.impl.dtd.XMLDTDValidator.endNamespaceScope(Unknown Source)
          
           at org.apache.xerces.impl.dtd.XMLDTDValidator.handleEndElement(Unknown Source)
          
           at org.apache.xerces.impl.dtd.XMLDTDValidator.endElement(Unknown Source)
          
           at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanEndElement(Unknown Source)
          
           at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source)
          
           at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
          
           at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
          
           at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
          
           at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
          
           at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
          
           at org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
          
           at org.apache.commons.digester.Digester.parse(Digester.java:1685)
          
           at org.mule.config.builders.AbstractDigesterConfiguration.process(AbstractDigesterConfiguration.java:101)
          
           at org.mule.config.builders.MuleXmlConfigurationBuilder.configure(MuleXmlConfigurationBuilder.java:268)
          
           at org.mule.config.builders.MuleXmlConfigurationBuilder.configure(MuleXmlConfigurationBuilder.java:221)
          
           at org.mule.ra.MuleResourceAdapter.start(MuleResourceAdapter.java:112)
          
           at org.jboss.resource.deployment.RARDeployment.startService(RARDeployment.java:109)
          
           at org.jboss.system.ServiceMBeanSupport.jbossInternalStart(ServiceMBeanSupport.java:289)
          
           at org.jboss.system.ServiceMBeanSupport.jbossInternalLifecycle(ServiceMBeanSupport.java:245)
          
           at org.jboss.system.ServiceDynamicMBeanSupport.invoke(ServiceDynamicMBeanSupport.java:124)
          
           at org.jboss.mx.server.RawDynamicInvoker.invoke(RawDynamicInvoker.java:164)
          
           at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)
          
           at org.jboss.system.ServiceController$ServiceProxy.invoke(ServiceController.java:978)
          
           at $Proxy0.start(Unknown Source)
          
           at org.jboss.system.ServiceController.start(ServiceController.java:417)
          
           at sun.reflect.GeneratedMethodAccessor10.invoke(Unknown Source)
          
           at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
          
           at java.lang.reflect.Method.invoke(Method.java:585)
          
           at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)
          
           at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)
          
           at org.jboss.mx.server.Invocation.invoke(Invocation.java:86)
          
           at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)
          
           at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)
          
           at org.jboss.mx.util.MBeanProxyExt.invoke(MBeanProxyExt.java:210)
          
           at $Proxy49.start(Unknown Source)
          
           at org.jboss.deployment.SimpleSubDeployerSupport.startService(SimpleSubDeployerSupport.java:356)
          
           at org.jboss.deployment.SimpleSubDeployerSupport.start(SimpleSubDeployerSupport.java:127)
          
           at org.jboss.deployment.MainDeployer.start(MainDeployer.java:1025)
          
           at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:819)
          
           at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:782)
          
           at sun.reflect.GeneratedMethodAccessor23.invoke(Unknown Source)
          
           at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
          
           at java.lang.reflect.Method.invoke(Method.java:585)
          
           at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)
          
           at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)
          
           at org.jboss.mx.interceptor.AbstractInterceptor.invoke(AbstractInterceptor.java:133)
          
           at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)
          
           at org.jboss.mx.interceptor.ModelMBeanOperationInterceptor.invoke(ModelMBeanOperationInterceptor.java:142)
          
           at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)
          
           at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)
          
           at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)
          
           at org.jboss.mx.util.MBeanProxyExt.invoke(MBeanProxyExt.java:210)
          
           at $Proxy9.deploy(Unknown Source)
          
           at org.jboss.deployment.scanner.URLDeploymentScanner.deploy(URLDeploymentScanner.java:421)
          
           at org.jboss.deployment.scanner.URLDeploymentScanner.scan(URLDeploymentScanner.java:634)
          
           at org.jboss.deployment.scanner.AbstractDeploymentScanner$ScannerThread.doScan(AbstractDeploymentScanner.java:263)
          
           at org.jboss.deployment.scanner.AbstractDeploymentScanner.startService(AbstractDeploymentScanner.java:336)
          
           at org.jboss.system.ServiceMBeanSupport.jbossInternalStart(ServiceMBeanSupport.java:289)
          
           at org.jboss.system.ServiceMBeanSupport.jbossInternalLifecycle(ServiceMBeanSupport.java:245)
          
           at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source)
          
           at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
          
           at java.lang.reflect.Method.invoke(Method.java:585)
          
           at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)
          
           at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)
          
           at org.jboss.mx.server.Invocation.invoke(Invocation.java:86)
          
           at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)
          
           at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)
          
           at org.jboss.system.ServiceController$ServiceProxy.invoke(ServiceController.java:978)
          
           at $Proxy0.start(Unknown Source)
          
           at org.jboss.system.ServiceController.start(ServiceController.java:417)
          
           at sun.reflect.GeneratedMethodAccessor10.invoke(Unknown Source)
          
           at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
          
           at java.lang.reflect.Method.invoke(Method.java:585)
          
           at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)
          
           at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)
          
           at org.jboss.mx.server.Invocation.invoke(Invocation.java:86)
          
           at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)
          
           at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)
          
           at org.jboss.mx.util.MBeanProxyExt.invoke(MBeanProxyExt.java:210)
          
           at $Proxy4.start(Unknown Source)
          
           at org.jboss.deployment.SARDeployer.start(SARDeployer.java:302)
          
           at org.jboss.deployment.MainDeployer.start(MainDeployer.java:1025)
          
           at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:819)
          
           at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:782)
          
           at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:766)
          
           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:585)
          
           at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)
          
           at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)
          
           at org.jboss.mx.interceptor.AbstractInterceptor.invoke(AbstractInterceptor.java:133)
          
           at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)
          
           at org.jboss.mx.interceptor.ModelMBeanOperationInterceptor.invoke(ModelMBeanOperationInterceptor.java:142)
          
           at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)
          
           at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)
          
           at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)
          
           at org.jboss.mx.util.MBeanProxyExt.invoke(MBeanProxyExt.java:210)
          
           at $Proxy5.deploy(Unknown Source)
          
           at org.jboss.system.server.ServerImpl.doStart(ServerImpl.java:482)
          
           at org.jboss.system.server.ServerImpl.start(ServerImpl.java:362)
          
           at org.jboss.Main.boot(Main.java:200)
          
           at org.jboss.Main$1.run(Main.java:508)
          
           at java.lang.Thread.run(Thread.java:595)
          
          Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'myBeanFactory': Invocation of init method failed; nested exception is javax.naming.NameNotFoundException: ProvisioningBillingFramework not bound
          


          Could you please give an instruction on how to make deployed bean available in this scenario?

          Thank you so much!

          Ivan Yuan


          • 2. Re: How to access deployed bean reference from a different s
            Marius Bogoevici Expert

            Ivan,

            [codeParentBeanFactory="BillingFramework"

            • 3. Re: How to access deployed bean reference from a different s
              Zithulele Shange Newbie

              You must use braces '()' not qoutations '""' in your description when you define your bean factory or parentbeanfactory.

              <beans xmlns=...
              
               <!-- This description tag doesn't work -->
               <description>ParentBeanFactory=(BillingFramework)</description>
              
               <!-- access reference of billingBean, which is depoyed in BillingFramework -->
               <bean class="com.iseemedia.billing.Mediation">
               <property name="url">
               <value>https://localhost/test</value>
               </property>
               <property name="billing" ref="billingBean"/>
               </bean>
              ...
              </beans>
              
              




              • 4. Re: How to access deployed bean reference from a different s
                Marius Bogoevici Expert

                My previous post had a formatting error and was barely readable, so let me
                repost it:

                Ivan,

                <description>ParentBeanFactory="BillingFramework"</description>
                won't work in the JBoss Deployer, you need to use braces, but apart from that, it is a JBoss Deployer specific feature, and I don't think Mule (or for that matter any Spring context bootstrapping mechanism, other than the JBoss deployer) will recognize it.

                I'm not that familiar with the way Mule bootstraps their application context, but, generally speaking, in this case you want to retrieve the JBoss Deployer-bootstrapped application context from JNDI and set it as a parent for your new context (before the bean definitions are actually parsed and beans are instantiated, ideally in the constructor). This is what we do internally in the Deployer. So, I would look in Mule if it has a mechanism that allows you do do this.

                Marius