So David J, Jeremy, and I talked a bit on IRC. David J didn't
like the idea of splitting protocols -- JMX remoting for sending commands
but a servlet for streaming files. We briefly talked about trying to take
advantage of the protocols underlying ActiveMQ or JMX Remoting, but we
know little about that.
Jeremy has done a substantial amount of work on a servlet-only
protocol for a remote JSR-88 client to use, and will try to have something
ready to work with in a week or so.
Aaron
On Sat, 23 Oct 2004, Jeremy Boynes wrote:
> I think we need to be careful here to avoid overloading JSR-88.
>
> The problem with JSR-88 is that is requires a running server to to
> anything useful; the restrictions on the client environment prevent you
> doing any work in the provider itself.
>
> On the other hand, we need a standalone deployer that can work without
> booting the server.
>
> If the server is running we already have a JSR-88 provider which can use
> it. It talks at a low level to the server (JMX remoting) so that you can
> use it to redeploy higher level components such as the web container.
> The downside is that the module must be local (as sending jar files by
> value over RMI seemed like a bad idea).
>
> I think the servlet approach is the way to go for transport and I
> already have a start on stuff for that.
>
> We have already been down the path of multiple DM implementations (or
> multiple backends to a DM decorator) and that did not prove very effective.
>
> Current thinking is:
> * (existing) standalone deployer that boots the deployment config
> in memory and handles all module types (J2EE and non-J2EE)
>
> * (existing) in-server deployer that handles all module types from
> local storage and which is exposed over JMX-remoting
>
> * (existing) JSR-88 provider which proxies calls to the
> in-server deployer for same-server deployment of J2EE modules
>
> * (new) JSR-88 provider that works in conjuction with a servlet to
> remotely deploy J2EE modules; it should be able to spool the
> archive to the ConfigurationStore and work in-situ
>
> * (existing) maven plugin for JSR-88 deployment
>
> * (new) ant plugin for JSR-88 deployment
>
> * (new) command line tool for JSR-88 deployment; could be a standalone
> tool but making it an extension of the current standalone deployer
> seems friendlier to users (as there is just one command-line tool)
>
> I think there is a lot of overlap here with what you propose and suggest
> we discuss futher before you get too far coding.
>
> --
> Jeremy
>
> PS I don't hink the tool should discover the server by magic - if you
> are going to connect to one then you should specify URL, username and
> password on the command line (or in some way anyway)
>
> Aaron Mulder wrote:
> > I'm looking at the issue to enable remote deployment. In order to
> > do that, I'd like to use JSR-88. That means we need a remote JSR-88
> > client. I'm thinking of something like this:
> >
> > 1) split the command-line processing off from the Deployer GBean. Change
> > the CLI implementation so that it reads the command-line input,
> > instantiates a JSR-88 connection, and executes deployment commands using
> > that. That should open up lots of new CLI functions (hot deploy,
> > undeploy, etc.) while removing the CLI code from the server component.
> >
> > 2) Create a new GBean to run in the server and be the contact point for
> > the remote JSR-88 client. It will be a thin wrapper around the current
> > JMXDeploymentManager (which only works locally right now). The main
> > change is that it has to expose remote-able ProgressObjects. (Back in the
> > day, we were using JMX notifications for this; I'm not sure if that's
> > still the way to go.) It will also probably delete file operands after it
> > has operated on them (see step 4).
> >
> > 3) Create a servlet that can receive streamed deployment files (archives
> > and deployment plans). It will just save them to a temp dir, perhaps
> > under var/staging or something. This means we'll have to have a web
> > container running at all times, but that seems to be the case anyway.
> >
> > 4) Create a new DeploymentManager implementation that speaks to the
> > servlet and the GBean from steps 2 and 3. It will generally speak to the
> > server via JMX to the GBean, except that any time it has to send a file it
> > will send it through the servlet, get the temp file name back, and then
> > make a JMX call to the GBean with the temp file names (and the GBean will
> > delete the temp file when it's done). We also need to figure out whether
> > for ProgressObjects it should listen for JMX notifications or send over
> > an RMI Remote object to be registered as a normal listener on the server
> > side.
> >
> > 5) Create a new DeploymentManager implementation that operates locally
> > only and assumes the server is not running. It will allow distribute or
> > undeploy but not start, stop, etc. To do those things, it will start a
> > kernel with a Deployer when the DeploymentManager is started and stop it
> > when the DeploymentManager is disconnected. This would be more or less
> > like the current deployer.jar works.
> >
> > 6) Modify the DeploymentFactoryImpl so it can handle different connection
> > URLs depending on whether it should be used locally or remotely, and
> > whether the server is running. The cases would be:
> > - Local, server running: Use current JMX-DM
> > - Local, server not running: Use new server-not-running DM impl
> > - Remote, server running: Use new remote DM implementation
> > - Remote, server not running: fail
> >
> > 7) Modify the deployer client to detect whether the server is running, and
> > use the appropriate URL to connect to JSR-88 or fail based on the cases
> > above.
> >
> > I can see an alternative of trying to adjust the current
> > JMXDeploymentManager to handle local and remote connections, and putting
> > the server running/not running logic outside of that so the deployer
> > client would first start server components and then invoke JSR-88 as if
> > the server had been running all along. But that means that only our tool
> > would be able to operate on a local server when it wasn't running (instead
> > of exposing it to other JSR-88 clients). It would also make the
> > JMXDeploymentManager kind of ugly, though I supposed we'd just change that
> > to use local and remote plugins of some sort under the covers. Anyway, it
> > doesn't seem as good as just creating several distinct DM implementations.
> >
> > Aaron
>
>