Nice, it works. Thanks a lot, Guillaume. Lars
BTW: I'll commit it asap. Guillaume Nodet schrieb: > On Tue, Apr 1, 2008 at 3:45 PM, Lars Heinemann <[EMAIL PROTECTED]> > wrote: > > >> Good hint, Guillaume. >> I put in the try/catch block and retried. >> > > > Cool. Wanna commit this change ? > > For the exception below, you just have to add the spring util namespace to > the xbean.xml: > xmlns:util="http://www.springframework.org/schema/util" > > > >> This is the result now: >> >> ERROR - DroolsComponent - >> org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: >> Line 11 in XML document from file >> [/opt/apache-servicemix-3.3-SNAPSHOT/data/smx/service-assemblies/cp-inputrouter-sa/version_1/sus/servicemix-drools/cp-inputrouter-su/xbean.xml] >> is invalid; nested exception is org.xml.sax.SAXParseException: The prefix >> "util" for element "util:map" is not bound. >> ERROR - FileSystemXmlApplicationContext - Exception thrown from >> ApplicationListener handling ContextClosedEvent >> java.lang.IllegalStateException: ApplicationEventMulticaster not >> initialized - call 'refresh' before multicasting events via the context: >> [EMAIL PROTECTED]: >> display name [ >> [EMAIL PROTECTED]; >> startup date [Tue Apr 01 15:42:46 CEST 2008]; root of context hierarchy >> at >> org.springframework.context.support.AbstractApplicationContext.getApplicationEventMulticaster >> (AbstractApplicationContext.java:259) >> at >> org.springframework.context.support.AbstractApplicationContext.publishEvent >> (AbstractApplicationContext.java:246) >> at >> org.springframework.context.support.AbstractApplicationContext.doClose( >> AbstractApplicationContext.java:676) >> at >> org.springframework.context.support.AbstractApplicationContext.close( >> AbstractApplicationContext.java:651) >> at >> org.springframework.context.support.AbstractApplicationContext.destroy( >> AbstractApplicationContext.java:639) >> at org.apache.servicemix.common.xbean.AbstractXBeanDeployer.deploy >> (AbstractXBeanDeployer.java:108) >> at org.apache.servicemix.common.BaseServiceUnitManager.doDeploy( >> BaseServiceUnitManager.java:88) >> at org.apache.servicemix.common.BaseServiceUnitManager.deploy( >> BaseServiceUnitManager.java:69) >> at >> org.apache.servicemix.jbi.framework.DeploymentService.deployServiceAssembly >> (DeploymentService.java:508) >> at >> org.apache.servicemix.jbi.framework.AutoDeploymentService.checkPendingSAs( >> AutoDeploymentService.java:482) >> at >> org.apache.servicemix.jbi.framework.AutoDeploymentService.checkPendingComponents >> (AutoDeploymentService.java:535) >> at >> org.apache.servicemix.jbi.framework.AutoDeploymentService.updateSharedLibrary >> (AutoDeploymentService.java:317) >> at >> org.apache.servicemix.jbi.framework.AutoDeploymentService.updateArchive( >> AutoDeploymentService.java:254) >> at >> org.apache.servicemix.jbi.framework.AutoDeploymentService.monitorDirectory >> (AutoDeploymentService.java:658) >> at >> org.apache.servicemix.jbi.framework.AutoDeploymentService.access$800( >> AutoDeploymentService.java:62) >> at org.apache.servicemix.jbi.framework.AutoDeploymentService$1.run( >> AutoDeploymentService.java:622) >> at java.util.TimerThread.mainLoop(Timer.java:512) >> at java.util.TimerThread.run(Timer.java:462) >> ERROR - DroolsComponent - java.lang.IllegalStateException: >> BeanFactory not initialized or already closed - call 'refresh' before >> accessing beans via the ApplicationContext >> ERROR - AutoDeploymentService - Failed to update Service >> Assembly: cp-inputrouter-sa-1.0-SNAPSHOT.0.tmp >> java.lang.Exception: <?xml version="1.0" encoding="UTF-8"?> >> <jbi-task xmlns="http://java.sun.com/xml/ns/jbi/management-message" >> version="1.0"> >> <jbi-task-result> >> <frmwk-task-result> >> <frmwk-task-result-details> >> <task-result-details> >> <task-id>deploy</task-id> >> <task-result>FAILED</task-result> >> <message-type>ERROR</message-type> >> </task-result-details> >> </frmwk-task-result-details> >> </frmwk-task-result> >> <component-task-result xmlns=" >> http://java.sun.com/xml/ns/jbi/management-message"> >> <component-name>servicemix-drools</component-name> >> <component-task-result-details> >> <task-result-details> >> <task-id>deploy</task-id> >> <task-result>FAILED</task-result> >> <message-type>ERROR</message-type> >> <task-status-msg> >> <msg-loc-info> >> <loc-token/> >> <loc-message>Could not deploy xbean service unit</loc-message> >> </msg-loc-info> >> </task-status-msg> >> <exception-info> >> <nesting-level>1</nesting-level> >> <msg-loc-info> >> <loc-token/> >> <loc-message>Line 11 in XML >> document from file >> [/opt/apache-servicemix-3.3-SNAPSHOT/data/smx/service-assemblies/cp-inputrouter-sa/version_1/sus/servicemix-drools/cp-inputrouter-su/xbean.xml] >> is invalid; nested exception is org.xml.sax.SAXParseException: The prefix >> "util" for element "util:map" is not bound.</loc-message> >> <stack-trace><![CDATA[ >> org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: >> Line 11 in XML document from file >> [/opt/apache-servicemix-3.3-SNAPSHOT/data/smx/service-assemblies/cp-inputrouter-sa/version_1/sus/servicemix-drools/cp-inputrouter-su/xbean.xml] >> is invalid; nested exception is org.xml.sax.SAXParseException: The prefix >> "util" for element "util:map" is not bound. >> Caused by: org.xml.sax.SAXParseException: The prefix "util" for element >> "util:map" is not bound. >> at >> org.apache.xerces.util.ErrorHandlerWrapper.createSAXParseException(Unknown >> Source) >> at org.apache.xerces.util.ErrorHandlerWrapper.fatalError(Unknown >> Source) >> at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown >> Source) >> at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown >> Source) >> at >> org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanStartElement(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.DOMParser.parse(Unknown Source) >> at org.apache.xerces.jaxp.DocumentBuilderImpl.parse(Unknown Source) >> at >> org.springframework.beans.factory.xml.DefaultDocumentLoader.loadDocument( >> DefaultDocumentLoader.java:76) >> at >> org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions >> (XmlBeanDefinitionReader.java:351) >> at >> org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions >> (XmlBeanDefinitionReader.java:303) >> at >> org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions >> (XmlBeanDefinitionReader.java:280) >> at >> org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions >> (AbstractBeanDefinitionReader.java:131) >> at >> org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions >> (AbstractBeanDefinitionReader.java:147) >> at >> org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions >> (AbstractBeanDefinitionReader.java:173) >> at >> org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions >> (AbstractXmlApplicationContext.java:112) >> at >> org.apache.xbean.spring.context.FileSystemXmlApplicationContext.loadBeanDefinitions >> (FileSystemXmlApplicationContext.java:168) >> at >> org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory >> (AbstractRefreshableApplicationContext.java:101) >> at >> org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory >> (AbstractApplicationContext.java:389) >> at >> org.springframework.context.support.AbstractApplicationContext.refresh( >> AbstractApplicationContext.java:324) >> at org.apache.servicemix.common.xbean.AbstractXBeanDeployer.deploy( >> AbstractXBeanDeployer.java:89) >> at org.apache.servicemix.common.BaseServiceUnitManager.doDeploy( >> BaseServiceUnitManager.java:88) >> at org.apache.servicemix.common.BaseServiceUnitManager.deploy( >> BaseServiceUnitManager.java:69) >> at >> org.apache.servicemix.jbi.framework.DeploymentService.deployServiceAssembly >> (DeploymentService.java:508) >> at >> org.apache.servicemix.jbi.framework.AutoDeploymentService.checkPendingSAs( >> AutoDeploymentService.java:482) >> at >> org.apache.servicemix.jbi.framework.AutoDeploymentService.checkPendingComponents >> (AutoDeploymentService.java:535) >> at >> org.apache.servicemix.jbi.framework.AutoDeploymentService.updateSharedLibrary >> (AutoDeploymentService.java:317) >> at >> org.apache.servicemix.jbi.framework.AutoDeploymentService.updateArchive( >> AutoDeploymentService.java:254) >> at >> org.apache.servicemix.jbi.framework.AutoDeploymentService.monitorDirectory >> (AutoDeploymentService.java:658) >> at >> org.apache.servicemix.jbi.framework.AutoDeploymentService.access$800( >> AutoDeploymentService.java:62) >> at org.apache.servicemix.jbi.framework.AutoDeploymentService$1.run( >> AutoDeploymentService.java:622) >> at java.util.TimerThread.mainLoop(Timer.java:512) >> at java.util.TimerThread.run(Timer.java:462) >> ]]></stack-trace> >> </msg-loc-info> >> </exception-info> >> </task-result-details> >> </component-task-result-details> >> </component-task-result> >> </jbi-task-result> >> </jbi-task> >> >> at org.apache.servicemix.jbi.framework.ManagementSupport.failure( >> ManagementSupport.java:125) >> at org.apache.servicemix.jbi.framework.ManagementSupport.failure( >> ManagementSupport.java:111) >> at >> org.apache.servicemix.jbi.framework.DeploymentService.deployServiceAssembly >> (DeploymentService.java:543) >> at >> org.apache.servicemix.jbi.framework.AutoDeploymentService.checkPendingSAs( >> AutoDeploymentService.java:482) >> at >> org.apache.servicemix.jbi.framework.AutoDeploymentService.checkPendingComponents >> (AutoDeploymentService.java:535) >> at >> org.apache.servicemix.jbi.framework.AutoDeploymentService.updateSharedLibrary >> (AutoDeploymentService.java:317) >> at >> org.apache.servicemix.jbi.framework.AutoDeploymentService.updateArchive( >> AutoDeploymentService.java:254) >> at >> org.apache.servicemix.jbi.framework.AutoDeploymentService.monitorDirectory >> (AutoDeploymentService.java:658) >> at >> org.apache.servicemix.jbi.framework.AutoDeploymentService.access$800( >> AutoDeploymentService.java:62) >> at org.apache.servicemix.jbi.framework.AutoDeploymentService$1.run( >> AutoDeploymentService.java:622) >> at java.util.TimerThread.mainLoop(Timer.java:512) >> at java.util.TimerThread.run(Timer.java:462) >> >> >> It seems the parser has no idea what to do with the <util:map> stuff in >> the xbean config. >> >> What to do now? Is there a namespace I can add? >> >> Regards, >> Lars >> >> >> >> >> Guillaume Nodet schrieb: >> >>> Sounds like another regression :-( >>> Given the stack trace, it seems there is an exception that is swallowed >>> >> by >> >>> the exception displayed, because of the call to close/destroy. >>> This may mean we need to enclose the applicationContext.destroy(); in a >>> try/catch block in the AbstractXBeanDeployer#deploy() method. >>> Could you try that ? >>> >>> On Tue, Apr 1, 2008 at 2:56 PM, lhe77 <[EMAIL PROTECTED]> >>> >> wrote: >> >>> >>>> Hi, >>>> >>>> I did what is described on the servicemix-drools wiki page to inject an >>>> additional bean. >>>> When deploying it to smx it throws exception: >>>> >>>> >>>> WARN - AutoDeploymentService - Directory: hotdeploy: >>>> >> Automatic >> >>>> install of >>>> /opt/apache-servicemix-3.3-SNAPSHOT/hotdeploy/cp- >>>> inputrouter-sa-1.0-SNAPSHOT.zip >>>> failed >>>> javax.jbi.management.DeploymentException: Failed to update Service >>>> Assembly: >>>> cp-inputrouter-sa >>>> at >>>> >>>> >>>> >> org.apache.servicemix.jbi.framework.AutoDeploymentService.updateServiceAssembly >> >>>> (AutoDeploymentService.java:368) >>>> at >>>> org.apache.servicemix.jbi.framework.AutoDeploymentService.updateArchive >>>> >> ( >> >>>> AutoDeploymentService.java:256) >>>> at >>>> >>>> >> org.apache.servicemix.jbi.framework.AutoDeploymentService.monitorDirectory >> >>>> (AutoDeploymentService.java:658) >>>> at >>>> org.apache.servicemix.jbi.framework.AutoDeploymentService.access$800( >>>> AutoDeploymentService.java:62) >>>> at >>>> org.apache.servicemix.jbi.framework.AutoDeploymentService$1.run( >>>> AutoDeploymentService.java:622) >>>> at java.util.TimerThread.mainLoop(Timer.java:512) >>>> at java.util.TimerThread.run(Timer.java:462) >>>> Caused by: java.lang.Exception: <?xml version="1.0" encoding="UTF-8"?> >>>> <jbi-task xmlns="http://java.sun.com/xml/ns/jbi/management-message" >>>> version="1.0"> >>>> <jbi-task-result> >>>> <frmwk-task-result> >>>> <frmwk-task-result-details> >>>> <task-result-details> >>>> <task-id>deploy</task-id> >>>> <task-result>FAILED</task-result> >>>> <message-type>ERROR</message-type> >>>> </task-result-details> >>>> </frmwk-task-result-details> >>>> </frmwk-task-result> >>>> <component-task-result >>>> xmlns="http://java.sun.com/xml/ns/jbi/management-message"> >>>> <component-name>servicemix-drools</component-name> >>>> <component-task-result-details> >>>> <task-result-details> >>>> <task-id>deploy</task-id> >>>> <task-result>FAILED</task-result> >>>> <message-type>ERROR</message-type> >>>> <task-status-msg> >>>> <msg-loc-info> >>>> <loc-token/> >>>> <loc-message>Unable to deploy service unit</loc-message> >>>> </msg-loc-info> >>>> </task-status-msg> >>>> <exception-info> >>>> <nesting-level>1</nesting-level> >>>> <msg-loc-info> >>>> <loc-token/> >>>> <loc-message>BeanFactory not >>>> initialized or already closed - call 'refresh' before accessing beans >>>> >> via >> >>>> the ApplicationContext</loc-message> >>>> >>>> <stack-trace><![CDATA[java.lang.IllegalStateException: BeanFactory not >>>> initialized or already closed - call 'refresh' before accessing beans >>>> >> via >> >>>> the ApplicationContext >>>> at >>>> >>>> >>>> >> org.springframework.context.support.AbstractRefreshableApplicationContext.getBeanFactory >> >>>> (AbstractRefreshableApplicationContext.java:121) >>>> at >>>> >>>> >>>> >> org.springframework.context.support.AbstractApplicationContext.getLifecycleBeans >> >>>> (AbstractApplicationContext.java:912) >>>> at >>>> org.springframework.context.support.AbstractApplicationContext.stop( >>>> AbstractApplicationContext.java:886) >>>> at >>>> org.springframework.context.support.AbstractApplicationContext.doClose( >>>> AbstractApplicationContext.java:682) >>>> at >>>> org.springframework.context.support.AbstractApplicationContext.close( >>>> AbstractApplicationContext.java:651) >>>> at >>>> org.springframework.context.support.AbstractApplicationContext.destroy( >>>> AbstractApplicationContext.java:639) >>>> at >>>> org.apache.servicemix.common.xbean.AbstractXBeanDeployer.deploy( >>>> AbstractXBeanDeployer.java:106) >>>> at >>>> org.apache.servicemix.common.BaseServiceUnitManager.doDeploy( >>>> BaseServiceUnitManager.java:88) >>>> at >>>> org.apache.servicemix.common.BaseServiceUnitManager.deploy( >>>> BaseServiceUnitManager.java:69) >>>> at >>>> >>>> >>>> >> org.apache.servicemix.jbi.framework.DeploymentService.deployServiceAssembly >> >>>> (DeploymentService.java:508) >>>> at >>>> >>>> >>>> >> org.apache.servicemix.jbi.framework.AutoDeploymentService.updateServiceAssembly >> >>>> (AutoDeploymentService.java:353) >>>> at >>>> org.apache.servicemix.jbi.framework.AutoDeploymentService.updateArchive >>>> >> ( >> >>>> AutoDeploymentService.java:256) >>>> at >>>> >>>> >> org.apache.servicemix.jbi.framework.AutoDeploymentService.monitorDirectory >> >>>> (AutoDeploymentService.java:658) >>>> at >>>> org.apache.servicemix.jbi.framework.AutoDeploymentService.access$800( >>>> AutoDeploymentService.java:62) >>>> at >>>> org.apache.servicemix.jbi.framework.AutoDeploymentService$1.run( >>>> AutoDeploymentService.java:622) >>>> at java.util.TimerThread.mainLoop(Timer.java:512) >>>> at java.util.TimerThread.run(Timer.java:462) >>>> ]]></stack-trace> >>>> </msg-loc-info> >>>> </exception-info> >>>> </task-result-details> >>>> </component-task-result-details> >>>> </component-task-result> >>>> </jbi-task-result> >>>> </jbi-task> >>>> >>>> at >>>> org.apache.servicemix.jbi.framework.ManagementSupport.failure( >>>> ManagementSupport.java:125) >>>> at >>>> org.apache.servicemix.jbi.framework.ManagementSupport.failure( >>>> ManagementSupport.java:111) >>>> at >>>> >>>> >>>> >> org.apache.servicemix.jbi.framework.DeploymentService.deployServiceAssembly >> >>>> (DeploymentService.java:543) >>>> at >>>> >>>> >>>> >> org.apache.servicemix.jbi.framework.AutoDeploymentService.updateServiceAssembly >> >>>> (AutoDeploymentService.java:353) >>>> ... 6 more >>>> >>>> >>>> The xbean: >>>> >>>> <?xml version="1.0" encoding="UTF-8"?> >>>> <beans xmlns:drools="http://servicemix.apache.org/drools/1.0" >>>> xmlns:cp="http://www.compart.net/ns/jbi"> >>>> >>>> <drools:endpoint service="cp:inputRouter" >>>> endpoint="inEndpoint" >>>> namespaceContext="#nsContext" >>>> ruleBaseResource="classpath:router.drl" >>>> globals="#globals" /> >>>> >>>> <util:map id="globals"> >>>> <entry key="constants" value-ref="constants" /> >>>> </util:map> >>>> <bean id="constants" class="ConstantsHelper" /> >>>> >>>> <drools:namespace-context id="nsContext"> >>>> <drools:namespaces> >>>> <drools:namespace >>>> prefix="cp">http://www.compart.net/ns/jbi</drools:namespace> >>>> </drools:namespaces> >>>> </drools:namespace-context> >>>> >>>> </beans> >>>> >>>> >>>> The drl: >>>> >>>> >>>> package org.apache.servicemix.drools >>>> >>>> import org.apache.commons.logging.Log; >>>> import org.apache.commons.logging.LogFactory; >>>> import org.apache.servicemix.drools.model.Exchange; >>>> import ConstantsHelper; >>>> >>>> global org.apache.servicemix.drools.model.JbiHelper jbi; >>>> global ConstantsHelper constants; >>>> >>>> rule UnkownOperation >>>> when >>>> me : Exchange( status == Exchange.ACTIVE, in : in != null, >>>> operation != "{ >>>> >> http://www.compart.net/ns/jbi}process<http://www.compart.net/ns/jbi%7Dprocess> >> <http://www.compart.net/ns/jbi%7Dprocess> >> >>>> " >>>> ) >>>> then >>>> jbi.fault("<UnknownOperation >>>> xmlns='http://www.compart.net/ns/jbi'/<http://www.compart.net/ns/jbi%27/>< >>>> >> http://www.compart.net/ns/jbi%27/> >> >>>>> "); >>>>> >>>>> >>>> end >>>> >>>> rule ProcessInputAFP >>>> when >>>> me : Exchange( status == Exchange.ACTIVE, in : in != null, >>>> operation == "{ >>>> >> http://www.compart.net/ns/jbi}process<http://www.compart.net/ns/jbi%7Dprocess> >> <http://www.compart.net/ns/jbi%7Dprocess> >> >>>> " >>>> ) >>>> eval (isOfType(getFileName(me), "afp")) >>>> then >>>> jbi.getLogger().info("File " + getFileName(me) + " is of type >>>> AFP"); >>>> jbi.route("service:http://www.compart.net/ns/jbi/fileSender"); >>>> end >>>> >>>> function boolean isOfType(String fileName, String type) { >>>> return fileName.toLowerCase().endsWith("." + type.toLowerCase()); >>>> } >>>> >>>> function String getFileName(Exchange me) { >>>> if (me.getIn().getProperty("user-props") != null) { >>>> java.util.Map userProps = >>>> (java.util.Map)me.getIn().getProperty("user-props"); >>>> String fileName = userProps.get("file-name").toString(); >>>> if (fileName != null) { >>>> return fileName; >>>> } else { >>>> return ""; >>>> } >>>> } else { >>>> return ""; >>>> } >>>> } >>>> >>>> >>>> The helper bean: >>>> >>>> public class ConstantsHelper >>>> { >>>> public String getFileNameProperty() >>>> { >>>> return "file-name"; >>>> } >>>> >>>> public String getUserPropertiesKeyProperty() >>>> { >>>> return "user-props"; >>>> } >>>> } >>>> >>>> >>>> I have no idea why the injection doesn't work. Any ideas? >>>> >>>> Regards, >>>> Lars >>>> >>>> -- >>>> View this message in context: >>>> >>>> >> http://www.nabble.com/Error-injecting-bean-into-servicemix-drools-service-unit-tp16418402s12049p16418402.html >> >>>> Sent from the ServiceMix - User mailing list archive at Nabble.com. >>>> >>>> >>>> >>>> >>> >>> > > > >
