Currently, I would advise to retrieve it from the EndpointComponentContext
by accessing the private property "context", which is the actual component
context. From there, you should be able to follow the doc.
What about adding a method to the JBIContext class, so that if would
be easier ... Wanna raise a JIRA please ?
On 2/24/07, jmdev <[EMAIL PROTECTED]> wrote:
Thanks for the suggestion, but I believe I may need access to the container
for what I am trying to do. I would like to dynamically build an
HttpEndpoint and activate it. My code is similar to what is in the JUnit
tests:
> JBIContainer container = contextImpl.getContainer();
>
> HttpEndpoint endpoint = new HttpEndpoint();
>
> ... bunch of endpoint.set's here ...
>
> HttpComponent components = new HttpComponent();
> components.setEndpoints(new HttpEndpoint[]{endpoint});
> container.activateComponent(components, "http");
>
Unfortunately, the EndpointComponentContext doesn't have the getContainer()
method since it implements ComponentContext. I believe the getContainer()
method is specific to ComponentContextImpl, which I can't seem to get at
from within JSR181 POJOs.
I've looked through the API for ComponentContext, EndpointComponentContext
and ServiceMixClient and can't find a way to easily deploy my endpoint
above. If there is a way outside of using the JBIContainer directly, I
would be interested...
Thanks again!
bradtwurst wrote:
>
> Hello,
>
> I am currently using this capability. It did take me a few times to get
> it working but it is working.
>
> Here is parts of my code
>
>
>
>> private javax.jbi.component.ComponentContext context;
>>
>> //
>> // jbi context
>> //
>> public void setContext(javax.jbi.component.ComponentContext context) {
>> this.context = context;
>> log.info(context);
>> }
>>
>
> just as it is on the webpage
>
> Then, I use it in the following statements so that I can create new
> messages and introduce them into the delivery channel.
>
>
>
>>
>> private void someMethod(String event, Object payload) {
>> ServiceMixClient client = new ServiceMixClientFacade(context);
>>
>> QName service = new QName("someNamespace",
>> "someServiceName", "somePrefix");
>>
>> EndpointResolver er = client.createResolverForService(service);
>>
>> InOnly exchange;
>> try {
>> exchange = client.createInOnlyExchange(er);
>> } catch (JBIException e) {
>> e.printStackTrace();
>> throw new MessagingException(e);
>> }
>>
>> NormalizedMessage msg = exchange.getMessage("in");
>>
>> msg.setContent(new XStreamSource(event));
>>
>> msg.setProperty("event", event);
>> msg.setProperty("msgId", msgId);
>> msg.setProperty("operatingData", operatingData);
>>
>> XStream xs = new XStream(new XStreamXppDriver());
>> String xml = xs.toXML(payload);
>> msg.setProperty("payloadXML", xml);
>>
>> client.sendSync(exchange);
>> }
>>
>
> then, in my jsr-181 xbean.xml definition I have
>
>
>
>> <jsr181:endpoint service="sm:JSR181-service"
>> annotations="jsr181" endpoint="JSR181-service-endpoint">
>> <jsr181:pojo>
>> <bean
>> class="HttpImpl">
>> <property name="context" ref="context" />
>> </bean>
>> </jsr181:pojo>
>> </jsr181:endpoint>
>>
>
>
> I hope this helps.
>
> James
>
>
--
View this message in context:
http://www.nabble.com/Error-Accessing-JBI-Container-from-JSR181-Component---Is-it-Possible--tf3281290s12049.html#a9128761
Sent from the ServiceMix - User mailing list archive at Nabble.com.
--
Cheers,
Guillaume Nodet
------------------------
Architect, LogicBlaze (http://www.logicblaze.com/)
Blog: http://gnodet.blogspot.com/