1 / 58

Writing Controls Applications on Java TM

Writing Controls Applications on Java TM. An overview of the infrastructure for the user application development in Accelerator Controls Department. June 30, 2003 Andrey Petrov. Agenda. Application Framework Application Index Covered: Development of console user applications.

bunny
Download Presentation

Writing Controls Applications on Java TM

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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 isBeams-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 interfaces:JControlsFrame, 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 Interface[JControlsFrame]

  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 <frame … >  1. root element <menu id="…">  2. element description item1  3. sub-element IDs item2 item3 </menu> </frame>

  14. Inheritance of Interface Descriptors

  15. Interface Descriptor Example I <frame menuBarID="MenuBar" toolBarID="ToolBar" statusBarID="StatusBar" restoreSize="true" restoreLocation="true" visibleOnStartup="true"> <!-- code omitted --> </frame>

  16. <tool_bar id="ToolBar"> Cut Copy Paste </tool_bar> <item id="Cut" mnemonic="t" actionCommand= "CutAction" accelerator= "Ctrl+X" icon="…" enabled="false" /> Interface Descriptor Example II

  17. MyFrame.xml <tool_bar id="ToolBar"> !default Delete </tool_bar> JControlsFrame.xml <tool_bar id="ToolBar"> Cut Copy Paste </tool_bar> Interface Descriptor Example III

  18. Polymorphism <item id="Cut"mnemonic="t"actionCommand= "CutAction"accelerator= "Ctrl+X"icon="…"enabled="false" />

  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. 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 Predefined Actions

  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 < 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 <app_name>.properties,where app_name – name of the main class; property file must be placed in the same directory. application.title=Test Application application.version=0.1.2 application.author=Andrey Petrovdae.connect=1

  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.getProperties(); String s = p.getProperty( "foo" ); // "foo=new_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.heartbeat=0  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

More Related