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

Category: News

WebUI update to JVx 1.0

The current version of WebUI - 0.10 - supports JVx 1.0.

Our showcase application already uses WebUI 0.10.

Showcase update to JVx 1.0

Our Showcase application is up-to-date! We have updated all libraries to the latest versions.
The source files are available here.

Test the new REST interface:

List of Contacts
List of Educations

Use admin as username and password.

JVx 1.0 - Statistics

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
LoC   Type
53.644   Code
47.837   Comments (~ 89% of Code)
14.570   Empty lines
116.047   Total
LoC   Type
29.595   Code
16.665   Comments (~ 57% of Code)
6.611   Empty lines
52.871   Total
 
JVx library (Test cases)  
LoC   Type
14.215   Code
7.735   Comments (~ 53% of Code)
5.102   Empty lines
27.052   Total

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
JVx library source files   454
Swing UI source files   122
Test source files   95
Total   671
Absolutely fine! Very easy to maintain.
 
Unit tests (without UI)   657
Class coverage (without UI)   83%
Method coverage (without UI)   66%

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.

JVx 1.0

We proudly present JVx 1.0!

What a year... The first release of VisionX is out, and we finished our work on JVx 1.0.
This release is awesome. It contains a total of 230 changes to 0.9.

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

  • Database
    • Support for PostgreSql and MySql enum datatypes (automatic link cell editors)
    • High performance metadata cache
    • Block fetching
    • Scriptable db import scripts
  • Server
    • 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 enum/set support

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.
  Enum and Set

The table and types, in PostgreSQL, are defined as:

CREATE TYPE mood AS ENUM ('sad', 'ok', 'happy');
CREATE TYPE yesno AS ENUM ('Y', 'N');

CREATE TABLE person
(
   name text,
   current_mood mood,
   active yesno
);

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:

Old style:

DBStorage dbs = new DBStorage();
dbs.setDBAccess(getDBAccess());
dbs.open();

New style:

DBStorage dbs = getDBAccess().createStorage();
dbs.open();

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

UIChoiceCellEditor.addDefaultChoiceCellEditor(ApplicationUtil.YESNO_EDITOR);

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

Howto Videos

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.

VisionX - Some impressions

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:

User management

User management

  Manage your users

Create new users, edit existing users,
assign roles...

You don't need an administrator to
enable the access to your application!

Actions

Actions

  Create your own actions

Show a report on button click,
Send an e-mail when the invoice
state is changed, ...

Define your own processes - without developer
skills.

Reports

Reports

  Create custom reports

You need a list of all orders, customers or
invoices?

Create a standard report, change and use it. Don't learn how to use a new reporting tool, use your existing office solution!

VisionX - Public Cloud is available

The current version of VisionX is available as Public Cloud version. After a short registration you get access to VisionX.

The Public version shares all available applications with all registered users. It is different to the Beta phase because the Beta version was like a private Cloud per user.

With VisionX you get a tool to create your own applications without developer skills. A dream comes true.
It is no exaggeration to say that VisionX is the world's only tool of its kind.

What features are available in VisionX Cloud?

Here are some of them:

  • A very smart WYSIWYG User Interface editor
  • Edit actions without source code (open a screen, calculate values, hide components)
  • Reporting with customizable templates
  • Complete User management
  • Role management (customize an application per user)
  • Menu management
  • Module support and API for third party modules
  • Use existing database models and create User Interfaces
  • Import spreadsheets (csv, xls, xlsx)
  • Application customization (auto login, default screen, images, ...)
  • HTML User Interface (webui)

Are you interested? Start with VisionX - now.

JVx 1.0 beta-5 is available

It is available from the project page.

What’s different?

We fixed some important bugs and implemented new security checks. The new release does not have new killer features and it is more of a stabilization release. We think that the "Christkind" or maybe Santa Claus will have JVx 1.0 GA in the bag.

  • Security checks

    The MasterSession did not have a special security check for accessing the life-cycle object. If the security manager checked the login credentials as valid, it was possible to access the life-cycle object for the Master Session. The problem was that is is possible to set the life-cycle name via API, before you open the connection. It is always possible to open a MasterSession with the life-cycle object of a SubSession. But if the used security manager (e.g. DBSecurityManager) has custom access rules and does not allow the access to specific SubSessions, we had a vulnerability.

    Now the MasterSession checks the access with the security manager, in the same manner as the SubSession. The ISecurityManager interface got new methods for the access checks. The DBSecurityManger contains a reference implementation.

  • Utilities

    The Utility classes are very important for JVx, because there is power inside. We tweaked existing and added new useful methods. The external program execution works now platform independent. The FileViewer now supports Linux, MacOSX and Windows.

Check the Changelog for a complete list, and use our Forum to talk with us ;-)

JVx 1.0 beta-4 is available

It is available from the project page.

What’s different?

We fixed some smaller bugs and improved metadata caching. A very cool NEW feature is the block fetching for RemoteDataBooks.

  • MetaData caching

    We have a metadata cache on the server side to reduce database calls and we have a cache role on the client-side to reduce remote calls. But it was not possible to change the cache role for specific connections. If the cache was enabled, it was enabled for the whole application.

    Now it is possible to set a connection property to change the cache handling for all databooks which use the connection.

    connection.setProperty(IConnectionConstants.METADATA_CACHEOPTION, MetaDataCacheOption.Off.toString());

    Off means no metadata on client-side and reload metadata from database on server-side.
    On means always use the metadata cache and ignore the default setting.
    Default means that the connection uses the client cache role setting.

  • Block fetching

    This is an amazing new feature and boosts an application!
    Before beta-4, every Master/Detail selection change executed a remote call if the detail was not already fetched. It depends on the number of detail databooks, but if you have one master and 5 detail databooks, every master-change executes 5 remote calls to retrieve detail data. 5 requests is not very clever because it should be possible in only 1 request? With 1.0 beta-4 this optimization is implemented, but not used per default. It depends on th number of records and number of details if it is possible to fetch all defail databooks as one block. It is your decision if it makes sense to use block fetching!

    Be careful, the block fetch columns are not the same as used for the master reference definition!

    Example:

    rdbWorkScreenMembers.setMasterReference(
        new ReferenceDefinition(new String[] {"APPL_ID", "CLASSNAME",
                                              "PARENT_NAME", "PARENT_METHOD"},
        rdbWorkScreenMembers,
        new String[] {"APPL_ID", "CLASSNAME", "NAME", "METHOD"}));

    //Block fetching does not need PARENT information, because we want all PARENTs
    rdbWorkScreenMembers.setBlockFetchColumnNames(new String[] {"APPL_ID",
                                                                "CLASSNAME"});

  • JNLP service access for Applets

    If you use the jnlp_href tag for your applet, it is now possible to use the clipboard, file open and file save JNLP services without additional coding effort. Since 1.6 u24 it is not possible to copy/paste to/from text components. We made it possible in the Swing UI and now it is available for all your applications.

  • Refactoring

    We moved IDataBook.searchNext to IDataPage and added searchPrevious to the API.

Check the Changelog for a complete list, and use our Forum to talk with us ;-)