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";
)
    then
        jbi.fault("<UnknownOperation
xmlns='http://www.compart.net/ns/jbi'/>");
end

rule ProcessInputAFP
    when
        me : Exchange( status == Exchange.ACTIVE, in : in != null,
                       operation == "{http://www.compart.net/ns/jbi}process";
)
        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.

Reply via email to