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

Posts tagged: JVx

Javeleon Eclipse Plugin

If you use Javeleon for JVx applications and your preferred IDE is Eclipse, check out our new Eclipse plugin. It is the inofficial Javeleon plugin for Eclipse. The name of the plugin is Javilion Plugin. It is available on SourceForge and it is released under Apache License 2.0.

The plugin has two helpful features:

  • Reload Javeleon manually

    Simply reload Javeleon whenever you want.

  • Automatic Reload after resource file update

    The current Javeleon version(s) does not reload when you change a resource file like .properties, .xml, ... If you enable the Javilion plugin in your Eclipse project, reload happens automatically.

If you want to use the plugin, use the following instructions, because we have not setup an updatesite right now!

  • Download the plugin
  • Copy the jar to the dropins or plugins directory of your Eclipse installation
  • Restart Eclipse
  • Add Javilion nature to your project: right mouse click on your project, Javilion/Add nature
  • Right click on your project to verify that Javilion is added:

    Javilion Plugin

    Popup menu

  • Configure your application run configuration and add the port property to your javaagent, e.g.:

    -javaagent:D:\javeleon.jar=nbjdk=default;profile=java;port=9999

    The port 9999 is the default setting. If you need another port, configure it in your .project file:

    <buildCommand>
        <name>com.sibvisions.eclipse.javilion.JavilionBuilder</name>
        <arguments>
            <dictionary>
                <key>port</key>
                <value>1234</value>
            </dictionary>
        </arguments>
    </buildCommand>

    It is a little bit tricky, because we don't have a configuration UI for the plugin right now.

If you use the plugin together with a Javeleon ReloadListener (-Djaveleon.reload.listener=app.MyListener), you feel the full power of Javeleon.

JVx 1.1 beta1 is available

It is available from the project page.

What's different?

This beta release is an update release and contains not a lot of new features.

  • CSV Export uses client locale

    Before 1.1, we used a semicolon ";" as separator. Now we use a locale specific separator. This solves country specific data export problems.

  • Modal Internal Frames on MacOSX

    We solved the problem with resizable modal internal frames on MacOSX. Now the resizebox is always visible.

  • UITable readonly

    Now it is possible to set an UITable readonly independent of the IDataBook.

  • API changes

    We reverted the API change, made in JVx 1.0, because the implementation was not very clever. Now it is possible to extend the DBStorage and have full database independent support. In JVx 1.0 you had to extend the default DBStorage and the specific MySqlDBStorage and the specific PostgreSqlDBStorage.... was not very developer friendly. With JVx 1.1 you have the same features but without development overhead.

    Old:

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

    New:

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

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

Oracle Forms and JVx - simply great

Oracle Forms is a great technology/platform to write database applications (for Oracle DBs) - There is no doubt!

But nobody knows how long it will exist! Oracle tries to replace Forms with ADF and or APEX, since years. APEX has limited functionality, ADF is too complex and is very "special"!

Have you ever tried to migrate an Oracle Forms Application to Java or .NET? Good luck :)
There are several tools that allows "automatic migration". But this is not more than an attempt!
Simple and small Forms Applications are surely migrated to another technology, but what is with the more important - large - applications?

We are not magicians, but have a modern technolgogy which enables a gradual migration.

Why is Oracle Forms so successful?
It is simple and does its job. You create User Interfaces for your Oracle Database very fast and ready for production. With JVx we offer a framework that solves the same problems but it is UI and database independent, is 100% Java and is Open Source.

And more...
Use JVx in your Forms applications.

Every developer knows that it is not so easy to replace a full-blown application with another one. Would it be cool to use existing features and Oracle Forms User Interfaces and integrate/implement new features and User Interfaces with JVx. Of course it would be very cool, but you need exactly one application that is consistent and still "simply works"!

And after all your Forms features are migrated, simply use a JVx application without Forms. You have no effort to switch, because it does not matter whether JVx runs with or without Forms!

Are you curious?

I assure you that no other framework is better suited than JVx.

Why?

  • Re-use your existing database logic (triggers, packages, views, functions, procedures) without changes.

    It is possible but not necessary to move your business logic to the server tier (middleware). Of course, it is recommended, if you plan to replace your Oracle database with antother database system. To be honest... Oracle has a damn good RDBMS.

  • Why sould you create tons of source code and use ORMs if your data model is clean.

    I'm sure you want maintainable applications - as usual?

  • Money, money, money

    Use your preferred Open Source application server and don't pay expensive license fees.

  • And one of the most important things: You don't need a new development team.

    What happens if you decide to replace your Forms Application with ADF? Have your developers the needed skils?

