An Introduction to Java: What Non-Developers Need to Know
Articles and Tips: article
Senior Research Engineer
Novell Developer Information
Technical Publications Architect
Novell Developer Information
01 Jul 1997
You've probably been hearing a lot lately about Java, the highly acclaimed new programming language for the Internet. This AppNote cuts through the hype to outline what Java is, why developers are excited about it, and where Novell fits in.
Few computer technologies have made as profound an impact as Java, the new Internet programming language from Sun Microsystems. The industry press is full of articles about how Java is changing the very nature of the World Wide Web and how it is the uncontested successor to C++ as the language of choice for developers. But with all the hype surrounding Java, it is difficult to cut through the hyperbole and understand what Java really is-especially for those who are not application developers.
This AppNote is targeted toward the non-developer audience: network designers, administrators, resellers, and integrators who want to know what Java is and why developers are so excited about it. It also explains the role that Novell is playing in the Java story. The AppNote is divided into three main sections:
Java as a language and as a platform
Novell and Java
For more information, refer to the links listed at the end of this AppNote.
A Bit of Java History
To appreciate the significance of Java, it is helpful to know where it came from and what its original design goals were. This section provides a brief overview of how Java came to be.
In December 1990, Sun employee Patrick Naughton recruited colleagues James Gosling and Mike Sheridan to work on a project known as the Green Project under the auspices of Sun founder Bill Joy. Frustrated by the complexity and limitations of the C and C++ programming languages, the team's initial idea was to create an object-oriented development environment based on C++, but easier to learn and use. In April 1991, the team decided on embedded systems software for smart consumer devices as the delivery platform for their project. James Gosling wrote the original compiler (then dubbed "Oak") and, with the other team members, developed a runtime interpreter for what would become the Java language.
By fall of 1992, the team had developed a prototype system known as "*7", a kind of cross between a Personal Digital Assistant and an intelligent remote control device. Sun President Scott McNealy was duly impressed and set up the Green Project as a wholly owned subsidiary of Sun. From 1993 to 1994, the team pursued opportunities it felt were opening up in the set-top box operating system arena. The fledgling subsidiary failed to win a bid with Time-Warner, however, and eventually the team concluded that the market for smart consumer electronics, and set-top boxes in particular, was not living up to its much-hyped potential. The Green Project subsidiary was reabsorbed into Sun in mid-1994.
Java Heats Up
Fortunately, the demise of the Green Project coincided with the birth of the World Wide Web phenomenon. Upon examining the dynamics of the web, the former Green team realized that this new environment had the same requirements as the set-top box OS they had developed: small, reliable, secure, platform-independent code. Building from the foundation of the Java language, Patrick Naughton cranked out a prototype browser (reportedly in one weekend) and, after some additional work by Jonathan Payne, the HotJava browser was released to the world in 1995.
At the time, HotJava was a "proof of concept" of the abilities of the Java language. It showed that Java could provide a secure, cross-platform way for code to be downloaded and run from untrusted hosts on the World Wide Web. One of HotJava's most enticing capabilities was its support for "applets," slices of Java code that could be downloaded across a network and then run locally to bring dynamic computing solutions to the rapidly growing web environment.
In January 1996, Sun formed its JavaSoft business unit to develop products based on Java technology, continue to enhance the Java programming language, and work with third parties to create applications, tools, systems platforms and services to augment the language's capabilities. That same month, JavaSoft released the Java Development Kit (JDK) 1.0, a rudimentary collection of basic components to help software developers build applications with Java. It included the Java compiler, an applet viewer, a prototype debugger, and the Java Virtual Machine (JVM) needed to run Java-based programs. It also included basic class libraries for graphics, audio, animation, and networking.
Another browser vendor-Netscape Communications Inc.-saw the advantages of Java and quickly partnered with JavaSoft to exploit the new technology. It wasn't long before Netscape delivered support for Java applets in its Netscape Navigator 2.0 product. This was a key factor behind Java's rise to stardom, as it forced every other vendor to support Java applets.
To further promote their new technology, JavaSoft allowed other companies to license the Java source code to enhance their browsers, to create development tools for Java programming, and to port the Java Virtual Machine to various operating systems. Early licensees included IBM, Microsoft, Symantec, Silicon Graphics, Oracle, Toshiba, and, of course, Novell, who was the first operating system vendor to license Java.
In the two years since its initial release, Java has lined up an impressive amount of support. Virtually every major software vendor has licensed Java, and Java is now incorporated into or is available from every major operating system platform, from PC desktops to Unix workstations to host mainframes. Java applets (based on JDK 1.02) are supported by the two most popular web browsers: Netscape Navigator 3.0 and Microsoft Internet Explorer 3.0. IBM/Lotus, Computer Associates, Symantec, Informix, Oracle, Sybase, and other software powerhouses are all building 100% Pure Java software. One example is the Corel Office for Java, which is currently in beta. (For a review of Corel Office for Java, see the NetNote entitled "In Review: A First Look at Corel Office for Java Beta 1.00.414" in this month's issue of AppNotes.)
A number of start-up organizations are also riding the Java wave, offering custom business programming in Java or Java-based vertical market software. Other startups have devised Java-based technologies for the Internet, such as Marimba's Castanet, which has been licensed by Netscape to deliver streaming "netcast" information to the desktop. New Java projects are spurred on by the hundreds of millions of dollars in venture capital available from resources such as the Java Fund, a pool of venture capital formed last summer by 11 companies, including Cisco Systems, IBM, Netscape, and Oracle. In addition, colleges and universities are adopting Java as a core teaching language, and there are over 150 books on Java now in print.
Java in Business: A recent study by Forrester found that 60% of businesses are using Java,and 40% state that Java is strategic to their business.
The rapid acceptance of Java among the developer community can perhaps best be demonstrated by the number of attendees at JavaSoft's JavaOne conferences in San Francisco. The first JavaOne, held in April 1996, attracted 5,000 attendees. A year later, the second JavaOne conference hosted 10,000 attendees. JavaSoft estimates the current number of serious Java developers at 400,000 and still growing. Java is also gaining acceptance in the enterprise arena. It is estimated that in companies with more than 5000 employees, one-third of all developers are using Java.
A Closer Look at Java
After that whirlwind overview of the history of Java, you are probably asking yourself these questions: Just what is Java? What is it about Java that is so appealing to developers? And why should I care about Java if I'm not writing code?
What Is Java?
Defining Java is not easy because it is actually many things. According to the Sun white paper on Java, "Java is a simple, object-oriented, distributed, interpreted, robust, secure, architecture neutral, portable, high-performance, multithreaded, and dynamic language." Remove all the adjectives and you are left with the essence of the definition: "Java is a . . . language."
However, Java is more than just another programming language. It is both a language and a platform for developing applications to run on the Internet or in corporate intranet environments.
Java as a Language
Java was designed as a language for object-oriented programming. Unlike procedural programming, where functions are coded to follow step-by-step algorithms, object-oriented programming revolves around data structures known as objects. For all objects that belong to a particular class, there is a well-defined set of routines, or "methods," for operating on the data contained within the object. This defines the interface for working with the object. As long as the interface remains the same, programmers can write the code that implements the methods however they want.
C++ added object-oriented capabilities to the procedural style of C, but it is a difficult language to learn. Its many complicated features and constructs have tended to produce unreliable, buggy applications, even in the hands of fairly competent programmers. On a superficial level, Java is similar to C++ in that the syntax for expressions and control statements is almost the same in the two languages. However, Java is neither a superset nor a subset of C++. Its designers wanted a new language that was easier to learn and use.
Java is more purely object-oriented than C++ in that it requires the use of objects. There are no global variables or functions; all interfaces with an object's data must be defined in the class libraries. Java's creators threw out some of the C++ features that were confusing to developers, such as multiple inheritance (inheriting properties and methods from more than one object) and operator overloading (using one identifier to refer to multiple items in the same scope). To be able to securely execute code that has been downloaded from a network, they eliminated explicit memory pointers so that a Java program cannot access memory addresses it doesn't own. They also added some things C++ doesn't have, such as multithreading (the ability to execute multiple processes concurrently) and garbage collection (automatically recovering previously used memory for reuse by other applications).
Platform Independence. C and C++ code is cross-platform in source form, but has to be specially compiled to form binary files that will run on different processors (see Figure 1).
Figure 1: Traditional compilers.
Java, on the other hand, is designed to be cross-platform in both source and compiled binary form. Of course, it is impossible to run the same binary file on Windows, Unix, and Macintosh machines. So what Java does is compile its source code into an intermediate, platform-independent byte code. The byte code is then interpreted at execution time by a platform-specific interpreter called a Java Virtual Machine (JVM), as shown in Figure 2.
Figure 2: Java compilers and byte code.
The interpreted, dynamic nature of the Java language is what allows Java-based applications to be platform-independent. The source and byte code can be written once, and only the JVM needs to be ported to each platform. Currently supported platforms include Windows 95 and Windows NT, Windows 3.x, OS/2, Macintosh, Unix, and the new Network Computer (NC). Thus Java brings software developers closer to the elusive ideal of "write once, run anywhere" code--so much so that JavaSoft has trademarked the phrase!
Java as an Application Development Platform
The Java language can be used to create standalone applications that run outside of a web browser. All a developer needs is the JVM for the desired platform and the appropriate class libraries (.class files) for the functions to be performed. The advantages of using Java are portability and smaller code size, since byte code is usually much smaller than the equivalent native code. However, because Java code is interpreted, it runs far slower than native code.
There are basically two ways to speed up Java applications. One way is for vendors to write their own Java compilers that generate native machine code instead of byte code. While this does bring the speed of Java applications in par with traditional applications, you lose the advantage of portability. The second way to speed up Java is by using "just-in-time" (JIT) compilation. With a JIT compiler, the Java Virtual Machine translates the byte code into native code just before the application is executed. This improves performance over the interpreted method, but since JIT compilers can't do much in the way of code optimization, the resulting code still runs slower than equivalent native code.
Java Applets. Most of the excitement surrounding Java centers around its ability to create small programs called "applets". A Java applet is a Java program designed to be included in a HyperText Markup Language (HTML) document and run inside a web browser. The applet code is embedded in an HTML page via an <APPLET< tag that references the applet's .class file. The applet is then downloaded and executed by an integrated byte code interpreter within the browser (see Figure 3).
Figure 3: Java applets.
Besides telling the browser what code to retrieve, the <APPLET< tag also defines how large the applet's display area will be through the width and height parameters. The applet controls everything that happens within its own display area. It can create menus, scroll bars, push buttons, and other means of interacting with the user. It can also communicate with other applets running on the same page, or cause the browser to load a new page. But an applet cannot affect any page contents that are specified by HTML tags.
Applet Security. Security is a big concern in the Java environment because any web page a user retrieves may cause Java code to be transferred and executed. The user may not even be aware that a Java applet is running. One security checkpoint occurs as the applet is being interpreted. As each of the required classes is loaded, the JVM's Class Loader checks the code for attempts to violate security. If any are found, the applet is not allowed to run.
Java applets are further prevented from tampering with a user's local machine by the "sandbox" security model, which forms a barrier between the applet and the rest of the user's system. Being contained within this barrier, the applet isn't allowed to do any of the following:
Read or write to the local file system
Modify or delete files from the local file system
Create or rename directories on the local file system
List directory contents or check for the existence of a file
Obtain file attribute information such as size, type, modification time
Create network connections to computers other than the source of the applet
Listen or connect via ports on the local system
Read from or modify various local system properties
Halt the execution of the Java interpreter
Load local libraries or invoke local executables
These security restrictions do make Java applets less useful than many programmers would like. Since an applet cannot read or write files, it is not a good fit for any program that needs to take stored data, process it, and return a result. Another major drawback is that you cannot currently print the contents of a Java applet's display area.
So What Are Applets Good For? Today, applets are used mainly to add two things to the web environment: animation and interactivity. Java is ideally suited to provide fairly sophisticated image animation without having to constantly contact the server. Java also enhances interactivity by providing a way to validate user data entered into a form before it is sent off to the server. These animation and interactivity features could even be combined to provide easier navigation through a complex user interface.
A Promising Future
Despite some of the current limitations of Java, many industry observers feel it has a promising future. This section outlines the current and impending developments that will propel Java onward.
JDK v.1.1 Highlights. The official production release of version 1.1 of the Java Development Kit (JDK 1.1) in April 1997 marks a major leap forward for Java technology. It includes a host of new capabilities and improvements over JDK 1.0.2's existing features. While Java will continue to leverage the World Wide Web, it is now better prepared to tackle enterprise computing tasks. With JDK 1.1 the number of compliance tests for the Java Virtual Machine and for Java applications has risen to 5000, and they are far more stringent. This instills more confidence in Java applications designed for large-scale enterprise deployment.
Skipping JavaBeans for the moment (they are discussed below), let's look at some other major components of the JDK 1.1:
JDBC (Java Database Connectivity) provides an open interface specification to SQL databases and a common basis on which to build specific database drivers.
The JDBC API defines Java classes that enable a programmer to issue SQL statements and process the results. The JDBC-ODBC Bridge driver turns most ODBC drivers into JDBC drivers. More than 20 JDBC drivers are already available. Forty-one companies have endorsed the JDBC API and pledged to develop database access products for Java developers.
Language internationalization implements Unicode 2.0 and classes to enable global applications to run in various countries with localized character sets, as well as time, date, and currency formatting-all from the same code base.
The addition of signed applets may be the most important security enhancement in JDK 1.1. Signed applets enable a developer to designate a trusted site-internal or external-from which applets can be downloaded. Those signed applets can then be trusted to access hard disk files and write to the hard disk.
JDK 1.1 offers significantly improved performance. Computational performance has been improved in the Java VM and overall performance is two to three times faster. The Java Archive (JAR) format compresses applets, boosting the speed of downloading them two to five times.
The Abstract Windowing Toolkit (AWT) was completely rewritten in JDK 1.1, not only boosting performance, but adding widgets, a delegation event model, and opening up the lightweight user interface framework to third parties so that custom widgets can easily be incorporated.
In addition to these expanded or new class libraries, JavaSoft has announced the Java Foundation Classes (JFC). Based on Netscape's Internet Foundation Classes, these are graphical user interface (GUI) components designed to enhance the AWT.
JavaBeans. For many, JavaBeans stands out the most important leap forward in JDK 1.1. JavaBeans is a component architectureCan API for developing reusable "building blocks" that end-users can combine to create whole applications. It also standardizes the way objects talk to each other so that Java and non-Java programs can cooperate. This would allow capabilities such as Java animations being embedded into a word processing document.
At JavaOne in April 1997, Sun announced Enterprise JavaBeans, which will extend the JavaBeans component model to handle the needs of transactional business applications. These extensions include support for transactions, state management, and deployment time attributes. Although applications written to the Enterprise JavaBeans architecture are protocol-independent, the architecture does specify how communication among components maps into the underlying communication protocols, such as the Internet Inter-Orb Protocol (IIOP) used by Object Request Brokers (ORBs) under the Common Object Request Broker Architecture (CORBA).
The 100% Pure Java Program and Java World Tour. In conjunction with the release of JDK 1.1 and JavaBeans, JavaSoft launched two additional efforts: the 100 Percent Pure Java initiative and the Java Education World Tour.
It is important to Sun and its strategic partners that Java remain cross-platform. In this arena, cross-platform means more than just Windows 95 and Windows NT compatibility; it means that Java applications must be able to run on any platform and that there is 100% compatibility among third-party virtual machines and class libraries. To this end, JavaSoft has implemented the "100% Pure Java" program, a marketing and technology program to educate developers on the hows and whys of creating pure Java applications. This program rolls together into a complete package education, developer assistance, a comprehensive test suite, certification, and branding with a "100% Pure Java" logo. The program was officially launched at JavaOne in April 1997.
To participate in this program, vendors submit all Java components, virtual machines, and class libraries to a suite of tests at an authorized Pure Java lab. Upon successful completion, the 100% Pure Java logo is granted. Key Labs of Provo, Utah has been chosen as the testing center responsible for all testing and certification for this program.
The Java Education World Tour '97 kicked off in February in San Francisco. Cosponsored by IBM, Netscape, Novell, and Sun, the event was broadcast via satellite to seven other west coast cities and has since been traveling to other cities. The world tour offers in-depth sessions covering issues central to enterprise application development, Java application development, and electronic business.
Other Development Tools. A number of vendors have developed Rapid Application Development (RAD) tools to make it easier for non-programmers to use predefined components written in Java. Notable examples include Symantec's Cafe and Microsoft's Visual J++.
Sun's offering is called Project Studio, and it includes a Visual Java capability to enable end-users to easily and visually create solutions to access, manipulate, and publish information on intranets and the Internet. Novell has licensed Project Studio and is extending its Visual Java technology to the IntranetWare platform. This will open the power of NDS and other Novell networking services to a whole new community of developers and users, including network administrators, webmasters, corporate IT managers, and even end-users.
Working Toward Standardization. Since Java is composed of numerous components which can be added to by third-party vendors, it is vulnerable to the same types of ownership conflicts that led to fragmentation in the UNIX and C language standards. In an effort to prevent this from happening to Java, Sun is attempting to have Java formally accepted as an international standard.
In March 1997, Sun took the first step in this process by applying to the International Standards Organization (ISO) and the International Electrotechnical Commission (IEC) to be recognized as a submitter of publicly available specifications. A publicly available submitter (PAS) acts like a standards body, accepting submissions to improve and update a technology and passing them onto an ISO/IEC joint technical committee (JTC) for final approval. Sun proposed that significant portions of the Java technology be considered as a standard.
The proposal has met with some initial opposition by U.S. companies, mostly over the plan's provisions for trademarking the Java name, which technologies will be submitted, and future maintenance of a Java standard. Sun is amending the plan to reflect comments made by the U.S. committee and is working to address questions at the international level. As of this writing, Sun is confident that its proposal will pass an international vote in July 1997.
Novell and Java
Those who work with Novell products and technologies may wonder how Java fits into the Novell view of the world. Recognizing early on the value of what Java was trying to accomplish, Novell was the first server licensee of Java to create the JVM for IntranetWare. Novell is now committed to delivering access to IntranetWare networking services through open Java interfaces. Through our strategic partnership with JavaSoft, Novell is helping to define and enrich the functionality of Java by making networking service interfaces which are open and extensible to all vendors.
Novell has participated in the development of a number of APIs to create a more network-aware environment for distributed Java applications. These include the following:
Java Naming and Directory Interface (JNDI). With the help of Sun, Netscape, IBM, HP, and others, Novell has applied its expertise in directory services to develop this directory interface. It allows applications written in Java to navigate naming and directory services of all types, including Novell Directory Services (NDS), Domain Name Service (DNS), and Lightweight Directory Access Protocol (LDAP). With NDS being made available on SCO, HP, and IBM Unix platforms and soon on Windows NT as well, JNDI is well positioned to take advantage of the industry-wide acceptance of NDS. JNDI is being included as part of the Enterprise API set.
Java Network Services Interface (JNSI). JNSI provides Java classes to expose the native access to Novell's advanced services, such as connection management, authentication, file, NCP, print queue management, and so on.
Java Management API. This combined effort from Novell, Sun, Computer Associates, Tivoli Systems, 3Com, Bay Networks, and others provides a set of extensible Java objects and methods for building applets that can manage an enterprise network over the Internet.
Java Telephony API. Novell, Lucent, Intel, and Sun collaborated on this API for Java-based computer-telephony applications that work across a variety of telephony systems. It is designed to help integrate a well-known appliance--the telephone--into the intranet and Internet environments to help networks become more user-friendly.
Java Internationalization Services. Along with Taligent, Novell has provided assistance and technology to Sun for the much-needed internationalization of Java. Specifically, Novell provided technology in the area of Unicode-to-Code Page conversion.
Java Speech Services. Novell and Sun are collaborating to produce speech recognition and speech synthesis (text-to-speech) technology written in and accessible from Java.
Java Distributed Printing Services. Novell, Sun, HP, Xerox, and others are collaborating on a new initiative to expand on the simple printing services available in Java now. This interface enables richer functionality for end-user oriented printing, such as starting and stopping print jobs and checking status. It also offers a print administration interface to manage print queues, printers, and access control.
JavaBeans Components. In parallel with developing Java Class Libraries to access network services, Novell will define Java Beans that provide high-level abstractions to network services. This will provide developers and administrators an easier way to build applications that access network services.
Novell is committed to evolve the NetWare operating system into the premier middle-tier development and deployment platform for Java business and network services for intranet and Internet. With 2000 engineers currently enrolled in Java training, Novell is aggressively pursuing this goal, in conjunction with its commitment to Java and open standards such as Common Object Request Broker Architecture, or CORBA (see Figure 4).
Figure 4: The Novell platform for supporting Java and other open standards.
Java in Novell Products
Novell is enhancing its current products and services to take advantage of Java. Today Java is used in Novell's four major product lines:
IntranetWare. Novell has incorporated the Java Virtual Machine in the IntranetWare operating system. IntranetWare's high-performance networking services are a perfect complement to Java's comprehensive memory management and security. New Java class libraries that expose Novell's networking services make IntranetWare an even more efficient platform for building and executing distributed applications for business intranets. An IntranetWare SDK for Java is available to help developers write Java applications to run on the IntranetWare platform.
Novell Directory Services. By integrating NDS with Java through JNDI, Novell enables developers to build solutions that will be easier to manage, distribute, secure, and deploy across intranets or the Internet. NDS offers cross-platform support that extends from the leading UNIX implementations to Windows NT.
GroupWise. Novell is working on a Java-enabled GroupWise client. This will provide full-featured access to GroupWise via the Internet through any Java-enabled web browser, along with an intuitive interface virtually identical to the desktop environment.
ManageWise. The ManageWise web-based client is a web-enabled version of ManageWise designed to let administrators quickly and easily access network information from "standard" web browsers. Java applets for ManageWise increase administration flexibility and reduce your total cost of ownership.
As Novell's vision further unfolds, customers will be able to take advantage of even broader cross-platform, open networking functionality.
Few technologies have caught on as quickly and as universally as Java. It stands out as an effective means of producing interactive, distributed applications for intranet/Internet environments. This AppNote has traced the history of Java to give non-developers an appreciation of where this technology came from and what it hopes to achieve. It has also discussed what Java is and how Novell is leveraging this technology to bring better networking solutions to our customers.
For More Information
For more information, refer to these Java-related links on the web:
Java for IntranetWare ( http://developer.novell.com/ndk/)
JNDI Specs (http://java.sun.com/products/jndi)
Key Labs (http://www.keylabs.com)
Earthweb Java directory (http://www.gamelan.com)
Marimba Castanet and Bongo (http://www.marimba.com)
Java sound (http://www.headspace.com).
* Originally published in Novell AppNotes
The origin of this information may be internal or external to Novell. While Novell makes all reasonable efforts to verify this information, Novell does not make explicit or implied claims to its validity.