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

Discontinued QT UI

Our QT UI is 3 years old and was created as proof of concept for our generic UI. It's still 0.7 beta an we never had ideas for a real 1.0. Now we know that JVx' technology independent UIs work because we have different solutions with GXT and vaadin, mobile and our headless UI implementation.

We don't belive in QT Jambi as GUI toolkit and think the future of Java GUI toolkits is reserved for JavaFX or a completely new toolkit. Because of this fact, we discontinue our QT UI implementation and we'll clean our repository.

Project news

Some years ago, we started a project with the name OnlineHelp. It was used to create simple online help pages for applications. The project was implemented with GXT 2.1 and was really useful. It's still useful but the technology is old, and GXT is not our best friend. Of course newer versions are really fancy, but the license is not the best for commercial applications.

Some month ago, we decided to switch completely from GXT to vaadin - all our projects. The first project was our webUI and we make good progress. We're near to a first release, but we have no definite date for it (Q4/13 should be possible). The second project is the online help. We make good progress and have a first preview:

Online Help with vaadin

Online Help with vaadin

The style is similar to our new web application style but not a big change compared to our old online help, because our users like it:

Online Help with GXT

Online Help with GXT

The new style is fresh but not too much... We added some new features like full-text search and topic navigation (previous, next). It's a first preview and not more!

The project has now it's own project page and is not anymore a sub project of JVx. The license is still Apache 2.0.

Maven deployment via Ant

We are no Maven lovers, because it helps to forget how things work. But we think the dependency management is useful. It's great for developers who need specific library versions without managing them manually.

The user aspect is one thing, but nobody tells you that it's not trivial to release libraries. One problem is the pre-deployment process. Before you are able to deploy your jar files, you have to do a lot of things like GPG key generation, publishing GPG key, find the right repository, prepare your build, special pom cration and so on.

If you already have release builds with version numbers, javadoc and source archives, you'll save a lot of time. If you don't have complete and clean release builds - see you later.

Let's start with a good documentation about requirements:
https://docs.sonatype.org/display/Repository/Sonatype+OSS+Maven+Repository+Usage+Guide

Of course, it assumes that you'll use Sonatype as your repository, but all others are not too different.

This posting is not a complete documentation. It simply shows the problems we had.

Our simple pom files:
pom.xml (jvxall)
pom.xml (jvxclient)

The first is with dependencies and the second without, because our client doesn't have dependencies.

The real problems started with the integration in our ant script, because the documentation of Maven plugins were awful. It's easier to read the source code than to find out how plugins work. One example: Read following plugin documentation and tell me the valid values for "types" and "classifier". There are no examples on the page! Google around and copy/paste a little bit - awful!

Here's a working ant call

<typedef resource="org/apache/maven/artifact/ant/antlib.xml"
            uri="antlib:org.apache.maven.artifact.ant"
            classpath="${build}/maven/maven-ant-tasks-2.1.3.jar" />

<condition property="gpgexecutable"
     value="C:\Program Files\GNU\GnuPG\pub\gpg.exe" else="gpg">
    <and>
        <os family="Windows" />
   </and>
</condition>

<artifact:mvn>
    <arg value="org.apache.maven.plugins:maven-gpg-plugin:1.4:sign-and-deploy-file" />
    <arg value="-Durl=${mvn.url}" />
    <arg value="-DrepositoryId=${mvn.id}" />
    <arg value="-DpomFile=${maven.tmp}/jvxall/pom.xml" />
    <arg value="-Dfile=${mvn.jvx.jar}" />
    <arg value="-Dfiles=${mvn.jvx.sources.jar},${mvn.jvx.javadoc.jar}" />
    <arg value="-Dclassifiers=sources,javadoc" />
    <arg value="-Dtypes=jar,jar" />
    <arg value="-Pgpg" />
    <arg value="-Dgpg.executable=${gpgexecutable}" />
</artifact:mvn>

Above call submits e.g. jvx-1.1.jar, jvx-1.1-javadoc.jar and jvx-1.1-sources.jar to the repository.

