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

New VisionX feature for developers

This new feature is especially for all Oracle Forms developers :)

It will be possible to configure existing DB storages and create new storages. The feature will be added to the data area of VisionX:

Storage edit button

Storage edit button

The new wizard will show the default SQL statement and it'll be possible to change the statement:

Edit DB storage(s)

Edit DB storage(s)

This new wizard is not useful for end-users because only developers should change SQL statements. Because of that, it won't be available for all VisionX users - it depends on the license.

The new wizard has some additional features like moving a DB storage from screen-level to session level which is like a global storage. You can create DB storages without creating a RemoteDataBook. Such storages will be available as source for drop-downs in the data edit wizard, like Views or Tables.

The new feature-set will make you happy!

Our Live-Ticker implementation - World cup 2014

We got a lot of (positive) feedback for our live ticker in Packung! It's great to see actual results depending on the current score :)

We started our live ticker in 2008 with a simple implementation in Java. The solution simply sniffed results from standard html pages. It was easy to get results because result pages didn't use Ajax. It was harder in 2010 and 2012 because Ajax was heavily used. But we found some pages without Ajax.

What's the problem with Ajax? It's not possible to get the complete html content with one simple http request with Java. You need a "browser" that handles javascript and async calls.

We didn't find a html page with live results this year, which didn't use Ajax or Flash. So we thought about a clever solution because we won't pay for "free content". And of course, our betting game is free and we don't earn money. But what's a clever solution? The task is simple: Grab results from existing live-ticker website (be aware of Ajax) - but how?

The solution is simple: Use a browser :)

But Java doesn't offer a browser control, doesn't it? Yes, JavaFX does!

In 2008 we played around with QT webkit control of QT Jambi (but the project is not active) because it was a nice browser control. The problem was that it didn't work headless and our application server was a linux box without X-Server. This year, we had the same restrictions because our server is a linux box and still no X-Server. We thought that JavaFX could be the right solution for us...

BUT it doesn't work headless enough - not with latest release. It will be better in upcoming releases and/or custom JavaFX builds because there is a Glass windowing component called Monocle. But this was the right challenge for us.

Our current solution runs on Linux, without a real X-Server. It's a JavaFX WebView/WebEngine that reads data from a public live-ticker.

How our solution works?

Install important linux packages:

yum install xorg-x11-server-Xvfb xorg-x11-xauth gcc glib2 glib2-devel libtiff libtiff-devel libjpeg-devel cairo cairo-devel pango pango-devel redhat-lsb

optional if available

yum install redhat-lsb-graphics

Download and install ATK

wget ftp://ftp.muug.mb.ca/mirror/centos/6/os/x86_64/Packages/atk-1.30.0-1.el6.x86_64.rpm
wget ftp://ftp.muug.mb.ca/mirror/centos/6/os/x86_64/Packages/atk-devel-1.30.0-1.el6.x86_64.rpm
rpm -Uvh *.rpm

and GTK+

wget http://ftp.gnome.org/pub/gnome/sources/gtk+/2.18/gtk+-2.18.2.tar.gz
tar -xvf gtk+-2.18.2.tar.gz
cd gtk+-2.18.2
./configure
make
make install

Start Xvfb:

Xvfb :99 &

Start application:

#!/bin/sh
export DISPLAY=:99
export LD_LIBRARY_PATH=/usr/local/lib
./jdk1.8.0_05/bin/java -jar livescore.jar >> liveupdate.log 2>> liveupdate_err.log &

The application itself is trivial. It's a class with main method:

/**
 * Starts the application.
 *
 * @param pArgs the application parameters
 */

public static void main(String[] pArgs)
{
    new Livescore();
}

/**
 * Creates a new instance of <code>Livescore</code> and starts the update procedure.
 */

public Livescore()
{
    super();

    fxPanel = new JFXPanel();
       
    Platform.runLater(new Runnable()
    {
        public void run()
        {
            fxPanel.setScene(new Scene(new BorderPane(), 800, 600));
               
            browser = new SimpleBrowser();
            browser.load();
        }
    });
       
    start();
}