Do you need an example?

Oracle Forms with JVx

Oracle Forms with JVx

The example uses JVx UI (layout, panel, table, button), the generic model, a remote connection and life-cycle objecs as usual. Not bad ;-)

And if you want to develop faster than ever before, use VisionX on top. You have never used a better Application development tool!

Quick edit in tables

Since JVx 1.0 we introduced the new quick edit feature for link cell and date cell editors in tables. We wrote about the new link cell editor representation some weeks ago.

It is great to see an arrow in the cell, because you know that the cell has an advanced editor. But if you seen an arrow, you try to click on it and expect that something happens! Before we introduced quick edit in tables, you had to perform a double-click to start editing. It is still possible to double-click a cell and start editing, but if you click on the litte arrow, the editor is automatically shown for you! Your users will love this new feature!

Quick edit

Quick edit

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

JVx 1.0 with REST support

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 class Address extends Session
{
  public DBStorage getAddress() throws Throwable
  {
    DBStorage dbs = (DBStorage)get("address");
       
    if (dbs == null)
    {
      dbs = new DBStorage();

      dbs.setDBAccess(getDBAccess());
      dbs.setWritebackTable("ADDRESS");
      dbs.open();
               
      put("address", dbs);
    }
               
    return dbs;
  }

  public String getData()
  {
    return "Text data";
  }

}

The object has one action "getData" and the object "address".

Now we call the action:

String sHost = "http://localhost/jvx/services/rest/demo/Address/action/getData";

ClientResource cres = new ClientResource(sHost);

Representation rep = cres.get();

String sData = JSONUtil.getObject(rep, String.class);

And we fetch all records:

String sHost = "http://localhost/jvx/services/rest/demo/Address/data/address";

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.

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-3 is available

It is available from the project page.

This version should be the last beta before release 1.0, but we changed our plan a little bit. VisionX starts the open beta phase in the next weeks and we want release VisionX 1.0 with JVx 1.0. Because of that, we extend the beta phase for JVx. The current beta of JVx is almost production ready but does not contain all features for 1.0.
A short delay should not be a problem for you, and our beta releases are always in high quality.

What’s different?

The current beta contains some very useful productivity features and a lot of important changes in our database access layer.

  • AbstractBean serialization

    Our AbstractBean is an instance of Map and because of that we serialized objects as Map. That worked well but produced a ClassCastException when you tried to cast the serialized object to the wrong type. Now it is clean!

  • StackTrace manipulation

    Stack Trace Elements of SecurityExceptions are now shrinked, because it is not clever to show all details on the client. If you need the whole Stack Trace, enable debug logging for AbstractSecurityManager.

  • Live config

    In production use, a Master session caches the application configuration and changes are not considered until you create a new Master connection. If you need up-to-date sessions, you have now an option. Add:

    <liveconfig>true</liveconfig>

    to your server config.xml.

  • Virtual Filesystem support

    Versions prior 1.0 beta-3 have deployment restrictions for some application servers. JVx works without problems with all application servers but e.g. JBoss uses two different deploment modes. As application archive (.war) or "exploded". If you tried to install a JVx application as war, you had the problem that config files were not found. The problem does not occur if you install the application "exploded". With the current beta, the problem is solved and JVx applications work as war or "exploded".

  • Openness

    We introduced a new ISession implementation called DetachedSession. With this Session it is possible to work "outside" the JVx lifecycle. You can create a DetachedSession from a Servlet, a Filter or wherever you want. All you need is the application name. The session has its own SecurityManager and allows fast username switching. You need at least one DetachedSession for your external services. Thats saves time and memory.

    The AbstractSecurityManager got new methods to create SecurityManagers for any ISession or just for an application name. You can now use the JVx authentication mechanism for you third party services, without much coding effort.

    Furthermore, our DBSecurityManager allows connection access. Use the connection of the security manager to save connections.

    A practical example for above changes is the integration of REST services, with or without authentication. Now it is enough to create a new DetachedSession and use the configured security manager to authenticate clients, e.g.:

    DetachedSession sess = new DetachedSession("demo");

    DBSecurityManager secman = (DBSecurityManager)sess.getSecurityManager();

    sess.setUserName("jvx");
    sess.setPassword("beta-3");
    secman.validateAuthentication(sess);

    sess.setUserName("visionx");
    sess.setPassword("v1.0");
    secman.validateAuthentication(sess);

    Connection con = secman.getConnection();
    //Execute queries

  • Database access

    We fixed some problems with PK, FK and UK detection for all supported databases. Now our automatic link cell editors work without database restrictions.

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