Topic: 寻找学习jini的朋友

  Print this page

1.寻找学习jini的朋友 Copy to clipboard
Posted by: h_q_x
Posted on: 2003-03-23 15:50

一个人在学,觉得吃力。
希望有人可以讨论些问题。
谢谢!
email: huahua1118@21cn.com

2.Re:寻找学习jini的朋友 [Re: h_q_x] Copy to clipboard
Posted by: bluntsword
Posted on: 2003-03-23 18:13

确实很吃力,我也是。我甚至找不到一个很好的入门点。

3.my question...... [Re: h_q_x] Copy to clipboard
Posted by: h_q_x
Posted on: 2003-03-23 18:33

很高兴有点回应。

我是自己试着改些例子,基本按照http://www.plurb.com/misc/jini/index.html的最低要求做。

做到远程事件的时候就堵住了。走不下去。我做的事件产生器的注册在那个lookup browser里面看得到,在client查找的时候就是找不到,而我用的template是匹配全部的那种,别的(除了事件产生器)是找的到的。我觉得可能更rmi那套东东有关系。但我一时又看不清楚。着急!

烦死我了。今天什么都没做,就在找有没有可以交流的地方。

请问你进展如何?对事件这块了解吗?

4.Re:寻找学习jini的朋友 [Re: h_q_x] Copy to clipboard
Posted by: SimonLei
Posted on: 2003-03-23 22:09

//hand 我从jini1.0跟踪到现在,没碰到几个同行。

你的问题,我估计出在 codebase 上。
jini1.0到1.1到现在的1.2,变化不小, 所以以前的jini的书,
帮助不是很大,只能看文档。Sad

网站的话,我推荐一些:

http://www.jini.org
http://www.artima.com/jini/index.html
http://www.ecs.soton.ac.uk/~ra00r/jinidemia/projects.html

5.Re:寻找学习jini的朋友 [Re: SimonLei] Copy to clipboard
Posted by: h_q_x
Posted on: 2003-03-25 18:13

谢谢。
我对codebase是有些不清楚,当然不仅是codebase的问题。
细致一点说,烦请看看有几行代码这样写
注册时会出问题么?还有service-dl下面要放什么呢?
~~~
(因为还没有涉及到产生事件的部分,为了突出重点就省去了,
如果需要我再加。是改的corejini的程序)
还有,我不明白在lookup注册哪里用到了rmi而需要扩展Remote?register的方法不是通过rmi调用的吧。
问题比较弱,不好意思。
interface EventGen extends Remote{
public EventRegistration register(RemoteEventListener listener,
long leaseLength)
throws RemoteException;
}

public class HelloWorldService extends UnicastRemoteObject implements EventGen,Runnable {
......
// Inner class to listen for discovery events
class Listener implements DiscoveryListener {

// Called when we find a new lookup service.
public void discovered(DiscoveryEvent ev) {
System.out.println("discovered a lookup service!");
ServiceRegistrar[] newregs = ev.getRegistrars();
for (int i=0 ; i<newregs.length ; i++) {
if (!registrations.containsKey(newregs[i])) {
registerWithLookup(newregs[i]);//*******
}
}
}

public void discarded(DiscoveryEvent ev) {
......
}
}
......
public HelloWorldService() throws IOException {
System.out.println("is the super performed, strange ?");

item = new ServiceItem(null, this, null);//**************
//主要就是这里用this行不行啊??用EventGen匹配为什么找不到??

......
// Install a listener.
disco.addDiscoveryListener(new Listener());
}
......
synchronized void registerWithLookup(ServiceRegistrar
registrar) {
ServiceRegistration registration = null;

try {
registration = registrar.register(item, LEASE_TIME);//******

} catch (RemoteException ex) {
System.out.println("Couldn't register: " + ex.getMessage());
return;
} catch (Exception ex){
System.out.println("Couldn't register: " + ex.getMessage());
return;

}

if (item.serviceID == null) {
item.serviceID = registration.getServiceID();
System.out.println("Set serviceID to " + item.serviceID);
}
System.out.println("serviceID is set to " + item.serviceID);

registrations.put(registrar, registration);
}
......
//here is the method for EVENT GEN to register
public synchronized EventRegistration register(
RemoteEventListener listener,
long leaseLength){
EventRegistration evtreg = new EventRegistration(1L,this,null,0);
//这里用this有没有问题呢?
listenerList.add(RemoteEventListener.class, listener);
return evtreg;

}
......
}

