Sequence Diagrams and RMI
Download
Report
Transcript Sequence Diagrams and RMI
RMI, and Java GUIs
4-3-2002
Comments
Everyone should be filling out and turning
in group evaluations. These are largely
for your protection. It can be used to
point out where there are problems in
group mechanics.
I had planned on talking about sequence
diagrams today, but I’m going to push
that back a week and discuss some Java
topics instead.
Remote Method Invocation
Java makes virtually all network
communication easier than it is in C/C++.
This is particularly true when using RMI.
With RMI you can treat objects on other
computers as if they were local on your
own computer and call methods on them
accordingly. Of course, there is a lag
when you do this, but you don’t have to
explicitly worry about the socketing and
whatnot.
Remote Interfaces
The entity you get for an object remotely is
actually not the object itself, but an interface
that object implements. The interface must
extend java.rmi.Remote.
The implementation class should also extend
java.rmi.server.UnicastRemoteObject.
Note that this implies that the implementation
can have more functionality than the remote
interface does.
All remote methods can throw
java.rmi.RemoteException.
Passing
Different types of objects are passed
differently
Remote objects - any object that extends
java.rmi.Remote is passed as a remote
object. You get a skeleton that does network
communication.
Serializable objects - If an object is not
Remote it must be serializable and then it is
passed by value.
Primitives - No pass by reference of
Registering and Lookup
Once you have a remote object, it can
pass you others, but getting the first one
takes a different approach.
An object can register itself with the rmi
registry using the rebind method of
java.rmi.Naming. (You have to start a
local registry with rmiregistry first.)
Objects can get a remote reference to a
registered object using the lookup method
of java.rmi.Naming.
Compiling
Once you have written your code you first
compile it with a normal Java compiler.
After that you have to do another step to
create stub and skeleton classes that do
most of the work behind RMI. You to this
is the RMI compiler, rmic. Just run rmic
specifying the name of the
implementation class.
Java GUIs
One of the greatest things about Java,
from an application building standpoint, is
how easy it is to make a GUI in it.
Since 5 out of 8 of the groups HAVE to do
this to implement anything we will take a
few minutes to discuss it.
Java has two graphics libraries, AWT and
Swing. They work very similarly.
AWT
The AWT library uses inheritance
extensively. Components of the GUI are
represented by the component class.
Container is a subclass of Component that
can have other components added to it.
Each of these has other subclasses
representing buttons, windows, text
fields, labels, etc.
Layouts
To make Java GUIs portable, they use
layout managers to position and size
various components. You can place
things at specific locations on the screen,
but that isn’t very portable.
Every container has a layout manager it
uses to place the components in it. By
nesting containers and layout managers
you can get great flexibility.
Some Layout Managers
Here are some of the layout managers in
AWT.
FlowLayout - places one component after
another like text on a page.
GridLayout - places components on a regular
grid.
BorderLayout - Objects can be placed a
north, south, east, west, or center.
GridBagLayout - A powerful layout manager
for placing objects in an irregular grid.
Events
No GUI is complete unless it can react to
the user. User interactions with a GUI are
called events and we want to be able to
create code to “handle” events.
In Java (since version 1.1) we do this be
attaching event listeners to GUI
components. When an event happens for
an object all the appropriate listeners for
that object are called.
Events and Listeners
There are a fair number of event types
and listeners.
The listeners include ActionListener,
MouseListener, KeyListener, and
FocusListener. Each listener type has
certain methods that it must define.
Action events are some of the most
common and happen when you do things
like click buttons.
Swing
Swing is actually based on AWT, but
provides a look and feel that is machine
independent. It has pretty much all the
same objects but the names typically start
is J (i.e. JButton and JFrame).
Swing also has other classes AWT didn’t.
These include JTable, JTree,
JColorChooser, and JToolBar.
AWT or Swing for project?