Bringing Existing Programmers to a New Platform

J# addressed existing code and expertise as Microsoft promoted .NET. Businesses already had programs written with Java syntax and Visual J++. Requiring a complete rewrite to migrate platforms would discard accumulated software and staff experience. Microsoft sought to preserve those investments while enabling programmers to use .NET web services, database access and graphical interfaces.

Related work involved multiple Microsoft development organizations. In February 2001, the Microsoft India Development Center in Hyderabad announced work on JUMP to .NET: tools and technologies for Java users migrating to .NET. The project reflected the migration strategy, while J#, announced later that year, assembled Java-language development, Visual Studio and the .NET runtime into a product.

References: [1] [2]

The Beta and the Formal Launch

On October 10, 2001, Microsoft announced the availability of Visual J# .NET Beta One for Java-language developers building applications and services on .NET. It highlighted Visual Studio integration, cooperation across languages and a Visual J++ 6.0 project-upgrade tool. Testing covered both syntax and the transition from old projects to a new development process.

The formal release took place at TechEd 2002 Europe in Barcelona on July 1, 2002. Existing Visual Studio .NET customers could obtain the product through Microsoft and MSDN channels. Microsoft described it as independently developed and not endorsed by Sun Microsystems. Launch location, beta date and development organization identify different aspects of the product’s history.

References: [2] [3]

Retaining Syntax while Changing the Execution Target

J# uses Java-style syntax but runs in the .NET Common Language Runtime, or CLR. Source code is compiled into Microsoft Intermediate Language, MSIL, rather than bytecode for a Java virtual machine. A 2003 technical account also describes a binary conversion tool that statically translates some existing Java bytecode into MSIL. Recompilation is generally preferable when source code is available.

Microsoft separately supplied libraries implementing most JDK 1.1.4-level functionality and certain extensions, alongside access to .NET libraries. Existing package and class interfaces could thus be reused within a new runtime. Migration also required checking the libraries and platform mechanisms actually used by an application.

References: [4] [5]

Two Interface Layers in a Simple Output Program

A simple example in Microsoft’s archived manual first imports the .NET namespace with import System.*, defines a Hello class and uses public static void main(String[] args) as its entry point. The body calls Console.WriteLine to output a line. The class, entry method and parameters retain structures familiar to Java programmers, while the Console performing output comes from .NET.

The example illustrates access to target-platform capabilities without first rewriting an entire program in another language. The 2016 archive of the Visual Studio 2005 documentation retains this structure and names the vjc.exe compiler and JbImp.exe binary conversion tool. The latter handles existing binaries, while the former processes source code.

References: [5]

Project Upgrades and Their Technical Scope

Official release materials name Windows Forms, ASP.NET, ADO.NET and XML web services as application areas. The Visual J++ 6.0 upgrade tool converts project and solution formats, helping older projects enter the new development environment. Migration then requires checks of code, dependent libraries and runtime behavior.

Early technical accounts explain that J# generates applications for the CLR and excludes mechanisms such as the Java Native Interface, JNI, and Remote Method Invocation, RMI. Programs relying on these features need rearranged interfaces. The 2003 version further integrated J# into Visual Studio .NET, combining Java-style syntax, compatible libraries and .NET features within its development process.

References: [3] [4]

Library Reuse and Later Deployment

Hardware-interface software offers an example of reuse. Maxim’s 1-Wire driver installation guide describes compiling its existing 1-Wire Java API with Visual J# to produce OneWireAPI.NET.dll. Higher-level applications can use the library, with deployment also requiring .NET, the J# redistributable, appropriate hardware drivers and TMEX interface files.

The revised guide concerns .NET 2.0 and J# 2.0 Second Edition, a later application of the approach. Microsoft’s later documentation separately addresses 64-bit execution support. The initial direction of code migration continued into subsequent versions, with runtime libraries and underlying dependencies remaining part of deployment.

References: [6] [5]