6.Re:寻找学习jini的朋友 [Re: h_q_x] Copy to clipboard
Posted by: SimonLei
Posted on: 2003-03-25 19:03

core jini 太老了, 它是为Jini1.0所写的,到Jini1.1/1.2已经变化很大了,更不用说2.0beta了。 不过我也是因为这本书才喜欢上JINI的,呵呵。

你那些地方用 this没有问题, 虽然一般来说, proxy 要和真正的实现分开比较合理。

至于能否注册上,我看了这些代码也不敢明确的说。因为Jini本身的配置也不是一件很简单的事情。不过我是把所有-dl.jar 文件都放在download目录下,因为基本上这些服务都会用到,呵呵。

要不你把你的源码以附件形式贴一下,我看看。

7.怎么“源码以附件形式贴”? [Re: SimonLei] Copy to clipboard
Posted by: h_q_x
Posted on: 2003-03-25 21:23

我的代码乱七八糟的,而且东拼西凑,
因为了解jini的时间不长,中间的租约和manager那些类都看,
急于求成,就单独把事件这块拿出来跑跑看。
想想还是解释一下,虽然免不了一笑大方。
名字改了一点,重做了一个。
那个proxy的建议我觉得楼上的高手说的很有道理,不是我不想,是我还不会,这个程序是我照着corejini里面事件部分画出来的,那个东西就用的this。
我只在把那个东西精简成一个单纯一点的事件也没做好 。:-s
附件怎么用也不知道,先把整个贴上来吧。
真得很惭愧......有些地方还没来得及改好,因为是想走一步算一步的
但是编译通过了。
贴在下一贴里。

8.见笑了 [Re: h_q_x] Copy to clipboard
Posted by: h_q_x
Posted on: 2003-03-25 21:28

package corejini.chapter5;

import net.jini.discovery.DiscoveryListener;
import net.jini.discovery.DiscoveryEvent;
import net.jini.discovery.LookupDiscovery;
import net.jini.core.lookup.ServiceItem;
import net.jini.core.lookup.ServiceRegistrar;
import net.jini.core.lookup.ServiceRegistration;
import net.jini.core.entry.Entry;
import net.jini.lookup.entry.*;
import net.jini.core.event.*;

import java.util.HashMap;
import java.io.IOException;
import java.io.Serializable;
import java.rmi.RemoteException;
import java.rmi.Remote;
import java.rmi.RMISecurityManager;
import java.rmi.MarshalledObject;
import java.rmi.server.UnicastRemoteObject;
import javax.swing.event.EventListenerList;

// This is the proxy object that will be downloaded
// by clients. It's serializable and implements
// our well-known HelloWorldServiceInterface.

////////////////add here for EVENT GENERATOR!!!
interface EventGena extends Remote{
public EventRegistration register(RemoteEventListener listener,
long leaseLength)
throws RemoteException;
}

