📄 napletmonitorimpl.java~1~
字号:
/*
* @<#> NapletMonitorImpl.java version 0.1, 7/1.2001
*
* THIS PROGRAM IS FREE SOFTWARE; YOU CAN DISTRIBUTE IT AND/OR
* MODIFY IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE
* AS PUBLISHED BY THE FREE SOFTWARE FOUNDATION.
*
* THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL,
* BUT WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
* MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE
* GNU GENERAL PUBLIC LICENSE FOR MORE DETAILS.
*
* Copyright (c) 2000 Wayne State University. All Rights Reserved.
*/
package naplet.server;
import java.util.*;
import naplet.*;
/**
* The <code>NapletMonitorImpl</code> provides an implementation
* of the <code>NapletMonitor</code> interface. It relies on a
* <code>NapletThreadTable</code> to maintain the run-time information
* of the residing alien naplets.
*
* @see NapletMonitor
* @version 0.1, 7/1/2001
* @author C. Xu, czxu@wayne.edu
*/
public class NapletMonitorImpl
implements NapletMonitor, Runnable
{
private static int MAX_NAPLETTHREAD_PRI = 8;
private static NapletMonitorImpl instance = null;
private ServerProperty property;
private NapletThreadTable threadTable;
/** table for server socket */
private Hashtable nssTable = new Hashtable();
protected NapletMonitorImpl( ServerProperty property )
{
this.property = property;
threadTable = new NapletThreadTable();
}
public static NapletMonitorImpl getInstance( ServerProperty property )
{
if ( instance == null )
{
instance = new NapletMonitorImpl( property );
}
return instance;
}
public void join( Naplet nap )
{
ThreadGroup group = new ThreadGroup( nap.getNapletID().toString() );
group.setMaxPriority( MAX_NAPLETTHREAD_PRI );
NapletContext context = new NapletContext(
property.getServerURN(),
property.getNavigator(),
property.getMessenger(),
property.getResourceManager().getServiceProxy( nap.getNapletID() )
);
Thread thr = new Thread( group, new NapletThread( nap, context ) );
threadTable.put( nap.getNapletID(), thr );
/** record server here !!zhongxl:*/
String svr = nap.getServer();
String sid = nap.getServerID();
if ( ( svr != null ) && ( sid != null ) )
{
nssTable.put( sid, svr );
}
// System.out.println("thread table:"+threadTable+",nss:"+nssTable);
thr.start();
}
/**
* locate a server according to its naplet id.
* @param nid
* @return
*/
public String locate( NapletID nid )
{
return ( String ) nssTable.get( nid.toString() );
}
public void leave( NapletID nid )
{}
public void interrupt( NapletID nid )
{
Thread thr = threadTable.get( nid );
if ( thr != null )
{
thr.interrupt();
}
}
public void run()
{}
/**
* Create a naplet thread
*/
private class NapletThread
implements Runnable
{
Naplet naplet;
NapletContext context;
NapletThread( Naplet naplet, NapletContext context )
{
this.naplet = naplet;
this.context = context;
}
public void run()
{
naplet.init0( context );
naplet.init();
try
{
naplet.onStart();
}
catch ( InterruptedException ie )
{
naplet.onInterrupt();
}
}
}
/**
* The <code>NapletThreadTable</code> object contains
* a list of threads (thread group) associated with each
* alien naplet. NapletServer manages the threads based on
* this information.
*
* @version 0.0.1, 1/1/2001
* @author C. Xu
*
* @see NapletServer
*/
private class NapletThreadTable
{
private HashMap threadTable;
protected NapletThreadTable()
{
threadTable = new HashMap();
}
protected void put( NapletID nid, Thread thr )
{
String key = nid.toString();
threadTable.put( key, thr );
}
protected void remove( NapletID nid )
{
String key = nid.toString();
threadTable.remove( key );
}
protected Thread get( NapletID nid )
{
String key = nid.toString();
return ( Thread ) threadTable.get( key );
}
public String toString()
{
return threadTable.toString();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -