Optimize deployment cycle for development - maven

I use Seam3 + maven + jboss7 combination in my development. Would it be possible to optimize the loadup time when I do
mvn clean package jboss-as:redeploy
Currently this takes over 20 seconds with core2duo with an SSD (Mac Air).
In my workflow, it's common to make a lot of small changes and then redeploy and see changes. It's quite a big bottleneck with current setup, and it breaks my flow.
Would it be possible to do proper hot-deployment over my configuration?
Is there parameters for making startup faster when developing?

There is no hot-deployment. I'm not sure why it would be taking 20 seconds either. I get around a 3 second start-up time with JBoss AS7 and my deployment times are around 1 second maven deployments.
Is the server running locally or on a different machine? It could be the time it takes over the network.
You can write custom deployment scripts or write custom Java code to deploy applications as well.

I found about JRebel. It's a gift that I would not have expected to fall upon me. This supports my workflow and makes me much more efficient. If you need hot-deployment, try it out!

Related

How to speed up Java Project by moving files to Ramdisk?

I have a simple maven - Java EE web application which I develop using IntelliJ and deploy to Glassfish server. The thing is, it takes about 15 seconds to deploy. I know it is not too long, but I am trying to make it even faster.
I installed RAMDISK and moved my project into that disk, it did not help. Then I moved Glassfish in the RAMDISK as well, however there was still no change in the performance.
Do I need to move JDK, JRE to the RAMDISK as well to see the change? Or even the IDE itself?
Why did not moving the project and the glassfish to RAMDISK make any change?
Thanks.
Btw , for CLOSE question fans, there are question like this:
Can I use a RAM disk to speed up my IDE?
Close those first.
Perhaps your speed problem is not related to the disk. Maybe use a profiler to see where the time is actually being spent, and then optimize the slowest part. Repeat until startup is fast enough.

Environment requirements developing GWT GXT application

I have to maintain a web application built using GWT 2, GXT 2.2, RPC calls, Hibernate, Spring and MySql.
In order to debug the application server/client side, compile and work easily what are the minimum requirements (Windows Xp system)
Recommendation from GWT Team -
Source - https://vaadin.com/blog/-/blogs/the-future-of-gwt-report-2012
You can upvote GWT Dev Requests For compile time improvements - https://vaadin.com/gwt/report-2012/wishlist
Some other tips - How to improve GWT hosted mode / compilation times?
Eclipse will work on nearly any hardware. It might simply take a bit longer to compile. I develope on a 3 year old laptop and it is fast enough.
I recommend you use Eclipse with Google Plugin For Eclipse and then create your GWT project using Google Plugin For Eclipse and configure gxt for your project.
Well I've used -localWorkers 6 as argument and -Xmx512m for the VM, I've cleaned the old .class files, but still stuck on 6 minutes (my project is 9.5MB), the only thing i think could improve compiling time is to use a strong CPU fast enough
The single most performance improvement I've made with all my projects is to move my toolkit VM onto a Solid State Drive.
For best results, upgrade your laptop system disk to SSD but if downsizing is out of the question, box a 60G SSD into a external case, hook it up to an ESATA port, and blaze through your compiles. USB 3.0 is a suitable substitute for esata but uSB cannot sustain the same peak throughput.
my problem was resolved since December :D , by reformatting my old PC, the compilation time took 2 minutes, using compilation just for ie8 and no other configuration, but your replies will be useful for me in the future ;)

IBM RAD 7 and Websphere 6.1 is slow and unresponsive

