Č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
APIDesign - Blogs (feed)
David R. Heffelfinger (feed)
Carsten Zerbst's Weblog (feed)
Winston Prakash's Weblog (feed)
NetBeans – Michael's blog (feed)
DukeScript (feed)
ProNetBeans (feed)
Paulo Canedo » NetBeans English (feed)
NetBeans Ruminations » NetBeans (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)
koberoi (feed)
Adam Bien (feed)
Bernhard's Weblog (feed)
Michel Graciano's Weblog (feed)
Ramon.Ramos (feed)
Ozone and Programming » 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)
The Aquarium (feed)
Tinuola Awopetu (feed)
Insert Witty Irony Here (feed)
Netbeans – Gualtiero Testa (feed)
netbeans – James Selvakumar’s Blog (feed)
NetBeans – nB gUru (feed)
netbeans – Newsintegrator Blog (feed)
NetBeans – Praxis LIVE (feed)
NetBeans – TechAshram (feed)
Netbeans – There's no place like (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)
NetBeans – John O'Conner (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)
Devel Blog (feed)
diamond-powder (feed)
Antonio's blog (feed)
Where's my Blog?!

Powered by:    Planet

Last updated:
October 21, 2016 02:05 PM
All times are UTC

Sponsored by
sponsored by Oracle

visit NetBeans website
NetBeans – Michael's blog - October 21, 2016 09:23 AM
New NetBeans Dream Team members

NetBeans recently became an Apache project. Some people had been afraid that NetBeans ends up like OpenOffice, whilst others appreciated that step enthusiastic. I don’t know what future brings, but the NetBeans community is still vibrant. And the NetBeans Dream Team just incorporated seven new members. The NetBeans Dream Team consists of people who are … Continue reading "New NetBeans Dream Team members"

Geertjan's Blog - October 21, 2016 06:44 AM
Handy Tools for Working with CSS

Here's an overview of CSS tools in NetBeans that I've found to be quite useful. Below, in the first example, the value of "class" is set to "foo", which does not exist in any of the available CSS stylesheets. NetBeans offers to create the rule in a stylesheet of my choosing and to import that stylesheet into my HTML file:

Below, the value of "id" is "foo", which doesn't exist in any of the stylesheets. NetBeans suggests to create it for you and import the related stylesheet:

In this case, no stylesheets exist and NetBeans offers to create a new stylesheet in which it will write the currently undefined rule:

Below, you can see I am using code completion and am shown all the available rules for the "class" attribute, from all the stylesheets, regardless of whether those stylesheets have been imported:

In the scenario below, I hold down the Ctrl key and click on "foo", i.e., the value of "class", because I want to jump to the definition of "foo" in the stylesheet in which it is defined. However, NetBeans tells me that there are two different "foo" rules available. One of those is from a stylesheet that has been imported and the other is from an unrelated stylesheet, i.e., one that has not yet been imported:

And here I have imported the previously unrelated stylesheet so that now NetBeans shows me both stylesheets where "foo" is defined and lets me choose which one should be opened.

Pretty handy!

Earlier articles on this theme:

NetBeans – Michael's blog - October 20, 2016 10:38 AM
Java Lambdas and Parallel Streams

After “Web Development with Java and JSF” [1], I wrote a short book about “Java Lambdas and Parallel Streams”. Both books are written by the assistance of NetBeans, which I used to write the code, the book, and which I used to show some examples in the book. My second book had been such interesting … Continue reading "Java Lambdas and Parallel Streams"

Adam Bien - October 18, 2016 06:57 AM
Upcoming (some free) JUGs, Online Streaming Sessions And Workshops

  1. JUG Poznan, 19.10.2016 Slideless Microservices JUG Session There were already 120 registrations a few weeks ago.
  2. 22.10.2016, 9:30am CET HighLoad Dev Conf, Minsk, "High Performance Java EE", live streaming: http://www.ustream.tv/channel/adambien
  3. 24.10.2016, airhacks.com workshop at MUC Airport React For Java (EE) Developers: "Building HTML 5 Applications With React"
  4. 25.10.2016, airhacks.com workshop at MUC Airport Angular 2 For Java (EE) Developers: "Building HTML 5 Applications With Angular 2"
  5. 7.11.2016, 6pm CET, monthly Questions and Answers live streaming airhacks.tv show. Ask questions now or during the event: https://gist.github.com/AdamBien/592a90abcf98258b93f2f35343f9513c
Interestingly, there is one registration more for the React workshop than for Angular 2 (I guessed Angular 2 is going to be far more popular).
Real World Java EE Workshops [Airport Munich]>

Geertjan's Blog - October 13, 2016 07:00 AM
UI Component Extensions for ABCS (Part 4: Drop Dialogs)

