This page I'm starting out of a real-world need, and this need is behind the name I chose, JavaAndDotNet, rather than JavaVsDotNet?. I'm actually a little surprised that no such page is already on wiki. Yes, there are bits and pieces. But I've had to do a lot of research in order to pull together the pieces. My need: to understand the features each platform provides-- No, not features. I need to grasp the gestalt of each. I do not need to know which is better, nor do I care. Rather, I need to talk intelligently to my coworkers about how each approach applies to the design problems we face. Therefore, I'm interested in exploring both. --TimKing (DeleteWhenCooked)

Java's tagline has always been "Write once; run anywhere." If .NET had a similar tagline, it might be "Write in any language; run on Windows." Each adopts a different approach which permeates each community.

Java standards, for example, are specified and documented to be used in a variety of contexts and combinations. You can rearrange them ad hoc to devise almost any situation you desire. In contrast, .NET standards are designed for a given context and work well in that context.

Take JavaServlets, on the web tier. You can write them as pure Java classes. Or you can use JSP. You can use Struts or JSF or JSTL on top of JSP. Or you can shove JSP in favor of something like Tapestry. Or you can use these in combination in seemingly limitless ways. The resulting web application you can run on an embedded server like JettyServer. Or you can deploy it on a more elaborate server like ApacheTomcat (which could also be embedded) hosted under the built-in HTTP server Coyote, or under InternetInformationServer or ApacheHttpd (any of which Jetty could also do). Or you can go with a more integrated enterprise solution like JbossServer or IBM's WebSphere or BEA's WebLogic. Each possibility has its own strengths and weaknesses. It's a stunning, confusing, and sometimes even frustrating array of alternatives and possibilities. And this is just looking at a single Java standard.

I think there are "not endorsed" way to do things via DotnetRemoting?, or even use a third party MiddleWare to achieve the same, however what you said is the MicrosoftWay.

This phenomenon manifests the difference between JavaAndDotNetPhilosophies. Neither is innately superior. The Java approach provides more choices and flexibility. The .NET approach provides more certainty and order.

(I used to think everyone preferred the former. As I've grown wiser, I've learned I was wrong. For an excellent example preferring the latter, see PageAnchor: generalization near the bottom of CsharpVsJava.)

There's another important manifestation of this difference: How do you learn about each? With Java, you can go to the book store, where there are shelves of books from which to choose. But most Java technologies have good documentation available on-line. Some of Sun's own Java books are even available for free download, but we still tend to buy paper copies of many of them. While Java books are very important to the Java developer, they fill a different role. We buy Java books after we've decided what we want to read. But they are not necessarily the first-chance documentation that .NET books are. In order to get started with .NET, you pretty much need to buy a book. You may need to buy that book even to understand exactly what .NET is and how to use it.

I'm going to disagree on that point. I got started in .NET by downloading VisualStudioExpress and using the tutorials provided with it. The MSDN documentation is usually very good (there are some notable weak spots) and is available online and as an additional 3.2GB install with VS. I needed a book to get started with Java web development because of the Java toolset's looser coupling - while it gives you far more flexibility, it's far harder to find a simple answer. It took me several days of shenanigans and broken Eclipse plugins to get an IDE working remotely close to Visual Studio in terms of web development. But I fully agree that if you don't want to do it the Microsoft way, your choices become rapidly limited, as opposed to Java. -- LiamClarke?

Maturity

(July 2005) Java is 10 years old. .NET is less than half that. When Java was only 5, it was a pain to work with. .NET is not quite the pain Java was at its age. However, .NET is still younger, and it shows.

Third-party support for .NET is weaker than for Java. In general, for any given design problem, many more Java solutions are available than .NET solutions. This is partially due to the Java approach (see Millieu on this page), but it's also arguably due to the fact that .NET has had much less time to build a community.

Implementations

Though there are multiple sources implementing DotNet (MonoProject, DotGnu), the benchmark is MicrosoftDotNet. Other implementations are only partially compatible, and are likely to remain such, as the .NET core libraries are based on proprietary standards. (See DotNetForLinux.)

The core Java technologies, while their reference implementations are Sun's, are based on open standards and have certified, working alternatives, including open source ones. There are multiple working implementations of both the standard runtime and J2EE (JbossServer, JonasServer?, WebLogic, WebSphere).

Some say CsharpLanguage is the "consensus" language for DotNet. Whether or not this is true, it is closest in style and features to JavaLanguage. In fact, C# and Java tend to leap-frog, pulling features from each other for each successive release. See CsharpVsJava.

Java tends to support the latest development processes first. VisualStudioDotNet 2005 will add features, like source-code generation and automated refactoring, that have been available in the Java IDEs for years. JavaUnit is the benchmark for automated unit testing. Now, features like continuous testing (as continuous compilation before it) are being developed using Java.

How do tools used to design user-interfaces differ between the platforms?

Source Code

Sun publishes the source code for the core Java libraries. This can be valuable if the documentation is inadequate or if you need to figure out a bug in a library. I've saved countless hours debugging because I could step into the Java source.

For some projects, this may also pose a legal risk, requiring an explicit policy. For example, if you contribute to the Apache Harmony project, you may not contribute in any area in which you've "been exposed to" Sun's source code, so that you don't inadvertently violate someone else's IP.

Java technologies also tend to have good open-source support. This is a side effect of the maturity and multi-implementation ("run anywhere") approach.

Microsoft now makes the source code of the core libraries available for usage under their MicrosoftReferenceLicense?, and VisualStudio can be configured to retrieve it from Microsoft's symbol servers as needed - but viewing the code carries the same risk for project contributors (most notably the MonoProject) as viewing Sun's code.

DotNet is more "agile" (put it mildly).(say what?) Its characteristic lead some to wonder whether applications are developed to prove the concept (of DotNet), rather than to achieve a return for the business owner, who happen to require a SupplyChainManagement solution that rely on a particular WirelessDeviceEnterpriseComputing? implementation.

With JavaPlatform, the move is more "orderly" (put it mildly).(what?)Business owners are already redirected to the NextBigThing when an affordable Java solution comes out of the CommunityProcess?.

Functionalities (including performance) that can be delivered using DotNetCompactFramework on WindowsMobile is very limited. Is there a better alternative using JavaMicroEdition, given the constraints where we are required to use WindowsMobile and DotNet servers? Or maybe someone have favorable experience on a toolset that is noncompliant with architecture of the above two StandardsStampingCompanies? (MS and Sun), yet can deliver superior results to staple solutions offered by the major software providers.

An acceptable tool will need hooks to client UI software such as a PocketWebBrowser, and can interface with addon package security solutions(e.g. kiosk mode "may be needed" in some usage scenarios). A reliable mechanism for persisting information "may be needed", if WindowsMobile facilities cannot be used.

Well, this wiki seems to be outdated, as most of the content here is propaganda to support java, hmmm today it seems to be Ruby On Rails or is that J2EE on some kind of train. Which is it, where is the java platform going? I have seen DotNet grow so fast and mature that it out performs Java in just about every aspect. Sorry to bust your bubble, but hey maybe you should call this wiki JavaVsTheWorld?.