This website uses cookies for visitor traffic analysis. By using the website, you agree with storing the cookies on your computer.More information

Posts tagged: JVx

JVx in den Medien - Single Sourcing

In der aktuellen Ausgabe von Java Aktuell ist der Artikel Single Sourcing mit JVx enthalten. Darin wird anhand eines kurzen Beispiels erklärt, wie der Single Sourcing Mechanismus in JVx umgesetzt wurde. Die Beispiel Anwendung wird als Desktop Anwendung bzw. Web Anwendung gestartet, und das ohne auch nur eine Zeile Source Code zu verändern.

Der Artikel zum Nachlesen: Single Sourcing mit JVx, Java Aktuell Q1-2011

Das Magazin, Java Aktuell, erscheint vierteljährlich und wird vom Interessensverbund der Java User Groups e.V (iJUG) herausgegeben.

Javalobby interview

We talked with James Sugrue from Javalobby (dzone) about JVx. He had some questions about the framework and we talked with him about the next features.

Read the full interview.

Plat_Forms 2011 special releases

Because of the Plat_Forms competition, we released special versions of JVx, WebUI and OnlineHelp. All releases are available from our project page.

We implemented some amazing new features for JVx and WebUI.

Check out the changelogs for details.

Some tags:

  • Simple charting
  • Default layouts
  • Global metadata caching (server-side)
  • Modal frames in WebUI
  • Table handling in WebUI

JVx 0.9 beta-2 is available

It is available from the project page.

What’s New?

The complete list of changes can be found here.

  • Default Database (CoC)It is now possible to configure multiple db datasources via config.xml
    <?xml version="1.0" encoding="UTF-8"?>

    <application>
    <securitymanager>
    <class>com.sibvisions.rad.server.security.DBSecurityManager</class>
    </securitymanager>

    <datasource>
    <db name="default">
    <url>jdbc:oracle:thin:@localhost:1521:mydb</url>
    <username>user</username>
    <password>password</password>
    </db>
    </datasource>
    </application>

    If the DBSecurityManager does not define a specific datasource, the datasource with the name "default" is used.

  • Quoting in DBAccessDBAccess supports case sensitive database access. To enable the feature, call
    setQuoting(true);

    on your DBAccess instance.

  • Custom SessionManager and ObjectProviderIt was possible to use a custom ObjectProvider but it was not possible to extend the DefaultObjectProvider. Now this limit is gone. Additional it is now possible to use a custom SessionManager and extend the DefaultSessionManager.

    Configure the objects in your server config.xml like this:

    <server>
    <sessionmanager>com.sibvisions.AnotherSessionManager</sessionmanager>
    <objectprovider>com.sibvisions.AnotherObjectProvider</objectprovider>
    <server>
  • Server Side TriggersOur DataBooks now supports specific events like before insert or after delete. The server side storage did not have this events, so you had to overwrite the data manipulation methods to call your business logic or to change the default behaviour. That was not very cool.

    We have implemented a very powerful feature, with which you have full control of your data sent to the data tier. Do you know database triggers?
    Now you have the same power in your storages.

    A short example:

    public void getUsers()
    {
    DBStorage dbsUsers = new DBStorage();
    dbsUsers.setDBAccess(getDBAccess());
    dbsUsers.setFromClause("V_USER_USERS");
    dbsUsers.setWritebackTable("USERS");
    dbsUsers.open();

    dbsUsers.eventBeforeInsert().addListener(this, "doEncryptPwd");
    dbsUsers.eventBeforeUpdate().addListener(this, "doEncryptPwd");
    }

    public void doEncryptPwd(StorageEvent pEvent)
    {
    IBean bn = pEvent.getNew();

    bn.put("PASSWORD", AbstractSecurityManager.getEncryptedPassword(
    SessionContext.getCurrentSessionConfig(),
    (String)bn.get("PASSWORD")));

    pEvent.setNew(bn);
    }

    Use the event handling as usual.

  • Flat POJO support for StoragesInstead of using the dynamic property access via IBean, it is possible to work with POJOs:
    public void doEncryptPwd(StorageEvent pEvent)
    {
    User user = pEvent.getNew(User.class);

    user.setPassword(AbstractSecurityManager.getEncryptedPassword(
    SessionContext.getCurrentSessionConfig(),
    user.getPassword()));

    pEvent.setNew(user);
    }

    You can work with every useful POJO because the storage mapps only available properties to the POJO.

  • Useful bugfixes

We look forward to your reviews ;)

JVx 0.9 beta-2 is soon available

The next beta version is planned for Friday, 7th January 2010. It contains some important bugfixes and improvements for DB handling. The default server implementation supports a custom session manager and object provider. And of course we solved some problems of the previous beta.

JVx 0.9 beta-1 is available

Check out our new JVx version. It is available from the project page.

What's in the current beta?

The complete list of changes can be found here.

