Deployment requirement for M1
- What can we deploy? It should be possible to deploy both the services and modules. But hot deployment feature is only support for services NOT for modules. (The current implementation can support hot deployment for modules too, but there are updating issues with engine registry)
- Providing hot deployment for services
- The deployment modules is capable of identify when new service (foo.jar) is putting to the service directory. And it should update engine registry after that and in order to create executable service object required details should provide do WSDLService (using WSDL file WSDLService object is being created and using values of service.xml WSDLService object should update).
- DO NOT Support Hot Undeployment and Hot Update for M1.
- In the current implementation of deployment module can support above features, but updating engineRegistry is a problem. If engineRegistry can provide methods to remove services at run time then hot update and hot undeployment can be supported.
- Only provide J2EE like deployment
- The current implementation can only handle J2EE like deployment that is user can deploy Web Service as .jar file. And the structure of that .jar file described in the wiki page.
- Locations of the repository
- In order to run the deployment module it should be known locations of both the server.xml and the directory it should listen in order to check for updates. When deployment module is being started those parameter should provide. (As an option those can be set in the CLASSPATH and can drive locations from that)
Phases and Phase rule resolving
- All the existing and valid phases are listed in the server.xml and the order of those phases is the listed order in the server.xml.
- Global Phase: if a service is referring to one or more modules then the handlers belong to those modules act as handlers of the global phase for that service. And the global phase is combination of handler come from modules and server.xml.
- In a before and after property of a handler dose not consider for M1 (but current implementation can handle that too)
- Phasefirst and phaseLast property of any handler dose not care in this milestone. (That feature can be support with the current impl )
- Order of Handlers inside a phase is dose not care in M1.
- If a handler inside the service.xml dose not specify the phase that belong then that will be belong to a default phase (in this case the default phase is service) phase rule resolving is done at the Deployment time. It may be done by deployment module or any other component. In the current implementation it is done by deponent module at the run time.
- Order of handlers inside a module is done by according to the order they appear in the module.xml.
Requirements from other modules
Requirements from engineRegistry
EngineRegistry should provide interface with following methods.
addService(Service service); Service getService(String service_name); addModule(Module module); Module getModule(String module_name);
In addition to above to start Deployment module who ever going to start the Deployment (say Engine) should provide following;
- location of server.xml (absolute or relative path of the location)
- And path of the parent director where the modules and services directories are located.
Requirements form WSDL
- WSDL module should provide interface with following methods;
- And the WSDLService should provide following methods;
addModules(String moduleref); addParameters(Parameter parameter); setInFlow(Flow inflow); Flow getInFlow(); setOutFlow(Flow outflow); Flow getOutFlow(); setFaultFlow(Flow faultflow); Flow getFaultFlow(); setClassLoader(ClassLoader classloader); setTypeMapping(TepeMapping typemapping); setBeanMapping(BeanMapping beanmapping); setProvider(Provider provider); setStyle(String style); setContextPath(String contextpath); Operation getOperation(); setOperation(Operation operation);
- Operation should provide interface with following methods
addModule(String moduleref); addParameter(Parameter parameter); Flow getInFlow(); setInFlow(Flow inflow); Flow getOutFlow(); setOutFlow(Flow outflow); Flow getFaultFlow(); setFaultFlow(Flow faultflow);