We need the JFXPanel because JavaFX needs a scene, otherwise it'll throw Exceptions. We don't need the instance for other things.

The SimpleBrowser class is similar to this snippet:

/**
 * Loads the configured website.
 */

public void load()
{
    if (view == null)
    {
        view = new WebView();
        engine = view.getEngine();

        engine.load("http://live-ticker.url");
    }
    else
    {
        engine.reload();
    }

    if (thCheck == null)
    {
        thCheck = new Thread(new Runnable()
        {
            public void run()
            {
                try
                {
                    while (Thread.currentThread() == thCheck)
                    {
                        Platform.runLater(new Runnable()
                        {
                            public void run()
                            {
                                checkResults();
                            }
                        });
                       
                        Thread.sleep(10000);
                    }
                }
                catch (InterruptedException ie)
                {
                    //stop
                }
               
                thCheck = null;
            }
        });
        thCheck.start();
    }
}

That's it. We got two "silent" Exceptions

java.lang.NullPointerException
  at sun.reflect.UnsafeFieldAccessorImpl.ensureObj(UnsafeFieldAccessorImpl.java:57)
  at sun.reflect.UnsafeObjectFieldAccessorImpl.get(UnsafeObjectFieldAccessorImpl.java:36)
  at java.lang.reflect.Field.get(Field.java:387)
  at com.sun.javafx.webkit.theme.ScrollBarThemeImpl.getFieldValue(ScrollBarThemeImpl.java:397)
 ...
Exception in thread "JavaFX Application Thread" java.lang.NullPointerException
  at com.sun.javafx.webkit.theme.ScrollBarThemeImpl.thumbPosition(ScrollBarThemeImpl.java:267)
  at com.sun.javafx.webkit.theme.ScrollBarThemeImpl.getThumbPosition(ScrollBarThemeImpl.java:352)
  at com.sun.webkit.Timer.twkFireTimerEvent(Native Method)
  at com.sun.webkit.Timer.fireTimerEvent(Timer.java:66)
  at com.sun.webkit.Timer.notifyTick(Timer.java:47)
  at javafx.scene.web.WebEngine$PulseTimer$2.pulse(WebEngine.java:1154)
  ...

after the application start, because of some scrolling problems, but these Exceptions had no effect (in our solution).

The solution would rock with a real headless JavaFX but it's ok for us.

VisionX store - Test phase!

Our VisionX store is now available for selected customers.
It'll be included in VisionX starting with version 2.0.28 and should work out-of-the-box.

The final UI will look like:

VisionX Solution store

VisionX Solution store

We'll offer free applications, modules and addons but also paid content for customers with a valid license. The first application is our Demo ERP which shows the full power of VisionX because it contains reports, a lot of actions, charts, a tree and will run as desktop, web and native iOS application.

The server-side of the store was developed with standard JVx and the client as well, but the client isn't available without VisionX. It's possible to host your own VisionX store in your own environment, but this feature needs a separate license.

Have fun ;-)

Tippspiel für die Fußball WM2014 - Los gehts!

wm2014   tippspiel_packung

Unser gutes altes Tippspiel ist für die WM 2014 bereit. Wir sind zwar etwas spät dran, aber noch ist alles möglich.

Wenn du einen unserer 3 Fan-Preise gewinnen möchtest, spiel einfach mit:

Der Link zur Info Seite: http://wm2014.sibvisions.com

Vergiss bitte nicht, auf die Topwette (der Weltmeister). Damit kannst du dir am Ende 20 extra Punkte krallen und ev. noch den Sieg an dich reißen. Die Topwette kann nur vor dem Turnierstart gesetzt werden.

Auch in diesem Jahr halten wir dich via Twitter, nach jedem Spieltag, auf dem Laufenden!

JVx swing UI / VisionX Button with popup menu