The next feature to be added to your UI component extension is a Drop Dialog, i.e., when the citizen developer drags and drops your component, a small dialog will appear to fill in some of the values in the component to override the defaults the component gives you:

To achieve the above, do the following.

  1. Create the View. In your 'templates' folder, add a new HTML file, with any name, such as "popup.html", with this content:
      <label for="componentdropCustomizer-label">First Name</label>
      <input id="componentdropCustomizer-label" type="text"
          placeholder="Enter First Name" data-bind="ojComponent: {
              component: 'ojInputText',
              value: text1
      <label for="componentdropCustomizer-label">Last Name</label>
      <input id="componentdropCustomizer-label" type="text"
          placeholder="Enter Last Name" data-bind="ojComponent: {
              component: 'ojInputText',
              value: text2
      <button data-bind="ojComponent: {
          component: 'ojButton',
          label: 'Finish'
      }, click: finish">
      <button data-bind="ojComponent: {
          component: 'ojButton',
          label: 'Cancel'
      }, click: cancel">
  2. Add the Business Logic. All the business logic for this scenario is found in the 'Creator.js' file.

    • Rewrite the 'define' block, to load the 'popup.html' file and provide the API you'll be needing:
      ], function(Constants, ComponentFactory, CreatorType, DropPopupController, popupMarkup) {
    • Change the return value of "getType" to CreatorType.POPUP.

    • Below 'createView', define 'getDropPopupController':
      ComponentCreator.prototype.getDropPopupController = function (view) {
          // right after the view is created, the infrastructure calls this method
          // to get an instance of DropPopupController, providing the html markup,
          // view model, and the callback implementation for the popup.
          var myPopupViewModel = this._createModel();
          var customizer = new ComponentCreator.MyDropCustomizer(view, myPopupViewModel);
          // create an instance of DropPopupController with required popup model and markup.
          var controller = new DropPopupController(myPopupViewModel, popupMarkup, customizer);
          // attach a finish handler to your model and dismiss the popup
          // when the model says so using an API finish method.
          myPopupViewModel.finishHandler = function (result) {
          return controller;
    • Below the above, you need all of this:
      ComponentCreator.prototype._createModel = function () {
          var model = {
              text1: ko.observable(),
              text2: ko.observable(),
              finishHandler: undefined,
              finish: function () {
              cancel: function () {
          return model;
      var MyDropCustomizer = function (view, model) {
          this._view = view;
          this._model = model;
      MyDropCustomizer.prototype.opened = function () {
          // you can do something useful here
      MyDropCustomizer.prototype.closed = function (accepted) {
          if (accepted) {
              // popup was accepted and closed, let's update view properties
              this._view.getProperties().setValue('text1', this._model.text1());
              this._view.getProperties().setValue('text2', this._model.text2());
          // do not forget to return a promise resolving to the view instance
          return Promise.resolve(this._view);
      ComponentCreator.MyDropCustomizer = MyDropCustomizer;
And now, when you drag and drop, you should see a small dialog for filling in initial values.

Geertjan's Blog - October 12, 2016 07:00 AM
UI Component Extensions for ABCS (Part 3: Property Inspectors)

The next step is to give your citizen developers a Property Inspector for the UI component extension you're creating for them.

Let's go through the whole process from start to finish, imagining you've gone through the various dialogs in yesterday's blog entry and you now have a UI component extension generated for you from the "blackbox" template. We'll use the "Hello World" scenario from the Knockout site for this example. 

  1. Define the UI Component Extension. In 'blackbox.html', replace the content between the 'div' tags with the following:
    <p>First name: <input data-bind="value: firstName" /></p>
    <p>Last name: <input data-bind="value: lastName" /></p>
    <h2>Hello, <span data-bind="text: fullName"> </span>!</h2>

    In 'Initialiser.js', rewrite the 'ko.components.register' expression to the following and note that "text1" and "text2" do not exist yet, we'll create them in the next steps below:

    ko.components.register(Constants.COMPONENT_ID, {
        viewModel: function (params) {
            var self = this;
            self.firstName = ko.observable(params.text1);
            self.lastName = ko.observable(params.text2);
            self.fullName = ko.pureComputed(function () {
                return self.firstName() + " " + self.lastName();
            }, this);
        template: template

    You now have your UI component extension and should be able to reload it into your Page Designer. From there, you can drag and drop it into the canvas. In the Property Inspector, on the right side of the Page Designer, notice the "Initial Value" field, which has its value set to "Hello World!" We're going to rewrite that to a "First Name" property, and connect it to the "First Name" field in the UI component extension, so that your citizen developer can set a default first name whenever they've dragged our UI component extension into the canvas.

  2. Reuse the Default Property

    The template you used to create your extension includes a property that we can use as the basis of our own property, after which we can connect it to our component. To do this, we'll work down the list of files in the "js" folder, one by one and rewrite bits and pieces as needed:

    • Constants.js. Change the name of PROPERTY_ID_TEXT to PROPERTY_ID_FIRST and its value to 'text1'. Change the name of DEFAULT_MESSAGE to DEFAULT_FIRST and its value to 'Planet'.

    • Creator.js. In 'ComponentCreator.prototype.createView', change the property 'text' to 'text1' and DEFAULT_MESSAGE to DEFAULT_FIRST. (Tip: In Creator.js, change the "2" for "minWidth" to a different integer if you want the component, when it is dropped, to have a different width.)

    • PropertyInspectorViewModel. In the function, rewrite 'text' everywhere to 'text1' and PROPERTY_ID_TEXT to PROPERTY_ID_FIRST.

    • ViewGenerator.js. Change 'text' to 'text1'. Change all usages of 'message' to 'text1'.

    Next, we'll work in the "html" folder:

    • blackboxPI.html. Rewrite 'Initial Value' to 'First Name', rewrite 'text' to 'text1'.

    • blackboxWrapper.html. Change the two usages of 'message' to 'text1'.

  3. Use the Property Inspector

    On the Extensions page, click "Reload Extensions", go back to the Page Designer, drag-and-drop your component into the canvas and then notice that you're able to fill in and change the default first name in the Property Inspector:

  4. Write a Property from Scratch

    Now that we've rewritten the default property and, essentially, refactored it for our purposes, let's write one ourselves. We'll write a "text2" property so that the Last Name will be customizable from the Property Inspector.

      • Constants.js. Define PROPERTY_ID_LAST and its value to 'text2'. Define DEFAULT_FIRST and set its value to 'World'.

      • Creator.js. In 'ComponentCreator.prototype.createView', add a comma after the definition of 'text1' and add 'text2', with its value set to DEFAULT_LAST.

      • PropertyInspectorViewModel. Copy 'self.text1' and related code, rename everything to 'text2' and PROPERTY_ID_LAST.

      • ViewGenerator.js. Copy the various 'text1' statements and paste them and rename to 'text2'. And then include 'text2' in the 'ViewGeneratorSupport.applyMap' construct, as shown below:
        var val = ViewGeneratorSupport.applyMap(template, {
            id: view.getId(),
            elementName: Constants.COMPONENT_ID,
            text1: text1,
            text2: text2

      Next, we'll work in the "html" folder:

      • blackboxPI.html. Copy the whole "First Name" section, paste it, rename it to "Last Name", and "text1" to "text2".

      • blackboxWrapper.html. Rewrite to include your new parameter:
        <$elementName$ id="$id$" 
                       params="{text1: '$text1$', text2: '$text2$'}">
  5. Use the Property Inspector.

    When you reload extensions, go back to the Page Designer, and drag-and-drop your component again, you'll see that you can now customize both of the properties.

    Also note that, thanks to your code in ViewGenerator.js, you have error handling built in:

What you've learned is how to extend your UI component extension to include support for the Property Inspector.

Geertjan's Blog - October 11, 2016 03:48 PM
UI Component Extensions for ABCS (Part 2: Reusable Components)

What we have so far, after part 1, is a custom component. What's we'd like to have is an extension to ABCS so that the component can be dragged and dropped into any application created in ABCS.

In the left side of ABCS, below, provided by the hamburger button in the top left, you see an item called "Extensions":

Now you're on the page below where, as you can see in the left side, you can create new UI components:

Fill in the details below, which is a dialog that appears after you click the button above:

Click Template above and then click "blackbox" below.

When you click OK above and wait some seconds, a new UI component will be created for you, as shown below. Use the Sources tab to edit the code in the UI component. The business logic goes into "Initialiser.js", while the view goes into "blackbox.html":

The other files provide related support, for example, in "Constants.js", you can tweak the display name of the new UI component. There's also files dealing with the drop dialog and property inspector that can be extended.

Back in the Page Designer, you'll see your new UI component, named "Black Box" by default (below you can see I changed it to "Greeting" because I edited the "Constants.js" file), in the "Common" category, from where you can drag and drop it into the canvas.

You can drag that new UI component into your canvas, below you can see I have done this twice:

There's syntax coloring to help you, when editing your UI component in the browser above. On the other hand, you can also export the extension to a ZIP file and open the source files into an editor, such as NetBeans IDE, edit the files there, ZIP them up again, and upload them in the dialog above.

Further reading: UI Extensions in Application Builder Cloud Service

Geertjan's Blog - October 10, 2016 08:27 PM
UI Component Extensions for ABCS (Part 1: Custom Components)

Once you're comfortable with Oracle JET, consider taking the next step: Application Builder Cloud Service (ABCS).

No, ABCS isn't simply a drag-and-drop development environment for citizen developers. Instead, it's an architecture for software developers to establish a drag-and-drop development environment for citizen developers! In other words, you can extend ABCS specifically for your business developers, with components that you define yourself... using Oracle JET. Or, more exactly, by creating Knockout components, which underpin the concepts used in Oracle JET.

Below, you see the "Hello World" scenario from the Knockout tutorials. It is part of an application created in ABCS by means of a "Custom Code" component. In the below, look on the left side in the palette, at the end, where you'll see "Custom Code": 

Drag that into the canvas and then automatically the editors you see below open up, so that you can define your custom component:

Above, you can see that there's an HTML view and business logic in JavaScript, using a "define" block provided by Require.js, with data binding made available by Knockout.js. With your Oracle JET background, or with a generic Knockout background, you should immediately know what to do with the above. I.e., replace the boilerplate code with something like the above, in other words, with the view and viewModel of your custom component, as shown above for the "Hello World" scenario.

And above you see the application deployed directly from ABCS. Really neat, the concept of "developing for the Cloud, in the Cloud".

Further reading: http://likeahouseafire.com/2016/09/17/custom-code-components-in-abcs/

Continue to part 2.

Adam Bien - October 10, 2016 11:08 AM
IMWorld Session: Building "Mobile First" Applications With The Killer Microservice Platform

The Internet Mobile World 2016 conference slideless session: "Building Mobile First Services With The Killer Microservice Platform" is available.

During this 30 minute session I built "from scratch" and tested a backend service, explained the design choices and finally build a "micro" docker image in 1.5s and run it:

See you at Java EE Workshops at Munich Airport, Terminal 2 or Virtual Dedicated Workshops / consulting. Is Munich's airport too far? Learn from home: airhacks.io. Interested in microservices only? Checkout: javaeemicro.services.

Real World Java EE Workshops [Airport Munich]>

Adam Bien - October 07, 2016 01:24 AM
Java 8 CompletableFuture Example

A result of an expensive task:

    UUID createId() {
        return UUID.randomUUID();

needs to be passed to:

 void store(String message) {
        System.out.println("message = " + message);

...and therefore converted with:

    String convert(UUID input) {
        return input.toString();

CompletableFuture allows you to build pipeline executed asynchronously within the ForkJoinPool:

import static java.util.concurrent.CompletableFuture.supplyAsync;


...block and wait for the result:


...and even control the concurrency:

        ExecutorService es = Executors.newFixedThreadPool(2);

CompletableFuture is particularly useful in Java EE (checkout http://javaeemicro.services) and is often used together with ManagedExecutorService / https://github.com/AdamBien/porcupine.

See you at Java EE Workshops at Munich Airport, Terminal 2 or Virtual Dedicated Workshops / consulting. Is Munich's airport too far? Learn from home: airhacks.io.

Real World Java EE Workshops [Airport Munich]>

Adam Bien - October 06, 2016 03:14 PM
Implementing Health Checks With Docker

In this screencast I turned a healthy application server into an unhealthy one:

I used the fish, images from https://github.com/AdamBien/docklands (https://hub.docker.com/u/airhacks/) and the https://github.com/AdamBien/ping utility.

See you at Java EE Workshops at Munich Airport, Terminal 2 or Virtual Dedicated Workshops / consulting. Is Munich's airport too far? Learn from home: airhacks.io.

Real World Java EE Workshops [Airport Munich]>

NetBeans Profiler - October 06, 2016 10:04 AM
VisualVM 1.3.9 Released

VisualVM 1.3.9 has been released. The original home at java.net is going dark next year, so the project has been migrated to GitHub, including the sources, downloads and update centers. The web content will be incrementally transferred from the original pages to the new address over the next weeks.

VisualVM 1.3.9 introduces experimental support for both running on JDK 9 and monitoring Java 9 processes. The tool has been tested to work with Oracle JDK 9 build 138. Future builds of the JDK may introduce incompatible changes which will prevent VisualVM from running on/monitoring it.

The other changes include enabling support for analyzing VM coredumps on Microsoft Windows, improving the --openid and --openpid parameters to open the process on a defined tab (visualvm --openpid 12345@2 will open a process with PID 12345 in VisualVM with the Monitor tab preselected) and remembering decisions about future host/JMX connection resolving on startup.

Many bugs have been fixed and the tool is built on the NetBeans Platform 8.0.2.

Related links: New VisualVM Home at GitHub, Download VisualVM, Release Notes, VisualVM Feedback, JDK 9 EA Builds

Geertjan's Blog - October 04, 2016 11:46 AM
NetBeans and Apache

Now that NetBeans is in the Apache Incubator, here are some feelings from my side on the process and on where we currently are.

  1. Philosophically always Apache. I've been involved with NetBeans since about 2004, when I joined Sun Microsystems in Prague. It was always the case that with NetBeans we were trying to do something bigger than serve the interests of a specific commercial entity—NetBeans has always been a platform for innovation and sharing. It's always been free and open source and it has always focused on enabling software developers all over the world to simply get started quickly and easily with Java, primarily, and over the years with other languages and technologies too. While there have been benefits to being tightly coupled to specific commercial interests, that coupling has never been part of the DNA of NetBeans. Philosophically, NetBeans has always been an Apache project and has always behaved in that way, i.e., it's always been primarily about individuals rather than commercial interests.

  2. Continual demands for more open participation. Over the years, there's been a clamoring from the community for the commercial interests behind NetBeans, i.e., Sun Microsystems and then Oracle, to open up the contribution and governance models of NetBeans to enable direct and equal participation, almost as if its users have seen NetBeans as something that always should have been treated by its commercial sponsor like an Apache project all along. The contribution and governance models have been opaque, to say the least, and it's always been the commercial sponsor (i.e., Sun and later Oracle) that has driven the NetBeans roadmap—and in the cases where community interaction on roadmap etc was slightly opened up, for specific releases, it was always the commercial sponsor that made the decision to enable that to happen. However, amazingly, despite all that, NetBeans has built up a very active and enthusiastic community all over the world, with mailing lists, forums, an advocacy group (NetBeans Dream Team), monthly NetBeans events around the world, broad usage across the industry, high usage in education, etc. In NetBeans, its users have always seen a range of high quality free tools and technologies, and an inspiring philosophy of sharing and innovation, beyond those that the commercial sponsor has found it important to promote.

  3. Shared leadership, shared responsibility. Oracle's interests are broad and diverse. Within its specific scope of interest, it is not a tool provider. Nevertheless, Oracle has a range of investments in a variety of different tools, all at the same time. That makes perfect sense, when you examine each instance of that. In some cases, the investments are historical and in others strategic. Together with that, consider how the community has changed over the years and how much stronger and cohesive open source has become. Would it not make sense to share the leadership of projects across multiple entities rather than having it locked into one specific commercial sponsor? And is that train of thought not exactly in line with the clamoring for more involvement and engagement with the community? What better way, then, than to open up the contribution and governance model via the Apache Software Foundation? Everyone who is invested in NetBeans continues to be invested in NetBeans, while its roadmap, governance model, etc, are shared between all those different entities within a model that has proven to work well.

And that's where we are right now. The NetBeans proposal has been accepted and NetBeans is now in the Apache Incubator. Many things need to happen before NetBeans graduates and becomes a Top Level Project. The hurdles to cross have been examined on all sides and none seem unsolvable. There's a long journey ahead (many months at least) at the end of which the philosophy underpinning NetBeans will match the structures used to govern it. Sometimes there are win/win situations in the world and this surely is one of them.

Further reading:


Adam Bien - October 04, 2016 05:26 AM
News: Java EE 8/9, JavaOne, Gateways, Service Registries, API Design, Monitoring or 31st airhacks.tv

JavaOne and Java EE 8/9 News, 20+ questions questions or the or the 30th airhacks.tv is available:

Any questions left? Ask now: https://gist.github.com/AdamBien/592a90abcf98258b93f2f35343f9513c.

See you at Java EE Workshops at Munich Airport, Terminal 2 or Virtual Dedicated Workshops / consulting. Is Munich's airport too far? Learn from home: airhacks.io.

The questions above are going to be answered during the next "Airhacks Q & A" http://airhacks.tv live. You can subscribe to the channel and / or for the next event: http://www.ustream.tv/channel/adambien (both is optional, no registration required to watch this event live).

Real World Java EE Workshops [Airport Munich]>

NetBeans Profiler - October 03, 2016 02:35 PM
NetBeans Profiler 8.2 Released

NetBeans IDE 8.2 has been released including the improved Java profiler. The news in profiler include new SQL Queries mode, results coloring and full support for dark UI themes.

The SQL Queries profiler displays all SQL queries executed by a Java process using the JDBC API, no matter what the target database is. For each query the number of invocations and total execution time are displayed as well as the invocation call tree. Advanced filtering is available to process the collected results. See the wiki documentation for more details.

The profiler results can now be displayed using different colors, based on user defined filters. This is especially useful for the SQL call trees, but works in all profiler views.

The profiler UI including graphs and results tables now fully support NetBeans dark themes.

Visit http://profiler.netbeans.org to get more information about the profiler, read profiler documentation and download NetBeans IDE 8.2 including the profiler.

NetBeans – Michael's blog - October 03, 2016 12:51 PM
NetBeans 8.2 available

During the last days, most news about NetBeans had been about the transition to Apache. Luckily this did not affect the ongoing development. NetBeans 8.2 had been successfully tested and is available now [1]. If you still get NetBeans 8.1 displayed, then simply refresh your page (in most browsers by hitting the F5 key). For … Continue reading "NetBeans 8.2 available"

Geertjan's Blog - October 03, 2016 07:00 AM
Top 5 Favorite NetBeans IDE 8.2 Features

With the release of NetBeans IDE 8.2, here are my favorite features!

  1. The Release Itself. It's always great to have a new release, a fresh start, new development environment, and to me a new release always feels faster and snappier than the last. Maybe because I simply hope this is the case or maybe because it simply is true. Well, with bunches of bugs fixed, and performance standards to comply with, a new NetBeans release should at least be as performant as the previous, and with the bugs fixed and so on, could justifiably be presumed to work even smoother and snappier than the previous release. So far, to me, it does feel even smoother and snappier than before.

  2. Multiple Cursor Support. I don't know how often I'm going to need to have multiple cursors, I can't imagine needing more than two at the same time. Still, great to have them, it certainly makes NetBeans even more fun and versatile, and, at the same time, this was one of the top P1 issues in NetBeans that users have been asking for for many years (and some even abandoned NetBeans specifically because of lack of multiple cursor support). So, hurray!

  3. Oracle JET Features. No more need to install a plugin to use Oracle JET. For the first time, Oracle JET is now a full feature of NetBeans IDE. The project templates, especially, "Quick Start Basic", and the code completion for Oracle JET components, are very helpful and it's great to not have to do anything special to get these features.

  4. Bling Bling. OK, so I'm not a heavy Docker user, nor do I use ECMAScript 6 (and even experimental ECMAScript 7) features right now. Still, though, it's great to have the latest cutting edgiest things, which really is just mostly bling bling for me, though nice to have available as needed when needed. :-)

  5. Darcula. I love the Darcula plugin and I use it all the time. While it's not available in the Plugin Manager right now, yet, for NetBeans IDE 8.2, you can go to the NetBeans Plugin Portal and just download the 8.1 version and it will work fine in 8.2: http://plugins.netbeans.org/plugin/62424/darcula-laf-for-netbeans. Not all the NetBeans IDE 8.1 plugins will work as simply as this, though some will, just give it a try.

Other features and complete list are here: https://netbeans.org/community/releases/82/.

Adam Bien - October 02, 2016 01:30 PM
Java EE 8, JavaOne Impressions, REST APIs, JDK vs. openJDK, API Gateways, Load Balancing, Event Sourcing, Clusters or Questions for the 31st airhacks.tv Q&A

JavaOne 2016 report, Java EE 8 news and questions (https://gist.github.com/AdamBien/e6e20c129e673ad558be495dd4f3afc4) for the 31st airhacks.tv, Monday, October 3rd, 6 pm CET, (checkout past episodes):

  1. JavaOne impressions
  2. Java EE 8/9 news, contents, roadmaps and caveats
  3. Load balancing Java EE servers on Docker
  4. Oracle JVM vs. others
  5. CDI and clustering
  6. Combining JAX-RS and JSF
  7. "Micro" vs. "Full" application servers and docker
  8. JDBC pool configuration on docker
  9. Portable SAM modules
  10. Java FX and the future
  11. REST API and validation
  12. Consuming REST services (HTTP header interpretation)
  13. How to profile server startup
  14. Service communication without docker
  15. How to consume / choose JavaOne sessions?
  16. WildFly monitoring capabilities
  17. Event sourcing and Java EE
  18. REST API doc generation

The questions above are going to be answered during the next "Airhacks Q & A" http://airhacks.tv live. You can subscribe to the channel and / or for the next event: http://www.ustream.tv/channel/adambien (both is optional, no registration required to watch this event live).

If you still miss a question, ask at https://gist.github.com/AdamBien/e6e20c129e673ad558be495dd4f3afc4, write a comment on this post, tweet your question with the hashtag "#airhacks" or mention me https://twitter.com/AdamBien.

See you at Java EE Workshops at Munich Airport, Terminal 2 or Virtual Dedicated Workshops / consulting. Is Munich's airport too far? Learn from home: airhacks.io.

Real World Java EE Workshops [Airport Munich]>

NetBeans – Michael's blog - October 02, 2016 09:59 AM
NetBeans goes Apache – Incubation reached

On October, 1st 2016, NetBeans became an official Apache Incubator project. A full list of all incubator projects is available at [1]. I assume that the project page (which is quite shortly today) will present much information soon [2]. A description of the incubation process is available at the web, too [3]. Some projects stay … Continue reading "NetBeans goes Apache – Incubation reached"

Adam Bien - September 29, 2016 08:18 AM
Building A No-Dependencies, Plain JavaScript App With Java EE Backend

React, Angular 2, (...) are fine, but is it possible to implement a HTML 5 application without any external JavaScript framework or library?

In this screencast I rendered a JSON array from a Java EE service dynamically without any framework or library, just using plain JavaScript (ES 6 / ES2015) and the plain browser DOM API.

See you at Java EE Workshops at Munich Airport, Terminal 2 or Virtual Dedicated Workshops / consulting. Is Munich's airport too far? Learn from home: airhacks.io.

Real World Java EE Workshops [Airport Munich]>

Geertjan's Blog - September 29, 2016 07:00 AM
@OracleJET at Luciad User Conference 2016

I attended Luciad User Conference 2016 in Brussels over the past days.

I attended to represent Oracle JET, Oracle's new JavaScript platform, used throughout Oracle and beyond as the basis of enterprise JavaScript frontends, solving a range of complex problems out of the box, while providing a range of components such as graphs and charts. And all for free.

I attended together with my colleague Hans Viehmann, from Oracle Spatial and Graph, who did a session on Oracle DB, as well as Oracle's graph database features, in combination with 3DCityDB and Luciad. He included a nice slide about Oracle JET:

Furthermore, the Luciad team have been doing experiments with Luciad map components in combination with Oracle JET. They also had a very impressive demonstration, which also includes a range of Oracle JET components:

It was a really interesting conference, hopefully I'll get to go to it again in future, many interesting new people and the social events were great. Many thanks to the organizers of this event!

More on Luciad and Oracle JET:


Adam Bien - September 28, 2016 08:08 AM
Building A React Application With Java EE Backend

In this screencast I created Java EE 7 application with installed CORS filter and exposed a String array as JSON.

Finally, I created a react application in ES2015 and used plain, old XMLHttpRequest to access the backend service. The output was rendered as HTML list.

Is React library not enough? Checkout the screencast: Building An Angular 2 Application With Java EE 7 Backend

Interested in ReactJS, Angular 2 or Java EE? Checkout: workshops.adam-bien.com.

Real World Java EE Workshops [Airport Munich]>

NetBeans – Michael's blog - September 28, 2016 05:24 AM
NetBeans goes Apache – vote in progress

After its proposal and intensive discussing, NetBeans has reached the next step on becoming an Apache project: The vote for entering the incubator has started. You may follow this and vote (without binding if not a member). You’ll find the email list at [1]. [1] incubator.apache.org/guides/lists.html

Adam Bien - September 27, 2016 10:29 AM
Building An Angular 2 Application With Java EE 7 Backend

In this screencast I created Java EE 7 application with installed CORS filter and exposed an array of Dukes as JSON.

Finally, I created Angular 2 app and used HttpModule to access the backend service. The output was rendered as HTML list.

Interesting: I used Dependency Injection in Angular 2, but there was no need for DI on the server :-).

Are you searching for a minimalistic library? Checkout the: "Building A React App With Java EE Backend" screencast.

Interested in Angular 2, ReactJS or Java EE? Checkout: workshops.adam-bien.com.

Real World Java EE Workshops [Airport Munich]>

NetBeans – Michael's blog - September 26, 2016 08:36 PM
Next talks

I’m going to speak at the PCSI annual conference in Dublin on 5th October 2016. Web based Hospital Communication via Data Portal [1] A quick view onto structured hospital communication. I’m not going to talk about technical details at this conference. But I can tell you, the portal is developed using the NetBeans IDE. And at … Continue reading "Next talks"

Adam Bien - September 26, 2016 07:42 AM
Load Balancing Java EE Microservices

In this screencast I implemented a minimalistic, load balanced Java EE 7 application comprising two identical nodes and a ha-proxy:

See you at Java EE Workshops at Munich Airport, Terminal 2 or Virtual Dedicated Workshops / consulting. Is Munich's airport too far? Learn from home: airhacks.io.

Real World Java EE Workshops [Airport Munich]>

NetBeans – Michael's blog - September 25, 2016 10:11 AM
NetBeans and the experimental book

NetBeans is my favorite Java IDE. Some time ago, I started to write my first book. Since the pages are written using a special flavored markdown dialect, I tried some markdown editors. I discovered a markdown plugin for NetBeans [1]. Thus I continued to write my books with NetBeans. The big advantage of NetBeans is … Continue reading "NetBeans and the experimental book"

Adam Bien - September 25, 2016 05:37 AM
The Ingredients and Roadmap of Rebooted Java EE 8 and 9

After one year vacations Java EE 8 was rebooted and is going to be optimised to run on hypervisors and / or container environments. Java EE 8 will focus on the following areas below -- it is a proposal and very likely to change in the JCP process:

Programming Model
  1. Extend for reactive programming
  2. Unified event model
  3. Event messaging API
  4. JAX-RS, HTTP/2, Lambda, JSON-B, (...)
  1. Package applications, runtimes into services
  2. Standalone immutable executable binary
  3. Multi-artifact archives
Key Value/Doc Store
  1. Persistence and query interface for key value and document DB
Eventual Consistency
  1. Automatically event out changes to observed data structures
  1. New spec - interfaces, packaging format, manifest
  2. Ephemeral instantiation
  1. Externalize configuration
  2. Unified API for accessing configuration
  1. Increased density
  2. Tenant-aware routing and deployment
  1. API to store externalized state
  1. Extension to support client-side circuit breakers
  2. Resilient commands
  3. Standardize on client-side format for reporting health
  1. Secret management
  2. OAuth
  3. OpenID

The choices are pragmatic and will make Java EE an even more productive platform. I'm only missing a slightly extended and modernized "Concurrency Utilities for Java EE" (jcp.org/ja/jsr/detail?id=236). Particularly the ThreadPool configuration and Backpressure could be easily standardized just by agreeing on features from https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ThreadPoolExecutor.html. Particularly useful would be the integration of the statistics (e.g. Bulkheads) with the Health Check API.

Also a standardized management API (not proposed) would simplify the creation of application images through a unified API.

Java EE 8 and 9 will come at light speed to an application server vendor near you. Java EE 8 is expected to be delivered in 2017 and Java EE 9 in 2018.

Oracle is listening now, take the chance and participate at the survey (takes a few mins): glassfish.org/survey

See you at Java EE Workshops at Munich Airport, Terminal 2 or Virtual Dedicated Workshops / consulting. Is Munich's airport too far? Learn from home: airhacks.io.

Real World Java EE Workshops [Airport Munich]>

APIDesign - Blogs - September 24, 2016 10:42 AM
Beware of DefaultMethods

DefaultMethods is a new feature of JDK8 that we many cried for. Yet, they carry certain drawbacks with themselves. For example one can write a valid Java program that compiles and works on JDK7, but is broken on JDK8!

--JaroslavTulach 10:42, 24 September 2016 (UTC)

Geertjan's Blog - September 23, 2016 06:15 PM
Minimal Oracle JET Composite Component

Let's say you have a suite of Cloud applications and you want them to display customers in a standardized way:

If that's your business scenario, then Oracle JET composite components are a perfect fit. Here's what an absolutely minimal Oracle JET composite component looks like: 

The above is really trivial. Here's the content of "customer.html":

<h2 data-bind="text: $props.name"></h2>
<h4 data-bind="text: $props.city"></<h4

Here's "customer.json":

  "properties": {
    "name": {
      "description": "Customer name.",
      "type": "string"
    "city": {
      "description": "Customer location.",
      "type": "string"

About the properties above, see the below:


And here's "loader.js", which connects the above two together and provides "customer" as a new HTML element:

  function(oj, view, metadata) {
    oj.Composite.register('customer', {
      view: {inline: view}, 
      metadata: {inline: JSON.parse(metadata)}

In a more complex scenario, you're also able to include CSS stylesheets and business logic defined in JavaScript, as outlined in an earlier blog entry on this topic

OK, now ZIP up that folder, send it to whoever is working on other Cloud applications that need to make use of the "customer" element, which they can use as follows (in e.g., "library.js") after unzipping that ZIP into the relevant folder in their application:

define(['ojs/ojcore', 'knockout', 'ojs/ojcomposite',
   function (oj, ko) {
      function libraryContentViewModel() {
          var self = this;
          self.customers = [
              {name: 'Billy Bob Thornton', city: 'New York'},
              {name: 'Brad Pitt', city: 'Hollywood'},
              {name: 'Val Kilmer', city: 'Seattle'}
      return new libraryContentViewModel();

All that the above does is load the "loader.js", include "ojs/ojcomposite" so that Oracle JET composite components are supported, and define a "customer" array.

Here's the view (e.g., "library.html") of the above viewModel, using the "customer" HTML element provided by the composite component:

<!-- ko foreach: customers -->
<customer name="{{name}}" city="{{city}}"></customer>
<!-- /ko -->

That's pretty neat and, guess what, Oracle JET components conform to the Web Components specification, except for the Shadow DOM, which is not supported.