Why one call instead of 3 separate calls, as described in the documentation?

Short: It's better :)
Long: It's better to submit all dependent files in one "maven session". Above call creates a new maven project and if you call this command per file, there's no logical connection between them. If you plan to deploy snapshot releases - forget it - it doesn't work with different calls because every upload gets a new buildnumber. But all files need the same buildnumber! Such deployments can't be used. If you read the Sonatype document, you saw that "deploy" task didn't deploy javadoc and sources! The "stage" task did. I'm not sure, but I think they had the same problem with separate uploads! Trust me, above call works with snapshots and final releases.

Our naming conventions

<property name="mvn.jvx.jar" value="${release}/maven/${release.name}-${versionnumber}${maven.version.postfix}.jar" />
<property name="mvn.jvx.sources.jar" value="${release}/maven/${release.name}-${versionnumber}${maven.version.postfix}-sources.jar" />
<property name="mvn.jvx.javadoc.jar" value="${release}/maven/${release.name}-${versionnumber}${maven.version.postfix}-javadoc.jar" />

(${maven.version.postfix} is -SNAPSHOT for snapshot releases and empty for final releases)

Repository Id, URL

${mvn.id} = sonatype-nexus-staging
${mvn.url} = https://oss.sonatype.org/service/local/staging/deploy/maven2

Other problems?

Proxy settings for Maven, Use an external GPG key, Autentication.

If you copy the following settings.xml to <users.home>/.m2 and modify it to fit your needs, it should solve all problems:

<?xml version="1.0" encoding="UTF-8"?>

<settings>
  <servers>
    <server>
      <id>sonatype-nexus-snapshots</id>
      <username>username</username>
      <password>password</password>
    </server>
    <server>
      <id>sonatype-nexus-staging</id>
      <username>username</username>
      <password>password</password>
    </server>
  </servers>
  <profiles>
    <profile>
      <id>gpg</id>
      <properties>
        <gpg.passphrase>gpgkey</gpg.passphrase>
      </properties>
    </profile>
  </profiles>
  <proxies>
    <proxy>
      <id>firewall</id>
      <active>true</active>
      <protocol>http</protocol>
      <host>10.0.0.1</host>
      <port>3128</port>
      <username></username>
      <password></password>
      <nonProxyHosts>localhost,127.0.0.1</nonProxyHosts>
    </proxy>
    <proxy>
      <id>firewall-2</id>
      <active>true</active>
      <protocol>https</protocol>
      <host>10.0.0.1</host>
      <port>3128</port>
      <username></username>
      <password></password>
      <nonProxyHosts>localhost,127.0.0.1</nonProxyHosts>
    </proxy>
  </proxies>
</settings>

We configured the proxy via ant build.xml

<target name="proxy.check">
  <condition property="proxy.enabled">
    <and>
      <socket server="10.0.0.1" port="3128"/>
    </and>
  </condition>
</target>

<target name="proxy" depends="proxy.check" if="proxy.enabled">
  <property name="proxy.host" value="10.0.0.1"/>
  <property name="proxy.port" value="3128"/>
  <property name="proxy.user" value=""/>
  <property name="proxy.pass" value=""/>
   
  <setproxy proxyhost="${proxy.host}" proxyport="${proxy.port}"
            proxyuser="${proxy.user}" proxypassword="${proxy.password}"/>
</target>

Simply add "proxy" task as dependency of another task.

Maybe it's easier to release libraries with other build systems or maybe it works out-of-the-box with Maven itself, but the whole process is really bad.

Good luck!

JVx - Maven snapshots

We now provide our JVx nightly via Maven Snapshots. Our nightly build job automatically uploads new JVx snapshots. If you want to use the last JVx snapshot in your project, simply add:

<repositories>
  <repository>
    <id>sonatype-nexus-snapshots</id>
    <name>Sonatype Snapshots</name>
    <url>https://oss.sonatype.org/content/repositories/snapshots/</url>
  </repository>
</repositories>

