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.
> >>
> >>
> >>
> >
> >
> >
>
--
Cheers,
Guillaume Nodet
------------------------
Blog: http://gnodet.blogspot.com/