// HelloWorldService is the "wrapper" class that
// handles publishing the service item.
public class HelloWorldServicea extends UnicastRemoteObject implements EventGena,Runnable {
// 10 minute leases
protected final int LEASE_TIME = 1000 * 60 * 1000;
protected HashMap registrations = new HashMap();
protected ServiceItem item;
protected LookupDiscovery disco;

//here r the variants for the EVENT GEN
protected long lastEventSeqNo = 0;
EventListenerList listenerList = new EventListenerList();

// Inner class to listen for discovery events
class Listener implements DiscoveryListener {
// Called when we find a new lookup service.
public void discovered(DiscoveryEvent ev) {
System.out.println("discovered a lookup service!");
ServiceRegistrar[] newregs = ev.getRegistrars();
for (int i=0 ; i<newregs.length ; i++) {
if (!registrations.containsKey(newregs[i])) {
registerWithLookup(newregs[i]);
}
}
}

// Called ONLY when we explicitly discard a
// lookup service, not "automatically" when a
// lookup service goes down. Once discovered,
// there is NO ongoing communication with a
// lookup service.
public void discarded(DiscoveryEvent ev) {
ServiceRegistrar[] deadregs = ev.getRegistrars();
for (int i=0 ; i<deadregs.length ; i++) {
registrations.remove(deadregs[i]);
}
}
}

public HelloWorldServicea() throws IOException {
item = new ServiceItem(null, this
, null);

// Set a security manager
if (System.getSecurityManager() == null) {
System.setSecurityManager(new RMISecurityManager());
}

// Search for the "public" group, which by
// convention is named by the empty string
disco = new LookupDiscovery(new String[] { "" });

// Install a listener.
disco.addDiscoveryListener(new Listener());
}

// This work involves remote calls, and may take a
// while to complete. Thus, since it's called from
// discovered(), it will prevent us from responding
// in a timely fashion to new discovery events. An
// improvement would be to spin off a separate short-
// lived thread to do the work.
synchronized void registerWithLookup(ServiceRegistrar
registrar) {
ServiceRegistration registration = null;
System.out.println("enter lookup register...");
try {
registration = registrar.register(item, LEASE_TIME);
} catch (RemoteException ex) {
System.out.println("Couldn't register: " + ex.getMessage());
return;
} catch (Exception ex){
System.out.println("Couldn't register: " + ex.getMessage());
return;

}

// If this is our first registration, use the
// service ID returned to us. Ideally, we should
// save this ID so that it can be used after
// restarts of the service
if (item.serviceID == null) {
item.serviceID = registration.getServiceID();
System.out.println("Set serviceID to " + item.serviceID);
}
System.out.println("serviceID is set to " + item.serviceID);

registrations.put(registrar, registration);
}

//here is the method for EVENT GEN
public synchronized EventRegistration register(
RemoteEventListener listener,
long leaseLength){
EventRegistration evtreg = new EventRegistration(1L,this,null,0);
listenerList.add(RemoteEventListener.class, listener);
return evtreg;
//
}

//here is the one to send those EVENT
protected void sendEvent(){

RemoteEvent remoteEvent = null;

// Guaranteed to return a non-null array
Object[] listeners = listenerList.getListenerList();

// Process the listeners last to first, notifying
// those that are interested in this event
for (int n = listeners.length - 2; n >= 0; n -= 2) {
if (listeners[n] == RemoteEventListener.class) {
   RemoteEventListener listener =
   (RemoteEventListener) listeners[n+1];
if (remoteEvent == null) {
remoteEvent = new RemoteEvent(this, 1L,
lastEventSeqNo++, null);
}
try {
   listener.notify(remoteEvent);
} catch(UnknownEventException e) {
   e.printStackTrace();
   } catch(java.rmi.RemoteException e) {
   e.printStackTrace();
   }
}
}

}

// This thread does nothing but sleep, but it
// makes sure the VM doesn't exit.
public void run() {
while (true) {
try {
Thread.sleep(1000000);
sendEvent();
} catch (InterruptedException ex) {
}
}
}

// Create a new HelloWorldService and start
// its thread.
public static void main(String args[]) {
try {
HelloWorldServicea hws =
new HelloWorldServicea();
new Thread(hws).start();
} catch (IOException ex) {
System.out.println("Couldn't create service: " +
ex.getMessage());
}
}
}