to your pom.xml and set JVx' version to: 1.2_beta-SNAPSHOT.

If you use our new JVx archetype 1.1.9, simple change the version in the master project:

<properties>
  <jvx.version>1.2_beta-SNAPSHOT</jvx.version>
</properties>

All SNAPSHOT versions contain debugging information. The release versions don't.

VisionX 1.2 Preview - Trial - available

The preview version of VisionX 1.2 is available as Trial version for your desktop. It offers all available features and shouldn't have any problems. The problems on MacOS are solved and it works without problems on Mac OS X 10.6, 10.7 and 10.8.

Simply download the preview version and try it on your own device!

If you already own VisionX, check your download area!

VisionX 1.2 Preview

VisionX 1.2 is planned for Q4/2013, but we'll show you some really cool features of the upcoming version. The current dev version is stable and we have a list of amazing productivity features.

  • An awesome feature is Undo/Redo for UI operations.

    This is a must for great UI design tools.

  • Xls Reporting is another key feature

    Simply create real XLS reports in seconds.

  • Xml Reporting is relevant for M2M communication and is included in VisionX
  • New Form validation support

    Create Forms and validate results with few mouse clicks.

  • Offline data gathering

    Create a XLS or XML report, add records to the created report and import the changed report into your application. This feature is amazing!

  • Liferay Portlet deployment

    Don't waste your time for portlet creation. Use VisionX and create a complete liferay portlet web application archive in seconds. Everything is pre-configured and ready-to-use. Let yourself be surprised.

  • You want More?

    Something like Mobile support and our new Vaadin UI... maybe in the next preview :)

Some impressions

Form validation

Form validation

 
XLS reporting

XLS reporting

Import report

Import report


ALL Features are available in our Cloud preview. Check it out today!

New project: toPDF

We tried to find a simple solution to convert MS Office files to pdf, without online services. We tried OpenOffice but the results were awful! There are a lot of free, and commercial, PDF printers available. But they are for desktops and a user has to print manually. We wanted a solution that works without user interaction.

There is a very useful open source project called PDFCreator. It also is a printer but has a useful API. The API is available via COM, which is not the best technology for Java, but it's also not bad.

We didn't find a ready-to-use solution for our idea and it shouldn't cost money. The solution had to be open source. We found some great commercial tools and SDKs but all of them were not cheap.

We spent some hours and used PDFCreator, Jacob and some other open source tools to create an "Online service for PDFCreator". The result of our work is toPDF.

What is toPDF?

It's a small library that allows conversion of files to PDF, via PDFCreator. It's also a web application that offers services for remote conversion via http. The application has a REST service and a simple servlet service.

Simply POST binary data via http request and receive a PDF in the response. The servlet supports multipart form-data and simple application/octet-stream as requests. The REST service also supports multipart form-data but also JSON requests.

A short example:

URL url = new URL(getServletService());

URLConnection ucon = url.openConnection();
ucon.setDoOutput(true);
ucon.setDoInput(true);
ucon.setUseCaches(false);
ucon.setRequestProperty("Content-Type", "application/octet-stream");
ucon.setRequestProperty("Content-Disposition", "attachment; filename=\"Forms.docx\";");

FileUtil.copy(ResourceUtil.getResourceAsStream("/com/sibvisions/topdf/Forms.docx"),
              ucon.getOutputStream());

byte[] byData = FileUtil.getContent(ucon.getInputStream());

or as Multipart:

MultipartUtil multipart = new MultipartUtil("UTF-8");
multipart.addDataPart("data", "Forms.docx",
                  ResourceUtil.getResourceAsStream("/com/sibvisions/topdf/Forms.docx"));

byte[] byData = multipart.post(getServletService());

The conversion via PDFCreator works great, but not perfect. There are different problems with small page margins in Word documents, problems with OpenOffice documents, ...

The problem is not toPDF, because it works as good as PDFCreator does. If PDFCreator doesn't convert a document, toPDF has no chance to convert it.