How can I improve performance when developing locally with Websphere and RAD? I am using one web application of moderate size (1000? classes) and it is impossible to handle the app locally on a Windows box. The Websphere 6.1 configuration uses the default configs. RAD7 is configured to handle a max heap of 1024mb. I thought about increasing the heap of the server. At present, the min and max are 128/300mb.
In terms of unresponsiveness, sometimes it may take minutes to load a page, if the page loads at all. Also, I disabled "Build Automatically" and Publish Automatically. Maybe those should be turned on?
I'm not sure about RAD7 but from my past experience, I'd suggest to give MyEclipse Blue a try.
Since that might not be an option, here are some other usual culprits, you can check:
How much RAM does your machine have? It's good to give WS 1GB of RAM but if your computer only has 1GB of real RAM, it's going to swap itself to death. If your boss won't pay for it, go get some RAM with your own money. 2GB are less than $80 ATM. I suggest to get at least 4GB. Yes, Windows can only use 3.5GB even when 4 are installed but that half GB costs $20 or less. Even thinking about this for more than five minutes will cost more than simply buying it.
Next make sure whether you are using the correct Java GC options. There should be some info about this in the docs. Plus make sure that the process uses the "jvm.dll" from the "server" directory, not the "client" one. "Process Explorer" will help.
Since I'm not using RAD, I'm not 100% sure about "Build Automatically" and "Publish Automatically" but since RAD7 is based on Eclipse, these options will compile code in the background as you type. This will greatly reduce the time between you saving your last change and the moment the app server can start to load the new code.
When all else fails, run websphere in a profiler and look where it spends all the time.
Aaron had great advice.
I would also suggest using JConsole to see what is going on, to help you determine if you need more memory, larger heap size, etc. My experience with running Websphere and RAD locally is that it will be slow, but then I was on an old machine that needed more memory. :)
http://java.sun.com/j2se/1.5.0/docs/guide/management/jconsole.html
Berlin,
RAD 7 saps your PC! When I was using it to develop Portlets, I followed this optimization guide and it made the IDE significantly quicker to develop Portlets in. Obviously it is aimed at Portlet development but it might help you.
Also following the advice given to the answer to this question will also help.
I definitely agree with Aaron Digulla. You will see a major performance improvement with 4GB RAM installed on your development machine. I developed an Eclipse/RAD plugin with some buddies of mine and we were able to measure how much time we saved by upgrading from 2GB to 4GB.
The plugin is available here: http://lopb.org/
After gathering some hard numbers on how much time we spent waiting for publishing and loading the app on our 2GB development machines, we were able to convince management to upgrade the rest of the developers on the team.
Anyway, you should really consider upgrading to 4GB if you want to run RAD 7 and Websphere 6 on the same development machine. Each one needs -Xms=512m -Xmx=1024m as JVM args to run well, and that means you will swap to disk way too much if you only have 2GB of RAM or less. HTH
Make sure your running was in development mode for your development and testing.
Option is under the server in the console.
Karl
hehe, we had the same problem with RAD6 and Websphere 6.
The way we speeded things up is moved to Eclipse and JBoss.
We developed on Eclipse and JBoss and then first round of testing was on Websphere. We had some issues with the differences but would never had completed the project were it not for out switch (a lot fewer issues than deving on RAD/WAS).
But to help you in the mean time...
Definitely, probably want build automatically and publish automatically off. That way you can make a bunch of changes and then tell RAD to compile and deploy while you go and get coffee.
There is a "run in dev mode" in Websphere (I know there was for 6.0) so track that down and turn it on (it's on the WAS console somewhere)
I found WAS's on stack replacement to work fairly well. I found that at the beginning of the day I'd deploy to WAS and then not have to redeploy at least until lunch time (as I was debugging). I would make changes and the changes would be fed to the server without my having to redeploy.
Chances are, even after running the profiler you'll find there's nothing much that you can do..
Turn off all validations (in RAD), they tend to take forever.
Depending on what you're doing with EE investigate the possibility of deving on another IDE/Server combo, maybe you can do the bulk of your work in there and then deploy from RAD/WAS to do some final testing. If you're using vanilla ejb's or web services this is feasible.
That max heap does sound a bit small to me. The suggestion to fire up JConsole is a good one cause it will tell you how much heap is being used, though I'm not sure if it will work on the IBM vm (RAD's). You might try and turn on the memory usage monitor in RAD, tells you how much memory is being used, that way you can tell if it's hitting the max.
JConsole will not work without specifically enabling it via a JVM command line switch.
Suggestions from Michael Wiles sound reasonable but please update your RAD first to the latest FixPack available.
You can also contact support.

Tricks to speed up Jboss Seam debug cycle