9.我不会粘了两次吧 [Re: h_q_x] Copy to clipboard
Posted by: h_q_x
Posted on: 2003-03-25 21:30

package corejini.chapter5;

import net.jini.discovery.DiscoveryListener;
import net.jini.discovery.DiscoveryEvent;
import net.jini.discovery.LookupDiscovery;
import net.jini.core.lookup.ServiceItem;
import net.jini.core.lookup.ServiceRegistrar;
import net.jini.core.lookup.ServiceRegistration;
import net.jini.core.entry.Entry;
import net.jini.lookup.entry.*;
import net.jini.core.event.*;

import java.util.HashMap;
import java.io.IOException;
import java.io.Serializable;
import java.rmi.RemoteException;
import java.rmi.Remote;
import java.rmi.RMISecurityManager;
import java.rmi.MarshalledObject;
import java.rmi.server.UnicastRemoteObject;
import javax.swing.event.EventListenerList;

// This is the proxy object that will be downloaded
// by clients. It's serializable and implements
// our well-known HelloWorldServiceInterface.

////////////////add here for EVENT GENERATOR!!!
interface EventGena extends Remote{
public EventRegistration register(RemoteEventListener listener,
long leaseLength)
throws RemoteException;
}

// HelloWorldService is the "wrapper" class that
// handles publishing the service item.
public class HelloWorldServicea extends UnicastRemoteObject implements EventGena,Runnable {
// 10 minute leases
protected final int LEASE_TIME = 1000 * 60 * 1000;
protected HashMap registrations = new HashMap();
protected ServiceItem item;
protected LookupDiscovery disco;

//here r the variants for the EVENT GEN
protected long lastEventSeqNo = 0;
EventListenerList listenerList = new EventListenerList();

// Inner class to listen for discovery events
class Listener implements DiscoveryListener {
// Called when we find a new lookup service.
public void discovered(DiscoveryEvent ev) {
System.out.println("discovered a lookup service!");
ServiceRegistrar[] newregs = ev.getRegistrars();
for (int i=0 ; i<newregs.length ; i++) {
if (!registrations.containsKey(newregs[i])) {
registerWithLookup(newregs[i]);
}
}
}

// Called ONLY when we explicitly discard a
// lookup service, not "automatically" when a
// lookup service goes down. Once discovered,
// there is NO ongoing communication with a
// lookup service.
public void discarded(DiscoveryEvent ev) {
ServiceRegistrar[] deadregs = ev.getRegistrars();
for (int i=0 ; i<deadregs.length ; i++) {
registrations.remove(deadregs[i]);
}
}
}

public HelloWorldServicea() throws IOException {
item = new ServiceItem(null, this
, null);

// Set a security manager
if (System.getSecurityManager() == null) {
System.setSecurityManager(new RMISecurityManager());
}

// Search for the "public" group, which by
// convention is named by the empty string
disco = new LookupDiscovery(new String[] { "" });

// Install a listener.
disco.addDiscoveryListener(new Listener());
}

// This work involves remote calls, and may take a
// while to complete. Thus, since it's called from
// discovered(), it will prevent us from responding
// in a timely fashion to new discovery events. An
// improvement would be to spin off a separate short-
// lived thread to do the work.
synchronized void registerWithLookup(ServiceRegistrar
registrar) {
ServiceRegistration registration = null;
System.out.println("enter lookup register...");
try {
registration = registrar.register(item, LEASE_TIME);
} catch (RemoteException ex) {
System.out.println("Couldn't register: " + ex.getMessage());
return;
} catch (Exception ex){
System.out.println("Couldn't register: " + ex.getMessage());
return;

}

// If this is our first registration, use the
// service ID returned to us. Ideally, we should
// save this ID so that it can be used after
// restarts of the service
if (item.serviceID == null) {
item.serviceID = registration.getServiceID();
System.out.println("Set serviceID to " + item.serviceID);
}
System.out.println("serviceID is set to " + item.serviceID);

registrations.put(registrar, registration);
}

//here is the method for EVENT GEN
public synchronized EventRegistration register(
RemoteEventListener listener,
long leaseLength){
EventRegistration evtreg = new EventRegistration(1L,this,null,0);
listenerList.add(RemoteEventListener.class, listener);
return evtreg;
//
}

//here is the one to send those EVENT
protected void sendEvent(){

RemoteEvent remoteEvent = null;

// Guaranteed to return a non-null array
Object[] listeners = listenerList.getListenerList();

// Process the listeners last to first, notifying
// those that are interested in this event
for (int n = listeners.length - 2; n >= 0; n -= 2) {
if (listeners[n] == RemoteEventListener.class) {
   RemoteEventListener listener =
   (RemoteEventListener) listeners[n+1];
if (remoteEvent == null) {
remoteEvent = new RemoteEvent(this, 1L,
lastEventSeqNo++, null);
}
try {
   listener.notify(remoteEvent);
} catch(UnknownEventException e) {
   e.printStackTrace();
   } catch(java.rmi.RemoteException e) {
   e.printStackTrace();
   }
}
}

}

// This thread does nothing but sleep, but it
// makes sure the VM doesn't exit.
public void run() {
while (true) {
try {
Thread.sleep(1000000);
sendEvent();
} catch (InterruptedException ex) {
}
}
}

// Create a new HelloWorldService and start
// its thread.
public static void main(String args[]) {
try {
HelloWorldServicea hws =
new HelloWorldServicea();
new Thread(hws).start();
} catch (IOException ex) {
System.out.println("Couldn't create service: " +
ex.getMessage());
}
}
}

10.Re:怎么“源码以附件形式贴”? [Re: h_q_x] Copy to clipboard
Posted by: SimonLei
Posted on: 2003-03-26 09:02

没关系的,刚开始学Jini的时候,我也和你一样碰到了
不少问题。到现在我都还有很多问题没有闹清楚。 Embaressed
所以高手二字不敢当。 以附件形式,就是你在发表文章的时候,
可以选择一个文件当做附件发表。不过没关系,我看看你的代码吧。

11.Re:寻找学习jini的朋友 [Re: h_q_x] Copy to clipboard
Posted by: SimonLei
Posted on: 2003-03-26 09:46

你的代码只看见注册服务,没看见注册事件啊。

12.Re:怎么“源码以附件形式贴”? [Re: SimonLei] Copy to clipboard
Posted by: bluntsword
Posted on: 2003-03-26 14:26

SimonLei wrote:
没关系的,刚开始学Jini的时候,我也和你一样碰到了
不少问题。到现在我都还有很多问题没有闹清楚。 Embaressed
所以高手二字不敢当。 以附件形式,就是你在发表文章的时候,
可以选择一个文件当做附件发表。不过没关系,我看看你的代码吧。


现在有什么比较好的Jini入门资料么?

13.Re:怎么“源码以附件形式贴”? [Re: bluntsword] Copy to clipboard
Posted by: SimonLei
Posted on: 2003-03-26 14:44

http://pandonia.canberra.edu.au/java/jini/tutorial/Jini.xml

不过这个也只是for 1.1 的
更新的比较少。 Sad

14.注册事件? [Re: SimonLei] Copy to clipboard
Posted by: h_q_x
Posted on: 2003-03-27 17:06

首先,谢谢SimonLei。虽然这里不是一个表示感动的场所。你一直非常热心的关注着我的烂问题。而我说实话本来是个很浮躁的人,现在又为其他一些事忙着,没太多时间专注的学习这个东西。但是你无形中给了我很多鼓励。谢谢。

