📄 boot.java
字号:
/**
* JADE - Java Agent DEvelopment Framework is a framework to develop
* multi-agent systems in compliance with the FIPA specifications.
* Copyright (C) 2000 CSELT S.p.A.
*
* GNU Lesser General Public License
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation,
* version 2.1 of the License.
*
* This library 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*/
/** Tests:
* java jade.Boot (with/without rmiregistry started): run a main-container
* java jade.Boot -host pippo.cselt.it
* java jade.Boot -host fbellif.cselt.it
* java jade.Boot -host fbellif.cselt.it -port 1200
* java jade.Boot -help
* java jade.Boot -gui
**/
package jade;
//#ALL_EXCLUDE_FILE
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.io.File;
import java.io.PrintStream;
import java.util.Enumeration; // J2ME CLDC OK
import java.util.Vector; // J2ME CLDC OK
import jade.core.Runtime;
import jade.core.Profile;
//import jade.core.BootProfileImpl;
import jade.util.BasicProperties;
import jade.util.PropertiesException;
//import jade.security.SecurityFactory;
/**
* Boots <B><em>JADE</em></b> system, parsing command line arguments.
* @author Giovanni Rimassa - Universita' di Parma
* @author Dick Cowan - HP Labs
* @version $Date: 2006-01-12 13:21:47 +0100 (gio, 12 gen 2006) $ $Revision: 5847 $
*/
public class Boot {
/** separator between the agent name and the agent class */
private static final String NAME2CLASS_SEPARATOR = ":";
private BasicProperties properties = null;
private BootProfileImpl profile = null;
/**
* Main entry point for invocation.
* @param args The command line arguments. These use the form key:value
* or -key (shorthand for key:true).
*/
public static void main(String args[]) {
new Boot(args);
}
/**
* Constructor. Starts Jade with provided arguments.
* @param args The command line arguments. These use the form key:value
*/
public Boot(String[] args) {
try {
profile = new BootProfileImpl(prepareArgs(args)); // qui adesso gli passa anche dbconf
} catch (PropertiesException pe) {
System.out.println(pe);
System.exit(-1);
}
properties = profile.getArgProperties();
if (properties.getBooleanProperty(BootProfileImpl.DUMP_KEY, false)) {
listProperties(System.out);
}
if (properties.getBooleanProperty(BootProfileImpl.VERSION_KEY, false)) {
System.out.println(Runtime.getCopyrightNotice());
return;
}
if (properties.getBooleanProperty(BootProfileImpl.HELP_KEY, false)) {
usage(System.out);
return;
}
if (properties.getProperty(Profile.MAIN_HOST) == null) {
try {
properties.setProperty(Profile.MAIN_HOST, InetAddress.getLocalHost().getHostName());
} catch (UnknownHostException uhe) {
System.out.print("Unknown host exception in getLocalHost(): ");
System.out.println(" please use '-host' and/or '-port' options to setup JADE host and port");
System.exit(1);
}
}
if (properties.getBooleanProperty(BootProfileImpl.CONF_KEY, false)) {
new BootGUI(this);
if (properties.getBooleanProperty(BootProfileImpl.DUMP_KEY, false)) {
listProperties(System.out);
}
}
// --- initialize JVM-scoped Security Factory ---
// (the security settings contained into this profile
// will be used for all containers into this JVM in
// despite of settings into profile of other future containers)
//SecurityFactory sf = SecurityFactory.getSecurityFactory(profile);
try {
check();
// Exit the JVM when there are no more containers around
Runtime.instance().setCloseVM(true);
if (profile.getBooleanProperty(Profile.MAIN, true)) {
Runtime.instance().createMainContainer(profile);
}
else {
Runtime.instance().createAgentContainer(profile);
}
} catch (BootException be) {
System.err.println(be);
return;
}
}
/**
* Transform original style boot arguments to new form.
* <pre>
* In the following 'x' and 'y' denote arbitrary strings; 'n' an integer.
* Transformation Rules:
* Original New
* ------------------------------
* -host x host:x
* -owner x owner:x
* -name x name:x
* -port n port:n
* -mtp x mtp:x
* -aclcodec:x aclcodec:x
* -conf x import:x
* -conf -conf
* -container -container
* -gui -gui
* -version -version
* -v -version
* -help -help
* -h -help
* -nomtp -nomtp
* -nomobility -nomobility
* -y x y:x
* agent list agents:agent list
* </pre>
* If the arguments contain either import:x or agents:x
* we will assume that the arguments are already in the new
* format and leave them alone. For "import:" we test if
* what follows is a file name and in the event it isn't we
* assume that it was if there are any other "-x" options following.
* <p>
* You can't mix the old form with the new as this would make the
* distinction between foo:bar as meaning a property named foo with
* a value bar or an agent named foo implmented by class bar impossible.
* <p>
* @param args The command line arguments.
*/
protected String[] prepareArgs(String[] args) {
boolean printUsageInfo = false;
if ((args == null) || (args.length == 0)) {
// printUsageInfo = true;
} else {
boolean isNew = false;
boolean likely = false;
for (int i = 0; i < args.length; i++) {
if (args[i].startsWith("import:")) {
int j = args[i].indexOf(':');
isNew = ( (j < args[i].length()-1) && (isFileName(args[i].substring(j+1))) );
likely = !isNew; // in case malformed file name
} else
if (args[i].startsWith("agents:")) {
isNew = true;
} else
if (args[i].startsWith("-") && likely) {
isNew = true;
}
}
if (isNew) {
return args;
}
}
int n = 0;
boolean endCommand =
false; // true when there are no more options on the command line
Vector results = new Vector();
while ((n < args.length) &&!endCommand) {
String theArg = args[n];
if (theArg.equalsIgnoreCase("-conf")) {
if (++n == args.length) {
// no modifier
results.add(theArg);
} else {
// Use whatever is next as a candidate file name
String nextArg = args[n];
if (isFileName(nextArg)) {
// it was a file name
results.add("import:" + nextArg);
} else {
// its either an illformed file name or something else
results.add(theArg);
n--;
}
}
} else if (theArg.equalsIgnoreCase("-host")) {
if (++n == args.length) {
System.err.println("Missing host name ");
printUsageInfo = true;
} else {
results.add("host:" + args[n]);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -