Survey
* Your assessment is very important for improving the work of artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the work of artificial intelligence, which forms the content of this project
Java Overview
About me
Peter Kriens
Work as a consultant
(mainly for for ERICSSON)
Finnasandsvagen 22
43933 Onsala, Sweden
+46 705950899
Peter.Kriens@aQute.se
aQute Copyright © 1999 All rights reserved presentation 10/01/2000 ERICSSON
History
1990 SUN starts crash team under Patrick
Naughton
Carte blanche to clean up the software mess at SUN
Gosling created OAK for embedded devices (!)
Products all failed
1993 Mosaic, the first web browser was born
Somebody realized the combination: Applets
Language became the product
aQute Copyright © 1999 All rights reserved presentation 10/01/2000 ERICSSON
History
1996 JDK 1.0 released
Focused on Applets, lousy graphics
8 packages, 4Mb download
1997 JDK 1.1 released
Better graphics, reflection, security (try), beans,
RMI, ZIP files
22 Packages, 9 Mb download
aQute Copyright © 1999 All rights reserved presentation 10/01/2000 ERICSSON
History
1999 JDK 1.2 SE released
Lightweight UI (!), collections, security (again), JAR
files, Native interface change…
59 packages, 20 Mb download
2000 JDK 1.3 SE in beta
Improvements ...
77 packages (so far), 25 Mb download
aQute Copyright © 1999 All rights reserved presentation 10/01/2000 ERICSSON
Quick Tour: Hello World
Getting started
Content of file: HelloWorld.java
/**
* Small hello world example class.
*
*/
public class HelloWorld {
public static void main( String args[] ) {
System.out.println( "Hello world"
+ (args.length >= 1 ? args[0] : "whoever") );
}
}
javac HelloWorld.java
java HelloWorld peter
Hello world peter
That is all ...
aQute Copyright © 1999 All rights reserved presentation 10/01/2000 ERICSSON
Quick Tour: Objects
Creating a class
Content of file: Point.java
/**
* A Simple point class.
*/
public class Point {
double
_x;
// Instance variable
double
_y;
public Point() { this(0,0); }
public Point( double x, double y ) { _x=x; _y=y; }
public double getX() { return _x; }
public double getY() { return _y; }
public double getLength() {
return Math.sqrt( getX()*getX() + getY() * getY() ); }
public Point translate( Point t ) {
return new Point(getX() + t.getX(), getY() + t.getY() );}
}
aQute Copyright © 1999 All rights reserved presentation 10/01/2000 ERICSSON
Quick Tour: Not to be an Object
Not all variables are objects like in Smalltalk
int, char, boolean, long, double, float, byte are
<primitive> types.
Each primitive type is represented by a class in
java.lang
public class HelloWorld {
public static void main( String args[] ) {
int length = args.length;
Point p = new Point( length, length );
}
}
aQute Copyright © 1999 All rights reserved presentation 10/01/2000 ERICSSON
Quick Tour: Inner class
Everything had to be a class. Callbacks require
their own class
Too cumbersome to specify in other file, so
special syntax was wrought (ugly!):
public static void main( String args[] ) {
Point p = new Point()
{
public double getX() { return super.getX() * 2; }
};
aQute Copyright © 1999 All rights reserved presentation 10/01/2000 ERICSSON
Quick Tour: Garbage Collection
Java cleans up after you
/* GC */
...
Point
p = new Point();
p = p.translate( new Point(10,10) );
...
Previous code creates 3 new objects
No need for destructor. No need for delete
aQute Copyright © 1999 All rights reserved presentation 10/01/2000 ERICSSON
Quick Tour: Inheritance
Classes can be extended
/* Extending point class */
public class Point3 extends Point {
double
_z;
public Point3() { _z=0; super(0,0); }
public double getZ() { return _z; }
public double getLength() {
return Math.sqrt(
getX()*getX() + getY()*getY() + getZ() * getZ() ); }
...
}
Only use it for an "is-a" relationship
Powerful but easy to overdo
aQute Copyright © 1999 All rights reserved presentation 10/01/2000 ERICSSON
Quick Tour: Inheritance
Single inheritance only
All classes inherit from class Object
A Class is a an instance of class Class
Class objects can be used as normal objects
So the class Class is an instance of Class (!)
Reflection
ClassLoaders
"super" keyword to access super class
aQute Copyright © 1999 All rights reserved presentation 10/01/2000 ERICSSON
Quick Tour: Interfaces
Used for specifications
/* Interfaces */
public interface Compare {
public int compare( Compare t );
}
class CPoint extends Point implements Compare {
public int compare( Compare t ) {
Point tt = (Point) t;
return getLength() - t.getLength();
}
}
Decouples using from implementation
Very popular with specifications
aQute Copyright © 1999 All rights reserved presentation 10/01/2000 ERICSSON
Quick Tour: Interfaces
public interface Log {
public void log(String s);
}
client
uses
public class SimpleLog {
public void log(String s) {
System.out.println( s );
}
}
Simple
Log
aQute Copyright © 1999 All rights reserved presentation 10/01/2000 ERICSSON
interface
Log
implements
IBM
Log
Motorola
Log
Quick Tour: Exceptions
Exceptions are used to separate normal flow of
program from error cases
Runtime exceptions:
public class HelloWorld {
public static void main( String args[] ) {
System.out.println( "Hello world"
+ args[0] );
}
}
aQute Copyright © 1999 All rights reserved presentation 10/01/2000 ERICSSON
Quick Tour: Exceptions
Checked exceptions:
public class HelloWorld {
public static void main(String args[]) throws IOException {
FileOutputStream out = new FileOutputStream( "temp" );
out.write( args[0].getBytes() );
out.close();
}
}
Exceptions can be very messy
aQute Copyright © 1999 All rights reserved presentation 10/01/2000 ERICSSON
Quick Tour: Exceptions
Handling exceptions:
public class HelloWorld {
public static void main( String args[] ) {
FileOutputStream out;
try {
out = new FileOutputStream( "temp" );
out.write( args[0].getBytes() );
out.close();
} catch( IOException e ) {
System.out.println( "Exception " + e );
e.printStackTrace();
}
finally { try { out.close(); } catch(Exception ee) {} }
}}
Never ignore exceptions: catch(...) {}
Easy to overdo exceptions
aQute Copyright © 1999 All rights reserved presentation 10/01/2000 ERICSSON
Quick Tour: Packages
Name spaces for Java
package = add a class to a package
import = use classes from a package
Encapsulate a number of related classes
Used for access control
Content of file: ../se/aQute/plane/Point.java
package se.aQute. plane;
import se.aQute.basictest.*;
public class Point {
double
_x;
double
_y;
public Point() { clear(); }
...
}
aQute Copyright © 1999 All rights reserved presentation 10/01/2000 ERICSSON
Quick Tour: Equality
Equal and identical are different concepts
Identity check is ==
Class Object has method equals(Object
method that is identity
o)
3 == 3; // YES
"three" == new String("three"); // NO
"three".equals( new String("three") ); // YES
Classes can override equals(Object o) for their
semantics
Watch hashCode() when overriding equals() !!!
aQute Copyright © 1999 All rights reserved presentation 10/01/2000 ERICSSON
Quick Tour: toString()
toString() is a useful method for debugging
Each object inherits a default implementation
from Object
Overriding can be very, very useful during
debugging
public class Point {
. . .
public String toString() { return getX() + "," + getY(); }
. . .
}
aQute Copyright © 1999 All rights reserved presentation 10/01/2000 ERICSSON
The Java VM
Java is compiled to byte codes
Byte codes are interpreted by the VM
File: HelloWorld.java
public class HelloWorld {
public static void main( String args[] ) {
System.out.println( "Hello world" );
}
}
javac
compiler
rt.jar
or
classes.zip
File: HelloWorld.class
0xCA 0xFE 0xBA 0xBE 0x01 0xF7 0x76 0x41 0x23
. . .
java
VM
aQute Copyright © 1999 All rights reserved presentation 10/01/2000 ERICSSON
Hello world
Native code interface
Native code interface through JNI
Native interface defined in Java class
class Native {
int var;
public native int foo();
}
Translated via javah into C header file
#include <native.h>
typedef struct ClassNative { long var; } ClassNative;
HandleTo(Native);
extern long Native_foo(struct HNative *);
aQute Copyright © 1999 All rights reserved presentation 10/01/2000 ERICSSON
The Java VM: The good news
Portable format allows execution on many
different computer types
Hundreds of VMs available from different
vendors
Optimized for certain applications
Inherently safe
aQute Copyright © 1999 All rights reserved presentation 10/01/2000 ERICSSON
The Java VM: The bad news
Interpretation requires CPU cycles
Instruction set not optimized for target machines
Byte format is rather verbose
aQute Copyright © 1999 All rights reserved presentation 10/01/2000 ERICSSON
Is Java Cool?
Nothing particularly innovative
Portable object code from Pascal (P-code!)
Syntax from C++
Object model from Smalltalk
Garbage Collection from Lisp
Reasons for success:
People were getting fed up with C++
Java looked much simpler
Applets kick started it (but no longer drive it)
aQute Copyright © 1999 All rights reserved presentation 10/01/2000 ERICSSON
The runtime library
The runtime library is Java's best asset
Library has grown very hard
Single implementation of common code
Some implementations are pretty bad (AWT!)
From 8 packages to 77 packages!
Need for profiles
There is an amazing amount of code to be found
on the net
aQute Copyright © 1999 All rights reserved presentation 10/01/2000 ERICSSON
The runtime library: java.lang
Basic package which is always included
Contains primitive type classes for Boolean,
Integer, Double, Float, Byte, Character, Void
number <-> string conversions
number <-> number conversions
Max/Min values
Used in reflection
aQute Copyright © 1999 All rights reserved presentation 10/01/2000 ERICSSON
The runtime library: java.lang
Process, Runtime and System for access to
system resources
Running of external processes and linking of
external libraries
Debugging
Memory interface
Time
System properties
Utiltity functions like arraycopy
aQute Copyright © 1999 All rights reserved presentation 10/01/2000 ERICSSON
The runtime library: java.lang
Thread, ThreadGroup for threads
A Thread is like an internal process
Run multiple threads at the same time
Combine threads in a group for security control
Monitors are used to manage shared resources
Math = Math library
Contains mathematical routines
sqrt, cos, sin, log, ln ...
aQute Copyright © 1999 All rights reserved presentation 10/01/2000 ERICSSON
The runtime library: java.lang
Throwable
Base class for Exceptions and Error
SecurityManager for security
Performs security checks (when installed)
Access to call stack
aQute Copyright © 1999 All rights reserved presentation 10/01/2000 ERICSSON
The runtime library: java.lang
String
Unicode!
16 bit char = 65536 possible characters
Functions
String can be concatenated with +
System.out.println( "File : " + file + " : " + exception );
substring, indexOf, trimming
Conversion from number to String
Symbols (unique value with intern() )
aQute Copyright © 1999 All rights reserved presentation 10/01/2000 ERICSSON
The runtime library: java.lang
StringBuffer
Used to concatenate strings
Expensive:
String concat = "";
for ( int i=0; i<10; i++ ) concat = concat + i;
Less Expensive
StringBuffer sb = new StringBuffer();
for ( int i=0; i<10; i++ ) sb.append( "" + i );
String concat = sb.toString();
aQute Copyright © 1999 All rights reserved presentation 10/01/2000 ERICSSON
The runtime library: java.io
Streams are used for byte access to files
Readers/Writers are used for Unicode access
Streams, Readers, Writers can be used as pipes
Buffering
Data access (e.g. getInt(), getShort() )
Between threads (PipeXXXXX)
Conversion from stream to reader/writer
ObjectStreams
aQute Copyright © 1999 All rights reserved presentation 10/01/2000 ERICSSON
The runtime library: java.net
Access to the net (TCP/IP)
Stream connections: Socket, ServerSocket
Extendable: SocketImplFactory
URL, URLConnection
InetAddress
Extendable: URLStreamHandlerFactory
Datagrams
Unicast/Multicast
aQute Copyright © 1999 All rights reserved presentation 10/01/2000 ERICSSON
The runtime library: java.util
Useful classes
Collections: Vector, Hashtable, BitSet, Properties,
Stack, Enumeration, Map, Array, Iterator
Time: Date, Calendars, TimeZones
Locale: Locale, ResourceBundles
Random
Observable
StringTokenizer
EventObject, EventListener
aQute Copyright © 1999 All rights reserved presentation 10/01/2000 ERICSSON
The runtime library: other
java.rmi
Remote method invocation support
java.math
Big Integer (unlimited digits) for private/public key
calculations
aQute Copyright © 1999 All rights reserved presentation 10/01/2000 ERICSSON
The runtime library: more other
java.security
java.sql
Access support to SQL databases
java.text
Classes for certificates, principals, permissions
Support for language independent messages
java.util.zip
Access to zip files which are the preferred delivery
vehicle for java applications.
aQute Copyright © 1999 All rights reserved presentation 10/01/2000 ERICSSON
The runtime library: more other
java.util.jar
java.lang.reflect
Access to jar files and their manifest
Access to objects in runtime via reflection on their
interfaces
java.beans
Support for Java beans
aQute Copyright © 1999 All rights reserved presentation 10/01/2000 ERICSSON
The runtime libraries: GUI
Original AWT in 1.0 was … well, awful
JDK 1.1 at start 1997 improved significantly
Netscape released lightweight GUI called IFC at
that time
SUN decided to develop their own lightweight
GUI at the end of 1997
Netscape joined them SUN team and stopped
support for IFC
aQute Copyright © 1999 All rights reserved presentation 10/01/2000 ERICSSON
GUI: AWT
Uses peer model
Event model:
A widget controls a native widget
Supports "native look and feel"
first based on single dispatching method
handleEvent
Today based on listeners
Layout managers
LightWeight components
aQute Copyright © 1999 All rights reserved presentation 10/01/2000 ERICSSON
GUI: AWT looks
aQute Copyright © 1999 All rights reserved presentation 10/01/2000 ERICSSON
GUI: IFC
Derived from NeXT, adopted by Netscape
Lightweight components
Very clean code, small, reliable and included in
Netscape Communicator
Internal windows, drag & drop
Event handling via strings
Powerful GUI builder called Constructor
Available (including source) but not maintained
aQute Copyright © 1999 All rights reserved presentation 10/01/2000 ERICSSON
GUI: IFC example, full control
aQute Copyright © 1999 All rights reserved presentation 10/01/2000 ERICSSON
GUI: JFC
Derived from IFC (same people [@ start])
Lightweight components, listeners
JButton top = new JButton("Top");
top.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e) {
System.out.println("top");
}
} );
Compare Smalltalk, there it would be:
Button top = Button new: 'top'.
top action: [ Transcript print: 'top' ].
HUGE
Based on Model-View paradigm & Pluggable UI
Easier to use than it looks
aQute Copyright © 1999 All rights reserved presentation 10/01/2000 ERICSSON
GUI: JFC complexity, the button
L&F
...
Button
UI
Abstract
Button
Button
Model
Default
Button
Model
JButton
JToggle
Button
JRadio
Button
JCheck
Box
aQute Copyright © 1999 All rights reserved presentation 10/01/2000 ERICSSON
JMenu
Item
JCheckBox
MenuItem
JMenu
JRadioButton
MenuItem
JFC: The good and changing looks
aQute Copyright © 1999 All rights reserved presentation 10/01/2000 ERICSSON
Components: Beans
Components are wrapped objects
Access via reflection
Allows runtime composition of systems (via end
users?): Visual Programming
Properties can
be set via
Methods
Events
strings
Bean
Properties
aQute Copyright © 1999 All rights reserved presentation 10/01/2000 ERICSSON
Java Beans
Events follow the listener model
Properties are defined via methods that start with
get/set
SomeBean bean = new SomeBean();
bean.addTickEventListener(new TickEventListener() {
public void tick(TickEvent e) {
System.out.println("tick");
}});
E.g. property "tickCount"
public class SomeBean {
public long getTickCount() { … }
public void setTickCount() { … }
}
Bean programmer can override defaults with an
Introspector
aQute Copyright © 1999 All rights reserved presentation 10/01/2000 ERICSSON
The Bean Box
aQute Copyright © 1999 All rights reserved presentation 10/01/2000 ERICSSON
Enterprise Java Beans
SUN's attempt to enter the enterprise computing
market
Mainframe connectivity
Application Servers
Message Queues
Transactions
EJB
aQute Copyright © 1999 All rights reserved presentation 10/01/2000 ERICSSON
client
Servlets
Very popular way to create WWW pages
Offers: User sessions, Parameters, Cookies
Not always easy to setup in web server
Life cycle managed by web server
A simple servlet:
import javax.servlet.http.*;
import javax.servlet.*;
public class HelloServlet extends HttpServlet {
public void doGet( HttpServletRequest rq, HttpServletResponse rsp ){
rsp.setContentType( "text/plain" );
PrintWriter out = rsp.getWriter();
out.println( "Hello world " + rq.getParameter("name") );
}
}
http://host/servlets/HelloServlet?name=peter
aQute Copyright © 1999 All rights reserved presentation 10/01/2000 ERICSSON
Servlets
http://a.com/servlets/A?name=peter
Web
Server
Client
Mime typed data, e.g. HTML
Java
VM
HttpRequest
Servlet
A
HttpResponse
Servlet
B
aQute Copyright © 1999 All rights reserved presentation 10/01/2000 ERICSSON
Java Server Pages
HTML pages contain embedded Java code
Uses bean standard
Beans can be page local, session local or global
Pages are pre-processed for speed
Easy to design good looking pages with standard
tools
aQute Copyright © 1999 All rights reserved presentation 10/01/2000 ERICSSON
Distributed Programming
Remote Method Invocation RMI
Common Object Request Broker Architecture
CORBA
Voyager (ObjectSpace)
String s = foo("bar")
Process A
aQute Copyright © 1999 All rights reserved presentation 10/01/2000 ERICSSON
Process B
RMI
Strongly based on Remote Procedure Call
Uses serialization of objects for parameters
Name server
Client
Stub
Remote
Unicast
Remote
Object
Compute
Engine
rmic
Skeleton
aQute Copyright © 1999 All rights reserved presentation 10/01/2000 ERICSSON
Connection made via
name server
RMI
Not all objects are serializable
Code transfer awkward
Current RMI does only do class transfer via HTTP
(biggest problem in JINI)
Stub skeleton model cumbersome
All methods MUST throw RemoteException
Built in to all Java VMs
aQute Copyright © 1999 All rights reserved presentation 10/01/2000 ERICSSON
CORBA
Language independent standard for interprocess
communication defined by OMG
Uses Interface Description Language (IDL)
Every VM has an Object Request Broker built in
Java is a very good match for CORBA
But is it needed?
No class loading
aQute Copyright © 1999 All rights reserved presentation 10/01/2000 ERICSSON
CORBA
IDL
Helper
idltojava
Holder
Client
module HelloApp {
interface Hello {
string sayHello();
};
};
Corba
Object
Stub
Compute
Skeleton
Confused?
Impl.
aQute Copyright © 1999 All rights reserved presentation 10/01/2000 ERICSSON
Voyager
Simple implementation using proxy generation
on the fly (standardized in Java 1.3)
Runs on all Java VM's: ~270K
Does not require pre-processor
Does inline class loading
Advanced distributed even mechanism
aQute Copyright © 1999 All rights reserved presentation 10/01/2000 ERICSSON
Database interfaces
JDBC
Traditional interface to SQL like databases
Very much like Microsoft's ODBC
OO Databases
PSE from Objectstore
POET
POS from Oracle
aQute Copyright © 1999 All rights reserved presentation 10/01/2000 ERICSSON
Service Discovery
Discover services available on the local net
JINI
Pure java, cumbersome, big. Type based
SLP
Broadcast/Multicast, Communication
Simple
Universal PNP with SSDP
HTTP based, declarative with XML
aQute Copyright © 1999 All rights reserved presentation 10/01/2000 ERICSSON
Media API's
Java 2D
Java 3D
Java Media Framework
JTAPI, Telephony API
aQute Copyright © 1999 All rights reserved presentation 10/01/2000 ERICSSON
Interesting developments
JavaSpaces
Infobus
Java OS
Java shared data toolkit
Java Embedded Server / OSGi
Java mail
Java Activation Framework
……………..
aQute Copyright © 1999 All rights reserved presentation 10/01/2000 ERICSSON
Conclusion
Java is a simple but powerful language
It has grown too fast too big
Library support is extensive
Not all APIs are well designed
Performance is an issue
Significant improvement over C++
aQute Copyright © 1999 All rights reserved presentation 10/01/2000 ERICSSON
References
Java: www.javasoft.com
Java Developers Connection:
http://developer.java.sun.com
IBM source code: alphaworks.ibm.com
Voyager: www.objectspace.com
PSE Pro: www.odi.com
Links to java related:
http://www.taxon.demon.nl/JW
aQute Copyright © 1999 All rights reserved presentation 10/01/2000 ERICSSON
References
Java in a Nutshell
Java Secrets
David Flanagan. ISBN 1-56592-183-6
Elliote Rusty Harold.ISBN 0-7645-8007-8
Java 2 Performance and idiom guide
Craig Larman, Rhett Guthrie. ISBN 0-13-014260-3
aQute Copyright © 1999 All rights reserved presentation 10/01/2000 ERICSSON
References
The Java Virtual Machine Specification
Java Security
Scott Oaks. ISBN 1-56592-403-7
Java Developers Almanac
Tim Lindholm, Frank Yellin, ISBN 0-201-63452-X
Patrick Chan. ISBN 0-201-37967-8
Late night IFC
Jason Beaver, Jamie Costa, Jason Wehling. ISBN 156276-540-X
aQute Copyright © 1999 All rights reserved presentation 10/01/2000 ERICSSON