Some features, however, at this point:

  • Introduced DBCredentials and DataSourceHandlerIt is now possible to configure multiple db datasources via config.xml
    <?xml version="1.0" encoding="UTF-8"?>

    <application>
    <securitymanager>
    <class>com.sibvisions.rad.server.security.DBSecurityManager</class>
    <database datasource="mydb" />
    </securitymanager>

    <datasource>
    <db name="mydb">
    <url>jdbc:oracle:thin:@localhost:1521:mydb</url>
    <username>user</username>
    <password>password</password>
    </db>
    <db name="masterdb">
    <url>jdbc:derby://localhost:1527/masterdb</url>
    <username>master</username>
    <password>master</password>
    </db>
    </datasource>
    </application>

    and use the configured security manager connection in the Session:

    IConfiguration config = SessionContext.getCurrentSessionConfig();

    dba = DBAccess.getDBAccess(DBSecurityManager.getCredentials(config));
    dba.open();

    or any connection, by name:

    IConfiguration config = SessionContext.getCurrentSessionConfig();

    DBCredentials cred = DataSourceHandler.createDBCredentials(config, "masterdb");

    dba = DBAccess.getDBAccess(cred);
    dba.open();

    It is still possible to use the old configuration format:

    <?xml version="1.0" encoding="UTF-8"?>

    <application>
    <securitymanager>
    <class>com.sibvisions.rad.server.security.DBSecurityManager</class>
    <database>
    <driver>org.hsqldb.jdbcDriver</driver>
    <url>jdbc:hsqldb:hsql://localhost/demodb</url>
    <username>sa</username>
    <password></password>
    </database>
    </securitymanager>

    You can create DBCredentials or read the config programatically, as it was with JVx 0.8.

  • Introduced AbstractCachedStorageThe AbstractCachedStorage is the new base class for all IStorage or ICachedStorage implementations. It implements the metadata caching and offers simple export functionality. With this class it is easy to develop new storages.
  • Introduced AbstractMemStorageThe AbstractMemStorage extends the AbstractCachedStorage and offers a MemDataBook on the server-side. With this class it is very simple to create storages with data kept in memory. You don't need a special backend, e.g. you can use a List to fill the storage. Our TwitterStorage uses this storage.
  • DBAccess supports pre-configured java.sql.ConnectionCreate a DBAccess instance with a pre-configured connection, e.g.
    Connection con = getJNDIConnection();

    DBAccess.getDBAccess(con)

  • XmlNode performance tuningOur XmlNode allows XML access with following syntax:
    XmlWorker xmw = new XmlWorker();
    xmnRead = xmw.read(new FileInputStream("example.xml"));

    xmnRead.setNode("/archive/element(1)/user", "xml");
    xmnRead.setNode("/archive/new/element", "car");

    The class offers powerful and simple XML handling - check it out!

  • Bugfixes and Test cases

We look forward to your reviews ;)

JVx documentation update

We described all DataBook events and row states with some articles in our Forum. The events and states are very important if you need special data/row handling on client side e.g. ask the user before delete record(s).

The articles includes flow charts and practical examples. If anyone has questions, just post to the forum.

Direct links to the events and states.

JVx reads Twitter

We have a lot of useful features in JVx. It is very easy to develop multi tier applications, two tier applications or simple desktop applications - started as RIA, Web or Standalone application.
Every tier is technology independent and does not require third party frameworks. We can use every useful framework to create business logic.

But we don't have a lot of connectors out-of-the box (at the moment). There are a lot of technologies out there, e.g. NOSQL, Cloud services, Facebook, Twitter, YouTube, REST, ...

Not all technologies are useful for business apllications, but it is a lot of fun to work with new technologies :)

We spent some hours to develop a simple Twitter client (rather a connector) to read/delete/insert Tweets. The result can be seen here:

Twitter client with JVx

Twitter client with JVx

What we did?

  • Created a new Storage, called TwitterStorage
  • extended AbstractMemStorage
  • Implemented loadData, insert, delete and getRowDefinition
  • used twitter4j

After 290 lines of code we were finished. The standard RemoteDataBook works perfect with the new Storage (full support for filtering, sorting, master-detail relations).

JVx release schedule

The last release of JVx - 0.8 - was published on 11th October. But when is the release date of JVx 0.9 and later?

We defined following release cycles for the upcoming versions:

  • GA release cycles of 6 months.
  • We don't publish alpha versions/nightly builds.
  • Beta versions every month (no fixed intervals). The first beta version of the next release will be available 1 month after the last GA release.
  • Developer builds are possible with the source code from our repository (ant build files are included).

For the JVX Release 0.9, this means:

  • Next Beta: first week of December (No Beta version for November)
  • Next GA release in March/April 2011

This is our current schedule.
We are open for discussions to optimize our approach.

JVx 0.8 - Source Infos

Well, after the version 0.8 of JVx was released, it's time for some LoC statistics.

Particularly the clarity and comprehensibility of the Source Code are very important to us. Therefore we are very proud also of the following lines of code.

JVx library   Swing UI
LoC   Type
40.282   Code
39.855   Comments (~ 99% of Code)
11.258   Empty lines
91.395   Total
LoC   Type
27.034   Code
15.496   Comments (~ 57% of Code)
6.023   Empty lines
48.553   Total
 
Web UI   Qt Jambi UI
LoC   Type
12.461   Code
9.791   Comments (~ 79% of Code)
3.420   Empty lines
25.672   Total
LoC   Type
15.386   Code
10.544   Comments (~ 68% of Code)
3.819   Empty lines
29.749   Total
 
JVx library (Test cases)  
LoC   Type
11.462   Code
6.088   Comments (~ 53% of Code)
4.084   Empty lines
21.634   Total

Compared to the features, we have too few lines of code :)
But exactly that makes the difference!