1
// **********************************************************************
3
// Copyright (c) 2003-2010 ZeroC, Inc. All rights reserved.
5
// This copy of Ice is licensed to you under the terms described in the
6
// ICE_LICENSE file included in this distribution.
8
// **********************************************************************
12
import Ice.Communicator;
13
import Ice.InitializationData;
14
import Ice.LocalException;
16
import Ice.StringSeqHolder;
19
public abstract class Application
21
public final int WAIT = 2;
23
public interface ServerReadyListener
28
public interface CommunicatorListener
30
void communicatorInitialized(Communicator c);
39
// This main() must be called by the global main(). main()
40
// initializes the Communicator, calls run(), and destroys
41
// the Communicator upon return from run(). It thereby handles
42
// all exceptions properly, i.e., error messages are printed
43
// if exceptions propagate to main(), and the Communicator is
44
// always destroyed, regardless of exceptions.
47
main(String appName, String[] args)
49
Ice.StringSeqHolder argsH = new Ice.StringSeqHolder(args);
50
Ice.InitializationData initData = getInitData(argsH);
51
return main(appName, argsH.value, initData);
55
main(String appName, String[] args, InitializationData initializationData)
57
java.io.PrintWriter writer = getWriter();
58
if(_communicator != null)
60
writer.println(appName + ": only one instance of the Application class can be used");
67
// We parse the properties here to extract Ice.ProgramName.
69
StringSeqHolder argHolder = new StringSeqHolder(args);
70
if(initializationData == null)
72
initializationData = getInitData(argHolder);
75
InitializationData initData;
76
if(initializationData != null)
78
initData = (InitializationData)initializationData.clone();
82
initData = new InitializationData();
84
initData.properties = Util.createProperties(argHolder, initData.properties);
87
// If the process logger is the default logger, we replace it with a
88
// a logger which is using the program name for the prefix.
90
if(Util.getProcessLogger() instanceof LoggerI)
92
Util.setProcessLogger(new LoggerI(initData.properties.getProperty("Ice.ProgramName"), ""));
99
_communicator = Util.initialize(argHolder, initData);
100
if(_communicatorListener != null)
102
_communicatorListener.communicatorInitialized(_communicator);
104
status = run(argHolder.value);
111
_communicator.waitForShutdown();
115
catch(LocalException ex)
117
writer.println(_testName + ": " + ex);
118
ex.printStackTrace();
121
catch(java.lang.Exception ex)
123
writer.println(_testName + ": unknown exception");
124
ex.printStackTrace(writer);
127
catch(java.lang.Error err)
130
// We catch Error to avoid hangs in some non-fatal situations
132
writer.println(_testName + ": Java error");
133
err.printStackTrace(writer);
137
if(_communicator != null)
141
_communicator.destroy();
143
catch(LocalException ex)
145
writer.println(_testName + ": " + ex);
146
ex.printStackTrace(writer);
149
catch(java.lang.Exception ex)
151
writer.println(_testName + ": unknown exception");
152
ex.printStackTrace(writer);
155
_communicator = null;
164
if(_communicator != null)
166
_communicator.shutdown();
170
// Initialize a new communicator.
171
public Ice.Communicator initialize(InitializationData initData)
173
Ice.Communicator communicator = Util.initialize(initData);
174
if(_communicatorListener != null)
176
_communicatorListener.communicatorInitialized(communicator);
181
public abstract int run(String[] args);
183
// Hook to override the initialization data. This hook is
184
// necessary because some properties must be set prior to
185
// communicator initialization.
186
protected Ice.InitializationData getInitData(Ice.StringSeqHolder argsH)
191
public java.io.PrintWriter getWriter()
196
public void setWriter(java.io.Writer writer)
198
_printWriter = new java.io.PrintWriter(writer);
201
public void setServerReadyListener(ServerReadyListener cb)
206
public void setCommunicatorListener(CommunicatorListener listener)
208
_communicatorListener = listener;
211
public void serverReady()
220
// Return the application name, i.e., argv[0].
231
return _communicator;
234
private String _testName;
235
private Communicator _communicator;
236
private java.io.PrintWriter _printWriter = new java.io.PrintWriter(new java.io.OutputStreamWriter(System.out));
237
private ServerReadyListener _cb = null;
238
private CommunicatorListener _communicatorListener = null;