Happy birthday
JVx is 2.1
It's another great release today and ~ 6 month after 2.0. We have soo many cool features for you and of course some bugfixes.
The complete changelog is available on our sourceforge project site.
I want to highlight some features for you
- Configuration via JNDI or Classpath
It's now possible to have custom configuration files without our recommended directory structure. We still recommend our structure for multi-application deployments, but it's not important for single deployments or complex enterprise deployments. Find more details about loading strategy in the corresponding ticket #1126.
- Server-side plugin support
We introduced IServerPlugin. It allows adding plugins and changing server handling on demand. It's easy to write custom protocol recorder or configure session management via plugin.
- ServerContext and HttpContext
We introduced HttpContext and ServerContext. The HttpContext allows live access to servlet request and response (if an application server is in use). It makes no difference if you use REST or standard communication. We set the right instances into the context and your application will work without specific technology checks. We also use HttpContext for JVx.mobile.
The ServerContext is comparable with SessionContext, but it's earlier in the execution process, because it offers access to sessions directly after creation or detection. It's useful for e.g. plugins.
- Tab/Focus Index
We introduced set/getTabIndex in IComponent. This API change allows user-defined component navigation via tabulator or Enter key.
- CommunicationException details
It's now possible to find out the connection which throwed a CommunicationException.
- Alignment for IEditor (API change)
It's now possible to set the alignment on IEditors instead of the cell editors. Small but very useful API change.
- Autolink with storages
It's now possible to create automatic link references with other storage. We had this feature already in 2.0 but only for simple storages without conditions - only from clause was used. Now it's possible to configure custom storages with user-defined sort in the same LCO and set this storages as automatic link reference to other storages in the same LCO.
- Server side bean processing boost
We change and improved server side bean handling of our AbstractStorage. Here are some numbers for you:
....................... Before | After
Insert Object[] ... Beans: 200 | 0
Update Bean ....... Beans: 900 | 200
Update T .......... Beans: 900 | 400
Fetch Bean ........ Beans: 600 | 200
Fetch Object[] .... Beans: 300 | 0
Update Object[] ... Beans: 500 | 0
Insert Bean ....... Beans: 400 | 100
Delete Object[] ... Beans: 300 | 0
Delete Bean ....... Beans: 600 | 200
Delete T .......... Beans: 600 | 300
Insert T .......... Beans: 400 | 200
Created Beans after processing 100 records.
The current solution is a performance boost and using Object[] is always faster than everything else.
- Lazy blob loading
We don't load Blobs immediate. We load it on request. This doesn't need any actions on client side but be aware of server-side handling because the value of a blob column will be RemoteFileHandle instead of byte[]. You should run your unit tests for your business logic. It's possible to disable lazy fetching, per storage with
setLazyFetchEnabled(boolean);
It's also possible to define the threshold for loading immediate or loading lazy. Check
setLargeObjectLimit
setDefaultLargeObjectLimit
of DBAccess.
This is an awesome new feature because is speeds up data transfer.
- Custom UI properties
UIResource got:
public Object getObject(String pObjectName)
public Object putObject(String pObjectName, Object pObject)
It's possible to add custom objects per UI instance, e.g. save custom states.
- REST services refactored
We refactored our REST services. The implementation now works without problems and is easier to use becasue we don't need full qualified java names in the URL. We try to find the class via accesscontroller. The accesscontroller got a new method for this.
- Unique component names
For all lovers of automated UI tests. We have unique names for all our components. It's easy to create GUI tests with tools like Selenium (web tests) or FEST (swing tests) or whatever you use
We have about 107 tickets in this release and it's not possible to explain every change in this blog posting, but be sure - it's great!
The Maven archetype should be available in the next few days, because sonatype archetype listings are not live.
Our VaadinUI 1.2 is available!
It's a feature release with some bugfixes.
The biggest change was the update to vaadin 7.1.15 and we've already 7.3.3 in our development branch (welcome Valo theme).
What's new?
- Download extension
Download dynamic content on-demand or whenever you want via WebSockets. More information and an example project for this extension.
- Configuration of preserveOnUIRefresh
Simply use preserveOnRefresh as init-param (true | false) in your web.xml or as URL parameter to preserve the application on browser refresh.
- Use external CSS
Use an external CSS file to configure your application style. There's no need to change genereated styles.css for simple tasks. Simply configure the init-param externalCss, e.g.
<init-param>
<param-name>externalCss</param-name>
<param-value>../demoapp.css</param-value>
</init-param>
Place the demoapp.css in the root directory of your application (not application server ROOT).
The css will be placed at the end of the stylesheet links in the generated index.html page.
- Mobile check
We check if the UI is running on mobile browsers and set parameters for your application: Web.mobile (= VaadinUI.PROP_MOBILE) and Web.mobile.tablet(only for iPad at the moment) (= VaadinUI.PROP_TABLET). Simply check the parameter in your application.
- Cache for dynamic images
If you use images from your classpath, vaadin generates internal URLs for you. This URLs are different per image and the browser cache doesn't work. This handling produces unnecessary requests. We solved the problem with an image cache on server side and custom Image resources. With this changes, the browser cache works as expected.
- IDs for menu items
We have an experimental solution for setting IDs on menu items. It's experimental because it's possible that vaadin implements support for that. In that case we won't need our solution anymore. But till then, it works. More information...
- Responsive support
It's now possible to register a resize event on the application launcher. Use this event to change your application on-demand. We have some impressions for you.
- Self-contained packages for Portlets
We have built-in support for self-contained portlets. It's possible to toggle between global and self-contained mode. Simply set the init-param vaadin.shared (true | false) in your web.xml to use vaadin shared from your application server or the self-contained vaadin.
General information about self-contained packages.
- invokeLater and WebSockets
We've completely changed our invokeLater mechanism because it didn't work in previous versions.
Please check the changelog for a complete list.
Great news for all VisionX users!
The current update release 2.0.121 is available for download. Please check your download area.
The release is more than just an update release. It contains all currently available features. We wrote about some of them:
Repeating frames
IDE integration
QR Codes
Features for developers
Ready made solutions
It contains current JVx, ProjX libraries and source code.
If you miss some features after upgrading, please contact our product support because previous versions provided features without valid license. If the features are already licensed, no worries.
We have a product and feature overview for you.
We've released JVx 2.0.2 last friday and you should know that it's available
It's a smaller update with bugfixes and some improvements. One new feature is the support for an additional row in the databook. We use this row for searching records.
Other interesting features, from the changelog, are
- added listener to IConnection for notifications about property changes
- DBAccess isModified introduced
- register value changed of single column
- register key event listener for certain key
- DataBookBuilder introduced
- ICloseable introduced
- Set ORDER BY as property of DBStorage
- new selection modes: CURRENT_ROW_DESELECTED, CURRENT_ROW_SETFILTER
CURRENT_ROW_DESELECTED_SETFILTER
- CommonUtil.close introduced
Have fun
If you have a lot of work-screens in your application, it's not so easy to find the right screen because VisionX didn't offer search functionality in its open-screen wizard. With upcoming releases, VisionX will have such search functionality:

