Replace JVx' standard Application with ProjX

Information about development with ProjX.

Replace JVx' standard Application with ProjX

Postby Development@SIB » Sat Dec 05, 2015 1:31 pm

If you have an application based on JVx' standard Application frame, it's very easy to use ProjX. The standard application doesn't contain a work-screen manager, automatic menu/toolbar creation and automatic logon. This missing features and much more are part of our ProjX application frame. It's a simple RemoteWorkScreen application (defined by JVx). The JVx' standard Application frame is a RemoteApplication without work-screen management. The RemoteWorkScreenApplication extends RemoteApplication and adds work-screen support.

Simply do following:

  • Add projx.jar and appsclient.jar to libs/client
  • Add appserver.jar to libs/server
  • Delete your custom Application class or extend com.sibvisions.apps.projx.ProjX
  • Change your launcher (run configuration) if you don't need a custom application and use com.sibvisions.apps.projx.ProjX as first argument (instead of your custom application)
  • Add an application.xml to your application package
  • Set value of Application.Login.application to your application name
  • Change your launcher (run configuration) and add the full qualified resource path of your application.xml as second argument

    The launcher should have two arguments, e.g.
    com.sibvisions.apps.projx.ProjX /com/company/shop/application.xml
  • (optional) Style your application:

    Application.Login.image (e.g. /com/company/shop/images/login.png),
    Application.Desktop.image (e.g. /com/company/shop/images/background.jpg),
    Application.Desktop.topimage (e.g. /com/company/shop/images/top-shadow.png), Application.Desktop.background (e.g. 255,255,255)
  • (optional) Configure autologin:

    Application.Login.username
    Application.Login.password
    (and be sure that Application.authenticator contains com.sibvisions.apps.auth.UserPwdAuthenticator)

After above steps, start the application. You'll see an Exception because the workScreenAccess object wasn't found! This object should be added to your Session LCO because it's responsible for the menu/toolbar configuration. The interface IWorkScreenAccess defines all relevant methods.

ProjX contains two implementations: DBWorkScreenAccess and MemWorkScreenAccess. The DBWorkScreenAccess needs some tables and views in order to work, so for a first test the MemWorkScreenAccess should be good enough. Use following snippet and add it to your Session.java

Syntax: [ Download ] [ Hide ]
public IWorkScreenAccess getWorkScreenAccess() throws Exception
{
    IWorkScreenAccess wsac = (IWorkScreenAccess)get("workScreenAccess");
   
    if (wsac == null)
    {
        MemWorkScreenAccess mwsac = new MemWorkScreenAccess();

        WorkScreenConfig woscManager= new WorkScreenConfig();
        woscManager.setClassName("com.company.shop.screens.ManagerWorkScreen");
        woscManager.setMenuStructure("Shop");
        woscManager.setText("Manager");
       
        mwsac.addScreen(woscManager);
       
        put("workScreenAccess", mwsac);

        return mwsac;
    }
   
    return wsac;               
}

Be sure that your Session class is configured as master session object in your config.xml:

Code: Select all
...

<lifecycle>
    <mastersession>com.company.shop.Session</mastersession>
</lifecycle>


The next important thing is that you extend your work-screens from DataSourceWorkScreen:

ManagerWorkScreen extends DataSourceWorkScreen

instead of

ManagerWorkScreen extends UIInternalFrame

Use following default constructor:

Syntax: [ Download ] [ Hide ]
public ManagerWorkScreen(RemoteWorkScreenApplication pApp,
                         AbstractConnection pConnection,
                         Map<String, Object> pParameter) throws Throwable
{
    super(pApp, pConnection);

    initializeModel();
    initializeUI();
}

Please remove the code from your screen which opens a new SubConnection or a RemoteDataSource. The connection will be opened automatically from ProjX (see constructor parameter pConnection) and the RemoteDataSource will be created from DataSourceWorkScreen. Simply call getDataSource() to get access.

The DataSourceWorkScreen removes the boiler-plate code from your screens and usually your screens don't take care of application specific problems like save/reload or open/close. It's possible to take care, but not necessary in most screens!

Start your application again and everything should work without problems. It's also possible to configure the welcome-screen for fast test iterations. To do this, set the parameter Application.WelcomeScreen in your application.xml.

The following ZIP archive contains templates.
Attachments
jvx_to_projx.zip
Template files
(100.79 KiB) Downloaded 12 times
User avatar
Development@SIB
 
Posts: 311
Joined: Mon Sep 28, 2009 1:54 pm

Return to Documentation