Java's Biggest Threat is Microsoft
I've never been one to believe that languages like Ruby, Groovy or Scala
are going to be a threat to Java the language and platform. I think
the real threat is the .NET platform.
I have a friend who works for the Canadian Federal Government in IT. He says that Microsoft sales people are phoning the decision makers every week or two offering huge incentives to migrate to the Microsoft platform (Windows and .NET). They are offering huge discounts, practically giving the stuff away, and sometimes they do give things away. Microsoft is succeeding because the government is starting to use .NET more.
Another friend of mine, also in IT, works pretty high up at the corporate headquarters of a major bank. 70% - 80% of their systems are written in Java. Within the last couple of years they brought in consultants to help them decide which current Java technologies to focus on. Initially they chose Hibernate / Spring / Wicket, but later I heard they changed their minds and went with iBatis / Spring / Struts 2. Meanwhile, Microsoft has been calling their decision makers frequently offering deep discounts to switch to the Microsoft platform. Someone at the very top of the bank made a decision to rewrite EVERYTHING in .NET. Legacy systems, recently developed systems, and new systems. All Java programmers had to learn .NET. Why? They looked at the cost of upgrading their WebLogic and WebSphere application servers and doing some maintenance work on one of their applications. The cost was going to be $1M - $2M. They were able to complete the project in .NET for $150K, so they decided that Java is too expensive. I also heard something about a lawsuit that made it impossible for enterprises to use open source application servers like JBoss and Tomcat, which was another major reason they switched. WHAT?? Did this information come from Microsoft? I am unaware of this lawsuit.
Another friend who works in London England said his company had a mixture of Java, PHP and .NET programmers. The company wanted to consolidate onto one platform and they chose .NET. He said the main company HQ was a Microsoft shop, and his satellite office was the only one using Java and PHP.
The same thing is happening at my company. We currently use five programming languages, and it looks likely that we will consolidate on .NET.
Here is a list of reasons why I think a company would choose to switch to .NET:
1) The company has some reason to only buy middleware from companies like IBM, Oracle, and Microsoft. If they want to run on WebLogic or WebSphere then they are going to spend a TON of money which gives them the impression that Java is expensive. This has never been a problem for JBoss, GlassFish, Resin and Tomcat customers. You can use these products for free, or buy support for much less than WebSphere or WebLogic. Upgrades don't cost anything. In my eyes, Java is not expensive.
2) The Java programming language has stagnated over the last 4 - 5 years. .NET has pulled ahead with closures, lambda expressions, properties, LINQ, WPF, etc. Knowing that these features are coming to Java, this doesn't really bother me. Java FX 2.0 is Java's answers to WPF & Silverlight, and we'll have a production release by JavaOne 2011. Closures and lambdas are coming in Java 8 (2012). At JavaOne 2010 they hinted about the possibility of adding properties to Java 8. I'm not sure if we'll ever see LINQ, but that's not enough to make me abandon the entire Java platform.
3) Too much choice. For every decision you have to make there are many choices of libraries and frameworks. You have to spend a lot of time and effort to evaluate all of the options. This has fragmented the Java community into several religions. If you want to hire a Java programmer, you have to make sure they have experience with your choice of technology stack. In .NET land, the King (Microsoft) has made all the decisions for you. Just use it. In Java, there is a King (JCP) who tries to make decision making easy by providing standardized APIs for everything imaginable like in .NET, but the mistakes from the past have tarnished many developers' view and support of the King, so some choose to ignore anything and everything he has to offer. Then they have to wire together a plethora of libraries and frameworks before writing their application which is difficult and time consuming. I choose JCP standard APIs and open source Java EE application servers, so decision making and ease of use is not a problem for me
4) Politics. There's nothing you can do about this other than being well informed to try and sway the decision.
I hope Oracle and IBM realize what is happening and do something NOW.