RE: Remote deployment of service assemblies
Thanks! Ciao, Philipp > -Mensaje original- > De: Guillaume Nodet [mailto:[EMAIL PROTECTED] > Enviado el: jueves, 17 de mayo de 2007 15:21 > Para: [EMAIL PROTECTED] > Asunto: Re: Remote deployment of service assemblies > > See http://issues.apache.org/activemq/browse/SM-858 > which has been fixed a few weeks ago in trunk. > > On 5/17/07, Rossmanith, Philipp <[EMAIL PROTECTED]> wrote: > > > > > > Hi, > > > > After quite a break, I am back with the issue relating to this thread. > > What I did was creating a jsr-181 WSDL first service, for which I set a > > ComponentContext *). The setup is different from what had been outlined > > earlier, as I am creating a service assembly ZIP based on parameters I > > receive. > > > > My idea was to obtain a DeliveryChannelImpl from the ComponentContext > > and to then follow the steps Guillaume has pointed out below. > > > > However, the ComponentContext that is being set by SM is an > > EndpointComponentContext which doesn't give me access to this > > information. > > > > Any hints of how I can get hold of the JBIContainer or its > > AdminCommandsServiceMBean? > > > > Thanks in advance, > > Ciao, > > Philipp > > > > *) http://incubator.apache.org/servicemix/servicemix-jsr181.html > > **) For the moment, I am creating a service assembly zip file for WSN > > subscriptions once the service gets invoked. Parameters are the > > wsa:address, the topic and an identifier. > > > > > -Mensaje original- > > > De: Guillaume Nodet [mailto:[EMAIL PROTECTED] > > > Enviado el: martes, 20 de marzo de 2007 11:21 > > > Para: [EMAIL PROTECTED] > > > Asunto: Re: Remote deployment of service assemblies > > > > > > On 3/20/07, Rossmanith, Philipp <[EMAIL PROTECTED]> > > wrote: > > > > > > > > > > > > Hi, > > > > > > > > > Once you have the JBIContainer, just retrieve the needed > > interface: > > > > > JBIContainer container = dci.getContainer(); > > > > > AdminCommandsServiceMBean admin = > > > > container.getAdminCommandsService(); > > > > > > > > > > Then, you can use it to deploy / undeploy, manage life cycle, etc > > .. > > > > >admin.installComponent() > > > > >admin.startComponent() > > > > >admin.listServiceAssemblies() ... > > > > Ok, that is quite a bit cleaner... > > > > > > > > > all the administrative tasks are available from this interface, so > > I > > > > guess > > > > > the WSDL > > > > > should be quite easy to write. On the implementation side, one > > way is > > > > to > > > > > use > > > > > jaxb2 (not the full jsr181 though) as done in the WS-Notification > > > > > component. > > > > > See org.apache.servicemix.wsn.component.WSNEndpoint class. > > > > What I was thinking about was a WSDL wrapper around the > > > > AdminCommandsServiceMBean methods. > > > > > > > > I'm currently investigating the WSN component to use it for > > > > notifications based on message content (see > > > > > > http://www.nabble.com/how-to-implement-runtime-notifications-based-on-Me > > > > ssageExchange--content-tf3409844s12049.html), but I must say I'm > > afraid > > > > I don't really understand your idea (which may be due to my limited > > > > experience with jaxb2). > > > > > > > > It seems to me that the wsn component WSNEndpoint uses the > > annotations > > > > done in the org.apache.servicemix.wsn.AbstractEndpoint hierarchy (an > > > > object of this class is passed in as "pojo" in the constructor) to > > > > obtain a class object "endpointInterface" which is then used to get > > hold > > > > of the methods published in that interface. Jaxb2 seems to be used > > to > > > > unmarshal incoming normalized message content and to marshal it to > > > > outgoing exchanges (method: process). > > > > > > > > However, if I'm ""only"" writing a provider service and not a > > > > full-fledged component, what would be the advantages of the approach > > > > taken in WSNEndpoint? > > > > > > > > Or am I misinterpreting, and you're using jaxb2 for creating a > >
Re: Remote deployment of service assemblies
See http://issues.apache.org/activemq/browse/SM-858 which has been fixed a few weeks ago in trunk. On 5/17/07, Rossmanith, Philipp <[EMAIL PROTECTED]> wrote: Hi, After quite a break, I am back with the issue relating to this thread. What I did was creating a jsr-181 WSDL first service, for which I set a ComponentContext *). The setup is different from what had been outlined earlier, as I am creating a service assembly ZIP based on parameters I receive. My idea was to obtain a DeliveryChannelImpl from the ComponentContext and to then follow the steps Guillaume has pointed out below. However, the ComponentContext that is being set by SM is an EndpointComponentContext which doesn't give me access to this information. Any hints of how I can get hold of the JBIContainer or its AdminCommandsServiceMBean? Thanks in advance, Ciao, Philipp *) http://incubator.apache.org/servicemix/servicemix-jsr181.html **) For the moment, I am creating a service assembly zip file for WSN subscriptions once the service gets invoked. Parameters are the wsa:address, the topic and an identifier. > -Mensaje original- > De: Guillaume Nodet [mailto:[EMAIL PROTECTED] > Enviado el: martes, 20 de marzo de 2007 11:21 > Para: [EMAIL PROTECTED] > Asunto: Re: Remote deployment of service assemblies > > On 3/20/07, Rossmanith, Philipp <[EMAIL PROTECTED]> wrote: > > > > > > Hi, > > > > > Once you have the JBIContainer, just retrieve the needed interface: > > > JBIContainer container = dci.getContainer(); > > > AdminCommandsServiceMBean admin = > > container.getAdminCommandsService(); > > > > > > Then, you can use it to deploy / undeploy, manage life cycle, etc .. > > >admin.installComponent() > > >admin.startComponent() > > >admin.listServiceAssemblies() ... > > Ok, that is quite a bit cleaner... > > > > > all the administrative tasks are available from this interface, so I > > guess > > > the WSDL > > > should be quite easy to write. On the implementation side, one way is > > to > > > use > > > jaxb2 (not the full jsr181 though) as done in the WS-Notification > > > component. > > > See org.apache.servicemix.wsn.component.WSNEndpoint class. > > What I was thinking about was a WSDL wrapper around the > > AdminCommandsServiceMBean methods. > > > > I'm currently investigating the WSN component to use it for > > notifications based on message content (see > > http://www.nabble.com/how-to-implement-runtime-notifications-based-on-Me > > ssageExchange--content-tf3409844s12049.html), but I must say I'm afraid > > I don't really understand your idea (which may be due to my limited > > experience with jaxb2). > > > > It seems to me that the wsn component WSNEndpoint uses the annotations > > done in the org.apache.servicemix.wsn.AbstractEndpoint hierarchy (an > > object of this class is passed in as "pojo" in the constructor) to > > obtain a class object "endpointInterface" which is then used to get hold > > of the methods published in that interface. Jaxb2 seems to be used to > > unmarshal incoming normalized message content and to marshal it to > > outgoing exchanges (method: process). > > > > However, if I'm ""only"" writing a provider service and not a > > full-fledged component, what would be the advantages of the approach > > taken in WSNEndpoint? > > > > Or am I misinterpreting, and you're using jaxb2 for creating a jsr181 > > code skeleton based on a previously generated WSDL? > > > Yeah, that's the point. > The WSNEndpoint is used to invoke an annotated POJO generated > from the WSDL like AbstractNotificationBroker. > The AbstractNotificationBroker#init method calls register, which > ultimately > creates a WSNEndpoint with the AbstractNotificationBroker class as the > pojo. > > So, once the WSDL is written, you can use wsgen to generate the interfaces > and messages, create your own POJO implementation and wrap it with > the WSNEndpoint. (It makes me think that this class may be put in > servicemix-common). > > But this is only one way to do that. Feel free to use your own if you > prefer. > > The last question is how do we package that. I'm thinking about > a SE, but without any support for deployments of SU, > I guess another way could be to leverage the JSR181 component and > just write a SU for it (and another for the http BC i guess). > The last way would be to configure it directly on the JBI container > without any JBI packaging ... > Need to think about pros / cons ... > > >
Re: Remote deployment of service assemblies
On 3/20/07, Rossmanith, Philipp <[EMAIL PROTECTED]> wrote: Hi, > Once you have the JBIContainer, just retrieve the needed interface: > JBIContainer container = dci.getContainer(); > AdminCommandsServiceMBean admin = container.getAdminCommandsService(); > > Then, you can use it to deploy / undeploy, manage life cycle, etc .. >admin.installComponent() >admin.startComponent() >admin.listServiceAssemblies() ... Ok, that is quite a bit cleaner... > all the administrative tasks are available from this interface, so I guess > the WSDL > should be quite easy to write. On the implementation side, one way is to > use > jaxb2 (not the full jsr181 though) as done in the WS-Notification > component. > See org.apache.servicemix.wsn.component.WSNEndpoint class. What I was thinking about was a WSDL wrapper around the AdminCommandsServiceMBean methods. I'm currently investigating the WSN component to use it for notifications based on message content (see http://www.nabble.com/how-to-implement-runtime-notifications-based-on-Me ssageExchange--content-tf3409844s12049.html), but I must say I'm afraid I don't really understand your idea (which may be due to my limited experience with jaxb2). It seems to me that the wsn component WSNEndpoint uses the annotations done in the org.apache.servicemix.wsn.AbstractEndpoint hierarchy (an object of this class is passed in as "pojo" in the constructor) to obtain a class object "endpointInterface" which is then used to get hold of the methods published in that interface. Jaxb2 seems to be used to unmarshal incoming normalized message content and to marshal it to outgoing exchanges (method: process). However, if I'm ""only"" writing a provider service and not a full-fledged component, what would be the advantages of the approach taken in WSNEndpoint? Or am I misinterpreting, and you're using jaxb2 for creating a jsr181 code skeleton based on a previously generated WSDL? Yeah, that's the point. The WSNEndpoint is used to invoke an annotated POJO generated from the WSDL like AbstractNotificationBroker. The AbstractNotificationBroker#init method calls register, which ultimately creates a WSNEndpoint with the AbstractNotificationBroker class as the pojo. So, once the WSDL is written, you can use wsgen to generate the interfaces and messages, create your own POJO implementation and wrap it with the WSNEndpoint. (It makes me think that this class may be put in servicemix-common). But this is only one way to do that. Feel free to use your own if you prefer. The last question is how do we package that. I'm thinking about a SE, but without any support for deployments of SU, I guess another way could be to leverage the JSR181 component and just write a SU for it (and another for the http BC i guess). The last way would be to configure it directly on the JBI container without any JBI packaging ... Need to think about pros / cons ... .. and discussions about servicemix developement should take place on the > dev > list ... ;-) Done :-) Thanks in advance, Ciao, Philipp > -Mensaje original- > De: Guillaume Nodet [mailto:[EMAIL PROTECTED] > Enviado el: lunes, 19 de marzo de 2007 16:56 > Para: servicemix-users@geronimo.apache.org > Asunto: Re: Remote deployment of service assemblies > Importancia: Baja > > On 3/19/07, Rossmanith, Philipp <[EMAIL PROTECTED]> wrote: > > > > > > > Currently, remote deployment is not supported by the ant tasks. > > > The only way to do currently that is to start a servicemix console > > > on the same server, because the console accepts uploads and will > > > be able to point the container to a local file. > > > > > > The only way using JMX would be to add a method accepting a byte[] > > > parameter which would be the content of the JBI artifact to deploy, or > > > creating an management endpoint on the JBI bus (using an attachment > > > for the JBI archetype). Not sure what's the best way. > > I was thinking about this alternative, as well. There could be a > > provider service that accepts calls having an SA attachment. It could > > then obtain this attachment and physically place it in the deployment > > dir. > > > Using the hot deployer is imo not the best solution. > We should use the AdminCommandsService instead (see below) > > In that way, one could use the same access control mechanism as for the > > rest of the service invocations. Another advantage would be that through > > the different binding components, the functionality would be available > > in more than just Java. > > > Yeah, agreed. We just need to define a clean WSDL for it. > > However, I'd need to access some J
RE: Remote deployment of service assemblies
Hi, > Once you have the JBIContainer, just retrieve the needed interface: > JBIContainer container = dci.getContainer(); > AdminCommandsServiceMBean admin = container.getAdminCommandsService(); > > Then, you can use it to deploy / undeploy, manage life cycle, etc .. >admin.installComponent() >admin.startComponent() >admin.listServiceAssemblies() ... Ok, that is quite a bit cleaner... > all the administrative tasks are available from this interface, so I guess > the WSDL > should be quite easy to write. On the implementation side, one way is to > use > jaxb2 (not the full jsr181 though) as done in the WS-Notification > component. > See org.apache.servicemix.wsn.component.WSNEndpoint class. What I was thinking about was a WSDL wrapper around the AdminCommandsServiceMBean methods. I'm currently investigating the WSN component to use it for notifications based on message content (see http://www.nabble.com/how-to-implement-runtime-notifications-based-on-Me ssageExchange--content-tf3409844s12049.html), but I must say I'm afraid I don't really understand your idea (which may be due to my limited experience with jaxb2). It seems to me that the wsn component WSNEndpoint uses the annotations done in the org.apache.servicemix.wsn.AbstractEndpoint hierarchy (an object of this class is passed in as "pojo" in the constructor) to obtain a class object "endpointInterface" which is then used to get hold of the methods published in that interface. Jaxb2 seems to be used to unmarshal incoming normalized message content and to marshal it to outgoing exchanges (method: process). However, if I'm ""only"" writing a provider service and not a full-fledged component, what would be the advantages of the approach taken in WSNEndpoint? Or am I misinterpreting, and you're using jaxb2 for creating a jsr181 code skeleton based on a previously generated WSDL? > .. and discussions about servicemix developement should take place on the > dev > list ... ;-) Done :-) Thanks in advance, Ciao, Philipp > -Mensaje original- > De: Guillaume Nodet [mailto:[EMAIL PROTECTED] > Enviado el: lunes, 19 de marzo de 2007 16:56 > Para: servicemix-users@geronimo.apache.org > Asunto: Re: Remote deployment of service assemblies > Importancia: Baja > > On 3/19/07, Rossmanith, Philipp <[EMAIL PROTECTED]> wrote: > > > > > > > Currently, remote deployment is not supported by the ant tasks. > > > The only way to do currently that is to start a servicemix console > > > on the same server, because the console accepts uploads and will > > > be able to point the container to a local file. > > > > > > The only way using JMX would be to add a method accepting a byte[] > > > parameter which would be the content of the JBI artifact to deploy, or > > > creating an management endpoint on the JBI bus (using an attachment > > > for the JBI archetype). Not sure what's the best way. > > I was thinking about this alternative, as well. There could be a > > provider service that accepts calls having an SA attachment. It could > > then obtain this attachment and physically place it in the deployment > > dir. > > > Using the hot deployer is imo not the best solution. > We should use the AdminCommandsService instead (see below) > > In that way, one could use the same access control mechanism as for the > > rest of the service invocations. Another advantage would be that through > > the different binding components, the functionality would be available > > in more than just Java. > > > Yeah, agreed. We just need to define a clean WSDL for it. > > However, I'd need to access some JBIContainer properties, such as the > > deployment directory. I assume that the best way to obtain internals > > about the JBI container would be to use the client API > > (http://incubator.apache.org/servicemix/client-api.html). > > > > I could then use the following code: > > >> > > ... > > DeliveryChannelImpl dci = (DeliveryChannelImpl) > > defaultSMClientInstance.getDeliveryChannel(); > > JBIContainer container = dci.getContainer(); > > ... > > String deploymentDirPath = container.getDeploymentDirPath(); > > ... > > << > > > > However, this hack seems quite (if not: too) dirty. Is there a more > > elegant solution? > > > > Once you have the JBIContainer, just retrieve the needed interface: > JBIContainer container = dci.getContainer(); > AdminCommandsServiceMBean admin = container.getAdminCommandsService(); > > Then, you can use it to deploy / undeploy, manage life cycle, etc .. >admin.installComponen