Title: Writing Controls Applications on JavaTM
1Writing Controls Applications on JavaTM
- An overview of the infrastructure for the user
application development in Accelerator Controls
Department.June 30, 2003Andrey Petrov
2Agenda
- Application Framework
- Application Index
- Covered Development of console user
applications. - Not covered Development of Open Access Clients,
servelts, and other server-side programs.
3I
4Application Framework Definition
- A library of reusable components for the
development of console user applications. - Reference guide is Beams-doc-688, or
http//www-bd.fnal.gov/controls/java/
framework/af-guide.pdf
5Application Framework Functions
- Interacts with Application Index services
(property repository, heartbeat service, central
logging, operation locks, etc.) - Provides a uniform application's look-and-feel
(for swing applications) - Implements some common functions (printing, image
capture, DAE connection, message window, etc.).
6Classpath
- framework.jar (gov.jar is not enough), or
- framework-lite.jar (without swing)
- mail.jar
- activation.jar
- jhall.jar
- jlfgr-1_0.har
- govcore.jar
- jconn2.jar
af_bunch.jar
for DAE connection
7Core Application Framework Classes
- ApplicationManager implements most of the
functions, not related to GUI - DaeSupport serves the DAE connection
- Implementations of user interfacesJControlsFram
e, JSimpleControlsFrame, JControlsDialog0, 1, 2.
8Application Manager
- Singleton
- All public methods are static
- Must be initialized at the application startup
- public static void main( String args )
ApplicationManager.init( args ) / rest of the
code /
9Frame Dialog Hierarchy
10Graphical User InterfaceJControlsFrame
11JControlsFrame Features
- Dynamic GUI generation from the interface
descriptors (text files) - Persistent frame size and location
- Predefined actions
- A "smart" default close operation
- 1st frame EXIT_ON_CLOSE,
- others DISPOSE_ON_CLOSE
- Splash screen for the first frame.
12Interface Descriptor
- An XML file, that describes the appearance of the
whole frame, menu bar, toolbar, and status bar - Has the same name, as the corresponding frame
(with .xml extension), and must be placed in the
same directory - Supports inheritance
- Three logical levels.
13Interface DescriptorStructure
- ltframe gt ? 1. root element
- ltmenu id""gt ? 2. element description
- item1 ? 3. sub-element IDs
item2 item3 - lt/menugt
- lt/framegt
14Inheritance of Interface Descriptors
15Interface Descriptor Example I
- ltframe menuBarID"MenuBar"
toolBarID"ToolBar" statusBarID"StatusBar"
restoreSize"true" restoreLocation"true"
visibleOnStartup"true"gt - lt!-- code omitted --gt
- lt/framegt
16Interface Descriptor Example II
- lttool_bar id"ToolBar"gt
- Cut Copy Paste
- lt/tool_bargt
- ltitem id"Cut" mnemonic"t"
actionCommand "CutAction" accelerator
"CtrlX" icon"" enabled"false" - /gt
17Interface Descriptor Example III
- MyFrame.xml
- lttool_bar id"ToolBar"gt
- !default Delete
- lt/tool_bargt
- JControlsFrame.xml
- lttool_bar id"ToolBar"gt
- Cut Copy Paste
- lt/tool_bargt
18Polymorphism
- ltitem id"Cut"mnemonic"t"actionCommand
"CutAction"accelerator "CtrlX"icon""enabl
ed"false" - /gt
19Getting GUI Components
- ControlsWidget w getWidget( "Cut" )
- w.setEnabled( true )w.setSelected( false )
// radio buttonsw.setText( "Any Key" ) - Object objs w.getComponents()
20Handling Events
- Action a new AbstractAction() public void
actionPerformed( ActionEvent e )
System.out.println( "!!!" ) - getActionMap().put( "CutAction", a )
21Predefined Actions
- Export To File
- Send Mail
- Post E-log Message
- Print
- Page Setup
- Cut
- Copy
- Copy Special
- Paste
- Select All
- DAE Connection
- Message Viewer
- Application Properties
- Logging
- Help Topics
- About
- Exit
22Custom Frame Initialization
- jbInit method is used for the custom
initialization of the frame (e.g., placing
elements on the content pane). - jbInit should not be called explicitly (this is
a duty of JControlsFrame) - The local variables are not initialized when
jbInit is invoked see documentation
23"Hidden" Functions ofApplication Framework
- Access to the property repository
- Self-determination service (application finds
itself in the Application Index database) - Heartbeat service (application notifies
Application Index, that it is running) - Operation locks
- Central logging.
24Application Properties
- Named string values, used for program
configuration and keeping of persistent data - Properties are stored in local files and on the
server - Name and value lt 256 chars both.
25Property Sources
- Global framework configuration file(the user can
not change it) - Application property file(optional, created by
the user) - Property repository on the server(user may have
write access). - Loading order 1 ? 2 ? 3.
26Application Property File
- ltapp_namegt.properties,where app_name name of
the main class property file must be placed in
the same directory. - application.titleTest Application
application.version0.1.2 application.authorAndr
ey Petrovdae.connect1
27Property Repository
- http//www-bd.fnal.gov/appix/select/props
- Used to manage properties online and store data
changed in running applications (e.g., user
e-mail). - Properties can be user-specific and
application-specific. - Properties, changed in running applications, are
always user-specific.
28Using Properties In Application
- Properties p ApplicationManager.getPropertie
s() - String s p.getProperty( "foo" )
- // "foonew_value" will be stored// on the
serverp.setProperty( "foo", "new_value" )
29Self-determination Service
- Determines the application's main class and type
of the launcher (standalone, web-startable,
etc.) - Search for the application's description in
Application Index database - ApplicationManager.getAppDescriptor()
30Heartbeat Service
- Notifies Application Index, that the application
is launched or terminated - Notifies Application Index, that the application
is running (every 6 minutes) application usage
history is available online. - Available only for the registered applications.
- framework.heartbeat0 ? disables
31Operation Lock Service
- Allows to set named locks in order to avoid the
concurrent execution of critical routines in
multiple instances of one application. - Locks are automatically released at the
application termination - Available only for the registered applications.
32Operation Lock Example
- try ApplicationManager.
setOperationLock( "foo" ) catch (Exception ex)
// The lock is already set - ApplicationManager. releaseOperationLock(
"foo" )
33Central Logging
- Instead of System.out.println( )
- Logging records are stored in a database on the
server side and available online - Automated purge (once a day), every application
may have an individual "storage time" for logging
records (default 1 day). - Available only for the registered applications.
34Logging API
- Logger log Logger.getLogger( "" )
- log.warning( "This is a warning" )
- try // some code catch (Exception ex)
log.log( Level.SEVERE, "Error", ex )
35Logging Configuration
- Custom handlers MessageViewerHandler,
AppixHandler - Configuration through application properties
(default values in property files) - Configuration at the runtime through GUI (stored
in the property repository).
36Logging Configuration Dialog
37DAE Connection
- DAE connection getting of DaqUser object
- For the console applications, DaqUser must be
obtained from Application Manager. - Then DaqUser is used to create DAQ jobs.
38DAE Connection Requirements
- Client machine must be inside the firewall
- Two libraries are required in the classpath
govcore.jar and jconn2.jar. - User, node, and application must have enough
privileges to do settings.
39DAE Connection GUI
40Getting DaqUser
- ApplicationManager.getDaqUser()
- Returns either DaqUser instance, or null
- Application (service) permissions are
automatically set in DaqUser - Do not cache DaqUser in the program!
41DaeConnectionListener
- public void daeStatusChange( short oldStatus,
short newStatus ) - public void settingsLockChange( boolean newVal
) - public void daeException( Exception exception
) - ApplicationManager.getDaeSupport().
addDaeConnectionListener( )
42Settings
- By default, settings are locked, except of the
Main Control Room users - Maximum unlock time is considered
- Settings may be unlocked from GUI.
- Do not unlock settings programmatically in
productional versions!
43DAE Connection Configuration
44DAE Security
- DAE uses a user/node pair for authorization
- If this pair is not found in DB, the Kerberos
authentication is requested - All users with valid user/node combination are
allowed to do readings - Users, nodes, and applications have settings
privileges and maximum unlock time
45DAE Security Example
46Security Service
- Will be ready soon
- Single Sign-On based on MIT Kerberos
- In most cases will use existing cached Kerberos
ticket (JAAS extension) - This ticket will be forwarded to the server
(servlets?), in order to present the client-side
user (GSS-API).
47II
- Application Index
- (APPiX)
48Application Index Funtions
- Keeps all information on applications in the
database - Provides GUI for editing and monitoring of
application data - Provides data for the running applications
through web-services.
49APPiX Architecture
50Representation Of An Application In Database
51Application Index GUI
- Main page http//www-bd.fnal.gov/appix
- An applet-based application launcher
- Standalone application launcher
- Read-only access for all (except of a small
restricted area) - Authentication required to modify data
- From outside Fermilab read-only access ever.
52(No Transcript)
53Launching An Application
- Web launcher (based on an applet), and Standalone
application browser (web-startable itself) - 7 program types, each has own launching
procedure - Web launcher does not support STDALONE type
54Program Types
55JWS-AUTO Programs
- A dynamic generation of JNLP file, basing on the
application record in the database. - User does not have to write and maintain JNLP
file. - JNLP generator is being kept up-to-date (to
resolve certain JRE bugs, etc.).
56Application Tree
- Top level machine name (B, C, F, )
- There may be several references to one
application - Each reference may have individual command line
arguments (STDALONE, JWS-AUTO).
57Information Needed To Register An Application
- Application Name
- Application description lt 256 chars
- Help URL, if any
- Responsible person
- Program type
- Main class (STDALONE, JWS-AUTO), or URL
- Required libraries (jars)
- Desired place in the application tree
58Q A
- Project URLhttp//www-bd.fnal.gov/appix
- All questionsapetrov_at_fnal.gov