Česky   |  Deutsch   |  English   |  Español   |  Français   |  Indonesia   |  日本語   |  한글   |  Polski   |  Português (BR)   |  Türkçe   |  中文   |  正體中文   |  Your Language  
Planet NetBeans is an aggregation of NetBeans related musings from all over the Blogosphere.
[RSS 1.0 Feed] [RSS 2.0 Feed]
[FOAF Subscriptions] [OPML Subscriptions]
Do you blog about NetBeans ? Add your blog to PlanetNetBeans.
Feed Subscriptions
pkeegan's blog (feed)
APIDesign - Blogs (feed)
ludo's blog (feed)
pandaconstantin's blog (feed)
hansmuller's blog (feed)
richunger's blog (feed)
tball's blog (feed)
David R. Heffelfinger (feed)
Carsten Zerbst's Weblog (feed)
Winston Prakash's Weblog (feed)
Michael's blog » NetBeans (feed)
DukeScript (feed)
ProNetBeans (feed)
Tim Boudreau (feed)
Paulo Canedo » NetBeans English (feed)
Anchialas' Java Blog (feed)
markiewb's blog (feed)
Need to find a title (feed)
Category: NetBeans | Software and Science (feed)
Roger Searjeant's blog (feed)
Inspiration and Expression » Netbeans (feed)
John O'Conner » NetBeans (feed)
Adam Bien (feed)
Ignacio Sánchez Ginés » NetBeans (feed)
Bernhard's Weblog (feed)
Michel Graciano's Weblog (feed)
Ramon.Ramos (feed)
Ozone and Programming » netbeans (feed)
NetBeans Ruminations » NetBeans (feed)
Arun Gupta, Miles to go ... (feed)
Geertjan's Blog (feed)
.JARa's Bilingual Weblog (feed)
JavaFX Composer (feed)
The Java Jungle (feed)
Jesse Glick (feed)
Martin Grebac (feed)
The NetBeans Community Podcast (feed)
NetBeans Profiler (feed)
NetBeans for PHP (feed)
NetBeans Web Client (feed)
Rechtacek's (feed)
Virtual Steve (feed)
My First Blog - Satyajit Tripathi (feed)
The Aquarium (feed)
Tinuola Awopetu (feed)
Insert Witty Irony Here (feed)
Gualtiero Testa » Netbeans (feed)
James Selvakumar's Blog » netbeans (feed)
nB gUru » NetBeans (feed)
Newsintegrator Blog » netbeans (feed)
Praxis LIVE » NetBeans (feed)
TechAshram » NetBeans (feed)
There's no place like » Netbeans (feed)
Anuradha (feed)
Netbeans6/6.5 my best practices (feed)
Java Evangelist John Yeary (feed)
Neil's Dev Stuff (feed)
Computer says null; (feed)
NetBeans Adventures, Java and more (feed)
Bistro! 2.0 (feed)
NetBeans Community Docs Blog (feed)
The Netbeans Experience (feed)
NbPython/ jpydbg / pymvs (feed)
Shanbag's Blog (ರಜತ ಲೋಕ) (feed)
Wade Chandler's Programming Blog (feed)
Devlin's Lab (feed)
Big Al's Blog (feed)
Code Snakes (feed)
In perfect (spherical) shape (feed)
Van Couvering Is Not a Verb (feed)
Diego Torres Milano's blog (feed)
Vroom Framework (feed)
Messages from mrhaki (feed)
Jeff's Blog (feed)
Manikantan's Netbeans (feed)
Oliver Wahlen's Blog (feed)
Shuttle between Galaxies (feed)
Welcome to my live... (feed)
Netbeans IDE Blog by Tushar Joshi, Nagpur (feed)
Devel Blog (feed)
diamond-powder (feed)
Antonio's blog (feed)
Where's my Blog?!

Powered by:    Planet

Last updated:
October 09, 2015 10:05 PM
All times are UTC

Sponsored by
sponsored by Oracle

visit NetBeans website
Adam Bien - October 09, 2015 01:55 AM
Mapping JPA OptimisticLockException Into HTTP Status Code

A JAX-RS resource deployed as an EJB will wrap all exceptions into javax.ejb.EJBException:

public class ToDosResource {

An javax.ejb.EJBException can be easily transformed by an ExceptionMapper into a meaningful HTTP status code:

public class EJBExceptionMapper implements ExceptionMapper<EJBException> {

