Writing Controls Applications on JavaTM - PowerPoint PPT Presentation

1 / 58
About This Presentation
Title:

Writing Controls Applications on JavaTM

Description:

Three logical levels. Interface Descriptor. Structure frame ... 1. root element ... custom initialization of the frame (e.g., placing elements on the content pane) ... – PowerPoint PPT presentation

Number of Views:27
Avg rating:3.0/5.0
Slides: 59
Provided by: andrey7
Category:

less

Transcript and Presenter's Notes

Title: Writing Controls Applications on JavaTM


1
Writing Controls Applications on JavaTM
  • An overview of the infrastructure for the user
    application development in Accelerator Controls
    Department.June 30, 2003Andrey Petrov

2
Agenda
  • Application Framework
  • Application Index
  • Covered Development of console user
    applications.
  • Not covered Development of Open Access Clients,
    servelts, and other server-side programs.

3
I
  • Application Framework

4
Application 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

5
Application 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.).

6
Classpath
  • 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
7
Core 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.

8
Application 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 /

9
Frame Dialog Hierarchy
10
Graphical User InterfaceJControlsFrame
11
JControlsFrame 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.

12
Interface 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.

13
Interface DescriptorStructure
  • ltframe gt ? 1. root element
  • ltmenu id""gt ? 2. element description
  • item1 ? 3. sub-element IDs
    item2 item3
  • lt/menugt
  • lt/framegt

14
Inheritance of Interface Descriptors
15
Interface Descriptor Example I
  • ltframe menuBarID"MenuBar"
    toolBarID"ToolBar" statusBarID"StatusBar"
    restoreSize"true" restoreLocation"true"
    visibleOnStartup"true"gt
  • lt!-- code omitted --gt
  • lt/framegt

16
Interface 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

17
Interface 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

18
Polymorphism
  • ltitem id"Cut"mnemonic"t"actionCommand
    "CutAction"accelerator "CtrlX"icon""enabl
    ed"false"
  • /gt

19
Getting GUI Components
  • ControlsWidget w getWidget( "Cut" )
  • w.setEnabled( true )w.setSelected( false )
    // radio buttonsw.setText( "Any Key" )
  • Object objs w.getComponents()

20
Handling Events
  • Action a new AbstractAction() public void
    actionPerformed( ActionEvent e )
    System.out.println( "!!!" )
  • getActionMap().put( "CutAction", a )

21
Predefined 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

22
Custom 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.

24
Application 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.

25
Property 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.

26
Application 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

27
Property 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.

28
Using 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" )

29
Self-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()

30
Heartbeat 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

31
Operation 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.

32
Operation Lock Example
  • try ApplicationManager.
    setOperationLock( "foo" ) catch (Exception ex)
    // The lock is already set
  • ApplicationManager. releaseOperationLock(
    "foo" )

33
Central 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.

34
Logging API
  • Logger log Logger.getLogger( "" )
  • log.warning( "This is a warning" )
  • try // some code catch (Exception ex)
    log.log( Level.SEVERE, "Error", ex )

35
Logging 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).

36
Logging Configuration Dialog
37
DAE 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.

38
DAE 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.

39
DAE Connection GUI
40
Getting DaqUser
  • ApplicationManager.getDaqUser()
  • Returns either DaqUser instance, or null
  • Application (service) permissions are
    automatically set in DaqUser
  • Do not cache DaqUser in the program!

41
DaeConnectionListener
  • public void daeStatusChange( short oldStatus,
    short newStatus )
  • public void settingsLockChange( boolean newVal
    )
  • public void daeException( Exception exception
    )
  • ApplicationManager.getDaeSupport().
    addDaeConnectionListener( )

42
Settings
  • 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!

43
DAE Connection Configuration
44
DAE 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

45
DAE Security Example
46
Security 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).

47
II
  • Application Index
  • (APPiX)

48
Application 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.

49
APPiX Architecture
50
Representation Of An Application In Database
51
Application 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)
53
Launching 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

54
Program Types
55
JWS-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.).

56
Application 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).

57
Information 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

58
Q A
  • Project URLhttp//www-bd.fnal.gov/appix
  • All questionsapetrov_at_fnal.gov
Write a Comment
User Comments (0)
About PowerShow.com