26 Better Support for Peer to Peer Networks
Java is used extensively to build Peer to Peer (P2P) networks. There are open source java implementations of the gnutella protocol. JXTA is an emerging standard for P2P networks and uses Java as its prototype implementations. Limewire and Kazaa downloaded hundreds of millions of times are written in Java and are among the more popular P2P clients available to date.
27. Pure Java Relational Databases
There are several relational databases that are implemented in Java, these are Pointbase, HSQL, Instantdb, Firstsql and Cloudbase. These are important in that they allow you to deploy a database everywhere you can deploy Java. Some of them even allow Java types to be used in the database. Another additional benefit they are much easier to install than a traditional RDMS. There are no equivalents of an RDMS written in .NET languages like C# or VB.NET.
28.Standardized Security
Java has a standard way of providing Authentication and Authorization (JSSE). The choices in .NET is limited. In fact, a well published bug in the way IE handled digital certificates required a service pack to fix.
29. Safer Third Party Libraries
Java libraries are assumed to be 100% pure Java unless otherwise noted. .NET libraries may come in native code or IL. Native code libraries have a likelihood to make a software system unstable and insecure. In fact its not clear what percentage of code in the core .NET libraries compile to MSIL. In the .NET world the concept of safe library code is deliberately ambiguous. Rather than tell you that Windows.Forms is 90% native windows code, Microsoft prefers to be silent about it, and hope that you buy their portable and safe argument.
30. Resusable IDE Frameworks
Netbeans and Eclipse are reusable GUI Frameworks that can be leveraged in building your GUI application. This means less time building your GUI framework, and more time building the core of your application. You can't find something similar in .NET.
31. Open Source Structured Diagram Editing Frameworks
There are many open source structured diagram editing frameworks in Java (i.e. GEF, JGraph, JHotDraw) that can be reused and embedded in your application without cost.
32. More Parser Generators
There's is more mature support for generating parsers in the Java world, some options are JavaCC, ANTLR, Sable, JavaCUP and JFLex.
33. Aspect Oriented Programming
Grady Booch co-creator of UML states "If I were to look into my crystal ball in terms of the next generation of programming languages, my guess is it would be an aspect-oriented language, and my further guess is the UML itself could be a reasonable aspect-oriented language." AspectJ is a compiler that supports aspect oriented programming (AOP), it has been available for Java for several years. There is no equivalent to AOP in the .NET world, some may say that .NET attributes are the same, however that is an oversimplification.
34. Model-2 Architecture
Model2 architecture promotes separation business logic and presentation logic. This leads to a more reusable and maintainable web applications. Such a concept is competely foreign to .NET.
35. Web Servers written in 100% pure Java and Open Source
Webservers like Tomcat, Jetty, Resin and Orion are written in Java unlike IIS which is written in something other than a .NET language. The benefit is that customizations and extensions are easier.
36. Microkernels and Services Frameworks
Many of the servers developed in Java are based on a JMX microkernel architecture. This means easier configurability, manageability and ultimately lower total cost of ownership (i.e. TOC), something completely absent in .NET.
37. Application Servers
Application servers help develop highly scalable implementations, the concept of an application server is missing in .NET, the equivalent however may be .NET server however its release has been delayed 3 times and its anybody's guess when it'll come out. Hopefully it gets released before your "Software Assurance" expires.
38. Tag Libraries
Tag Libraries are standard and safe way of encapsulating code for use by Web designers, unlike ASP.NET where it is common practice to intermingle code with HTML.
39. More Embedded Expression Languages
There are several expression languages that you can use to make programming easier. The most familar to most is support for regular expressions and support for XPath queries. However, the Java world has JXPath which supports xpath like queries across plain old java objects.
40. Pure Java Script Languages and Embedding
There are several scripting languages that are written in Java. These implementations allow you to seamlessly embed these scripting into a final product. These don't exists in .NET because of the CLRs limitations in supporting dynamic languages. Some examples of scripting languages that have been written in Java are JavaScript, Python, DynamicJava and BeanShell.
41. More Web Service Deployments
A recent survey shows that 53.3% of webservices implementations are done on J2EE as compared to a dismal 33.7% on the .NET platform. This given the fact that .NET is supposed to be a platform designed and tuned for webservices.
42, Sophisticated Logging via Log4J
Log4J is a sophisticated logging library available for Java that has no parallel in .NET.
43. Distributed Caching
There are multiple vendors and open source projects that provide distributed caching (i.e. SpiritCache, Coherence, Gemstone, JCS, Oracle). Distributed Caching solutions are unavailable in .NET. In fact "Centralized Caching" for .NET is in one site's wishlist.
44. More Alternative Messaging Implementations
There are more messaging implementations that are supported in Java, furthermore, they are supported by a standard API (i.e. JMS). What this means is that you can choose the best messaging product for your situation. For example, Tibco is used for high demand financial markets, iBus supports wireless environments, Sonic can bridge Mail and FTP messaging. With .NET you only have one choice, however, there are JMS vendors that can also bridge to .NET.
45. Write Stored Procedures and Embedded SQL in Java
You can write Stored Procedures in Java for Oracle, DB2 and Sybase to name a few. Java has a standard way of embedding SQL called SQLJ, which is supported by Oracle, DB2, Sybase and Informix . In the .NET environment you write a stored procedure using TSQL, which doesn't look anything like C# or VB.NET!
46. Better support for Lightweight Persistence
There are serveral lightweight high performance persistence libraries written for Java, some examples are NDBM, Jisp and JDataStore. This is useful when your application does not need to bundle a full fledged relational or object database. You cannot find a similar lightweight persistence library that's written in C# or VB.NET.
47. Open Source Java Compilers and Parsers
There are several open source java compilers, many written also in java (i.e. Jikes, Eclipse, AspectJ, Kopi, Kiev) that make it easier to develop tools like Auditors, Metrics, Code Coverage and Refactoring. Furthermore, it makes is easier to develop embedded languages like SQLJ.
By contrast .NET's CodeDOM assembly isn't able to parse .NET languages like C# or VB. It can only generate code, however what real gain is that, when writing out strings will suffice?
48. Hardware Support
There are multiple vendors that have hardware support for Java in their microprocessors, the most notable of which is ARM which holds a commanding position in PDAs and Cell Phones. The ARM Jazelle technology provides a highly-optimized implementation of the Java Virtual Machine (JVM), speeding up execution times and providing consumers with an enriched user experience on their mobile devices. (http://www.arm.com/armtech/jazelle?OpenDocument). Other vendors include Nazomi and AJile.
49. More Licensing and Support Options
Because there are more vendors supporting Java, you have a choice of which licensing scheme fits your business model. One good example are the licensing schemes available for Application Servers. Oracle has per user licensing, IBM and BEA have per server licensing, Macromedia has a scheme to support embedding, JBOSS has a free license with support that can be licensed. In contrast, .NET Server will only be per user licensing.