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

Popularity of Single Sourcing solutions

Single Sourcing - what?

The Problem:
You develop an application for a customer that should run on Desktop, Notebook, Netbook, Smartphone and Tablet. You have to support different platforms, different screen sizes (resolutions), different network speeds.

The solution:
You need a technology that allows you to develop the application once and execute it on any device without changes to the application / source code.

Actual state
You develop the application multiple times, optimized for the target device. Of course you use the same business logic/middle-tier. Or you develop a web application (ajax, html) and distribute it without app stores, but have not the same usability as native apps.

There are many projects that offer multi-device support, e.g. PhoneGap, Appcelerator, Eclipse RAP, Adobe Flex

But did you know that JVx has Single Sourcing since 2008 - the time as single sourcing was not so popular.
The difference between JVx and all other technologies is, that JVx is a full-stack application framework. It has all components that are needed to develop data-driven applications. It is not just a development platform as all others.

If you are software developer and create database applications that should run as RIA or as html/ajax application - JVx is your friend. If you are not a software developer - VisionX is the right tool for you!

No other tool is faster for database-application development!

VisionX 1.1 - What's new?

The first update-release of VisionX is out. But it is more than an update - it's a tool for the gods.

VisionX 1.1 contains about 90 Tickets, a brand new JVx release and the best UI designer ever, for End-Users and/or Software developers.

Other companies talk about Software Development in the cloud or really cool Rapid Application Development tools. Everything sounds very technical and is only for specialists. But where is the innovation?
It makes no difference where we develop software (local or remote) - it is still software development. If you are a developer... no problem. If you are interested but have no technical education... damn.

Are development tools as easy as modern Office suites? No way.

Wouldn't it be great to create handmade software without software development knowledge?
Don't think how. Think what. If you have an idea for an application, simply create it with VisionX.

Curious?

New in VisionX 1.1

  • 1-2-3 Reports

    Create a report in 3 steps. First - create a template, Second - Use your preferred Office solution (MS-Office, LibreOffice, ...) to customize the template, Third - Open the report in your application

    It is so easy to create a report and it is even easier to see your records in the report. VisionX fills your reports with filtered records, sorted or not, all available records or with master/detail related records.

    The current release handles filtered and sorted records automatically. A very important feature compared to 1.0.

    What You See Is What You Get.

  • Applications everywhere

    Install your application in your private network, a public cloud or use it only on your desktop. Use commercial or open source database products. Switch between databases or use all of them together. You can decide for yourself. Sounds too complicated?
    You are right, and many software developers have the same thoughts!
    With VisionX, your application is installed with 3 mouse clicks and we do the tricky stuff for you!

    Now you can decide what you want to install: only Application, only Database or both together.

  • Multi-User Spreadsheets

    Give VisionX your Spreadsheet and you get a Multi-User Online Application with access control for your records. Decide, who can see what.

    Now we have better support for different timestamp formats and a very intelligent delimiter detection. Don't waste time with the configuration, it just works.

  • Standardized Specifications

    VisionX creates specifications, that describes your application. It contains Screenshots of your current screens, describes all visible fields and gives you an overview of used actions.

    In the new release, we give you more details about fields, e.g. the possible values of choice boxes, the precision and scale of numbers, the field type (text, number, date, time, ...).

  • Legacy databases

    If you have old database applications and you need a modern frontend, use VisionX to create it. Simply connect to the database and create management screens with some mouse clicks. If you are not happy with the standard layout - change it until it fits your need.

  • Manage your datasources

    The new release comes with management screens for your existing datasources. Now it is very simple to change your administrative datasources or create new user-defined datasources.

  • Design-Runtime

    If an exception occurs in your application, switch to design mode with only one click. VisionX now saves even more time.

  • Copy screens, Copy elements

    If you need a screen copy - Create it per Drag and Drop. The keyword is <CTRL>. Press <CTRL> while you drag an element and you automatically create a copy when you drop it. Have you ever seen a visual designer that supports this?

Start today with your handmade applications. You just need an idea!

PDF change metadata

Sometimes it is useful to change PDF Metadata.
The following code snipped is based on Add an image to an existing PDF

HashMap<String, String> hmpInfo = new HashMap<String, String>();
hmpInfo.put("Title", "CV");
hmpInfo.put("Author", "rjahn");

PdfDictionary dictTrailer = pdr.getTrailer();

