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
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.
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
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).
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.
Wenige Tage nach der Prämierung wurde nun ein kurzer Bericht über die Veranstaltung, vom Veranstalter GEWINN, verfasst.
Hier geht es zum Bericht.
We made it to the top 40!
SIB Visions GmbH reached the 37th place of the contest "GEWINN Jungunternehmer Österreich - 2010" from 1000 submissions!
Today is party time at SIB Visions
Our Open Source Project "JVx - Enterprise Application Framework" has made it possible!

Austrian young entrepreneurs, 37th place
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!
Im Zuge unseres JVx Vortrages, bei der Java User Group München, wurde berichtet, daß im Download der FirstApp die Konfiguration "config.xml" nicht inkludiert ist. Nach kurzer Analyse wurde festgestellt, daß auch die Server Konfiguration nicht enthalten ist.
Das Fehlen der Dateien ist aufgrund der Schritt für Schritt Anleitung kein großes Problem und kann rasch behoben werden!
Die Ursache für das Problem war eine fehlerhafte build Konfiguration. Diese wurde umgehend behoben und die aktualisierte FirstApp steht bereits zum Download bereit. Im Zuge des Updates wurde auch gleich die aktuelle Release 0.8 von JVx inkludiert.
JVx 0.8 ist out now!
We put much time and work into the new release. It contains almost 100 improvements!
But before we go into the details, it should be mentioned that JVx is now hosted on SourceForge. This step was particularly important to us, in order to be able to develop together with our Community.
Our Forum contains detailed instructions for working together.
We appreciate any help.
Download JVx 0.8 here
What's new?
- API changes
- We removed set/getTableColumnNames, set/getTreeColumnNames, set/getEditorColumnNames and introduced ColumnView. Now it is possible to set a column view per UI control e.g.: ITable, ITree, IEditor, null (ALL)
Old:
rdbInvoice.getRowDefinition().
setTableColumnNames(new String [] { "POS", "PRICE"});
New:
rdbInvoice.getRowDefinition().
setColumnView(null, new ColumnView("POS", "PRICE"));
- DBAccess has now a static method, setAutomaticLinkColumnNameTranslation, to translate the automatic link column names into a user-defined name.Default:
tmpAutoLinkColumnNames.put("*_id", "*");
tmpAutoLinkColumnNames.put("*_ID", "*");
- Changed, automatic, visible column detection from case insensitive to case sensitive, for compatibility reasons!Old:
setDefaultIgnoredColumnNames("*_ID");
New:
setDefaultIgnoredColumnNames("*_ID", "*_id");
Default:
"*ID", "*id", "*_ID", "*_id", "*_INTERN", "*_intern"
- Renamed countRows to getEstimatedRowCount in IStorage
- MetaData handlingReduced client/server requests,
Reduced creation loops on server side,
Caching for sub storages,
Fixed Nullable column detection,
Client Cache roles,
Label detection,
Split Client and Server MetaData usage
- SerializerUniversalSerializer is now the standard serializer,
Support for async serialization with new TypeCache,
Bean packages unified,
New init method for ISerializer,
The serializer name is now included in the connection properties
- JNDI supportServer is now available via JNDI or Singleton
- DB supportHSQLDB driver is now registered,
HSQLDB locking mechanism fixed,
Derby locking support,
close open statements,
Check constraint detection with 'OR', 'AND', 'IN',
Automatic Link Column Name detection works now DB independent,
Fetch optimization (reduced method calls),
BigDecimal DataType contains always a BigDecimal - DB independent
- SecurityDifferend Password algorithms (SecureHash),
Automatic Security detection of lifecycle objects,
XmlSecurityManager now supports more than 1 User
- Smaller changes and BugfixesAll details are documented in our Support System or the ChangeLog
Today, we released version 0.2 of our Android AddOns. The release contains some new features for logging, property handling and list formatting.
Download the new release from here (ChangeLog and javadoc).