spacer

 

Wednesday, December 20, 2006

Got MyEclipseIDE?

I've been a Java/J2EE Consultant for over 8 years now and I've been a MyEclipse subscriber since approximately 1993. I am always impressed in how fast MyEclipse kept up with the version of Eclipse and Eclipse plugins being released. New technologies emerge all the time and before you could think about it, the tools you love to use is already integrated on their next beta and eventually GA release.

When pair-programming with other developers I noticed that they are always in awe when they observe how I can modify my code on-the-spot without re-starting the web or application server. Of course the hot-code replace feature was never a surprise to me because I've been a MyEclipse user for quite a while now and previously a WebSphere/Rational Application Developer (WSAD) user as well which had similar set of tools for development (only WSAD is more expensive).

WebSphere/Rational Application Developer is a very similar IDE that comes with it's own suite of tools that will aid developers in whatever aspect of programming they are tasked to do. The big difference is that MyEclipseIDE uses mostly open source plugins and IBM develop its own. I think this price difference is worth noting. I have had the priviledge to read a couple of email responses to MyEclipseIDE lately and these emails were shaming MyEclipseIDE for "stealing" opensource tools. The responses really surprised me since on the other side IBM Develops it's own suite of tools and a single license cost $2220 while MyEclipseIDE uses opensource tools and their lowest subscription cost $31.75. Why are these people slamming MyEclipseIDE for delivering quality low-cost development tools?

I have also been in several projects where WebSphere was used and compared to MyEclipseIDE, WSAD was so bloated that normal day-to-day tasks would take longer than expected. Not to mention that it takes literally a day or two to install WSAD. I honestly am not sh*tting you. I hated installing WSAD. Take a look at the pricing for IBM Rational Application Developer (formerly known as WebSphere Application Developer) and try not to freak out. WSAD is a very nice tool but the price-to-performance ratio for WSAD just doesn't compare to MyEclipseIDE.

Cost Justification
For every consulting company that I have been in I have always used MyEclipse. Most of a consultants effort on the first week is getting setup with the company's development environment and most will have a base eclipse and numerous plug-ins to install. At an average, it will take at least 2 to 4 to set someone up on a new machine.
  • Install plug-ins
    (Struts, Spring Framework, Subversion, a plug-in to run an application server)
  • Install Database tools

So to do a calculation for 2 people at an average cost of $40/hr.

2 people x $40 x 4 hours = $320.

This applies for all new employees or consultant that needs to be setup. I want to note that as of now, here are the different types of MyEclipse subscriptions:

  • Standard Edition (SE) $31.75
  • Professional Edition $52.95

I have also witnessed a setup time of one hour but then later on the users of these inferior plugins continue to have day-to-day issues and it does get costly when your IDE is crashing all the time and in addition you experience code synchronization issues between the source in your IDE and the application server (just to note some examples).

So I hope that this is a no-brainer for all managers out there. Got MyEclipseIDE?

MyEclipseIDE Features That Stand Out

Web Deployment Tools

This feature has been around since day one and it's got to be one of my favorite. This particular feature handles how a web project deploys it's sources and reference libraries. If your web application refers to dependent projects, they can either be placed in the specified web classes output directory or be deployed as a [project].jar files. What typically happens in a non-MyEclipseIDE environment is that if you have a situation where a project refers to another project. When the child project changes, a ant build task is manually launched and jar the dependent project and gets placed in the WEB-INF/lib web project directory. Now, try and imagine if you are working on the child project. You would have to do this every time you make a code change and then restart your application server. How annoying is that? MyEclipseIDE updates the code every time you save so even when running Tomcat the hot-code-replace is awesome. Which developer do you think will be more productive?

Asynchronous JavaScript (AJAX) Tools

If you've already jumped in the AJAX bandwagon you might be dreading it right now because it's hard to debug javascript code. But thank goodness that MyEclipseIDE comes with it's own suite of AJAX tools and the most useful tool to me is the AJAX debugger.

The debugger is so neat you can debug any live web address and then put a bookmark on any of its javascript code (this is possible since javascript is a public html resource). I urge you to watch this MyEclipseIDE Features Overview (also mentioned above).

Database Tools

