Given by Geoffrey C. Fox, Nancy McCracken at CEWES Java Tutorial on Spring Semester 98. Foils prepared 16 May 98
Outside Index
Summary of Material
Introduction to Applications and Applets |
The 3 uses of Java in computing |
The 3-tier web-based computing model |
Java for parallel computing |
Performance of Java |
History of Java Development |
Comparison of Java and JavaScript |
Overall Java Philosophy and Features including security etc. |
Outside Index Summary of Material
Geoffrey Fox |
Nancy McCracken |
Syracuse University |
NPAC |
111 College Place Syracuse NY 13244 4100 |
Introduction to Applications and Applets |
The 3 uses of Java in computing |
The 3-tier web-based computing model |
Java for parallel computing |
Performance of Java |
History of Java Development |
Comparison of Java and JavaScript |
Overall Java Philosophy and Features including security etc. |
What is Java?
|
Java is interesting because
|
Java will dominate as Web will dominate and drive Java as best supported, most widely taught language
|
Browsers (HotJava, Netscape 2.0/3.0/4.0 Microsoft IE ..) supporting Java allow arbitrarily sophisticated dynamic multimedia applications inserts called Applets, written in Java, to be embedded in the regular HTML pages and activated on each exposure of a given page.
|
Regular compilers allow one to run Java Applications with as much efficiency as C and Fortran
|
HPCC is a small field and Scientific Computing a modest size field with limited resources for very hard problems and must leverage as much software as possible |
Web Software provides an excellent pervasive user interface with Java Applets and WebWindows |
Web Software provides a potentially excellent high performance object oriented language (Java) for scientific and engineering computation |
All(!?) we need to do is to add high performance and special features of scientific computing (math libraries) to the Web! |
Technology for generating parallelism (user decomposition, parallelizing compilers) not provided by web and must come from HPCC |
Web Software provides a high functionality but modest performance distributed computing environment based on either Web Servers or Clients
|
Web Only addresses Integration of already decomposed parts! |
Java Code in |
.java files |
JavaVM Bytecodes |
in .class files |
Run through javac compiler |
Store .class files |
on Web Server |
Download .class files |
"automatically" |
from server to client |
using Applet tag |
in HTML Pages |
Interpreter on client |
converts .class files |
into native machine |
code for client |
computer |
Run through |
1)javac or 2)native optimizing compiler |
Java Code in |
.java files |
1) .class file |
2)Native Machine Code for target machine |
Run |
1)java interpreter or |
2)native code on |
favorite client or server |
Applet constructs are implemented in terms of a
|
Steps to running a Java Applet:
|
Using a Browser
|
Using appletviewer
|
All Java programs are written into a file with a ".java" extension. |
Applications are .java files with a main class which is excuted first. |
How to compile and run a Java application:
|
The resources javac and java are part of JDK and are not in Netscape and so are not necessarily available on the same machine as your web server. |
Since Java is object-oriented, programs are organized into modules called classes, which may have data in variables and functions called methods. |
class HelloWorld |
{ public static void main (String[] args ) |
{ System.out.println("HelloWorld"); |
} |
} |
Each program is enclosed in a class definition |
main() is first routine that is run |
Syntax is similar to C |
Use braces for brackets and |
semicolons after each statement |
Upper and lower case matter! |
This notation is |
Package.class.method and is |
used to refer to public methods in other classes |
use class.method if package included |
some classes can be accessed automatically |
Java applets are classes written in Java which are intended not to run as stand-alone programs (as applications do) but as subprograms of a browser which is already managing a window. |
Applets should NOT have main method but rather methods such as
|
The applet should be run through javac compiler getting a MyApplet.class file as before:
|
Also create an HTML file (say MyApplet.html) with an applet tag referencing MyApplet.class. |
Two ways to run an applet:
|
This way we can compile on places with JDK installed but run almost anywhere! |
Given the following HTML
|
Runs the "StockGraph.class" executable as an applet. |
WIDTH and HEIGHT are attributes that are passed along to the applet. |
If the optional CODEBASE attribute is provided, then load the executable image from the directory specified by CODEBASE.
|
Tag and attribute names are case insensitive. |
<APPLET CODE="StockGraph.class" WIDTH=200 HEIGHT=200 |
ALT="-- StockGraph Not Supported --" |
NAME=SUNW ALIGN=top |
VSPACE=5 HSPACE=5> |
Put a bunch of text here to be displayed by browsers such as Netscape 2.0 on Windows 3.1 that do not support Java |
</APPLET> |
ALT specifies text to displayed if the browser understands the applet tag, but if unable to run applets. |
NAME specifies the name of this instance of the applet; This will make it possible for applets on the same page to find and communicate with each other. |
ALIGN specifies the alignment of the applet. The possible values are the same as those available in the IMG tag (top, middle, bottom, texttop, absmiddle, baseline, absbottom, left, right).
|
VSPACE and HSPACE specifies the vertical and horizontal spacing in pixels, around the applet space. |
The applet tag can be followed by parameters:
|
The Java program accesses this information by
|
Typically this processing would be in init() method of Applet |
Java applets are part of the class hierarchy that can call methods to display on a screen (within the browser window). This example defines the public method paint in this class and calls a method drawString defined in the class Graphics. |
import java.awt.Graphics; |
public class HelloWorldApplet extends java.applet.Applet |
{ public void paint(Graphics g) |
{ g.drawString("Hello World!",5,25); } |
} |
The paint method displays a graphics object on the screen |
one of the standard methods that replaces main for applets |
The import statement is similar to an include and makes all the method |
names in the Graphics class in the awt package available |
Puts this as a subclass of Applet |
Drawstring is one of many |
available display methods |
You should name the file with your applet name, HelloWorldApplet.java, run the javac compiler getting a JavaVM bytecode file HelloWorldApplet.class which you put in a web directory |
<html><head> |
<title> Simple Hello World Page </title> |
</head> |
<body> |
My Java Applet says! |
<applet code="HelloWorldApplet.class" width=150 |
height=25 > |
</body> </html> |
Name of your applet class |
Browser uses a rectangle of width 150 pixels |
and height 25 pixels to display the applet |
Bottom of Pyramid has 1000 times dollar value and compute power of best supercomputer (tip of pyramid) but supercomputer has high performance network to support close synchronization needed by classic parallel algorithms |
Building from bottom of Computing pyramid starts with high functionality software which has a distributed architecture that can be augmented with high performance |
3 Levels of Software
|
One universal language -- Java for all layers |
1:User View: Interoperable Web Interface accessing services through Java Compute Services Framework 2:Network of Java Servers provide distributed services to databases, compute engines, collaboratories, object brokers, instruments
|
Back end "Number Crunchers" linked either by communication at level 2 (slowish but easy) or at level 3 (high performance but more work) |
Compute processes linked either to servers or together by MPI if parallel |
Java Servers |
Java for the User Interface: This is roughly the "WebWindows Philosophy" of building applications to Web Server/Client Standards
|
Java for Coarse Grain Software Integration: as in collaboration and metacomputing
|
Java as a high performance scientific language: for "inner" (and outer) loops
|
Middle Tier |
Basic Web Server |
Custom Web Server |
TP Server |
Business Transaction Management |
You Write Software |
at Client and Server |
Perl Java |
Old and New Useful Backend Software |
Client runs Java JavaScript etc. |
Services |
Web Server Enhanced with Perl Java etc. |
Critical |
Backend Services such as databases |
computing in |
C++ Fortran |
Java etc. |
We have a set of Services hosted by Web Servers and accessed by clients |
Groups of clients (electronic societies) are linked by collaboration systems such as TANGO |
Access |
Resources |
Store |
Multimedia Information |
TANGO Server |
File Systems |
and/or Database |
Object Broker |
Database |
Simulation |
Computer |
Person2 |
Shared |
WhiteBoard |
Shared Client Appl |
Person1 |
General User |
Systems like Tango or Habanero built around Java Servers integrate a group of multiple clients as a "Service" at the middle Java Server level |
Group of collaborating clients |
and client applications |
Database |
Object Broker |
MPP |
Syracuse and Las Vegas Workshops saw no serious problem to High Performance Java on sequential or Shared Memory Machines |
Some restrictions are needed in programming model
|
For instance, Avoid Complicated Exception handlers in areas compilers need to optimize! |
Should be able to get comparable performance on compiled Java C and Fortran starting with either Java Language or JavaVM bytecodes |
The Interpreted (Applet) JavaVM mode would always be slower than compiled Java/C/Fortran -- perhaps by a factor of two with best technology |
The Web integration of Java gives it excellent "network" classes and support for message passing. |
Thus "Java plus message passing" form of parallel computing is actually somewhat easier than in Fortran or C. |
Coarse grain parallelism very natural in Java |
"Data Parallel" languages features are NOT in Java and have to be added (as a translator) of HPJava to Java+Messaging just as HPF translates to Fortran plus message passing |
Java has built in "threads" and a given Java Program can run multiple threads at a time
|
Can be used to do more general parallel computing but only on shared memory computers
|
Combine threads on a shared memory machine with message passing between distinct distributed memories |
"Distributed" or "Virtual" Shared memory does support the JavaVM as hardware gives illusion of shared memory to JavaVM |
Message Passing |
Message Passing |
Note Java also integrates compiled and interpreted approaches and so leads to more convenient programming environments
|
JavaScript is a fully interpreted language but not really Java |
Applets are half-way between traditional compiled and interpreted approaches |
Web "systems" can behave like Interpreters with interactive commands at client |
Web Client |
including |
Java Applets |
Web Server |
Java Application Backend |
Netscape renames Livescript as Javascript and this is an interesting variant of Java which is fully interpreted (code can be included directly in HTML file)-- use for overall customization of client |
Use Java for detailed programming and JavaScript for overall integration of client interface and system |
JavaScript: Interpreted by client and NOT compiled |
Java: Compiled on Server before execution on client
|
JavaScript: Object based -- no classes or inheritance -- built in extensible objects |
Java: Object-oriented -- Programs consist of object classes with inheritance |
JavaScript: Integrated with HTML as embedded ascii but of course HTML looks rather irrelevant at times! |
Java: Applets distinct from HTML but invoked from HTML Pages |
JavaScript: do not declare variables' datatypes -- Loose typing |
Java: MUST declare variables' datatypes -- Strong typing |
JavaScript -- Dynamic Binding -- object references computed at runtime |
Java -- Static Binding -- object references must exist at compile time |
Java and JavaScript are secure and cannot write to disk |
JavaScript has most user interface features of Java (such as buttons and frames), but not mouse interactions like "dragging". |
Starts in 1991 by Project Green --- a group in Sun that detaches from the main campus as a semi-autonomous task force focused on operating software for consumer electronic devices such as smart set-top boxes |
Gosling (creator of Sun NeWS which had major conceptual impact both on current Java and Telescript models) realizes that C++ is not adequate and initiates development of a new language Oak, later renamed as Java. |
A PDA (Personal Digital Assistant -- codename *7) based on Oak/Java ready in 1993. Green Team incorporates as FirstPerson, Inc. |
*7 proposal to Time-Warner rejected in 1993. 3DO deal falls through in 1994. FirstPerson, Inc. dissolves. |
Small group (then ~30 people, now Java Team) continues development and decides to adapt Oak as a Web technology. |
An experimental web browser written in Java, called WebRunner and later renamed as HotJava, ready in 1994. |
Alpha release of Java and browser HotJava April '95. |
Netscape licences Java in May '95 and builds Java into Netscape 2.0 -- This confuses ownership and open-ness of Java |
Beta JDK (Java Development Kit) published in summer/fall '95. It is better software but lower functionality than Alpha. |
First alpha Java books appear in fall '95 such as a popular overview by SAMS and technical book "Java!" by Tim Ritchey, edited by New Riders. |
Dec 4 1995 Business Week cover story on "Software Revolution --- The Web Changes Everything" exposes Java as a breakthrough force in the expanding Web/Internet. Also points out that "Java as a business" is yet to be defined. |
In next week, SGI IBM Adobe Macromedia and finally Microsoft adopt/license Java.
|
The beta version of Java, Version 1.0 of JDK released January 96 by JavaSoft. |
JDK 1.0 becomes the Internet standard and so compatible with ongoing Java implementations by all licensees, most notably Netscape and Microsoft. Beta/1.0 JDK includes:
|
A substantial new version of Java released March 97 by JavaSoft. |
This release includes many developments both by Sun and by partner companies such as IBM. There are minimal changes to the language - primarily development of new classes to support enterprise computing. |
We are currently (Sept 97) ending a transitory situation where a few preleased features of JDK 1.1 such as the Java DataBase Connection (JDBC) are supported by the primary browser Netscape 3.0 and Internet Explorer 3.0, but most JDK 1.1 features are not yet supported in commonly available browsers, except for HotJava.
|
http://www.javasoft.com/products/jdk/1.1 |
Originally, the Java Interpreter was incorporated into browsers such as those from Netscape and Microsoft, but the Web server remained a standard one. |
Now Web servers are being developed in Java itself. This leads to more natural integration of the use of Java applets on the Web browsers and Java applications running on the Web server machine.
|
Document The Java: A White Paper by Sun Microsystems -- October 1995 draft by James Gosling and Henry McGilton -- enumerates the original design of Java: |
Simple and Familiar |
Object-oriented |
Architecture-neutral |
Portable |
Somewhat Interpreted |
Distributed |
Robust |
Secure |
High performance |
Multi Threaded |
Dynamic |
Java omits several rarely used, poorly understood and confusing features of C++ including operator overloading, multiple inheritance, pointers and automatic type coercions. |
It adds automatic garbage collection which makes dynamic programming easier in Java than in C or C++.
|
It also adds 'Interface' construct, similar to Objective C concept, which often compensates for the lack of multiple inheritance by allowing method calling syntax to be "inherited". |
The resulting language is familiar as it looks like C++ but is simpler and hence easier to program in. |
Simplicity makes it easier to write optimizing compilers and so produce efficient code |
It also results in a much smaller kernel which is suitable for planned Java ports to consumer electronic devices. |
Java model can be viewed as a C++ subset, with some dynamic elements inherited from Objective-C (method overloading, garbage collection). |
Structures, Unions and Functions are absorbed into data and methods of Java classes -- Java is Simple! |
The strength of Java object-oriented model is not is sophistication but in simplicity and the extensive class library associated with the system |
Java object structure makes all programming including scientific programming easier
|
C/C++ programming in a heterogeneous network environment requires use and compatibility across several vendor platforms and the corresponding compilers. This problem is solved in Java by designing platform-independent binary representation called Java bytecode (or javaVM).
|
Some concerns that Java requires same results on all platforms and so leads to inefficient execution |
So have architecture neutral version with same answer on all platforms in applet mode |
Run optimizing compiler giving directly native machine code with architecture dependent answers (e.g. Pentium calculates floating internally to 80 bit precision -- not 64 as Java requires!) and high performance |
Java language offers a uniform abstract (virtual) machine model which is identical for all platforms. |
SUN owns the Java Virtual Machine -- it is universal while classes can be added by any user |
Unlike in C/C++ where various integers match the architecture of a physical machine at hand, Java byte, char short, int and long are always of the same size, equal to 8, 16, 16(unicode), 32 and 64 bits, respectively.
|
Differences between vendor specific windowing environments (X Windows, MS Windows, Macintosh) are removed in terms of the Abstract Windowing Toolkit (AWT) metaphor. |
Java represents a compromise between fully compiled (like C/C++) and fully interpreted (like Smalltalk or Perl) models. |
Java "compiler" javac produces a binary bytecode output which is portable and much smaller than the real binary for a specific machine (Typical bytecode size is of order of the original source code, within a factor of 2). |
Java "interpreter" executes this bytecode and is therefore less dynamic than e.g. Perl interpreter (which performs an equivalent bytecode construction internally and on-the-fly when reading the program source). |
In general, the compilation process is: a) time consuming and b) platform specific. Hence, interpreters are built and used to facilitate a) rapid prototyping and/or b) portability. |
Java model is focused on platform independence but the development throughput is also reasonable since the Java compiler is fast and generates compact bytecode output. |
Popular TCP/IP based protocols such as FTP or HTTP are supported in terms of network protocol classes.
|
Distributed computing model of Java is naturally client-server, with Java compiler preparing the bytecodes at the server side, and Java interpreter executing it at the client side. |
Java enforces compiler-time and download-time(byte code verifier) type checking and eliminates this way some error prone constructs of C/C++. |
Pointer arithmetic is fully eliminated which allows e.g. for runtime checking of array subscripts and enforces security of the Java model. |
Explicit declarations are always required, i.e. C-style implicit declarations are abandoned.
|
Rapid prototyping in Java is less natural than in JavaScript,Lisp, Tcl, Smalltalk or Perl, but the software quality assurance of Java is higher than in these more dynamic and 'forgiving' languages. |
Note Java can NEVER overwrite itself as types of all arguments and methods are checked |
Java bytecodes are shipped across the network and executed on client machines. Security is therefore a critical issue and strongly enforced in Java.
|
Modifications of the C++ model such as eliminating pointer arithmetic and coercion were dictated mainly by the security requirements. |
Most viruses are based on acquiring access to private/protected sectors of computer memory which is impossible in Java due to all the checks. |
Java bytecodes are executed at the client side by Java interpreter which operates exclusively in a restricted memory space.
|
The bytecodes sent across network are verified at the client which prevents evil/corrupted classes from causing problems |
Java interpreter performs on-the-fly runtime execution of the Java bytecodes which results typically in a satisfactory performance.
|
Support for generating native machine code out of Java bytecodes, viewed as intermediate compiler form, is also provided and useful for performance demanding applications.
|
The performance of the machine code, generated directly by native compiler from Java or its bytecodes, should be comparable to that offered by typical Fortran/C/C++ compilers on the same platform. |
. |
Java model offers preemptive multithreading, implemented in terms of the Thread class. Thread methods offer a set of synchronization primitives based on monitor and conditional variable paradigm by C.A.R. Hoare. Java threads inherit some features from the pioneering Cedar/Mesa System by Xerox Park that gave birth to Macintosh and object-oriented programming.
|
A typical use of Java multithreading in applet programming is to have several independent but related simulations (e.g. various sorting algorithms), running concurrently in an applet window.
|
Java threads don't have built-in point-to-point communication primitives. Various thread communication environments can be provided by coupling the thread and network protocol objects. |
Java model is more dynamic than C++ and closer to Smalltalk or Perl. |
Subclasses don't need to to be recompiled after superclass implementation is updated. |
C++ has "fragile superclass" problem where must recompile children if change anything (method/instance variable) in a superclass or referenced class -- Java resolves references at runtime and avoids this. |
Classes have runtime representation (implemented in terms of the Class class) which allows one to look up type of a given object instance at runtime (in C cannot know if pointer is to integer or browser!)
|
Teach Yourself Java in 21 Days, 2nd ed., by Laura Lemay and Charles L. Perkins, Sams.net Publishing, is a "how-to" book at the intermediate programming level, greatly expanded from the original edition. |
Java in a Nutshell, by David Flanagan, is the language reference book in the familiar O'Reilly series. The 2nd edition of this book is now out - it omits many examples from the first edition to make room for large section on JDK 1.1 . Both 1st and 2nd edition are quite useful. |
Java, How to Program, by Deitel and Deitel, Prentice-Hall, starts with beginning programming concepts and progresses rapidly through Java language. It has the most programming exercises and also has companion teaching multimedia books. |
The Java Programming Language, by Ken Arnold and James Gosling, Addison-Wesley, May 1996, has lots of details on the language basics for intermediate and advanced programmers. It covers threads and i/o packages, but not applets or windowing packages.
|
Java Primer Plus, supercharging Web applications with the Java programming language, by Paul M. Tyma, Gabriel Torok, and Troy Downing, Sams.net, doesn't assume a lot of programming background, has chatty explanations and still covers lots of programming detail. |
There are now many books in the Java Series from SunSoft Press, Prentice-Hall. Here are the first five:
|
The original resource was the The Java Language Specification by Sun Microsystems, Inc., March 1995 updated to October 1995 but superceded by Gosling and Arnold Book
|
Most of the books cited earlier have CDROM's with examples and the JDK. |
For scientific computing see: http://www.npac.syr.edu/projects/javaforcse/ |
NPAC has rich set of tutorial material at http://www.npac.syr.edu/projects/tutorials/ |