Office of Continuing and Professional Studies
Brandeis University
Rabb School of Summer, Special and Continuing Studies
Waltham, MA 02254-9910
Course: Distributed Programming
using Java(tm) and Jini(tm) Network Technology
Instructor
Sang Shin(sang.shin@sun.com
),
Java(tm) Technology Evangelist, Sun Microsystems, Inc.,
(781) 442-0531 (office)
Biography
of Sang Shin
Sang Shin's
Speech Engagement Schedule
Office hours : I do not have any scheduled office hours. The best
way to contact me is through email. I am also available 30 minutes
before the class and an hour after each class.
Class website is http://www.plurb.com/misc/jini/brandeis-jini-2002.html
Use the mailing list brandeis-jini-2002@sun.com
forclasswide issues.
About This Class
General Policies
Jini Resources
Course Title and Description
(as in Brandeis brochure)
-
Course Number: RSEG-0290-G
-
Title: Distributed Systems Programming using Java(tm) and Jini(tm) Network
Technology
-
Description: "This course will cover the fundamental concepts of distributed
programming first. Then it will talk about how Java and Jini can be used
to build reliable, scalable, and highly flexible and dynamic distributed
computing framework. Jini Network Technology creates a Java-centric,
homogeneous view of the network, leveraging Java's ability to safely move
code during runtime. This model makes it possible to add new services
or devices with minimum configuration requirements."
Course Objectives
-
By the end of the course, students are expected to
-
Understand the fundamental concept of distributed computing
-
Understand the concept and architecture of RMI (Remote Method Invocation),
Jini network technology, and JavaSpaces
-
Be able to design and implement RMI server and client applications
-
Be able to design and implement Jini service and client applications using
all programming models introduced in Jini network technology
-
Be able to design and implement JavaSpaces-based service and client applications
-
Be able to design and implement Surrogate-based Jini services
-
Get some exposure to on-going Jini community projects
-
Get some exposure to Jini-based real-life applications
Syllabus (and Presentation slides)
You are welcome to use the material here in any way you
want. In fact, I would like to strongly encourage you to use the material
here, for example, to teach a class or give a in-house seminar on the subjects.
The files here are in PDF form but Powerpoint or Staroffice files will
be available upon request. If you use any of the materials here,
I would like to ask you to drop me an email (sang.shin@sun.com
) so that I can keep track of who is using what. I am
also available for giving in-house seminar on the subjects as long as travel
expenses are paid. (Seminar itself will be free of charge.) Thanks
in advance.
-
Jini and other technologies
-
Java, Jini and RMI security
-
Jini.org projects
-
Jini TCK
-
Service UI
-
Industry application examples
-
Forte for Java, RMI and Jini modules
Things we are NOT going
to cover
Schedule (Class is being held every Thursday night from 6:00PM
to 9:00PM)
-
Note: The topics themselves and the amount of
time assigned to each topic are subject to change as we move along.
-
Note: The order of topics to be covered are also
subject to change as instructors see fit.
-
Note: Given the time constraint we have, we might
not be able cover all the topics listed here.
-
Week1 (01/31, Thursday)
-
Presentation material
-
Pre-class reading
-
Assignment - HW#1 (Estimated time: 1-5 hours, Submission Not
Required)
-
Objectives
-
To get yourself familiar with Jini runtime environment. This
is your first exposure to Jini runtime environment. And depending on your
network environment and how you run things, you could experience lots of
problems before you could get things to work especially when you do not
have clear understanding on exactly what is happening underneath.
It is OK. The goal of this assignment is in a sense for you to experience
and struggle a bit with :-) these problems. And please be assured
that we will talk about these problems more than once during the remaining
sessions of this class. Please feel free to experiment as much
as you can. And also feel free to post questions to the class alias
(brandeis-jini-2002@sun.com
) or share what you've learned from those experimentation's with the class.
Your level of participation (questions count too!) will impact 10% of your
grade.
-
Note
-
Just to avoid "TCP/IP and network related error symptoms", it is
strongly recommended that you perform this task on a machine that has an
active connection to the network. In other words, please avoid to set up
a Jini runtime system on a standalone machine if possible. Jini runtime
system can be run in a standalone system, however, on Win95 and WIn98.
But, on Win2000, the multicast does not work even if you are using Loopback
adaptor. Please follow the instructions if you want to run them on
a standalone machine
-
Tasks (This is demonstrated during the first class.)
-
Download and install JDK
1.2 or 1.3 (1.3 is strongly recommended) and then
Jini 1.2 package. (It is recommended you install Jini package
in \files directory (/files on Unix systems) since most of the Jini batch
files are written with that assumption.)
-
Start Jini runtime environment as documented in Jini document - the document
you want to use is jsk.html which resides in \files\jini1_2\doc\example
directory (file:///C|/files/jini1_2/doc/example/jsk.html). You can
start Jini runtime environment either via GUI utility program (StartService)
or by executing a set of commands. (Using GUI utility is a lot easier.
For running GUI utility, take a look at /files/jini1_2/doc/example/StartingServiceGUI.html.)
-
Warning: If you are
using JDK 1.3 and start Jini runtime environment via commands, please make
sure you take a look at http://www.artima.com/jini/faq.html#rmidpolicy
. Otherwise, you will experience "java.security.AccessControlException"
error. (If you are using, StartService GUI utility, this is already
taken care of.)
-
Warning: If something
does not work and you have to start things all over again, make sure you
delete log files. (Why this is the case will be explained during the class.)
-
Run LookupBrowser and see if the lookup service your started is being discovered.
(LookupBrowser can be started from GUI utility program.)
-
Run other Jini services and see if they are being discovered.
-
Read the manual of the Lookup Browser. Play around it. This is the
tool that you will use a lot.
-
Week2 (02/07, Thursday)
-
Presentation material
-
Pre-class reading
-
Assignment - HW#2 (Estimated time: 2-3 hours)
-
Objectives
-
To get yourself familiar with a typical software
development cycle of Jini service and Jini client
-
Task
-
Build and run basic version of Core Jini Chapter
5 HelloWorld service example and its client. (By "basic version", I mean
the simplest service which does not involve any leasing, remote events,
transaction.)
-
Make sure you download the Core
Jini sample code from Keith
Edward's web site(http://www.kedwards.com/jini/index.html). Please
unzip the file under \files directory if possible because the scripts I
provided here assumes that you have unzipped the file under \files.
So after unzipping, you should have \files\corejini\chapter5 directory
in which you will find HelloWorld service and client programs.
-
Since Core Jini is not our official textbook - the
textbook has build instructions in the book but does not come with build
scripts either -, I provided the build scripts for Windows platform here.
(You can create Unix scripts yourself for Unix platforms.) Please copy
these files into \files\corejini\chapter directory and run the following
scripts in the following order while you are in \files\corejini\chapter5
directory
-
runthisfirst.bat
(creates proper directories)
-
compileservice.bat
(compile HelloWorld service)
-
compileclient.bat
(compile
HelloWorld client)
-
starthttp.bat
in a new window (starting another HTTP server on port 8085 because your
HelloWorld service exports class files on port 8085 - take a look at runservice.bat.)
-
Now before you start HelloWorld Jini service, you
have to start Jini runtime environment including Jini LookupBrowser.
-
runservice.bat
in a new window (start HelloWorld Jini service)
-
Now from your LookupBrowser (if you run it with -admin
option), you should see "Unknown service" icon displayed in the lower pane.
Obviously things worked only half-way. Think about what caused this symptom
and how you can fix it. (The hint is some error message you should see
in the window you run httpstart.bat.) And fix it so that you should see
HelloWorld service icon.
-
runclient.bat
in a new window(run HelloWorld Jini client)
-
Things to be submitted
-
Capture the result of client operation and lookup
browser into "hw2_helloworld" and email it to me (sang.shin@sun.com)
-
Optional Assignment (Estimated time: 1 hour, Submission
Not Required)
-
Objectives
-
Task
-
Add a new method to HelloWorldServiceInterface
-
public int add(int x, int y); // adds x and
y and return the added value
-
Modify the service code to support the above method
-
Modify the client code to invoke the above method
-
Week3 (02/14, Thursday)
-
Presentation material
-
Pre-class reading
-
Assignment - HW#3 (Estimated time: 2-5 hours)
-
Optional Assignment (Estimated time: 1-3
hours depending on how well you understood codebase issues, Submission
Not Required.)
-
Objectives
-
To exercise your understanding on code movement,
export codebase (RMI codebase) on multi-machine deployment environment
-
Task
-
Try to set up Jini runtime environment (HTTP server,
RMID, Lookup service) on a machine A.
-
Run your HelloWorld Jini service on a machine A as
well (or machine B if you have enough machines to play around)
-
Now try to run Lookup browser on a physically different
machine from machine A, let's say, machine C, and see if the Lookup browser
can see your HelloWorld Jini service.
-
Post the result (including the problems you've experienced)
to our email alias
-
Tips
-
Do not use "localhost" as HTTP server. (Think about
why you do not want to do this in multi-machine Jini runtime environment)
-
Week4 (2/21, Thursday) Since
this is a Spring break in Brandeis and cannot use the classroom in the
campus, we will have a class in Burlington campus of Sun Microsystems.
For instuction on how to get to Sun Bulington campus, please see Sun
Burlington Campus direction.
-
Presentation material
-
Class preparation
-
Assignment - HW#4 Task1 (Estimated time:
1-3 hours)
-
Objective
-
To get yourself familiarized with service registration
and attribute manipulation
-
Tasks
-
Come up with a set of your own attributes for the
HelloWorld service.
-
At least one non-String field has to be included
-
Register the HelloWorld service with the initial
set of attributes
-
Perform the add/modify/delete operations of this
attribute to the HelloWorld service. You can do this either by calling
methods of ServiceRegistration object or by implementing JoinAdmin interface
to the service and then calling methods of the JoinAdmin. (The latter
is for folks who need more programming challenge.)
-
Verify the attribute addition, modification, and
deletion via Lookupbrowser
-
Things to be submitted
-
Submit code and result via email to me (sang.shin@sun.com)
-
Assignment - HW#4 Task2 (Estimated time: 1-3 hours)
-
Objective
-
To get yourself familiarized with discovery protocol
-
Tasks
-
Start two lookup services
-
Change the group membership of your first lookup
service to two groups using Lookup browser, i.e. engineering and marketing
-
Change the group membership of your 2nd lookup service
to just one group using Lookup browser, i.e. marketing
-
Modify the Helloworldservice.java of CoreJini Chapter5
to use LookupDiscoveryManager class (The original code was written using
Jini 1.0 APIs which still work. LookupDiscoveryManager class was
introduced as part of Jini 1.1.) Discover lookup services who belongs
to only engineering group.
-
Also modify the above code to perform discovery protocol
using Unicast and LookupDiscoveryManager class. The lookup service
to discover is the one that belongs to only marketing.
-
Notes
-
Things to be submitted
-
Submit code and result via email to me
-
Week5 (02/28, Thursday)
Sang Shin will be in Korea during this week giving a talk. We have
an excellent substitute instructor, however, Brian Murphy from Jini engineering
team. He is a project leader in Jini 1.0, 1.1, and 1.2.
-
Presentation material
-
Class preparation
-
Assignment 1 - HW #5.1 (Estimated time:
1-3 hours)
-
Objective
-
To use JoinManager for service registration (as a
Jini service) and ServiceDiscoveryManager for service lookup (as a Jini
service client)
-
Tasks
-
Modify the helloworld server to use JoinManager for
discovery and join operation
-
Modify the helloworld client to use ServiceDiscoveryManager
for discovery and lookup operations.
-
Things to be submitted
-
Submit code and result via email to me (sang.shin@sun.com)
-
Assignment 2 - HW #5.2 (Estimated time: 1-3 hours)
-
Objective
-
To perform lookup operation using service type and
attributes
-
Tasks
-
Create two services - one HelloWorld service and
another one which is an extension of HelloWorld service. That is,
the Java service interface type of the 2nd service has to be an extention
of the first HelloWorld Java service interface type
-
The two services must have a common attribute set
(You can call it anyway you want, but I am calling it attribute1 here)
-
The 2nd service should have an additional attribute
set that is not present in the first service (I am calling it attribute2)
-
Perform multi-match lookup operation using the Java
service interface type of the first service as search criteria: You should
get both services. Just do println the service proxy object of both.
-
Perform multi-match lookup operation using the Java
service interface type of the 2nd service as search criteria: You sould
get only the 2nd service. Just do println the service proxy object.
-
Perform multi-match lookup operation using only attribute1:
You should get both services. Just do println the service proxy
object of both.
-
Perform multi-match lookup operation using only attribute2:
You sould get only the 2nd service. Just do println the service
proxy object.
-
Things to be submitted
-
Submit code and result via email to me (sang.shin@sun.com)
-
Week6 (03/07, Thursday)

