0

I know there is a lot of information here... but there may be other people with problems like this, and I think it would be a great help to discuss this, or at least get some decent input/suggestions brewing.

Alright, let me start out by giving an overview of our environment.

We have a multi-module maven project with about 11 JARs. Dependent on those internal JARs are 9 WAR files, of which 8 are placed in an EAR file. The remaining WAR file is deployed on its own as a separate application. When the 8 WAR files are built (that reside in the EAR), they are built as skinny WAR files, so the resultant EAR file is at a minimal size with all dependencies in the APP-INF/lib section. All of this works with no issues. We currently deploy to a remote WebLogic 10.3 server that has a lot of memory and CPU, so the load is not on our individual machines. We're also publishing nightly snapshots using a continuous integration build server.

Artifacts that we're deploying:
EAR file containing 8 WAR files, 11 internal JARs, and third party libs: ~70MB
Other WAR file: ~110MB

Some of our software engineers would like to work from home, over a VPN connection, and have incremental/hot deployment options. Otherwise, because of how we deploy with web logic/maven, they are forced to build an entire EAR file or the 110MB WAR file and upload them over VPN. This is not fun, and it's not fast. I have been reading on JRebel, and was wondering if anyone else uses JRebel with a multimodule maven project doing remote deployments, and how to do it efficiently.

From some of my reading, it is recommended to 'upload the changes' to the server and have the rebel.xml configurations reading those directories for that particular deployment which... well, brings us to the issue at hand. How do I tell Maven to dump changed resources/newly compiled class files to some other directory so that I can upload them to the server and to the appropriate folders (our server hosts something like 10+ WebLogic instances running on various ports, one instance per developer). Or just have the developers share their workspace folder with the network, and configure rebel.xml files (in a JAR, for example) point to the appropriate //COMPUTERNAME/workspace/jarProjectName/target/classes folder. The problem I foresee with that is, every time they start WebLogic, it's going to fish all the .class and configuration files and JSP files across the network, because the rebel.xml file wins first, and that will be terrible over VPN. AFTER the deploy is up though, then hot deployment should work as usual. I just don't want the unnecessary overhead of transferring all the classes over the network for the first boot, and not only that, sometimes developers are at the office, turn off their computer, and then go home. What happens to JRebel/WebLogic then?

It seems like a much better idea to only see what files have changed in the various maven projects, and FTP them to the proper location on the server so that JRebel can do it's thing, completely server side. Does anyone have a good way to do this? Or maybe someone has a solution that does not involve JRebel at all. Let's talk.

Lo-Tan
  • 2,725
  • 1
  • 26
  • 27

3 Answers3

1

It is now possible to use JRebel for remote deployment also. Really easy to setup, no need for special networking configurations, opening ports on the remote machine, etc.

http://zeroturnaround.com/jrebel/remoting

It relies on IDE plugin heavily but the experience is then as if you were developing on a local machine

Anton Arhipov
  • 6,479
  • 1
  • 35
  • 43
0

What you should do is have each developer run their own local instances of WebLogic.

There is a fair bit of memory usage with WebLogic, but having to do a deployment over a VPN is going to be a losing proposition. The only way this might work is using LiveRebel. But again, you will still pay a heavy penalty for network transmission, especially over a slow connection.

You are mostly likely better off running your app in the JDeveloper WLS and dropping the huge shared instance of WebLogic.

Mark Robinson
  • 3,135
  • 1
  • 22
  • 37
  • They used to do development on local WebLogic instances and stopped doing that recently because of memory use (our laptops have 4GB each, mostly dual core, new ones have quads). They had ANT scripts building the EAR and all the libraries in source management. I am trying to pull away from that. Their main advantage was an ANT script that could analyze all the code/resources and build an 'incremental' EAR file (with just changed files) and they were uploading that and toggling redeploy. I would like maven to stay, and hate that they've lost this advantage when I redid the build with Maven. – Lo-Tan Mar 09 '11 at 04:19
0

Why not to use samba (http://en.wikipedia.org/wiki/Samba_(software)) protocol for this? You will just need a network drive to be used as a shared location. Developer could set the compiler path to point to that location and in the deployed app, rebel.xml paths should point to the same directories. That would do the trick. Even if the developer switches off his machine, Weblogic will keep running.

Anton Arhipov
  • 6,479
  • 1
  • 35
  • 43