    public Response toResponse(EJBException ex) {
        Throwable cause = ex.getCause();
        if (cause instanceof OptimisticLockException) {
            OptimisticLockException actual = (OptimisticLockException) cause;
            return Response.status(Response.Status.CONFLICT).
                    header("cause", "conflict caused by entity: " + actual.getEntity()).
                    header("additional-info", actual.getMessage()).


        return Response.serverError().
                header("cause", ex.toString()).build();

The 409 status code

"...Conflicts are most likely to occur in response to a PUT request. For example, if versioning were being used and the entity being PUT included changes to a resource which conflict with those made by an earlier (third-party) request, the server might use the 409 response to indicate that it can't complete the request..."
is a natural HTTP representation of the OptimisticLockException.

The example above was taken from the DoIt sample application of the effectivejavaee.com online course.

Real World Java EE Workshops [Airport Munich]>

Adam Bien - October 08, 2015 10:10 AM
Airhacks Java EE Q&A Live From JavaOne San Francisco

There are already > 40 registrations (so pre-enroll early) for the JavaOne San Francisco Airhacks live show. The session is going to be recorded and published as usual to airhacks.tv

Even if you cannot participate, ask your questions now: https://gist.github.com/AdamBien/69b6268ea48d2c65536f. However, live questions will have precedence.

The coordinates are:

Session Type: BOF (Birds-of-a-Feather) Session
Session ID: BOF1849
Session Title: Most Popular Java (EE) Q&A: Airhacks.tv Live
Venue / Room: Parc 55 Cyril Magnin II/III
Date and Time: 10/26/15, 19:00 - 19:45

Prepare your questions and see you in person!

See you at Java EE Workshops at Munich Airport, Terminal 2 or Virtual Dedicated Workshops / consulting

Real World Java EE Workshops [Airport Munich]>

APIDesign - Blogs - October 07, 2015 07:44 AM
OracleLabs in Prague is Hiring!

OracleLabs has a team in Czech Republic and is looking for new candidates to expand it. Innovation is feeding us, but that doesn't mean you have to be a scientist. We have enough clever people - we need also somebody to work!

In case you are interested in conquering the world with the fastest (J)VM on the planet backed by a strong tooling (based on NetBeans) write to me.

--JaroslavTulach 07:44, 7 October 2015 (UTC)

Geertjan's Blog - October 07, 2015 07:00 AM
Everlaw Open Sources TypeScript Plugin for NetBeans IDE

What's beautiful about open source is that unexpected things happen out of left field when you least expect it. While tinkering a bit with the beginnings of a new TypeScript plugin for NetBeans IDE, Twitter brought news of the open sourcing of a TypeScript plugin for NetBeans by Everlaw, which is an organization I had never heard of before:

Go here to read the full announcement by Everlaw:


And here's how the TypeScript editor by Everlaw looks, i.e., notice the syntax coloring, code completion, and Navigator support, in a screenshot made by me myself personally after setting up and installing the plugin into NetBeans IDE 8.0.2: 

For all the details and feel free to clone the repo, go here:


Go here to install the plugin:


Isn't open source simply awesome? 

Geertjan's Blog - October 06, 2015 04:35 PM
GlassFish, NetBeans, Payara Party

Are you a fan of GlassFish, NetBeans, or Payara? Are you going to be at JavaOne? If so, put the "GlassFish, NetBeans, Payara Party" in your calendar!

The traditional GlassFish Party has been expanded to include the NetBeans and Payara communities, as always at The Thirsty Bear, at the end of Community Sunday, the day before the main event begins.  

Join us, attendance is free as always, a perfect way to kick off your JavaOne!

Go here to sign up, limited number of tickets available.

Adam Bien - October 06, 2015 09:08 AM
Questions About Commenting

Cody asked me the following questions about code quality and commenting for a research paper:

Cody: What is a good, necessary comment?

Adam Bien: A comment should be brief and explain the developer's intentions or the "why?". A reader wrote a really concise advice how to write JavaDoc. Java documentation is a very good example how to write good documentation.

Cody: What is a bad comment and how much could it cost?

Adam Bien: Outdated comments are the worst. Usually comments are auto-generated by the IDEs and so entirely superfluous. Auto-generated comments are completely ignored by developers and so cannot cause any harm.

Cody: Can you describe any experiences where a project was disrupted over an issue involving code comments?

Adam Bien: Projects are disrupted by QA departments forcing developers to comment all public methods. In such cases developers are forced to waste their time for comments without any added value.

Cody: While troubleshooting or maintaining software, to what extent can good comments help the process?

Adam Bien: In all troubleshooting projects so far we only relied on the debugger and the source code. In problem-solving task forces I neither trust comments nor logs. However a pointer in a comment to an algorithm or a usage example can be really helpful.

If you could have the perfect developer to work alongside, what would he or she be like?

Interested in programming with a good sense of humor. Programming should be fun.

Comments are extracted for documentation as well. In general, how could software documentation be improved?

Documentation should be as brief as only possible. Ideally the code should be self-documenting. Also a good, explorative UI, only requires a minimum set of documentation.

Do you think it would be possible to scientifically measure comments to determine if they are good or bad, or is it just a matter of preference?

It is also hard to scientifically measure the quality of a novel. It should be possible to measure the amount of redundancy of a comment comparing it with the corresponding code snippet. I think we could scientifically proof that a comment is bad, but is really hard to scientifically approve the quality of a comment.

Cody -- thank you for the questions and good luck with your work!

Real World Java EE Workshops [Airport Munich]>

Geertjan's Blog - October 06, 2015 07:00 AM
GlassFish and NetBeans Party

Are you a fan of GlassFish or NetBeans? Are you going to be at JavaOne? If so, put the "GlassFish and NetBeans Party" in your calendar!

The traditional GlassFish Party has been expanded to include the NetBeans community, as always at The Thirsty Bear, at the end of Community Sunday, the day before the main event begins.  

Join us, attendance is free as always, a perfect way to kick off your JavaOne!

Go here to sign up, limited number of tickets available.

Adam Bien - October 05, 2015 04:05 PM
Programming Language Index For October - Java Is Still #1

In October 2014 Java was #2 now it is #1 with ~6% lead to C. Objective-C drops out of TIOBE top 10, Ruby re-joins the top 10

[from TIOBE]

After 20 years, Java is still hot.

See you at Java EE Workshops at Munich Airport, Terminal 2 or Virtual Dedicated Workshops / consulting

Real World Java EE Workshops [Airport Munich]>

Geertjan's Blog - October 05, 2015 11:55 AM
Oracle Cloud Day with NetBeans IDE

Oracle Cloud Days have been taking place all over the world. In the Netherlands, Oracle Cloud Day will be held tomorrow, in Nijkerk, all the details are here, in Dutch.

What's special about the Netherlands implementation of Oracle Cloud Day is that there'll be a strong developer element incorporated into it. The following follow one after the other and use NetBeans in one way or another. Martijn Verburg, London JUG Leader and diabolical developer, is doing a session in the evening with Blue4IT, though he's stopping by in Nijkerk for Oracle Cloud Day especially for this event.

Here's the program for the session in/around NetBeans IDE:

  • 11:10 - 12:05: NetBeans IDE: Your Ladder Into The Cloud (Geertjan Wielenga)
  • 13:00 - 13:55: Diabolical Developer's Guide to Performance Tuning in the Cloud (Martijn Verburg)
  • 14:20 - 14:45: Leveraging the Power of Microservices: Practical API Programming into the Cloud (Timon Veenstra)

Also, a real cloud expert, Andre Kuipers, an actual astronaut from the Netherlands, will be there too.

Here's where to register for the event!

Michael's blog » NetBeans - October 04, 2015 10:10 PM
NetBeans and Java EE: Download and compile JSF

Mojarra is the name of the JavaServer Faces reference implementation. In September 2015 the source moved from a Subversion based control system to a Git based server. This blog explains, how to download and compile the bleeding JSF version. The … Weiterlesen

APIDesign - Blogs - October 02, 2015 12:28 PM
Can Java Speed Ruby up? Yes, ten times!

Speed of Ruby has never been great. There were many attempts to improve it, but none delivered on its promise. All failed, but one! JRuby implementation running on top of JVM spiced with a bit of Truffle and Graal is in fact ten times faster than standard Ruby version.

Watch this video to see how can Java and its virtual machine help those other poor and slow languages!

--JaroslavTulach 12:28, 2 October 2015 (UTC)

Geertjan's Blog - October 02, 2015 07:00 AM
Payara is Growing!

Great news from Payara—things are going really well for them:

Read the announcement in more detail here:


Also notice that they're happy NetBeans users:

The above information comes from here, where you can find more testimonials from companies using NetBeans all over the world:


Does your company also want to be promoted on the page above? Write to webmaster at netbeans dot org for information.

Geertjan's Blog - October 01, 2015 10:52 AM
YouTube: Digging into Node.js with NetBeans IDE

The word is spreading—NetBeans knows Node! Watch these two quick screencasts to catch up with the latest on what can be done with Node.js and NetBeans IDE.

Adam Bien - October 01, 2015 07:24 AM
JSF: NullPointerException in SelectItemsIterator.java:478 and the Solution

A NullPointerException at com.sun.faces.renderkit.SelectItemsIterator$GenericObjectSelectItemIterator$GenericObjectSelectItem.updateItem(SelectItemsIterator.java:478) happens in case the itemLabel bound to a null String

 <f:selectItems var="country" itemLabel="#{country}" (...)"/>

Tested with GlassFish v3

See you at Java EE Workshops at Munich Airport, Terminal 2 or Virtual Dedicated Workshops / consulting

Real World Java EE Workshops [Airport Munich]>

Geertjan's Blog - September 30, 2015 07:00 AM
YouTube: Remote Java SE Platform, JavaFX, and NetBeans IDE

How to setup Remote Java SE Platform in NetBeans IDE running on Windows 10, deploy JavaFX application running on Raspberry Pi 2/Raspbian Jessie.

Geertjan's Blog - September 29, 2015 06:20 PM
ECMAScript 6, TypeScript, and NetBeans IDE

I'm working with a couple of others on new support in NetBeans IDE for ECMAScript 6. TypeScript is a strict superset of ECMAScript 6 and looks as follows, right now, in the ECMAScript 6 editor that is in progress. Click to enlarge to see the whole context:

A lot of NetBeans users have been asking for support for ECMAScript 6 and TypeScript for quite some time. Since JavaScript is increasingly important to NetBeans, it is likely that there will be official support for ECMAScript 6, the only question is when, in terms of priorities and staffing and so on. Official support for TypeScript might be more difficult to come by in the end and hence the free and open source nature of NetBeans enables developments such as the following to which anyone out there is welcome to join:


Notice several other features relating to TypeScript that are being worked on above. 

Please fork, extend, etc. Let's make this a great new feature for NetBeans IDE together. 

DukeScript - September 28, 2015 09:54 AM
Can't touch this? Hammertime!

I’ve recently been asked how to deal with touch events in DukeScript. One option is to use hammer.js, a JavaScript Library that supports the most important number of events and gestures. You could create an API for that and wrap the events in Java Events, but it’s much more elegant to stay in the knockout world.

We don’t need to pollute our viewmodels with the notion of events, we can still use declarative bindings by simply registering knockout bindings for the hammer events. I used knockout-hammer as starting point, but I had to modify it a bit to get it to work:

(function () {

    ['hold', 'tap', 'doubletap', 'drag', 'dragstart', 'dragend', 'dragup', 'dragdown', 'dragleft', 'dragright', 'swipe', 'swipeup', 'swipedown', 'swipeleft', 'swiperight', 'transform', 'transformstart', 'transformend', 'rotate', 'pinch', 'pinchin', 'pinchout', 'touch', 'release'].forEach(function (gesture) {
        return ko.bindingHandlers["hm" + (gesture[0].toUpperCase()) + (gesture.slice(1).toLowerCase())] = {
            init: function (element, valueAccessor, allBindingsAccessor, data) {
                var handler, options, _ref, wrapper;
                wrapper = function (ev) {
                    handler(data, ev);
                if (!valueAccessor()) {
                    return false;
                options = allBindingsAccessor().hmOptions || {};
                handler = valueAccessor().bind(data);
                if ((_ref = data.hammer) == null) {
                    data.hammer = Hammer(element, options);
                ko.utils.domNodeDisposal.addDisposeCallback(element, function () {
                    return data.hammer.off(gesture, wrapper);
                return true;


Now all we need to do is to make sure the two javascript libraries are loaded in the correct order. I created two classes for that. These classes are in the javascript libraries module of my DukeScript project (because the POM of this module has some special settings for handling JavaScript). Both classes use the @JavaScriptRessource Annotation to register the JavaScript libraries:

public class HammerLibrary {
    @JavaScriptBody(args = {},body="")
    public static native void init();
public class KnockoutHammerLibrary {
    public static void init(){

    @JavaScriptBody(args = {},body="")
    public static native void init_impl();

When calling KnockoutHammer.init(), HammerLibrary.init() is called first, so this JavaScript file is loaded before the bindings. Now we can use our library in a project:

In index.html:

<!DOCTYPE html>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <style>  #myElement {
    background: silver;
    height: 300px;
    text-align: center;
    font: 30px/300px Helvetica, Arial, sans-serif;
        <div id="myElement" data-bind="hmTap: onHmTap, hmOptions: {interval:500}, text: text"></div>

The actual event is prefixed with “hm”, so it’s “hmTap”. The name of the handler function is “onHmTap”. We can also pass some constraints. In our case we collect all the taps that happen in a 500ms interval. Now let’s have a look at the function that is called on our viewmodel:

@Model(className = "Data", targetId = "", properties = {
    @Property(name = "text", type = String.class)
final class DataModel {

    private static Data ui;

     * Called when the page is ready.
    static void onPageLoad() throws Exception {
        ui = new Data("tap here", 400);

    public static void onHmTap(Data data, int tapCount) {
        data.setText("Tapped "+tapCount);

DukeScript recognizes the “tapCount” property of the method signature and automatically extracts the matching value from the event. Now launch the application on your Android or iOS device and check the result. If successful I suggest doing a little victory dance to this tune.

You can find the sample project on github.

Geertjan's Blog - September 28, 2015 07:00 AM
Programmatically Selecting a Node

When my application starts up, the Node hierarchy is automatically expanded and the selected Node you see below is automatically selected:

Here's how:

try {
    em.setSelectedNodes(new Node[]{
} catch (PropertyVetoException ex) {

You're probably want some check to make sure the Node exists, is not Null, etc. Another factor to consider is that you may need to add a thread to wait for the Nodes to be created before selecting the one you'd like to have selected.



Adam Bien - September 28, 2015 04:16 AM
Introducing loadr

With the self-contained utility loadr you can deploy Java EE applications to Payara / GlassFish without asadmin (and so dependency to a server). Loadr is a useful tool in CI environments and local automation workflows.

See you at Java EE Workshops at Munich Airport, Terminal 2 or Virtual Dedicated Workshops / consulting

Real World Java EE Workshops [Airport Munich]>

Geertjan's Blog - September 25, 2015 11:29 AM
#netbeans on freenode

Ralph and I are back on #netbeans on freenode!

We'll be here on IRC again every week or so. Until then!

APIDesign - Blogs - September 25, 2015 09:31 AM
Speaking at JDD in Krakow

I'll be speaking at JDD in Krakow in middle of October. In case you have a Java related message to deliver to the JDD galaxy, leave it here. I'll do my best to deliver it.


I enjoyed Krakow JDD conference in 2013 and based on my experiences I wrote the languages essay. Now I am invited to speak at JDD 2015 about Truffle and Graal and while there I am also going to do a workshop about DukeScript.

If you have a message that I should share with visitor's in Krakow, leave it here:

Name (required):


--JaroslavTulach 09:31, 25 September 2015 (UTC)

Geertjan's Blog - September 24, 2015 11:36 AM
Sessions Featuring NetBeans at JavaOne 2015

Coming to JavaOne this year? There's a long list of sessions of various kinds where you'll see and learn about NetBeans IDE.

There is an overview of them all, starting with Monday, showing who is speaking, and where to go to see them:

Full list:  


Adam Bien - September 24, 2015 09:26 AM
Loadr CLI For Payara / GF Released

Loadr CLI version 0.0.1 was released.

Loadr CLI comes as a single jar without any additional dependencies and allows convenient deployment and undeployment of Java EE applications.

java -jar loadr.jar -d http://localhost:4848 ../test-deployment/coffeebeans.war


coffeebeans -> "http://localhost:4848/management/domain/applications/application/coffeebeans"
To undeploy use: java -jar loadr.jar -u http://localhost:4848 coffeebeans

See full reference at github.com/AdamBien/loadr.

Loadr v0.0.1 was tested with Payara 4.1.153 (Full Java EE), but should also work with various GlassFish versions.

See you at Java EE Workshops at Munich Airport, Terminal 2 or Virtual Dedicated Workshops / consulting

Real World Java EE Workshops [Airport Munich]>

Adam Bien - September 23, 2015 03:53 AM
Mission Critical, Low Latency Java EE In Manufacturing Systems -- An Interview With iTAC

Frank, could you briefly introduce yourself?

I'm an senior software architect and developer with over 20 years' experience in analysis, design, implementation and testing Java applications. Since 2001 I'm working at iTAC Software AG, Germany in the advanced technology division. In this division, we build the basic technical frameworks to place the business logic on top of it. During the last 8 years' I'm involved in design and implementation of an enterprise Java based middleware, which provides high availability, scalability and low latency to fulfill the requirements for a online manufacturing execution system. My roots are in the electrical engineering environment, but I've started with Java version 1.02 on the early OS/2 days :-)

What is the purpose of the application (iTAC.MES.Suite)?

Modern manufacturing industries have a need to optimize the whole production process. Beside collecting all types of manufacturing data (e.g. for traceability features, quality reports, ...), it's also a requirement to control the flow of manufacturing lines to optimize production quality. These Manufacturing Execution Systems (MES) are located architecturally between the shop floor production machines (often based on PLC systems) and the backend ERP systems. The product iTAC.MES.Suite provides an online MES system which is able to interact synchronously with the production machines. Because of the online characteristic of the iTAC.MES.Suite, it needs to be very fast in synchronous processing for all remote calls to not slow down the production lines. All data is stored in a relational database which reflects the current situation of the manufacturing online.

Your company back then was a "startup", right?

The company was founded in 1998 as a spin-off from Bosch Telecom. iTAC were among the first to promote and introduce internet technologies and Java in the manufacturing environment.

We migrated the application a few years ago from proprietary POJO application to Java EE 5. Did the migration affected productivity?

Not as much as we first thought, but overall it improved our productivity in development

What is the impact of Java EE on the code base. How much code could you delete during the migration? Do you see any potential for more simplification?

The impact was not as much as we thought. This is because of the special requirements for MES. One of the challenges was the communication protocol between client libraries and the Java EE servers. In manufacturing environments, our customers often integrate their technical equipment directly with our programming libraries. The manufacturing equipment and the steering programs are usually existing components. Integrators use our API libraries to tightly couple their systems to our central MES. To achieve this, we provide libraries for different languages, architectures and operating systems (e.g. Windows C-DLL, Linux so files, Windows .NET assemblies, JAR files and others). Java based manufacturing equipment is still the exception, usually they based on C/C++ systems. In this scenario, we need to call EJB business logic remotely (RPC) with a protocol which is independent from a Java EE application server vendor and downward compatible for many years - some manufacturing lines running for a decade or longer! While the manufacturing lines are running, we can't update client libraries - customers would chase us, if we would tell them to update all client libraries in all machines just to be able to update e.g. the Java EE application server version or switch to a different Java EE application server implementation/vendor. But when using standard remote EJB client container mechanisms exactly this would happen.

As a result we can't use the remote EJB interface to access the business logic which resides in EJB's. Instead we need a mechanism to provide a long term stable communication protocol which have always be downward compatible - even if we update or change the Java EE application server. To fulfill high availability and real load balancing, we had to build a special middleware on top the the Java EE stack to achieve all this requirements - as a consequence we don't use very much infrastructure code from the JEE application server. As you can see, the requirements for MES a very special compared to usual Java EE applications/projects.

How "mission critical" is the application?

MES are the perfect example for "mission critical" requirements. When an MES system fails, then the entire production is affected. Nowadays with just in time production and nearly no storage, it must never fail. We have a lot of automotive customers which delivers directly the large automakers, if their lines shut down, no car's will be produced - the real nightmare scenario for MES vendors...

How many peak transactions per second (or similar metrics) has the application to handle? Is Java EE fast enough?

One of our biggest customer using about 1500 clients (API library based and interactive GUI clients) and they produce about 25,000 rpc calls per second. Most of this calls have to return in about 50-100 milliseconds. Because of our own binary protocol with very less bandwidth consumption and small latency time, we can achieve this. This protocol uses the http listener endpoints of the Java EE servers which are very efficient today (e.g. grizzly in glassfish server). Java EE is definitely fast enough for our requirements.

How important is monitoring? Does your application implement any dashboards or runtime statistics?

For a complex software, monitoring is a must have. Beside the typical business monitoring functions, required for a MES, we also monitoring many technical probes for all our servers in the cluster and all clients (even the library based clients).

Your application is a product. On which application servers is your application servers is your application currently running?

Currently it's running on GlassFish, Payara and WebSphere, but we try to keep the code as portable as possible for other Java EE application servers.

We created a "shared nothing" architecture and the application was able to cluster across different application server vendors. Could you briefly describe the idea?

As described previously, we need a protocol which we developed by ourself. So, a consequence is to do also the high availability features by our product itself. We use a client based clustering, so all clients know about the current situation of the cluster e.g. how many cluster nodes are available, which services are available and how to reach them. To achieve this, we can only use stateless EJB's and CDI on server side (no stateful EJB's and no MDB's), but this is not a problem for our application - even it's more scalable. All cluster nodes are installed as single node installations. We use a distributed cache in all the server nodes, so all servers know each other. With this implementation, we are independent of Java EE application server vendors and we could change Java EE server platform without touching our clients. This is a very important feature for us.

Your team implemented a great schema evolution tool based on JDBC. Could you briefly describe that?

We implemented the schema migration tool to facilitate the task of software upgrades and keeping installed software versions and database schemas in sync. The Web based tool is incorporated into the product to ensure through a veto service that he system will only start once the combination of software and schema versions actually matches

After performance tests, your team decided to implement an own serialization protocol. What were the reasons behind this decision? What is the impact on performance?

In early days, we used the CORBA / IIOP protocol, which is in fact a very efficient and bandwidth saving protocol with low latency. While migrating our application to JEE, we found, that CORBA is not long the right protocol for our situation (because CORBA is used on some Java EE servers itself for remote EJB communication). Because we're using fixed API functions which are never changing, we don't need meta information on the protocol. Instead it have to be high efficient in case of latency and bandwidth - that's the reason, why SOAP, XML, REST or similar protocols are not the right answer. We've done some research for such a protocol which is efficient and open source and found a protocol called Hessian. But after digging deeper in this protocol, we found some cases, where it does not match all our requirements and on the other side it has some features which we don't need. So we decided to implement our own binary protocol for our client/server communication. An additional plus is, that we have it in our hand the keep it downward compatible as long as we need. Even CORBA was high efficient, our protocol iHAP (iTAC High Availability Protocol) is a little bit better in case of latency and bandwidth consumption. So it's the perfect protocol for our special requirements.

I really enjoyed to work with your team. We found unconventional solutions with lots of fun. How important is "fun" and developer's motivation during development?

Fun is a important factor to produce an unconventional solution. I remember very good discussions between our developer colleagues and you Adam. Without the right spirit in the team and the fun, it won't work.

How many developers are working on the application?

For the base technology stack, we are working with a team of 4. The team of business developers consists of about 12 colleagues.

Which tools, IDEs, servers are you using?

Our developers could choose between Netbeans and Eclipse (most use Netbeans). The project is completely based on Maven with a lot of special Maven plugins developed in-house. Beside this, we use fully automated builds, controlled by Jenkins.

Would you choose Java EE again?

definitely yes

One of the FAQs is "Do you know any Java EE developers?". Are you also searching for Java EE Developers? :-)

Beside you, we know some persons which are often speakers in Java / Java EE conferences e.g. JAX, W-JAX. We are constantly looking for Java /Java EE developers to strengthen our team

Any pointers, resources to the "cool" stuff, presentations, demos, conferences, more information etc.?

itacsoftware.com, smart-electronic-factory.de

Frank, thank you for the interview!

Real World Java EE Workshops [Airport Munich]>

Geertjan's Blog - September 22, 2015 08:25 AM
3 Minute Movie: Samsung Galaxy S6 is a Development Tool?

Did you know you can edit your CSS stylesheets live directly on your Samsung Galaxy S6?

Geertjan's Blog - September 21, 2015 12:34 PM
Samsung Galaxy S6 with NetBeans on Windows

For quite a while, I've been trying to reproduce "Live Styling and Debugging on the Android Device", a YouTube clip I made two years ago on Ubuntu, on Windows. On the latest laptop I got from Oracle, I didn't immediately replace Windows with Ubuntu, at least partly to avoid all the hassle that comes with getting some of the internal Oracle apps to work correctly, i.e., some are optimized for Windows, or the installation instructions were redone for Ubuntu only as an afterthought, etc.

However, I could never connect to my Samsung Galaxy S4 from my Windows laptop, which is a basic requirement for showing how to work with NetBeans on a phone. I.e., nothing to do with NetBeans; the USB connection simply never worked. Last night, I finally wanted to sort it out once and for all, came across a nightmarish set of alternate and conflicting instructions on-line, and eventually gave up, especially when I realized that my mobile subscription was probably due for a renewal and that would mean I'd get a new mobile phone for free. And it all came to pass and so now I have a new Samsung Galaxy S6, which works wonderfully (it turned out that the thing that wasn't working was the USB cable itself which needs to be made by the same small child's hands as made the mobile device into which you plug it).

Here's NetBeans, with an HTML/JavaScript/CSS app deployed to my Samsung Galaxy S6: 

Above, you see that Droid@Screen plugin also works on Windows (magically, simply install it into NetBeans, even in 8.1 Beta though it was made for 7.4, and it starts up, makes the connection, etc, i.e., great for demos). Below you see a photo (maybe the last photo taken on my Samsung Galaxy S4) to show the complete environment, i.e., the phone as well as its reflection on my laptop within NetBeans, i.e., the people in the room where you're demonstrating the connection between Android and NetBeans cannot see what you're doing with your phone, where you're clicking, etc, which is why the Droid@Screen plugin is handy specifically for demonstrations, i.e., when you're teaching or presenting this combination.

Note: When I click in the browser on my Samsung Galaxy S6, the Browser DOM Window in NetBeans highlights the related DOM element; when I change a CSS style in NetBeans, I immediately see the update live on my phone; I can step through my JavaScript on the device, etc. Awesome magic for doing mobile development in HTML/JavaScript/CSS, e.g., no emulator is needed at all.

And, finally, a special award and eternal gratitude to Samsung for the weird medieval torture device they provide to open the sliding thingy on the side of Samsung Galaxy S6 so that you can insert the simcard. Tip—don't merrily throw the box away without retrieving this ancient medieval instrument retrieved from a cave where a martyred saint lies buried. Otherwise you'll never install your simcard. (And even then, if you're not aware of an obscure voodoo cult, and its related chants and satanic rituals, installation of the simcard will remain a process of trial and error.)

Watch this space for some cool new YouTube clips on working directly on your device, e.g., for styling CSS live on the device, with NetBeans on Windows. 

Geertjan's Blog - September 19, 2015 09:42 AM
"CSS Secrets" -- in Sublime and NetBeans IDE

Are you using Chrome Developer Tools? Let's take an example from "CSS Secrets" by Lea Verou and use different editors to be productive while learning and using CSS.

DukeScript - September 18, 2015 09:54 AM
Links of the week

Here’s what happened last week:

Have a nice weekend and stay tuned for next weeks exiting updates :-)!

Geertjan's Blog - September 18, 2015 09:00 AM
NetBeans IDE: The Ladder Into The Cloud

The Cloud is everywhere, but how do you get into it?

Java developers everywhere are being told every day that the Cloud is important and that "everything is moving to the Cloud".

What does that mean?

In an interactive workshop during Oracle Cloud Day in the Netherlands, you will see many demos—with code—and very few slides, and a lot of discussion, to introduce you to many new and exciting tools and technologies integrated into NetBeans that help you climb into the Cloud.

For example, you will learn and discuss about version control systems in the Cloud, continuous build servers in the Cloud, and deployment of applications into the Cloud.

And what about developing applications in the Cloud? What does that mean, does it make sense, and what can tools do for you to help you there?

Let's discuss!

In this workshop, the focus is on Java developers, or any other kind of developers, who are interested in discussing what the Cloud can mean for them. 

Register for the free event here, to be held in Nijkerk in the Netherlands on Tuesday, October 6.

And... a REAL Cloud expert will be there too, André Kuipers, the astronaut!

Adam Bien - September 18, 2015 06:47 AM
Arquillian With Hairs, JAX-RS and Security, Versioning or An Evening With JUG Gothenborg And Some Oil

I think the JUG was attended mainly by robots - after the show the organizer promised Öl (German: Oil) :-). Also big thanks for ~80 "virtual" attendees from all over the world and the interesting chat interactions.

You liked the topics? Then come to Munich's Airport for a workshop. Is Munich too far? Check out: effectivejavaee.com

Real World Java EE Workshops [Airport Munich]>