DOAG 2016 - I'm a Speaker
![]() |
I'm a speaker at DOAG 2016 in Nuremberg. My talk will be about "JVx introduces itself. Back to efficiency" |
![]() |
I'm a speaker at DOAG 2016 in Nuremberg. My talk will be about "JVx introduces itself. Back to efficiency" |
Our JVx headless UI (aka JVx.web) implementation is available as maven snapshot:
Don't forget the snapshot repository:
Our JVx mobile project is available as maven snapshot:
and only the API
Don't forget the snapshot repository:
Our JavaFX UI for JVx is available as maven snapshot:
or only JavaFX extensions
and don't forget the snapshot repository:
Our JVx online help system is available as maven artifact:
and as snapshot (weekly):
We're happy to announce that JVx 2.5.1 is available.
Our push support has nothing to do with Websockets. It's a technology independent solution for JVx. The Push-light mechanism is available on server-side and enables you to send objects from the server to the client. If you use a direct connection betwenn client and server, the objects wil be sent immediate (e.g. vaadin UI). If you use a serialized connection, the objects will be sent with next client call or alive check.
The API is simple:
or, in a Thread
Thread th = new Thread(new Runnable()
{
public void run()
{
try
{
int i = 0;
while (isMessageLoopEnabled(i))
{
Thread.sleep(200);
broker.publish("MESSAGE", getMessage(i++));
}
}
catch (InterruptedException ie)
{
//done
}
}
});
th.start();
It's also possible to publish to all clients, via ICallBackBroker.
The client code is short and simple:
We support H2 with a custom H2DBAccess. The auto detection works with URLs: jdbc:h2:.
We support SQLite with a custom SQLiteDBAccess. The auto detection works with URLs: jdbc:sqlite:.
Read more...
We try to re-send requests, if errors occur during transmission. This feature will be available for serialized connections only.
We introduced ISessionValidator interface. It allows you to cancel the session after successful authentication. You don't need a custom security manager for this!
Simply configure the validator in your config.xml:
ICellFormat got a Style attribute and the createCellFormat of IFactory got one more parameter.
The full changelog is available here.
This is a follow-up post for: Eclipse MARS with ANT and JRE 6 (story).
New Eclipse version, same problem. We have an updated ant plugin for you.
The plugin was created for:
Don't forget the -clean start (read the original article for more details).
Download the plugin from here. It works for us - no warranty!
The next JVx release will be version 2.5. It will be available by the end of this week (beginning of July). It's a really cool release because JVx got awesome new features. We had to change the API a little bit but it shouldn't be a problem for your existing applications.
Our push support has nothing to do with Websockets. It's a technology independent solution for JVx. The Push-light mechanism is available on server-side and enables you to send objects from the server to the client. If you use a direct connection betwenn client and server, the objects wil be sent immediate (e.g. vaadin UI). If you use a serialized connection, the objects will be sent with next client call or alive check.
The API is simple:
or, in a Thread
Thread th = new Thread(new Runnable()
{
public void run()
{
try
{
int i = 0;
while (isMessageLoopEnabled(i))
{
Thread.sleep(200);
broker.publish("MESSAGE", getMessage(i++));
}
}
catch (InterruptedException ie)
{
//done
}
}
});
th.start();
It's also possible to publish to all clients, via ICallBackBroker.
The client code is short and simple:
We support H2 with a custom H2DBAccess. The auto detection works with URLs: jdbc:h2:.
We support SQLite with a custom SQLiteDBAccess. The auto detection works with URLs: jdbc:sqlite:.
Read more...
We try to re-send requests, if errors occur during transmission. This feature will be available for serialized connections only.
ICellFormat got a Style attribute and the createCellFormat of IFactory got one more parameter
![]() |
I'm a speaker at IT-Tage 2016 in Frankfurt - December, 14th. My talk will be about "JVx – Zurück zur Effizienz! " The full time table. |
If you work with JDBC and MySQL, you will most likely be aware of one shortcoming: MySQL can not stream the results from a query (well, actually it can, but the feature is quite limited). That means that up until now JVx has always received and stored the full result set in memory which it received from MySQL. No paging was performed as it was done in the Oracle implementation.
MySQL does support the limit clause, which allows to limit the results to either a certain number of rows, or a certain range of rows. How does it look like?
This will fetch the data starting by the 5th row up to the 15th row, so it will skip the first five rows and then return the next ten. As this is a database builtin, no additional data is send over the wire except the actual requested rows. This is perfect if you want to limit your queries, for example, because you know that you don't need more than 5 rows even though there are 50,000 rows.
With the old behavior, without limit clause, the JDBC MySQL driver would fetch the complete result of the query and only we would do some cutting on it (mainly dropping not needed rows at the start). That meant that the complete result set was always loaded into memory, which itself might have caused that you were unable to execute certain queries, especially if they contained bigger blob columns.
With the new behavior, the limit clause is appended to the query as needed, which means that the JDBC MySQL driver has to load a lot less data and a lot less data is send over the wire.
But there is an additional cost associated with the usage of the limit clause. Because the fetches are separate statements, all rows leading up to the beginning row have to be selected, too. Let us return to our first example, the query of the TEST table. We only want 10 rows starting from the 5th row, that means our result set only contains 10 rows. However, MySQL has (obviously) to query, select and discard the first five rows so that it can start sending us the rows that we actually want. That means that the cost of selecting pages increases. Off to pretty graphics!
Note that the fetch time is accumulative.
Let us look at this again in detail, to be exact the fetching of the first 1500 rows.
What we see here is quite good news, actually, because with the new implementation with the limit clause, you can consecutively fetch 600 rows in the same time as the fetching of the 4400 rows with the old implementation. The big difference here is that the first set of ~113 rows returns close to immediately and consecutive fetches are equally fast. This is awesome because we can now display initial data faster, even few it is fewer data in the end and slows down the more data is fetched afterwards.
As you can see from the charts, we already did a short experiment to improve this further, and we are confident that we can implement such a solution which dynamically fetches more rows to reduce the overall fetch time while still preserving that the first rows are displayed fast, further improving GUI responsiveness.