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.