We had problems with simple image conversions to PDF because default windows print dialog appeared and we didn't associate image extensions with another tool. We solved the conversion of images with iText instead of PDFCreator. Now it's possible to create PDFs from images very easily without pop-ups.

License?

AGPL 3.0, because PDFCreator is licensed under GPL and iText is licensed under AGPL.

Used tools and libraries

toPDF is a mixture of different open source projects:

PDFCreator
iText
RESTlet
Jackson
JVx
Apache commons FileUpload and IO
Jacob
PDFCreator4J

Installation?

  • toPDF was written in Java, but the installation only makes sense on Windows (same requirements as PDFCreator)
  • Install PDFCreator (default desktop installation, with COM)
  • Deploy topdf.war on Tomcat or JBoss or your preferred Java application server. If your application server runs as windows service, be sure that it runs as OS user.

What's JVx in 2013?

JVx was started in 2008 as simple library for application development. The focus was on technology independce. It shouldn't matter which technology will be used in the future. In 2008, Swing was first choice for Java applications. In 2014, it will be JavaFX. JVx was designed to solve technology problems. It's not only a library, it's a full-stack-framework - an all in one solution for application development. But it's still a simple libray. There are no dependencies between the different application layers. Only use the persistence or an UI control or some utility classes. JVx is the right choice.
The big advantage of JVx is that it's API is simple and doesn't hide underlying technologies. Be technology independent or not - it's your decision!
The architecture is clean and easy to understand. The codebase is small and the source code meets the highest quality requirements. JVx is not only open source software, it's professional open source software.

What happened in the last few years with JVx?

We had some plans for JVx. The first was a core library for super-fast application development. This library is known as JVx. The other plans were about mobile applications, and different UI implementations like QT, GXT and a headless UI technique for automated tests. Of course, during recent years we played around with many libraries and frameworks like Pivot, GWT, vert.x, POI, ewsAPI, JasperReports, Birt, RAP, Jspresso, xdev, etc.

The result of our hard work is a framework that allows application development for desktop applications, web applications and mobile applications. BUT, the big difference to ALL other "hybrid" frameworks is that we write the application once and the same application runs without changes on ALL platforms.
JVx is a single-sourcing framework as well! Oh, and JVx is the only Java framework that allows a seamless integration in Oracle Forms.

We don't know a framework on this planet which is like JVx. It's small, it's simple, it's powerful, it's Open Source, it's professional, it's amazing.

Sounds unbelievable?

Maybe, but convince us that the opposite is true.

We know that JVx is not the solution for all problems because it was designed for database application development and not for other things. It's not a good idea to create a web-shop or a role-playing game with JVx. There are better tools for that. But if you develop backend applications that needs (or not) a modern web frontend and access with mobile devices, than JVx is your friend!

During the last few years, we had as much fun as possible. We put all our know how and time in JVx and we know that our vision will be reality! We show you two images that explains a little bit better what JVx covers

JVx' 2013

JVx' and independent projects

Above image shows projects built on-top of JVx. Following image shows what JVx - as library - supports. The list is not too detailed, but you should get an idea.

JVx' features

JVx' features

Our next steps?

The framework itself is great, but we need more documentation. We can't write as much howtos, intros as you need but we do our best. With JVx, we solve many problems but you don't know which ones without documentation. This is the biggest howto for 2013.

Another challenge is our JavaFX UI. We are working on it!

The next important milestone is the 1.0 Release of our vaadin UI. It's already code complete but we are still reviewing... be patient if you won't build on your own.

More class diagrams

We have more class diagrams for you. They should help to understand how JVx "thinks".

The first one shows the persistence (server-side):

JVx Persistence

JVx Persistence

You work with our generic model (client-side) to access data:

JVx Generic model

JVx Generic model

and use conditions to filter data:

JVx conditions

JVx conditions

And the last one shows the application architecture with JVx' default implementation:

Application

Application

JVx UI class diagram

We got a lot of requests regarding a JVx UI class diagram. We didn't have one, because we thought that our javadoc is a good starting point. But you need it, and here it is.

JVx UI

JVx UI