We didn't have support for Buttons with popup menus in JVx because standard Swing doesn't support this feature out-of-the box. But such a component would be very useful for some UIs.

We didn't change our UI definition but we started with support in Swing. Our JVxButton now has support for showing a popup menu. It could be like this one:

DropDown

DropDown

We've added some buttons to VisionX, because it reduces the amount of buttons :)

VisionX with new buttons

VisionX with new buttons

It's easy to use the new feature in your Swing application and also in your JVx application (for Swing UIs):

UIPopupMenu pmDocumentation = new UIPopupMenu();
pmDocumentation.setTranslation(getLauncher().getTranslation());
       
pmDocumentation.add(miHelp);
pmDocumentation.add(miSpecification);
       
((JVxButton)butDocumentation.getResource()).setPopupMenu((JPopupMenu)pmDocumentation.getResource());
       
//because we add the resource
pmDocumentation.addNotify();

There are some things to know:

  • Set the translation because the resource is added and the UIPopupMenu doesn't have a parent.
  • Call addNotify to enable translation (same problem because of missing parent)
  • You should check if the resource of the button is an instance of JVxButton to be UI technology independent

If you work with above code, you'll have all JVx features like simple event handling or translation.

DOAG 2014 - I'm a speaker

2014-Development Banner-Speaker-180x180   I'm a speaker at DOAG 2014 in Dusseldorf. My talk will be about "Rapid development - Oracle Forms and Java united"

Check the schedule at 3:30 pm Schnell entwickeln! Vorteile von Forms und Java vereint.

I'll show you how you can develop ERP Applications with Java and embedd them into your existing Forms. You'll see how both worlds work together. Don't miss well known Features of Oracle Forms. I'll show you that Java has the same features and more. If you want to know more about fancy Forms - listen to my talk.

VisionX Solution Store

With the next VisionX release we'll include the Solution Store. It's exactly what it sounds like and even better.

The Solution Store is a place for Applications, AddOns, Modules and other pluggable components for VisionX. The Store will be hosted in our infrastructure and it will be a Store in the cloud. But it will be possible to run your own store in your own infrastructure. The "cloud store" will be public and has special offers for users which owns a valid VisionX license. We'll use the store to share demo applications and other free stuff. It'll be easier for you to install our demo applications because you'll know where they will be.
The Solution Store is seamless integrated in VisionX and is super easy to use.

A first impression:

VisionX Solution Store

VisionX Solution Store

The store itself is a JVx application (backend and frontend) but it's not Open Source.

The big advantage is flexibility for you and your suppliers. Your suppliers will be able to add specific versions of an application without changing your VisionX installation. If you have different AddOns or test applications, simply add it to the store and don't loose anything. If you delete an application, no problem it's still in your own Store.

More...

More...

The Store integration will be available with one of our next nightly builds for a small group of customers.

VisionX Feature - Application check

Since VisionX 2.0 we have a feature that checks "application healthieness". This feature is not important for end-users but could be important for developers. If a developer manually changes source code of an application, it's possible that the application has compile problems after next VisionX update. This could happen if an API was changed or a library was missing. If an application couldn't be updated or has other unexpected errors, you'll get following in VisionX

Application check

Application check

If you click on the black sign, you'll see all problems. You can export the list and after all problems were fixed, the application sign will be removed. It's not possible to start an application with such a sign because you could destroy parts or the whole application. It's a quality improvement for VisionX and you.

New JVx search feature

We've added a new feature to our model. It's an additional search row. The row is invisible per default, but you can show the row if you need/want it. With this additional row visible, your tables automatically will show a search row like this:

New search row

New search row

We use the search row with background color green, in our applications. The feature will be available with next nightly build and it's already available in our repository.

It will be possible to en-/disable the search row with VisionX via Customizer:

En-/Disable search

En-/Disable search

This new feature is a must-have for all Oracle Forms users because this is a replacement for Enter-Query Mode.

VisionX 2.0.4 has new search features

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

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:

editors

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... :)