if (dictTrailer != null && dictTrailer.isDictionary())
{
        PdfObject objInfo = PdfReader.getPdfObject(dictTrailer.get(PdfName.INFO));
       
        if (objInfo != null && objInfo.isDictionary())
        {
                PdfDictionary infoDic = (PdfDictionary)objInfo;
               
                for (Map.Entry<String, String>entry : hmpInfo.entrySet())
                {
                        if (entry.getValue().length() == 0)
                        {
                                infoDic.remove(new PdfName(entry.getKey()));
                        }
                        else
                        {
                                infoDic.put(new PdfName(entry.getKey()),
                                 new PdfString(entry.getValue(), PdfObject.TEXT_UNICODE));
                        }
                }
        }
}

pdr.getCatalog().remove(PdfName.METADATA);

Add an image to an existing PDF

Do you know the problem: You got a PDF document and want to add an image to a single page, but you have no printer/scanner.

Normally jPdf Tweak solves simple PDF problems, but it is not possible to add a simple image to a PDF file :( . It supports watermarks, but it is not supported to set the position or page.

I wrote some lines of code to solve my problem:

PdfReader pdr = new PdfReader("D:\\test.pdf");

PdfStamper pds = new PdfStamper(pdr, new FileOutputStream("D:\\test_image.pdf"));

PdfContentByte pcbPosition;

PdfGState pgsTransparency;

Image img;

for (int i = 1, anz = pdr.getNumberOfPages(); i <= anz; i++)
{
        //only first page
        if (i == 1)
        {
                pcbPosition = pds.getOverContent(i);
   
                pgsTransparency = new PdfGState();
                pgsTransparency.setFillOpacity(100 / 100f);
               
                img = Image.getInstance(FileUtil.getContent("D:\\image.png"));
               
                //x: 0 = left
                //y: 0 = bottom
                img.setAbsolutePosition(500f, 250f);
                //70 is 100%
                img.scalePercent(10);
                img.setRotationDegrees(0);
               
                pcbPosition.saveState();

                pcbPosition.setGState(pgsTransparency);
                pcbPosition.addImage(img);
       
                pcbPosition.restoreState();
        }
}

pds.close();

Use the current iText version or iText 4.2.0 (friendly license).

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!

Application development without restarts

Some months ago, I read an interesting article about Javeleon. I thought it would be very useful for JVx developers because it is possible to start an application, modify screens and lifecycle objects and use the new instances live in the application without restarting it. It could save a lot of development time. Use the JRebel ROI calculator to see what you can save - It is amazing.

The integration of Javeleon in the JVx development process is very simple. Go to the Javeleon Download Page and download the standalone version 1.5 or 2.0 beta. It is not necessary to add javeleon.jar to the classpath of your application. If you use Eclipse, open the Run configuration dialog and add the following VM arguments:

-Djava.io.tmpdir=D:\temp\java
-Xbootclasspath/p:"D:\temp\java\JaveleonBoot\default"
-javaagent:D:\libs\javeleon\javeleon.jar=nbjdk=default;profile=java

If you use version 1.5 and version 2.0 for your tests, be sure that you delete the D:\temp\java\JaveleonBoot directory. Otherwise you get JVM startup Exceptions.

After the first start, watch the Java Console view because Javeleon is disabled until you request and download a license. Don't be affraid because the license is used to keep track of how many users Javeleon has. Details about the license are available here. With a valid license, it is possible to start development.

If everything is setup correctly, start your application and open a work-screen. Go back to Eclipse and modify the source-code of your work-screen, e.g. change the Layout, change the text of a Label or change some properties of a DBStorage. Be sure that your source is compiled (should be the default Eclipse setting) before you go back to your application. To see the changes in your application, simply close and open the modified work-screen.
You save the time to restart your application and perform a login. The MetaData cache also saves some seconds.

One negative point is that you need JVx as project dependency instead of the jar version.

Update

It is possible to use Javeleon without JVx project dependency. Simply unzip jvx.jar and add the created folder (class folder) to your classpath. It is not possible to compile JVx!

Update [2]

With the current Javeleon beta release of today (Jan. 17) - version 2.0.3 - it is possible to use jar files too. Now the integration of Javeleon works perfect.

Thanks to Allan Gregersen and the Javeleon Team for the support.

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

Swing RETRO application

During christmas break, I checked my (very) old personal Java applications. One of the first comments was from 2001. A long time ago. I had no UI framework, no testing framework and no automatic build process. All was hand-made :) I was amazed that I could read and edit the source code without problems.

