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

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 ;)