JVx 1.0 is out and we have some Source Code statistics for you!
Our last statistics were determined for JVx 0.8. It is cool to compare 0.8 with 1.0. We have again worked very efficiently because 1.0 contains approximately 420 Features and Changes compared to 0.8. The Source Code grew by 18.767 lines, since 0.8. That means, we need 44 Code lines for one feature
Here are the numbers:
|JVx library||Swing UI|
|JVx library (Test cases)|
Hm... we thought that we reach 100.000 LoC with JVx 1.0, but we "only" have 97.454. Compared to the features of JVx, we have still too few lines of code. Maybe we should use a code generator or Object Mapper or simply integrate a bunch of new features?
Some additional numbers:
|Files and Tests|
|Absolutely fine! Very easy to maintain.|
The test result is not perfect but we are happy with it. We should nevertheless pay more attention to the test coverage... and we still need a solution for automatic UI tests.
We proudly present JVx 1.0!
We implemented really cool productivity features, some fancy UI features and we fixed some bugs. But the complete list is really long
Our original Roadmap for 1.0 had fewer Features, but thanks to the community, JVx 1.0 now contains a lot of wonderful things.
In the following weeks we plan to write more documentation especially about the new features and update our showcase and demo apps. It is not possible to write about everything in this posting - and it is also Christmas. One of the next postings will be some statistics about the JVx source code - LoC, quality, ...
We think it is also time for more WebUI... maybe another implementation... let's see. And of course, mobile devices are still very interesting. We started first attempts with Android some months ago. We made some POCs with Pivot and JavaFx 2.0 and who knows what the next year brings.
And we have still a lot of new ideas to speed-up the development time. Without JVx 1.0 you develop as fast as possible - but with JVx 1.0 you develop with the speed of light.
Now, a very short look at JVx 1.0
- Support for PostgreSql and MySql enum datatypes (automatic link cell editors)
- High performance metadata cache
- Block fetching
- Scriptable db import scripts
- REST support for all objects and actions
- DetachedSession and DirectServerSession introduced
- DirectObjectConnection introduced
- Transparent config encryption
- LCO based security checks
- Reduced communication requests
- Better support for custom storages
- Support for custom session manager and object provider
- User Interface
- Intuitive link cell editors
- New cell formatting with image and insets
- JNLP services integrated
- Focus rect handling
- En/Disable translation per component
- New Locale handling
You find the complete list in the Changelog.
And last but not least, we look forward to your feedback!
MySql and PostgreSql have some useful custom datatypes. Enum is one of them. MySql has a Set datatype too.
With an Enum, you define a list of allowed values, but only one value is possible for the column (same behaviour as check constraints in other databases)
With a Set, you define a list of allowed values and multiple values are possible for the column (more like a n:m relation). But you should not use Set datatypes, because it makes your data model unreadable and everyone wants clean data models?
With JVx 1.0 it is possible to use Enum or Set datatypes. On UI side you get a link cell editor (dropdown) or choice cell editor (e.g. checkbox).
|Look at the image on the right. You see 3 columns. The first is a simple text column, the second is a linked cell editor (dropdown) and the third is a checkbox. Nothing special?
Not until you see the database table.
The table and types, in PostgreSQL, are defined as:
CREATE TYPE yesno AS ENUM ('Y', 'N');
CREATE TABLE person
The server-side storage handles the enum/set detection automatically and sets the linked cell editor and allowed values into the MetaData. You don't have additional work on UI side to get above table!
And this is really cool, isn't it!
But we recommend a new creation style for your storages in your life-cycle objects, to get the new features:
Why we recommend this?
With 1.0 we introduce db specific storages like MySqlDBStorage and PostgreSQLDBStorage. This storages support database specific features that are not standardized.
We avoid/reduce boilerplate code whenever possible and who wants to change source code if the database is changed?
With the new style, you get the best storage available for your database, automatically. Of course it is possible to create e.g. a MySqlDBStorage() manually, but keep in mind that you are fixed to MySql.
After you changed your life-cycle objects, you get linked cell editors for your enum columns. But in many cases you use enum datatypes as check constraints e.g. Yes/No columns. In that case, a linked cell editor is not very cool - you need a choice cell editor.
JVx defines some default choice cell editors, via
in the Application class. With this mechanism it is very easy to define choice cell editors for your enum types.
Set datatypes are very special and generally, we don't like unreadable data models. But JVx should support it as good as possible.
We handle Set datatypes like enum datatypes and we show a link or choice cell editor. The user can only select one value. A developer can set multiple values via API (as comma separated list).
Have you ever seen this comfort in other frameworks? Let us know
Some of you asked us: When is JVx 1.0 available?
The answer was and is still: This year
More precisely: Planned release date is Friday, 23rd December.
The current version in our SVN repository is Feature complete. Only some tickets are still open, but all of them are not really important for 1.0. Some are beautifying and some are smaller bugs that do not hurt.
We are optimistic that these are done till Friday, otherwise the open tickets will be moved to Release 1.1.
In addition to numerous changes and new features, the REST support is certainly one of the most interesting innovation. The feature was not originally planned for 1.0, but it is cool nowadays.
But what do we understand as "REST support"?
Every server-side action, and every object that is available via a Life-Cycle object, are accessible via REST calls. Don't worry about security, because the same access checks are done as for common applications. If an action or object is available for an application, it is available via REST calls.
You don't need additional configurations for your applications, actions or objects - no annotations and no config files are needed.
It sounds simple? Yes, it is so simple!
I want to show you a short example, based on Restlet. We have a life-cycle object like the following:
public DBStorage getAddress() throws Throwable
DBStorage dbs = (DBStorage)get("address");
if (dbs == null)
dbs = new DBStorage();
public String getData()
return "Text data";
The object has one action "getData" and the object "address".
Now we call the action:
ClientResource cres = new ClientResource(sHost);
Representation rep = cres.get();
String sData = JSONUtil.getObject(rep, String.class);
And we fetch all records:
ClientResource cres = new ClientResource(sHost);
Representation rep = cres.get();
List liRecords = JSONUtil.getObject(rep, List.class);
Is it as simple as expected? We hope so
Of course, there are options for fetching only specific records. Insert new records, update and delete one or more records. All options are implemented in test cases. Have a look at the Action or Storage tests.
More details and the documentation will follow after the release of JVx 1.0.
In the last weeks, we talked long time about VisionX Support, Tutorials and Videos. What should we use? A Forum, a mailing list, a Ticketing system, ...?
We use a Forum for JVx support and think that it was a good decision because the communication works and we don't forget our tasks. So we think a Forum for VisionX related questions is also a good choice. For bug reporting, the best choice is a ticketing system and we are very happy with our Flyspray system.
We don't like mailing lists. Sometimes it is comfortable to send an email and use the mail client for communication because it is in use, all the day. But online search interfaces are awful and links to mailing lists are not very cool.
What about product documentation?
Who wants to read a lot of text? We don't want it.
We decided to use a lot of short Howto Videos (30 seconds to 1 minute), some intro texts and a lot of screenshots.
The first videos are online on our YouTube channel.
Please check them and give us your feedback.
With VisionX, we make it possible to create business applications without developer skills. We are often asked, how that is possible.
Our answer is always the same - keep things simple and use a language that a user understands.
Most things in VisionX are done with wizards, because it is the easiest way to give the user an overview.
We want to show you some impressions:
|Manage your users
Create new users, edit existing users,
You don't need an administrator to
|Create your own actions
Show a report on button click,
Define your own processes - without developer
|Create custom reports
You need a list of all orders, customers or
Create a standard report, change and use it. Don't learn how to use a new reporting tool, use your existing office solution!