I love this feature and is compatible with any JDBC-compliant database servers. What I find handy for this is the generation of the database entity relationship diagram (or ERD). I may have a task to implement a feature and as a consultant I am what you call a "business-rule" blind and I need to see the big picture. This allows you to generate the entire ERD or selectively. It prints out really nice as well. This is a cool feature to show to other non-MyEclipseIDE users because it is a developer productivity aid. I wanted to also note that it supports typical JDBC queries, table creates, etc..

Other Features Worth Noting

There are several others worth noting like the hot-code-replace for launching application servers; Framework integration plug-ins for Spring, Hibernate, Java Server Faces, Struts, JSTL, Tapestry, etc...

Upgrading

When new features come up, the freebie developer (a developer using Eclipse with manually installed plug-ins), will get the word somehow that a new upgrade for a particular plug-in has been released. That developer then downloads and installs the plug-in to find out later one that the plug-in is not compatible with the current version of Eclipse they are using. What I usually see happen is that other developers download and install the plug-ins as well, so now you have N developers that are *screwed* because no one has tested this plug-in. And if someone has tested them it's only for a particular version of Eclipse and not everyone is running the same version of it. So what ends up happening is that developers refrain from downloading a plug-in until someone else can guarantee that this will not break their current install. This could end up costing the company some amount of money as well for the time spent trying to resolve this issue, not to mention it will hinder developer productivity and lowers the developer tool confidence level as well.

So here I am at my workstation LMAO because I never have those issues being a MyEclipseIDE user. When I upgrade to the newest GA version the plug-ins in MyEclipseIDE are guaranteed to work. I never have to question whether this will break my development environment. It is always guaranteed that the integrated plug-ins are tested. And if a bug arises there's a place that I can go to for support and this rarely happens for me. For as long as I can remember I have never rolled back a GA version of MyEclipseIDE.

The MyEclipseIDE Influence
I don't usually convince or sell MyEclipseIDE to people and I think most of them will find that there a lot of benefits using this tool and I myself demonstrating developer productivity first hand is enough for companies to start buying several subscriptions themselves.
MyEclipseIDE: A Killer App?
I don't believe MyEclipseIDE is a killer app but I believe it's overall the best Java Development IDE out there that focuses on (1) low cost, (2) minimal bugs and (3) fast support turn-around at a very low price per seat. Every now and then when new features come out some of them may be quirky (like the Hibernate support tools) but they usually get better on future versions.
Reference:

Friday, December 08, 2006

Dealing with Html Buttons

I've gone through several deviations and techniques of handling HTML buttons in an action handler code and so far this is the best and proven code that I have came up with.

The class is called HtmlButtons and it is designed to handle buttons and image buttons in your HTML/JSP page.

Suppose we have the follwing HTML form:

<form action="/createNewUser.do">
<input type="text" name="username"/>
<input type="password" name="password"/>
<input type="submit" name="createButton" value="createButton"/>
<input type="image" name="deleteButton" value="deleteButton"/>
</form>

With HtmlButtons, the way to handle this in your action handler class would be very simple. The following is an example of a Struts Action handler:

public ActionForward execute(ActionMapping mapping, ActionForm form, 
        HttpServletRequest request, HttpServletResponse response) 
            throws Exception {
            
    ActionForward forward = mapping.getInputForward();
    HtmlButtons buttons = new HtmlButtons(request);
    if (buttons.pressed("createButton")) {
        // Create User
    } else if (buttons.pressed("deleteButton")) {
        // Delete User
    }
    return forward;
}

On top of that, if you create an abstract base action class, you could actually make the HtmlButtons class be a part of your method arguments:

// ActionBase#executeAction (abstract)
public ActionForward execute(ActionMapping mapping, ActionForm form, 
    HttpServletRequest request, HttpServletResponse response) 
        throws Exception {
        
    return executeAction(mapping, form, request, response, new HtmlButtons(request));
}

// Action Class Implementation
public ActionForm executeActionActionMapping mapping, ActionForm form, 
    HttpServletRequest request, HttpServletResponse response, 
    HtmlButtons buttons) throws Exception {
    
    if (buttons.pressed("createButton")) {
        // Create User
    } else if (buttons.pressed("deleteButton")) {
        // Delete User
    }    
}

View HtmlButtons.java

Popular Posts

Featured Post

Encrypting Properties File Values with Jasypt

Encrypting Properties File Values with Jasypt What's the fuzz all about? Property files are text resources in your standard web applic...