We deploy and debug a Jboss Seam 2.0 EAR app from within eclipse, booting it on Jboss AS 4.2.2. Right now we need to reboot it every time we change the message bundle, pages.xml, components.xml, or the model, which takes up to 45 seconds.
Is it possible to include aforementioned files in hot deployment, and what are the options for boosting boot speeds?
For a frame of reference, we work on Intel quad core 6600's or better, with at least 4GB of ram.
Edit: I'm looking for ways to improve both boot speed (thats the 45 seconds) besides hot deploying message bundle, pages.xml, components.xml etc.
This has been an outstanding issue for Seam for ages now : https://jira.jboss.org/jira/browse/EJBTHREE-1096
It's not a trick - more a method of working - but I have all of my UI code (page handlers etc) as POJOs so that they can be easily hot-deployed. Any more serious business logic I put in SLSB/SFSB and unit test them thoroughly so hopefully I have fewer deploys when testing the application via the UI.
Currently pages.xml can be hot deployed. I've read some solutions for reloading the message bundle but it's never bothered me enough to warrant further investigation.
When you say 'reboot' it sounds like you mean 'shut-down and re-start JBoss'.
You only have to force JBoss to reload the application, by touching the file (for an EAR or WAR archive) or the deployment descriptor (app.ear/META-INF/application.xml or app.war/WEB-INF/web.xml) for an exploded archive.
Reloading the Seam application EAR takes about 15 seconds on my machine, while starting JBoss takes about 30 seconds excluding shut-down but including starting the Seam application.
If you do want to restart JBoss, you can probably make it start faster by removing components you do not need in your development environment, such as JBossHA (high availability and clustering).
Since using JRebel with JBoss I have saved a lot of time.
http://www.zeroturnaround.com/jrebel/
It is not free but imho it is one of the tools that is worth the money and saves a lot of time restarting, redeploying an app after only a small change.
E.g. it reloads messages.properties.
What is it doing during those 45 seconds? If it is loading data from the hard drive then you could invest in a faster one. Non-SSD Hard drives are still a bottleneck these days. Although the time points out to some other issue...
I think it is best for you to open (or look for) an issue at:
https://jira.jboss.org/jira/browse/JBSEAM
(Note: For posting issues you need to login first.)
I've sped up boot time by moving to a war and stripping Jboss to a bare minimum (Since I'm only using seam POJOs and not EJBs).

Does CI need a CI-Server

Is a CI server required for continous integration?
In order to facilitate continous integration you need to automate the build, distribution, and deploy processes. Each of these steps is possible without any specialized CI-Server. Coordinating these activities can be done through file notifications and other low level mechanisms; however, a database driven backend (a CI-Server) coordinating these steps greatly enhances the reliability, scalability, and maintainability of your systems.
You don't need a dedicated server, but a build machine of some kind is invaluable, otherwise there is no single central place where the code is always being built and tested. Although you can mimic this affect using a developer machine, there's the risk of overlap with the code that is being changed on that machine.
BTW I use Hudson, which is pretty light weight - doesn't need much to get it going.
It's important to use a dedicated machine so that you get independent verification, without corruption.
For small projects, it can be a pretty basic machine, so don't let hardware costs get you down. You probably have an old machine in a closet that is good enough.
You can also avoid dedicated hardware by using a virtual machine. Best bet is to find a server that is doing something else but is underloaded, and put the VM on it.
Before I ever heard the term "continuous-integration" (This was back in 2002 or 2003) I wrote a nightly build script that connected to cvs, grabbed a clean copy of the main project and the five smaller sub-projects, built all the jars via ant then built and redeployed a WAR file via a second ant script that used the tomcat ant tasks.
It ran via cron at 7pm and sent email with a bunch of attached output files. We used it for the entire 7 months of the project and it stayed in use for the next 20 months of maintenance and improvements.
It worked fine but I would prefer hudson over bash scripts, cron and ant.
A separate machine is really necessary if you have more than one developer on the project.
If you're using the .NET technology stack here's some pointers:
CruiseControl.Net is fairly lightweight. That's what we use. You could probably run it on your development machine without too much trouble.
You don't need to install or run Visual Studio unless you have Visual Studio Setup Projects. Instead, you can use a free command line build tool called MSBuild.

Resources