The goal of this discussion is to find the best way to deploy artifacts throw DTGov to a Fabric Target.
The artifacts to be deployed normally are JARs/WARs files. In other targets, for example Tomcat or Jboss, it is very easy to deploy. It is just copy the Input Stream to a filepath location.
In the case of Fabric it is more complex. The unit of deployment in Fabric is the Profile.
In the profile it is defined all the bundles, features, features repository, references to other parent profiles (like activemq or camel) and all the properties files required.
My proposal is:
- There is a Profile folder where all the deployments are included as different profiles. This profile folder can be overlord/target.
- The profile is created/updated in Fabric everytime the FabricDeployer has to deploy an artifact.
- The profile will access the bundle deployed throw the S-ramp Maven Repository Facade
- The profile will add the bundle directly without accessing it throw a features.xml file. It can be done including in the io.fabric8.agent.properties file this line: bundle.$myName = mvn:group/artifact/version
Then having the facade the bundle will be accessible throw the Fabric Profile. We only have to worry about how to write the profile changes (updating or creating). There are several options commented by James Strachan:
- JXM client --> Discarded by James. It is very slow.
- Rest Api --> He is not sure if this is included in Fuse 6.1. Also there is not much documentation about it.
- Jolokia Client --> easier and most extended use in Fabric:
I go obviously to the 3º option, the Jolokia Client.
The only problem we can reach is. What about artifacts (War/Ear) that are OSGI artifacts. I mean they do not include all their dependencies in the WEB-INF/lib folder. Their dependencies are attached in the MANIFEST file.
In this case as James confirmed it is not possible, from the InputStream that contains the artifact content, to know which are the dependencies.
In this case I think there would be responsability of the Dtgov admin to modify the target profile created. Also will be the responsability of the Dtgov administrator to add features/bundles/parent profiles to the default profile created by dtgov in necessary case.
Dtgov ensures that the artifact is gonna be deployed. If the artifact contains all the dependencies then it will be deployed with no problem. If the artifact needs a JMS Queue to work then it will be responsability of the dtgov admin to add this feature.