Screen search
The search fields will be visible if you have more than 5 screens!
Another problem with screens is that you can't search for fields or don't see automatically hidden fields, like ID columns. We have another nice search feature for you:

It will be possible to show hidden fields and also the used column name of your database table. The column names are not visible by default, but will be after you've pressed More...
Hello everybody. 1st April is over and no worries, we won't stop JVx
Today is a great day because I'm very happy to announce JVx - version 2.0.
It's an awesome release because JVx 2 contains so many new productivity features. It's still a small codebase and the quality is very high. We made a big step forward and want to show you some details.
First of all, the LoC analysis. Here are some very interesting numbers for you:
|
| JVx library |
|
Swing UI |
|
| LoC |
|
Type |
| 63.447 |
|
Code |
| 54.335 |
|
Comments (~ 46% of Code) |
| 16.823 |
|
Empty lines |
| 134.605 |
|
Total |
|
|
| LoC |
|
Type |
| 32.410 |
|
Code |
| 18.285 |
|
Comments (~ 36% of Code) |
| 7.271 |
|
Empty lines |
| 57.966 |
|
Total |
|
| |
| JVx library (Test cases) |
|
|
|
| LoC |
|
Type |
| 16.650 |
|
Code |
| 8.946 |
|
Comments (~ 34% of Code) |
| 5.849 |
|
Empty lines |
| 27.052 |
|
Total |
|
|
|
|
This time, we broke the mark of 100.000 LoC (112.507). We thought it would be possible with 1.0 but now it happened! Our code is still well documented with about 42% of the LoC.
Some additional numbers:
|
| Files and Tests |
|
| JVx library source files |
|
501 |
| Swing UI source files |
|
132 |
| Test source files |
|
109 |
| Total |
|
742 |
|
|
Still a small codebase and still very easy to maintain. |
| |
| Unit tests (no UI, without manual perf. tests)
| |
|
592 |
| Class coverage (without UI)
| |
|
78% |
| Method coverage (without UI)
| |
|
66% |
|
|
TOP 10 classes
| Classname |
|
LoC |
| MemDataBook |
|
3.399 |
| DBAccess |
|
3.070 |
| JVxTable |
|
2.448 |
| ArrayUtil |
|
2.000 |
| StringUtil |
|
1.477 |
| DBStorage |
|
1.290 |
| FileUtil |
|
1.277 |
| JVxFormLayout |
|
1.178 |
| XmlNode |
|
1.054 |
| SwingApplet |
|
1.053 |
This is amazing because we have so many features and so less code. I think our quality standards have been met!
And last but not least, a short overview of new features:
- New metadata cache
The caching mechanism is now a real killer feature. No ORM library or any other DB API has a similar technique. JVx is unique in this area. What we do? We reduce database calls and requests. We have different cache levels like Global, per Session or per Connection. The cache is a learning cache and your application will be super fast in production mode.
- Improved Constraints check
Our linked cell editors (comboboxes, drop-downs) now shows columns from tables referenced via Foreign keys. Now the master table shows columns from tables referenced with Foreign keys. And also the resulting comboboxes show columns from referenced tables. If you have a clean database model, simple use your master table and the GUI is ready. If your database model isn't as clean as it could be, simply define your references with our APIs.
- Cache mode for Security Managers
Before JVx 2, a security manager was cached globally per application. Every session was checked with the same security manager. With JVx 2.0 it's possible to have a security manager per client. Every client could have its own security manager instance.
- Focus listener support
This is not rocket-science but important for all kind of UIs. Now JVx has support for it.
- IController and IControllable
This is completely new because it allows data navigation with centralized controls. Read more.
- NO more session blocking
Before JVx 2 the server implementation blocked simultanuous calls via DefaultObjectProvider. This wasn't a real problem for Desktop applications and with few users but it was in Web environments - especially with our Vaadin UI - or with e.g 500 users. This blocking is gone.
- Session isolation
Usually, a session has a specific Life-cycle object with business objects and actions. Such Life-cycle objects have direct access to the MasterSession of an application for convenience. If you want Life-cycle objects without access to the MasterSession this is the right feature for you.
- New layout: UIGridLayout
The layout is row/column oriented like good old AWT GridLayout.
- Super-lazy-loading
If you use down and up keys to navigate in tables with details, you'll be surprised. The standard lazy-loading mechanism loads data in blocks and on-demand. If you had master/detail relations in your screens this wasn't enough because every master record change did load the detail records. With JVx 2. this will happen if you release the down or up key. This is a nice productivity feature.
- CheckBox CellEditor
We now support "real" Checkboxes as cell editor. Our choice cell editor is image based and it doesn't support LaFs. Of course, with the right images it might look like a native Checkbox. Now you can use native Checkboxes. We recommend the choice cell editor for columns with multiple possible values, e.g. Yes, No, null. The Checkbox only has two states Yes or No.
- MetaData customization
With JVx 2.0 it's possible to set/change MetaData per Storage, e.g. add a Primary Key.
The list is not complete but shows biggest changes and all details are available in the Changelog.
Please download JVx 2 and send us your Feedback.
Our new vaadin UI is available. It's the first release and it's awesome.
Get the binaries from our project site. It's licensed under Apache 2.0 and free for all.
The installation is very simple:
- Download jvxvaadin-1.0.zip
- Unzip the archive
- Add all files to your existing JVx application
- Change Deployment descriptor (web.xml) and replace simpleapp with your application
Have fun
Our new Online Help system is available. It's the first release with our new vaadin UI. It's fully compatible with our old, GXT based, help system.
Get the binaries from our project site. It's licensed under Apache 2.0 and free for all.
The installation is very simple:
- Download jvxhelp-1.0.zip
- Unzip the archive
- Copy the new directory to your application server, e.g. /webapps/
- Open http://yourserver:port/jvxhelp-1.0/help/
The help content is saved under /structure. The system reads all available files and directories from the structure directory and creates a table of contents.
We released JVx 1.2 today - as planned
The binaries are available on SourceForge or via Maven central. We also updated our Archetype to version 1.2.0 and it should be available in Maven central in the next days.
We told you that the release contains about 90 tickets. The real number of changes is 123.
Check the changelog for a complete list.
Next version will be 2.0
We did decide that version 1.2 is the last release before 2.0. It's not because of new killer features or big API changes.
The higher version number should represent the maturity of JVx.
JVx was started in 2008 and the low version numbers were fine for our own goals, but our users asked for bigger steps. If we compare our 1.2 with other frameworks, we could use 5.0 without problems.
The version 2.0 will be a smaller feature release that changes MetaData handling on server-side. We'll introduce a new caching mechanism that allows manual change of storage metadata.
We plan the release for the end of this year - without guarantee.
We also plan maintenance releases starting with 2.0
Currently, we don't fix bugs in old JVx releases. We only fix bugs in our development version. We offer nightly builds and maven snapshots and we thought that's enough, but some users want to keep old releases. No worries, we'll do our best to make you happy!
What is JVx EE?
It is a small library that allows you to create backend applications for your frontends. Simply re-use your existing domain model and create a JVx application that uses a domain model instead of direct database connections.
It's licensed under Apache 2.0 and is available here.
What's new?
We reviewed the code and fixed some smaller bugs. We added an example application that shows how it works.
A short example
Session.java
public EntityManager getEntityManager() throws Exception
{
EntityManager em = (EntityManager)get("entityManager");
if (em == null)
{
EntityManagerFactory emf = Persistence.createEntityManagerFactory("jvxee");
em = emf.createEntityManager();
put("entityManager", em);
}
return em;
}
Screen.java
public IStorage getCustomer
() throws Exception
{
JPAStorage jpaCustomer
= (JPAStorage
)get
("customer");
if (jpaCustomer == null)
{
EntityManager em = getEntityManager();
jpaCustomer = new JPAStorage(Customer.class);
jpaCustomer.setEntityManager(em);
CustomerEAO customerEAO = new CustomerEAO();
customerEAO.setEntityManager(em);
jpaCustomer.getJPAAccess().setExternalEAO(customerEAO);
jpaCustomer.open();
put("customer", jpaCustomer);
}
return jpaCustomer;
}
public IStorage getCustomerEducation() throws Exception
{
JPAStorage jpaCustomerEducation = (JPAStorage)get("customerEducation");
if (jpaCustomerEducation == null)
{
jpaCustomerEducation = new JPAStorage(Customer.class);
jpaCustomerEducation.setDetailEntity(Education.class);
jpaCustomerEducation.setEntityManager(getEntityManager());
jpaCustomerEducation.open();
put("customerEducation", jpaCustomerEducation);
}
return jpaCustomerEducation;
}