另外,我不明白怎么叫“注册事件”?还要把事件在lookup中注册吗?我以为的过程是:
client在找到lookup service后,顺着可以找到HelloWorldServicea的stub,调用上面的register函数,register...执行中,service端的listenerList增加了,这样在sendevent时候,扫描listenerList中的listener被notify,也就使client被告知了。
不知道是不是这样。
我把client的代码贴一下吧。

15.Re:寻找学习jini的朋友 [Re: h_q_x] Copy to clipboard
Posted by: SimonLei
Posted on: 2003-03-27 18:15

不要客气。我现在也比较忙,所以渐渐没空去跟踪Jini新的东西了。Sad 所以希望能有个朋友也关心这个领域,时不时的互相交流一下。呵呵。

我试了一下你的client,没有仔细看,不过运行没问题,也能找到HelloWorldServicea,输出结果如下:

lookup the template of anytype
Reg knows about com.sun.jini.reggie.RegistrarProxy@3d9c4084 with id 32f19763-d4ce-418f-b9bd-fede621e68b6
pay attention please : class net.jini.core.lookup.ServiceItem
Reg knows about techtry.HelloWorldServicea_Stub[RemoteStub [ref: [endpoint:[61.149.87.53:4075](remote),objID:[124bbbf:f42ee8088f:-8000, 0]]]] with id e2fd8197-dc95-4bba-ba28-ff26a65f8f49
pay attention please : class net.jini.core.lookup.ServiceItem
Reg knows about com.sun.jini.mahalo.TxnManagerImpl_Stub[RemoteStub [ref: sun.rmi.server.UnicastRef2@29ab3e]] with id 68daa79b-4ae0-4de2-a3f5-e879b8eced14
pay attention please : class net.jini.core.lookup.ServiceItem
Reg knows about com.sun.jini.fiddler.FiddlerProxy@3c6e8be5 with id 033cb937-f0c7-401c-af8b-917aa310721e
pay attention please : class net.jini.core.lookup.ServiceItem
Reg knows about com.sun.jini.norm.NormServerImpl_Stub[RemoteStub [ref: sun.rmi.server.UnicastRef2@1a99561]] with id 981d8c49-3b68-47ba-b464-cb5aaa88509c
pay attention please : class net.jini.core.lookup.ServiceItem
Reg knows about com.sun.jini.outrigger.SpaceProxy@c1fd7dc with id 83cfc3f8-3289-48fc-9a46-bfacc014f106
pay attention please : class net.jini.core.lookup.ServiceItem
Reg knows about com.sun.jini.mercury.MailboxProxy@2b512d82 with id b349b2cb-396f-4f5b-96d1-936f9b82f90c
pay attention please : class net.jini.core.lookup.ServiceItem
not found however...

16.Re:寻找学习jini的朋友 [Re: h_q_x] Copy to clipboard
Posted by: 房客
Posted on: 2003-03-29 22:43

我也学习过一些时间
个人感觉:这类技术在于思想——直接表现在设计——可以以图形化来描述——最后才是出现代码的组合
请板之

17.Re:寻找学习jini的朋友 [Re: h_q_x] Copy to clipboard
Posted by: 房客
Posted on: 2003-03-29 23:00

http://www.kedwards.com/jini/

Jini Links
Here are some useful pointers to other Jini sites. I hope you find them helpful. Many of these are cited in the book.
Essentials

http://www.jini.org

This is the home of the Jini Community, and should definitely be in your hotlist if you're a Jini developer.

http://www.javasoft.com/jini/

This is the main JavaSoft page on Jini--information on licensing, white papers, etc.

http://developer.java.sun.com/developer/products/jini/

The place to go for Jini downloads. Click the "product offerings" link to see what's available.

http://archives.java.sun.com/archives/jini-users.html

This site contains full archives of the JINI-USERS mailing list.

Interesting Reading

http://java.sun.com/people/jag/green/index.html

James Gosling's web page. Great reading on the history of Java, complete with a picture of the Star-7 device!

http://ubiq.com/hypertext/weiser/UbiHome.html

