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;
}
Yesterday, we released a brand new version of JVx. The version number is now 1.1. We had some delays between 1.0 and 1.1 because we decided to do more researching as we originally planned. The 1.0 release was too stable and full featured because we only got positive feedback and some feature requests. Our product VisionX also uses JVx 1.0 and our customers had absolutely no problems.
Last year, we decided to open our nightly builds for everyone and because of our high quality standards, we had a new release every day. Some versions were broken but most versions were ready for production use. Of course, a nightly build is not an official release.
But now you are able to use the latest version of JVx as an official release and of course we offer full support.
We have a bunch of new features and smaller bugfixes. Many changes are related to other open source frameworks because we researched a lot of interesting libraries and frameworks. The famous ones are Javeleon and Vert.x.
So, what happened with JVx since 1.0?
- Improved REST support for all server-side life-cycle objects. It's possible to call actions and to access data (CRUD and metadata). The REST interface is using the same APIs and the same security settings as your web or desktop application. If you're using JVx, it's a task of 1 minute to bind external html5 clients.
It's very easy to provide custom data for your customers, e.g. create a view in your database, use existing DAOs or dynamically create reports. You'll need about 5 minutes to provide new functionality.
- Full support for Vert.x
We successfully used Vert.x http and socket server instead of Tomcat or JBoss. Simply use your existing applications and integrate them in your Vert.x environment. Don't change your application, simply use another technology.
Simply use Vert.x event bus for asynchronous and live messages.
- Execute database procedures and functions like Java functions. Don't write many LoC for database access. We now offer input and output parameters as known from direct JDBC calls. We didn't reinvent the wheel but made JDBC a little bit easier to use.
Standard JDBC procedure call:
// Standard IN-OUT Parameter Test with plain JDBC
Connection con
= dba.
getConnection();
CallableStatement cstmt = con.prepareCall("{ call EXECPROCEDURE(?, ?, ?) }");
cstmt.registerOutParameter(1, Types.DECIMAL);
cstmt.registerOutParameter(3, Types.VARCHAR);
cstmt.setObject(1, BigDecimal.valueOf(1), Types.DECIMAL);
cstmt.setObject(2, "ABC", Types.VARCHAR);
cstmt.execute();
Same procedure call with JVx:
OutParam ouTextParam = new OutParam(InOutParam.SQLTYPE_VARCHAR);
InOutParam ioNumberParam = new InOutParam(InOutParam.SQLTYPE_DECIMAL,
BigDecimal.valueOf(1));
dba.executeProcedure("execProcedure", ioNumberParam, "ABC", ouTextParam);
The Oracle procedure:
- Custom UI factories
It's now fully supportet that you create your own UI factories or extend existing factories. A JVx application will use your custom factory. This allows replacement of single standard components with your own components or simply integrate new components in your application.
- Oracle Forms integration
The whole framework was successfully integrated in Oracle Forms applications. A JVx application or a single screen interacts with Forms like standard Forms screens. It's now possible to use modern UI elements in your Forms application without changing or migrating the whole application. We use both technologies and that boosts development time.
- Full NTLMv2 authentication support
We had support for NTLMv1 in JVx 1.0 and earlier, but with modern Windows OS' you had to set a registry key to force NTLMv1 because the OS' used NTLMv2. We now support modern Windows versions (Vista, Win7, Win8) out-of-the-box.
- JVx is ready for Embedded devices
We made some experiments with embedded Hardware like RaspberryPi or Beagleboard. We always used JVx for our applications and JVx 1.1 works without problems. If you're interested in our experiments, check our Videos on YouTube.
- Pimped standard Save file dialog to ask for override existing files
- Prepared JVx for JVx.mobile
The complete changelog is available here.