One of my biggest and first applications, that I wrote for my personal use, was "MP3Tool". It is a tool to manage (very) large MP3 inventories, it has cool automations, supports offline edit/merge via XML, supports database loading and has command line support. It has support for ID3v1 and ID3v2. I have implemented my own library to read and write ID3 TAG infos (not complete, but works still great).

The tool is a "developer" tool that is not very user-friendly, but it is 11 years old and has tons of features. It was developed from a developer for a developer :) If someone needs a Java tool for mass editing of MP3 Files - here it is. It is not Open Source because it was not relevant in 2001. It is Free for everyone and if someone needs the source code it should not be a problem to upload it somewhere. :)

The tool has a German and English language file. I don't know if the auto detection works but you can change the language file in the settings, via Toolbar. I have not tried it on MacOS, but used it very often with Linux. If you search documentation - I have never used one!

I use the tool from time to time and still love it because it just works. After 11 years, I think it is ok to share it with you.

To be sure - The tool is not a SIB Visions Tool - It is a retro style swing application developed long time ago ;-)

mp3uebersicht_eingelesen

File overview

mp3optimierung_ergebnis_mehrfach

File optimization

mp3konvertierung_konvert

TAG conversion

JavaFx 2.0 - TableView connected to a Database

We made some tests with TableView and missed productivity features like Load-on-demand and database support. So we tried to use our DataBooks with a TableView. We need a TableView that is re-usable and shows data from remote storages like databases or csv files. It should support multi-column sorting and of course, load records on demand. A nice feature would be support for edit data without boilerplate code.

Our first simple use-case: Show records from a database table

The result:

TableView with IDataBook

TableView with IDataBook

The implementation is not finished and is more a PoC, but it works great! The source code is available here.
It is also possible to edit data, but the different datatypes are not yet supported!

Simply use the table view to show dynamic content. Allow editing without additional source code. Don't re-invent the wheel again!

The source code of the test application is available here.

JavaFx 2.0 and Business Applications

JavaFx 2.x has some nice UI components. It has new APIs and it is completely different to Swing. Of course, you can mix JavaFx components with Swing components, but the LaF is not the same! The new styling mechanism of JavaFx are really great.

But for me, its not a big step forward in the evolution. It is another UI library, of course a visually appealing. I miss an application framework or components with built-in support for modern applications. From my point of view, there is not enough focus on business applications. A business application is not a simple table or chart with some nice looking bars. A business app should handle millions of records, should allow keyboard navigation in all variants, should be fast, should save costs and time.

What should be different?

A standard JavaFx 2 application looks very nice because the standard style is modern. Also styling options are better than ever.

For me, the whole API is too much focused on Lists, POJOs, Generics and Object Bindings. Of course, it is cool for small apps, but you waste time with boilerplate code. If you have a database application with 5 simple tables that contains master data, and you need edit screens, you duplicate your source code 5 times because you have no support for dynamic usage. If you work without Generics, it is not really funny because JavaFx uses it everywhere.

Load-on-demand of records is possible if you do it manually, but it is not included in the controls. "Touch-scrolling" would be great. Compared to other UI libraries (swing, swt, qt), you can't change the default operation of UI controls because you don't have access to internal listeners, scrollbars, Behaviour, ... Some parts are customizable but these are more the exception.

The whole event handling is sometimes very complex, because you don't know what event type you have to use, where the type is declared and which event is the correct one. And inner classes are not the best solution for clarity. Because of Generics you have a lot of configuration work and you are not sure if everything works as expected. Without powerful IDEs you have no chance. Sometimes you have events but nothing happened....
That parts are not the real problem because it requires a certain amount of time to understand new classes. But must things always be complex rather than simple?

But it is great to write source code instead of crazy scripts.

What else?

The version number 2 is too high, because it is still not mature. JavaFx shows what is possible (scene graph, effects, web and video content) but it is not simple to use. But maybe it is perfect to combine only some parts with other mature toolkits like Swing or Swt?

It is not the library that bothers me, but it brings little relief for a developer. Why not just use Pivot? Yes... the web view is powerful ;-)

What should be done?

Focus on Business applications. Integrate an application framework that saves development time. Controls should not be so restrictive!