-
Presentation material
-
Class preparation
-
Assignment - HW #6a (Estimated time: 2-5 hours)
-
Objective
-
To exercise Jini event programming model
-
Task
-
Modify the helloworld server (or whatever Jini service
you want to use) to be a event generator. Either use the existing method
or add another dummy method for event generation
-
Modify the helloworld client (or whatever Jini client
you want to use) to be the event registrant and event listener
-
The Jini service generates event notifications with sequential event number.
The client has to verify if the event received is the one it has asked
for. It also has to make sure if the event notifications were received
in sequential manner.
-
Things to be submitted
-
Submit code and result via email to me (sang.shin@sun.com)
-
Assignment - HW #6b (Estimated time: 2-5 hours)
-
Objective
-
To exercise Jini leasing programming model
-
Task
-
The service should provide some resource with leasing. The client
should renew the lease a couple of times. The service when the client
stops renewal of the lease, should expire the lease and re-claim the resource.
-
Things to be submitted
-
Submit code and result via email to me (sang.shin@sun.com)
-
Week of 03/14, Thursday - We are NOT going
to have a class during this week
-
Week7 (3/21, Thursday)
-
Presentation material
-
Class preparation
-
Assignment - HW #7 (Estimated time: 2-5 hours)
-
Objective
-
To exercise Jini Transaction programming model
-
Task
-
Create two Jini services, which are called SavingsAccount
and CheckingAccount. The client performs a money transfer operation - transfer
$70 from SavingsAccount to CheckingAccount - between the two accounts in
a transactional manner. This money transfer operation is made of
two internal operations, first withdrawing $70 from SavingsAccount and
the second deposting into CheckingAccount. Write service and client code
to do the following:
-
Start transaction, withdraw $70, deposit $70, then
commit()
-
Start transaction, withdraw $70, deposit $70, then
abort()
-
Start transaction, withdraw $70, then abort()
-
Things to be sumitted
-
Submit code and result via email to me (sang.shin@sun.com)
-
Week of 03/28, Thursday - We are NOT going to
have a class during this week due to Passover break
-
Week8 (04/4, Thursday)
-
Presentation material
-
Class preparation
-
Assignment (HW#8A)
-
Objective
-
To write a simple "HelloWorld" JavaSpaces application
-
Tasks
-
Create an entry that contains "Helloworld" string
and another field that contains non-string object
-
Write the entry into JavaSpaces
-
Read the entry from the JavaSpaces and display the
Helloworld string
-
Things to be submitted
-
Submit code and result via email to me (sang.shin@sun.com)
-
Assignment 2(HW#8B)
-
Objective
-
To write event-driven JavaSpaces application
-
Tasks
-
Write JavaSpace client application which registers
its interest of getting event notification when a "HelloWorld" entry is
written to a JavaSpaces.
-
Things to be submitted
-
Submit code and result via email to me (sang.shin@sun.com)
-
Week of 04/11, Thursday - We are NOT going to
have a class. Sang Shin will be in Paris, France giving talks.
-
Week9 (04/18, Thursday)
-
Presentation material
-
Class preparation
-
Assignment - No homework assignment this week
-
Week10 (04/25, Thursday) - Final-term project
due
-
Presentation material
-
Class preparation
-
Assignment - No homework assignment this week
Grading Criteria
-
Home work assignment
20%
-
Only one or two will be randomly selected for grading
-
Submission is a Must unless specified otherwise - there will be homework's
that do not require submission
-
A missing homework could account for up to 5% of total grade
-
4 to 6 homework assignments are expected during the course
-
Each homework assignment is expected to take between 2 to 5 hours
to finish
-
Just for consistency of grading, a particular week's homework assignment
will be graded by a single instructor (or both instructors if we have co-instructor
for the class)
-
Midterm project (or exam)
25%
-
Final project
45%
-
Class participation/Attendance
10%
-
Research
paper (optional, could earn bonus points of up to 15%)
-
6 to 10 pages
-
Any subject related to Jini and JavaSpaces is acceptable
-
The originality of your idea needs to be clearly specified
Ground Rules regarding the usage
of Java programming language in this class
-
All homework and project assignments ought to be written in Java programming
language
Prerequisites
-
Advanced programming in Java
-
Some conceptual understanding of network programming (i.e. TCP/IP socket
programming)
Textbooks & Reference books
-
Textbook: http://pandonia.canberra.edu.au/java/jini/tutorial/Jini.xml
(Jan Newmarch's Guide to JINI Technologies - It is the best Jini and
JavaSpaces tutorial resource, Same content is available both online and
in hard-copy textbook form.)
-
Textbook (Optional) : "Core Jini" written by W. Keith Edwards, 2nd Edition,
Prentice Hall
-
Textbook (Optional): "JavaSpaces: Principles, Patterns, and Practice" written
by Eric Freeman, Susanne Hupfer, Ken Arnold, Addison-Wesley Pub Co
Weekly presentation material
-
It is my goal to post the presentation material by Thursday night of each
week so that students have a chance to see them before the Thursday night
class. (I am sure there will be exceptions, however.)
-
The presentation material will be posted in six slides per page PDF file
format. Powerpoint files (or StarOffice files) can be provided upon
request.
-
I am constantly updating my presentation material even for the ones I already
talked about. I am giving a lot of talks on various topics including
Jini network technology so I am constantly going back to old presentation
materials including the ones I am using for this class to update them with
newer and hopefully with better contents. And I will, once in a while,
update whole contents. Typically when I post the material a couple
of days before the class, the contents should be about 95% stable.
So the hard copies you have should suffice the need for writing notes and
would require only minor modifications. I will also update the material
right after the class so that you have at least the same ones you saw during
the class.
-
Weekly presentation material will be posted under class
schedule
Weekly pre-class reading material
Homework assignments
-
For homework grading policy, see homework assignment section of Grading
policy
-
Actual home work assignments will be posted under class
schedule
-
Homework can be submitted either email or paper form
-
Mid-term project, final project, and optional research paper should be
submitted in paper form with your name clearly written on the cover
Classroom location
Late submission policy
-
On or before due date: 100%
-
After due date and before or on next class: 75%
-
After next class meeting (anytime): 50%
-
Homework assignment is due by the next class unless specified otherwise
-
Mid-term projects and final projects due dates are specified in the
class schedule section of this document
Learning Disabilities
-
If you are a student with a documented disability on record at Brandeis
University and wish to have a reasonable accommodation made for you in
class, please see me immediately.
Academic Honesty:
-
As stated in the Rights and Responsibilities handbook, "Every member
of the University community is expected to maintain the highest standards
of academic honesty. As student shall not receive credit for work that
is not the product of the student's own effort".
brandeis-jini-2002@sun.com
alias usage guidelines
-
This email alias was set up for students to share knowledge and exchange
ideas among themselves during the semester period. Students are strongly
encouraged to post questions, interesting articles, tools, sample programs
or anything that is relevant to Jini, RMI, and JavaSpaces technologies.
Homework
assignment and Project submission status
-
This table will be updated after Thursday night class and by Wednesday
noon.
-
If you see any errors, please let the instructor know immediately.
-
Homework name convention should be as following - What I do is to save
files into individual student's file folder for later browsing. So there
will be many files from several homework assignments (and possibly mid-term
and final projects) for each person. And if you name your filename in the
following convention, that will help me a lot in identifying which files
belong to which assignment. The number should be the week number of the
class.
-
hw2_filename.ext - homework assignment #2 files
-
hw3_filename.ext - homework assignment #3 files
-
hw3o_filename.ext homework assignment #3 optional (extra credit)
-
mid_filename.ext midterm project files
-
fin_filename.ext final project files
-
pap_filename.ext optional research paper files
-
I will use the following symbols
-
p - paper copy submitted
-
m - electronic copy emailed
-
l - late submission (paper or electronic)
-
n - did not submit
-
c - checked by the instructor
-
g - graded by the instructor
-
d - dropped the course
Mid-term project
-
Midterm project is to write a Jini service and client of your choice with
the following features. (I don't really care about the business logic
side of the service. So just use as simple service as you like, for
example, HelloWorld service or simple computation service.)
-
Objectives
-
Exercise all three programming model APIs (Leasing, Events, Transaction)
in Jini service and client programs
-
Tasks
-
The service should be RMI-based service. It can be either activatable
or non-activatable RMI-based service.
-
The service should provide some resource with leasing. The client
should renew the lease a couple of times. The service when the client
stops renewal of the lease, should expire the lease and re-claim the resource.
-
The client should get event notifications for some state change in the
service. The client has to register with the service its interest of getting
event notification. The service generates event notifications with
sequential event number. The client has to verify if the event received
is the one it has asked for. It also has to make sure if the event notifications
were received in sequential manner.
-
The client should perform a sequence of operations (2 or more) that
involves with multiple instances of either same or different Jini
services and these operations should be performed in transactional
manner. Please show the result of both commit and abort during the
sequence of operations.
-
Outcome expected
-
One-page description of the program along with a architectural diagram
-
Source code with key points clearly commented
-
Result for each aspect mentioned in the task section
Final-term project
-
Objectives
-
Add advanced features to the Jini service you've built for mid-term project.
-
Tasks
-
All Jini programming models (distributed events, leasing, transactions)
have to be utilized in building Jini service or client.
-
For event model, build one event adaptor that does some filtering.
The event adaptor has to be a remote object.
-
Build Jini service proxy object in "smart proxy" model as opposed
to "local" or "RMI-stub" models. (The smart proxy object supports
local methods and variables as well as remote methods.)
-
Add one service-specific administration interface, for example, "admin
interface" for changing leasing policy.
-
Add GUI as an attribute to the service. For example, the above admin
feature can be implemented as GUI for a human admin user.
-
Use "PersistentData" class provided in CoreJini Chapter 15 to persistently
maintain "service-specific" information such as service ID, attributes,
and so on..
-
Optionally, you can build your Jini service as an Activatable service.
-
Helpful reference code in Core Jini
-
Chapter 5 of Core Jini for "Smart proxy" model, from page 169
-
Chapter 14 of Core Jini for Admin and GUI
-
Chapter 15 of Core Jini for PersistentData class
-
Outcome expected (Please submit the project in
hard-copy only. That is, no email submission will be accepted for mid-term/final-term
project. I will collect them on April 25th class. )
-
One-page description of the program along with a architectural diagram
-
Source code with key points clearly marked
-
Result (screenshot) for each aspect mentioned in the task section
Optional term-paper guidelines
Direction
to Sun Burlington Campus
-
From Rt. 128 South
-
Take 3 North to then take next exit- Rt. 62 (exit # 26)
-
At end of ramp, turn right.
-
At second set of traffic lights, turn right onto Network Drive and
and you will see an entrance to Sun Microsystems on your right. Enter
into the premise of Sun Microsystems by taking a right turn.
-
Once getting into Sun premise, follow VISITOR PARKING SIGNS. (Visitor parking
is beside the clock tower. And the lobby is in the building just across
the clock tower.)
-
Park your car in visitor parking signs and get into the lobby.
-
From the Massachusetts Turnpike and points West:
-
Take Mass Pike/Rt. 90 East to 128 North/95 North.
-
Follow 128 North to Rt 3 North
-
Take 3 North to next exit- Rt. 62
-
Continue directions from above
-
From points North (Rt 3):
-
Take Rt 3 South to exit for Rt 62 (exit # 26)
-
At the end of ramp, at the light, turn left
-
At third set of traffic lights, turn right onto Network Drive and
follow VISITOR PARKING SIGNS
Jini Resources on
the Web
Jini, RMI, and JavaSpaces
news group
Jini Tutorial Sites
Development Tools
Jini Trouble Shooting and Tips
Commercial/ISVs:
* Benetech (www.benetech.org)
* Freddie Mac, Financial Engineering Group (www.freddiemac.com)
* GigaSpaces (www.gigaspaces.com)
* IntaMission (www.intamission.com)
* Karora Technologies (www.karora.com)
* Motorola Labs (www.motorola.com)
* Procoma (www.procoma.de)
* PsiNaptic (www.psinaptic.com)
* Sun Microsystems (www.sun.com/jini)
* TripWire (www.tripwire.com)
* Valaran (www.valaran.com)
Community Projects:
* Cyberspace (developer.jini.org/exchange/projects/cyberspace)
* Clusters (developer.jini.org/exchange/projects/clusters)
* Davis (developer.jini.org/exchange/projects/davis)
* IST Project SoNG (song.blaxxun.de)
* NetBeans (jini.netbeans.org)
* OutOfBox (developer.jini.org/exchange/projects/outofbox)
* Rio (developer.jini.org/exchange/projects/rio)
* ServiceUI (developer.jini.org/exchange/projects/serviceui)
* Surrogate (developer.jini.org/exchange/projects/surrogate)
Authors & Publishers
* W. Keith Edwards (Core Jini, Jini Example by Example)
* Hinkmond Wong (Developing Jini Applications Using J2ME)
* Iain Shigeoka (Enterprise Jini - not yet in print)
* Jim Waldo and the Jini Team, edited by Ken Arnold (The
Jini Specifications)
* Addison Wesley Longman (www.aw.com)
* Prentice Hall (www.prenticehall.com)
* Manning Publishing (www.manning.com)
* SAMS Publishing (www.samspublishing.com)
Cool Jini
Applications