You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@servicemix.apache.org by Jeroen Verhagen <je...@gmail.com> on 2009/11/12 17:34:12 UTC
Problem getting custom BC to deploy
Hi all,
I evaluating Servicemix (3.2.3) for the company I work for, I've gone
through the simple tutorial that moves files.
Because we'll need to write a custom component I followed the tutorial for
writing a custom BC and added that to my existing tutorial project. I've got
everything to compile but when I deploy the SA with the SU for the custom BC
I get the following error:
WARN - AutoDeploymentService - Directory: hotdeploy: Automatic
install of
Z:\java\apache-servicemix-3.2.3\hotdeploy\tutorial-sa-1.0-SNAPSHOT.zip
failed
javax.jbi.management.DeploymentException: Failed to update Service Assembly:
tutorial-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:667)
at
org.apache.servicemix.jbi.framework.AutoDeploymentService.access$800(AutoDeploymentService.java:62)
at
org.apache.servicemix.jbi.framework.AutoDeploymentService$1.run(AutoDeploymentService.java:631)
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>hello-world-bc</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>No endpoints found</loc-message>
</msg-loc-info>
</task-status-msg>
</task-result-details>
</component-task-result-details>
</component-task-result>
The beans.xml for the custom SU contains this:
<beans xmlns:sm="http://servicemix.apache.org/config/1.0"
xmlns:file="http://servicemix.apache.org/file/1.0"
xmlns:tut="urn:servicemix:tutorial"
xmlns:my="http://org.apache.servicemix.samples.helloworld.bc/1.0">
<sm:container id="jbi" embedded="true" createMBeanServer="false">
<sm:activationSpecs>
<sm:activationSpec>
<sm:component>
<my:component>
<my:endpoints>
<my:provider service="test:service"
endpoint="endpoint"/>
</my:endpoints>
</my:component>
</sm:component>
</sm:activationSpec>
</sm:activationSpecs>
</sm:container>
</beans>
I'm really stuck with this problem, can anybody please help me?
Thanks and regards,
Jeroen
Btw: source of my custom component:
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.servicemix.samples.helloworld.bc;
import java.util.List;
import javax.jbi.servicedesc.ServiceEndpoint;
import org.apache.servicemix.common.DefaultComponent;
import org.apache.servicemix.common.Endpoint;
/**
* @org.apache.xbean.XBean element="component"
*/
public class MyComponent extends DefaultComponent {
private MyEndpointType[] endpoints;
public MyEndpointType[] getEndpoints() {
return endpoints;
}
public void setEndpoints(MyEndpointType[] endpoints) {
this.endpoints = endpoints;
}
protected List getConfiguredEndpoints() {
return asList(getEndpoints());
}
protected Class[] getEndpointClasses() {
return new Class[] {MyConsumerEndpoint.class,
MyProviderEndpoint.class};
}
protected Endpoint getResolvedEPR(ServiceEndpoint ep) throws Exception {
MyProviderEndpoint endpoint = new MyProviderEndpoint(this, ep);
// TODO: initialize endpoint here
endpoint.activate();
return endpoint;
}
}
and my MyProviderEndpoint:
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.servicemix.samples.helloworld.bc;
import javax.jbi.management.DeploymentException;
import javax.jbi.messaging.MessageExchange;
import javax.jbi.messaging.NormalizedMessage;
import javax.jbi.servicedesc.ServiceEndpoint;
import javax.xml.namespace.QName;
import javax.xml.transform.dom.DOMSource;
import com.sun.org.apache.xpath.internal.CachedXPathAPI;
import org.apache.servicemix.common.DefaultComponent;
import org.apache.servicemix.common.ServiceUnit;
import org.apache.servicemix.common.endpoints.ProviderEndpoint;
import org.apache.servicemix.jbi.jaxp.SourceTransformer;
import org.apache.servicemix.jbi.jaxp.StringSource;
import org.w3c.dom.Node;
/**
* @org.apache.xbean.XBean element="provider"
*/
public class MyProviderEndpoint extends ProviderEndpoint implements
MyEndpointType {
public MyProviderEndpoint() {
}
public MyProviderEndpoint(ServiceUnit serviceUnit, QName service, String
endpoint) {
super(serviceUnit, service, endpoint);
}
public MyProviderEndpoint(DefaultComponent component, ServiceEndpoint
endpoint) {
super(component, endpoint);
}
public void validate() throws DeploymentException {
super.validate();
}
protected void processInOnly(MessageExchange exchange, NormalizedMessage
in) throws Exception {
throw new UnsupportedOperationException("Unsupported MEP: " +
exchange.getPattern());
}
protected void processInOut(MessageExchange exchange, NormalizedMessage
in, NormalizedMessage out) throws Exception {
// Grab the in message
SourceTransformer sourceTransformer = new SourceTransformer();
DOMSource inMessageXml = (DOMSource)
sourceTransformer.toDOMSource(in);
// Parse out the actual message content
CachedXPathAPI xpath = new CachedXPathAPI();
Node inMessageNode = xpath.selectSingleNode(inMessageXml.getNode(),
"/hello");
String inMessage = inMessageNode.getTextContent();
// Create the out message and set it
String outMessage = "<hello>Message [" + inMessage + "] contains ["
+ inMessage.getBytes().length + "] bytes</hello>";
out.setContent(new StringSource(outMessage));
}
}
--
View this message in context: http://old.nabble.com/Problem-getting-custom-BC-to-deploy-tp26321854p26321854.html
Sent from the ServiceMix - User mailing list archive at Nabble.com.
Re: Problem getting custom BC to deploy
Posted by Jeroen Verhagen <je...@gmail.com>.
Hi Gert,
Gert Vanthienen wrote:
>
>
> However, are you absolutely sure you need to write your own BC? For a
> lot of use cases, it's also an option to write a POJO and deploy that
> in a servicemix-bean SU. Your POJO can connect to the external
> service/protocol and send/receive JBI MessageExchanges -- the benefit
> of the POJO approach is that it's a lot easier to write and maintain.
> Have a look at
> http://servicemix.apache.org/should-i-create-my-own-jbi-components.html
>
Your were right, servicemix-bean is the way to go.
Thanks and regards!
Jeroen
--
View this message in context: http://old.nabble.com/Problem-getting-custom-BC-to-deploy-tp26321854p26335805.html
Sent from the ServiceMix - User mailing list archive at Nabble.com.
Re: Problem getting custom BC to deploy
Posted by Gert Vanthienen <ge...@gmail.com>.
Jeroen,
The XML syntax you're using is the one for creating a lightweight
container with a static configuration of the endpoints. If you want
to deploy a SU with your provider endpoint, the xbean.xml only needs
to contain the endpoint definition itself, something like...
<beans xmlns:sm="http://servicemix.apache.org/config/1.0"
xmlns:file="http://servicemix.apache.org/file/1.0"
xmlns:tut="urn:servicemix:tutorial"
xmlns:my="http://org.apache.servicemix.samples.helloworld.bc/1.0">
<my:provider service="test:service" endpoint="endpoint"/>
</beans>
However, are you absolutely sure you need to write your own BC? For a
lot of use cases, it's also an option to write a POJO and deploy that
in a servicemix-bean SU. Your POJO can connect to the external
service/protocol and send/receive JBI MessageExchanges -- the benefit
of the POJO approach is that it's a lot easier to write and maintain.
Have a look at http://servicemix.apache.org/should-i-create-my-own-jbi-components.html
for a bit of background...
Regards,
Gert Vanthienen
------------------------
Open Source SOA: http://fusesource.com
Blog: http://gertvanthienen.blogspot.com/
2009/11/12 Jeroen Verhagen <je...@gmail.com>:
>
> Hi all,
>
> I evaluating Servicemix (3.2.3) for the company I work for, I've gone
> through the simple tutorial that moves files.
> Because we'll need to write a custom component I followed the tutorial for
> writing a custom BC and added that to my existing tutorial project. I've got
> everything to compile but when I deploy the SA with the SU for the custom BC
> I get the following error:
>
> WARN - AutoDeploymentService - Directory: hotdeploy: Automatic
> install of
> Z:\java\apache-servicemix-3.2.3\hotdeploy\tutorial-sa-1.0-SNAPSHOT.zip
> failed
> javax.jbi.management.DeploymentException: Failed to update Service Assembly:
> tutorial-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:667)
> at
> org.apache.servicemix.jbi.framework.AutoDeploymentService.access$800(AutoDeploymentService.java:62)
> at
> org.apache.servicemix.jbi.framework.AutoDeploymentService$1.run(AutoDeploymentService.java:631)
> 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>hello-world-bc</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>No endpoints found</loc-message>
> </msg-loc-info>
> </task-status-msg>
> </task-result-details>
> </component-task-result-details>
> </component-task-result>
>
>
> The beans.xml for the custom SU contains this:
>
> <beans xmlns:sm="http://servicemix.apache.org/config/1.0"
> xmlns:file="http://servicemix.apache.org/file/1.0"
> xmlns:tut="urn:servicemix:tutorial"
> xmlns:my="http://org.apache.servicemix.samples.helloworld.bc/1.0">
> <sm:container id="jbi" embedded="true" createMBeanServer="false">
> <sm:activationSpecs>
> <sm:activationSpec>
> <sm:component>
> <my:component>
> <my:endpoints>
> <my:provider service="test:service"
> endpoint="endpoint"/>
> </my:endpoints>
> </my:component>
> </sm:component>
> </sm:activationSpec>
> </sm:activationSpecs>
> </sm:container>
> </beans>
>
> I'm really stuck with this problem, can anybody please help me?
>
> Thanks and regards,
>
> Jeroen
>
> Btw: source of my custom component:
>
> /*
> * Licensed to the Apache Software Foundation (ASF) under one or more
> * contributor license agreements. See the NOTICE file distributed with
> * this work for additional information regarding copyright ownership.
> * The ASF licenses this file to You under the Apache License, Version 2.0
> * (the "License"); you may not use this file except in compliance with
> * the License. You may obtain a copy of the License at
> *
> * http://www.apache.org/licenses/LICENSE-2.0
> *
> * Unless required by applicable law or agreed to in writing, software
> * distributed under the License is distributed on an "AS IS" BASIS,
> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
> * See the License for the specific language governing permissions and
> * limitations under the License.
> */
> package org.apache.servicemix.samples.helloworld.bc;
>
> import java.util.List;
>
> import javax.jbi.servicedesc.ServiceEndpoint;
>
> import org.apache.servicemix.common.DefaultComponent;
> import org.apache.servicemix.common.Endpoint;
>
> /**
> * @org.apache.xbean.XBean element="component"
> */
> public class MyComponent extends DefaultComponent {
>
> private MyEndpointType[] endpoints;
>
> public MyEndpointType[] getEndpoints() {
> return endpoints;
> }
>
> public void setEndpoints(MyEndpointType[] endpoints) {
> this.endpoints = endpoints;
> }
>
> protected List getConfiguredEndpoints() {
> return asList(getEndpoints());
> }
>
> protected Class[] getEndpointClasses() {
> return new Class[] {MyConsumerEndpoint.class,
> MyProviderEndpoint.class};
> }
>
> protected Endpoint getResolvedEPR(ServiceEndpoint ep) throws Exception {
> MyProviderEndpoint endpoint = new MyProviderEndpoint(this, ep);
> // TODO: initialize endpoint here
> endpoint.activate();
> return endpoint;
> }
>
> }
>
> and my MyProviderEndpoint:
>
> /*
> * Licensed to the Apache Software Foundation (ASF) under one or more
> * contributor license agreements. See the NOTICE file distributed with
> * this work for additional information regarding copyright ownership.
> * The ASF licenses this file to You under the Apache License, Version 2.0
> * (the "License"); you may not use this file except in compliance with
> * the License. You may obtain a copy of the License at
> *
> * http://www.apache.org/licenses/LICENSE-2.0
> *
> * Unless required by applicable law or agreed to in writing, software
> * distributed under the License is distributed on an "AS IS" BASIS,
> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
> * See the License for the specific language governing permissions and
> * limitations under the License.
> */
> package org.apache.servicemix.samples.helloworld.bc;
>
> import javax.jbi.management.DeploymentException;
> import javax.jbi.messaging.MessageExchange;
> import javax.jbi.messaging.NormalizedMessage;
> import javax.jbi.servicedesc.ServiceEndpoint;
> import javax.xml.namespace.QName;
> import javax.xml.transform.dom.DOMSource;
>
> import com.sun.org.apache.xpath.internal.CachedXPathAPI;
> import org.apache.servicemix.common.DefaultComponent;
> import org.apache.servicemix.common.ServiceUnit;
> import org.apache.servicemix.common.endpoints.ProviderEndpoint;
> import org.apache.servicemix.jbi.jaxp.SourceTransformer;
> import org.apache.servicemix.jbi.jaxp.StringSource;
> import org.w3c.dom.Node;
>
> /**
> * @org.apache.xbean.XBean element="provider"
> */
> public class MyProviderEndpoint extends ProviderEndpoint implements
> MyEndpointType {
>
> public MyProviderEndpoint() {
> }
>
> public MyProviderEndpoint(ServiceUnit serviceUnit, QName service, String
> endpoint) {
> super(serviceUnit, service, endpoint);
> }
>
> public MyProviderEndpoint(DefaultComponent component, ServiceEndpoint
> endpoint) {
> super(component, endpoint);
> }
>
> public void validate() throws DeploymentException {
> super.validate();
> }
>
> protected void processInOnly(MessageExchange exchange, NormalizedMessage
> in) throws Exception {
> throw new UnsupportedOperationException("Unsupported MEP: " +
> exchange.getPattern());
> }
>
> protected void processInOut(MessageExchange exchange, NormalizedMessage
> in, NormalizedMessage out) throws Exception {
> // Grab the in message
> SourceTransformer sourceTransformer = new SourceTransformer();
> DOMSource inMessageXml = (DOMSource)
> sourceTransformer.toDOMSource(in);
>
> // Parse out the actual message content
> CachedXPathAPI xpath = new CachedXPathAPI();
> Node inMessageNode = xpath.selectSingleNode(inMessageXml.getNode(),
> "/hello");
> String inMessage = inMessageNode.getTextContent();
>
> // Create the out message and set it
> String outMessage = "<hello>Message [" + inMessage + "] contains ["
> + inMessage.getBytes().length + "] bytes</hello>";
> out.setContent(new StringSource(outMessage));
> }
>
> }
>
> --
> View this message in context: http://old.nabble.com/Problem-getting-custom-BC-to-deploy-tp26321854p26321854.html
> Sent from the ServiceMix - User mailing list archive at Nabble.com.
>
>