This is Mark Weiser's page on his vision of ubiquitous computing. The Scientific American article is the seminal paper on UbiComp.

http://www.nytimes.com/library/tech/98/07/biztech/articles/15sun.html

This is the article that broke the story on Jini. This site requires registration, but it's free.

http://wired.com/news/technology/story/13744.html

After the Times got hold of the Jini story, Wired was quick to follow suit. Here's the article.

http://www.sunlabs.com/technical-reports/1994/abstract-29.html
This paper predates Jini by a number of years, but clearly sets forth the vision of distributed computing that key members of the Jini team espoused. Great reading.

http://jini.pagina.nl
Big collection of Jini links, including well-known Jini sites, news articles, etc.
Supporting Material/Related Topics

http://java.sun.com/beans/docs/goodbean.pdf

A good, brief overview of what JavaBeans is and how to write beans.
http://java.sun.com/docs/books/tutorial/javabeans/

A more in-depth track from the Java online tutorial on JavaBeans. This site may be useful if you're getting started with Jini's EntryBeans.
http://www.kedwards.com/jini/draft-leach-uuids-guids-01.txt

This is the IETF draft on universally unique IDs, which is the basis for Jini's service ID scheme.
http://www.cs.yale.edu/HTML/YALE/CS/Linda/linda.html

The home page for the Linda project at Yale, which is the precursor to JavaSpaces.
http://www.gigaspaces.com

A commercial implementation of the JavaSpaces technology.
http://www.almaden.ibm.com/cs/TSpaces/index.html

T-Spaces is an IBM research project that is another Linda-derived tuplespace system.
http://www.javasoft.com/products/jdk/1.2/docs/guide/security/permissions.html

A quick guide to using Java 2 security permissions.
http://www.javasoft.com/products/jdk/1.2/docs/guide/security/PolicyFiles.html

A tutorial for writing and using security policy files. If you want to break the habit of using simple "all permissions" policy files, this is a good starting point.
http://www.javasoft.com/products/jdk/1.2/docs/guide/rmi/index.html

The home page for RMI. Lots of good resources here.
http://www.javasoft.com/products/jdk/1.2/docs/guide/serialization/index.html

All you need to know about Java object serialization.
http://www.javasoft.com/products/jdk/1.2/docs/guide/rmi/faq.html

The Frequently Asked Questions list about RMI. This page is a good resource when you run into RMI trouble.
Pages with Examples and Tutorials

http://www.artima.com/jini/index.html

Bill Venners' excellent site with his Jiniology articles from JavaWorld, sample code, a tutorial, and more.
http://pandonia.canberra.edu.au/java/jini/tutorial/Jini.html

Jan Newmarch's Jini tutorial. This is a great, step-by-step way to get started with Jini.
http://www.cswl.com/whiteppr/tutorials/jini.html

Some starter examples covering discovery and lookup.
http://www.enete.com/download/# nuggets

Noel Enete's Nuggets examples are a well-used way to get started with Jini. IMHO, Jan Newmarch's tutorial (above) will carry you a quite a bit further, though.

18.Re:寻找学习jini的朋友 [Re: h_q_x] Copy to clipboard
Posted by: ccic134302
Posted on: 2003-05-09 10:50

有没有中文的jini资料?我是初学者能不能给出jini的开发环境,并使用的软件,谢谢

19.Re:寻找学习jini的朋友 [Re: ccic134302] Copy to clipboard
Posted by: sharedata
Posted on: 2003-05-27 13:47

算我一个!我的E-mail/MSN:ejbstart@hotmail.com

20.Re:寻找学习jini的朋友 [Re: h_q_x] Copy to clipboard
Posted by: lovepsf
Posted on: 2004-11-15 13:14

我也在学啊,请大家加我QQ啊QQ:342383957(标明J2SE)


   Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent
Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1
客服电话 18559299278    客服信箱 714923@qq.com    客服QQ 714923