Thursday, December 18, 2014

USD $5 Bonanza from Pack Publishing is Back!

Just a quick post with a great offer from Packt Publishing:

From December 18th 2014 until January 6th 2014, you can get any eBook or Video from Packt for just USD $5!

More info:

This is a great offer to start the new year (2014) with some books to read. Go get yours!

Friday, October 3, 2014

JavaOne 2014 - Tuesday

Hi all, here are my notes of the sessions I attended on Tuesday at JavaOne.

Where is my Memory
Important session about managing memory on your JVM. The speaker introduced us to the different memory regions on the JVM and gave us good advices about how to find memory leaks on your JVM.

Some of the tips we got during the session:

The less options you have at your startup script, the better!

if you want to know default options for your JVM use the following:
java -XX:+UnlockDiagnosticVMOptions -XX:+PrintFlagsFinal -version

Of course you always want to go with non-default sizes, but you should go with small increments of memory for your -Xmx and -XX:MaxPermSize options

An Important difference between Java 8 and prior versions of Java is that Java 8 got almost all the naked memory available and if you want to tune it, then you should reduce it

Developers do not think about memory, they don't destroy objects or freed memory because of the Garbage Collector, which is a subsystem of the JVM for reclaiming "unused" memory

There are some objects that are always alive and wont be collected by the garbage collector, which are called GC Roots

  • System classes
  • JNI references
  • Running Threads
  • Local variables or parameters
  • Native stack
  • Used monitors
  • And some others

This is how the garbage collector works:

  • Mark all GC Root as reachable
  • Mark all objects referenced from reachable object as reachable too
  • Repeat until all reachable objects are found
  • Everything else is garbage 

So, what is a Memory Leak?
Reachable objects that will never be used by your application and/or the repetitive creation of such objects. Some examples of memory leaks are:

  • Caches without look-ups and eviction
  • String.substring -> Prior to Java SE 7
  • Immortal threads
  • Unclosed IO streams

The symptoms of your memory leak are either OutOfMemoryError or the application runs too slow due to the excessive GC, but be careful since there may be false positives due to:

  • Too high allocation size 
  • Cache with the wrong size - Check the size of your cache
  • Trying to load too much data at onces - You can use lazy loading
  • Fat data structures - Inneficient datastructures to hold your data

Memory monitoring tools

  • VisualVM/Java Mission Control
  • jStat
  • GC logs - Use the following options -XX:+PrintGCDetails -XX:PrintGCTimeStamps -Xloggc:file.log -XX:+UseGCLogFileRotation -XX:Number at your startup script and then use GC log analyzers such as Fasterj or GCViewer

So you have a memory leak, then try this as first step

  • Reduce memory usage
  • Tune GC
  • Increase Xmx/PermGen

If it doesn't work, then you should try more advanced techniques such as Memory (Heap) dump to find out what consumes memory. Memory dump is a binary representation of objects graph written to a file. Have in mind that it is not an accurate representation of the memory but is good enough to find memory leaks.

In order to get a memory dump you can use one of the following:

  • jmap -dump:format=b,file=heap.hprof
  • Add this options to your startup script:
    -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./java_pid<pid>.hprof

The tool used to analyze the Memory Dump is Eclipse Memory Analyzer and you should look for objects with the biggest retained size.

A final word from the speaker:
Do not use Profilers to find Memory Leaks!

More information about solving Memory leak can be found at:

Went to the Hackergarten again and during the time I was there I met Werner Keil one of the spec leads of JSR 363: Units of Measurement API, who walked me through the status of the JSR and point me to several documentation sources. This JSR is also available to adopt through the Adopt a JSR program.

RIA Technologies and Framework Panel
There was this excellent panel of experts in the RIA topic. They discussed about the state of art regarding to RIA technologies.

Native or HTML5 ?
There were a lot of opinions here, but at the end, most have agreed that in house development for administrative purposes should go HTML 5. But if you really need to get the best of the platform go native even if you have to do it for three different platforms. The audience were asked if we were doing native development for our mobile projects, just a few raised their hands.
An advice to promote code reuse is to develop your backend to return JSON so your native apps or HTML 5 apps con consume it.

Is JavaFX the future of client side Java?
Some have said Swing is gone, JavaFX is the present of client side Java, but, the audience were asked whether they were building desktop applications and many raised their hands. Then they were asked whether they were using JavaFx or Swing... and most of them are using Swing and are not planning to move to JavaFx... So the question remains and is not clear whether JavaFx is replacing or not Swing.

Last question was about what panelist are excited about for the next years?
Swing + HTML 5 - Andres Almiray
No Wrappers for HTML 5 apps - Max Katz
iOS SwiftKevin Nilson
Curious about what will happen on the UI market - Gerrit Grunwald
What new tools will come up for UI - Sven Reimers

Delivering Oracle ADF Projects: Modern Techniques
This session was really interesting because it was about using modern development techniques on the world of ADF. We saw how we can use plugins for quality of code in ADF. Also explored how testing ADF applications can be automatized by using the Oracle Application Testing Suite. Last but not least, we saw how we can use Maven with ADF. I am excited about this new feature since I've wanted to create a continuous integration environment with ADF for a while. I think I found what my next talk about ADF is going to be...

ODTUG Oracle Developers Meetup
Had the chance to meet ADF celebrities and other ADF developers on the Oracle Developers meetup, an event organized by ODTUG. I could see how popular ADF is becoming, more developers are now working with this technology and are excited about the new releases.

Oracle ADF Enterprise Architects Birds­of­a­Feather Meeting
This session was about architectural challenges that we face when developing with ADF. The session was more Q&A oriented. Some of the participants were Sten Vesterli, Chris Muir and Frank Nimphius. So imagine you, with some ADF questions and having these ADF masters in front of you to help you find your path... that's priceless.

At night we went to the Red Hat party, where we could hangout with Arun Gupta, Kevin Nilson and Dario Laverde. Had some drinks and food and enjoyed the end of day 3 at JavaOne! What a great day.

see ya!

Wednesday, October 1, 2014

JavaOne 2014 - Monday

Hello there, this was day two of JavaOne 2014, it was a full day of conferences, tried to attend as many as I could and with a wide range of topics:

How to build enterprise mobile apps that integrate with your Java EE backend
The talk was about Hybrid Apps and how to connect them to your Java EE app. A hybrid app is written with web technologies but runs as native app. 

The speaker explained how Apache Cordova wraps the html app, lets developers create JS libraries to access native features such as the camera and packs the app as an Android or iOS native app.
Regarding to the IDE, he showed how you can use Eclipse with JBoss Tools plugins and Eclipse thym plugin in order to create a hybrid mobile app. From Eclipse you can write your html files and test them on the Cordova browser which is integrated to Eclipse or you can use an emulator called Genymotion which is an Android emulator. One good thing about the emulator is that you can connect your Chrome developer tools to it.
Another nice feature is called LiveReload Server which lets you change your code and watch the changes immediately on the test browser (does not work with the emulator)

The speaker talked about how responsive frameworks such as bootstrap or heavy frameworks such as jquery mobile are not good enough for today's mobile apps. He introduced us to the ionic framework and talked about some of its pros: mobile only, big community and is integrated with Angular JS

Then we saw how JBoss Forge can help us in order to create our java classes and rest end points very fast and easy. The rest end points can be tested from Google Chrome using the Postman plugin. He also used Forge  to create the ionic application with a few commands on the console.

Regarding to Push notifications, we saw how the Unified PushServer, which is an Eclipse plugin it's a server to be deployed and it comes with Clients SDKs (ios, Android and Cordova), can help us on implement Push notifications for several platforms such as iOS, Android, Amazon, Firefox, etc. Without having to code them ourselves.

Here are the tools used during the presentation in order to develop the hybrid application:
Genymotion -Android emulator
ionic - Mobile only HTML 5 framework
Angular JS - HTML 5 web framework
JBoss Forge - Rapid Application Development tool for Maven and Java EE
Postman - Plugin for Google Chrome to test your rest en points
AeroGear Push - Push Notifications

There was a space at the JavaOne exhibition hall where attendees could contribute to open source projects, meet members of the JCP and hangout with other developers. There were different topics each day. On Monday, for example, during the time I was there I met Anatole Tresch the spec lead of JSR 354 - Currency and Money. A very nice person, who kindly explained me some parts of the API and how we can participate through the Adopt a JSR program.

Thinking in Functional Style
This is one session I could not attend last year, so this time I arrived early in order to make it inside the room. Venkat Subramaniam is by far one of the best speakers I have ever seen. He introduced us to functional programming with simple examples and engaged the audience with such simple stories, jokes and easy vocabulary. When he starts talking, he doesn't stop until the session is over. Highly recommend to attend to his sessions. Here are some topics about functional programming that he talked about:

  • Assignment-less programming
  • Immutable state -> Less error prone
  • Functions with no side-effect
  • Declarative - The what, transform data, pure, pass functions as parameters, functional composition
  • Function composition - You can chain functions
  • Lazy evaluations - Is good since not all evaluations are applied
  • Immutability and pure functions make functional programming

You can download the topics list and code examples from:
Thinking in functional style

JCP anniversary
At night, we were invited to the 15th anniversary of the JCP. Special thanks to Heather Vancura for such a great party at the 46th floor of the Hilton Union Square hotel. Nice view of San Francisco, food and beverage, entertainment was provided by the NullPointers, a band of Java Geeks who showed their passion for music.

Was a great day, looking forward for more fun at JavaOne.

See ya!

Tuesday, September 30, 2014

JavaOne 2014 - Sunday

I had my presentation on Sunday, talked about developing web apps using ADF Essentials + MySQL + Glassfish server.

The room was full! and I'm glad I shared my experiences using this technology. I have to improve my timings, though. You can download my slides here.

At the end, few questions and the relief of having done a good job.

The JavaOne Strategy and Technical keynote started really good with the following video:

However, I have to say that the rest of the keynote was not what I was expecting. And I'm not saying that because the Demo car didn't work at first, but the way how the keynote ended, just when Brian Goetz, the Java Language Architect!! Was talking about lambdas and the presentation was getting better... He was literally kicked off stage.

In the afternoon attended a few more sessions about ADF. At evening, went to the Glassfish appreciation event, which was held at the Thirsty Bear, good food, free beverages, yeii!!

see ya!

JavaOne 2014 - Saturday

So, for those of you who don't know this, JavaOne actually starts on Saturday. There are some activities before the actual starting day that you don't want to miss.

For example, there is the Geek Bike Ride, which is really fun, it is organized by +Kevin Nilson, a well known java community leader. We started at fisherman's and went across the Golden Gate bridge heading to Sausalito where we enjoyed a good meal after the workout. Then we took the ferry back to San Francisco and enjoyed an amazing view of the bay.

Some pictures of the bike riding:

Also, there was an event called Devoxx4Kids, where about 150 kids spent the whole day learning about programming. They used scratch, arduinos, and legos. Some of the Java community members were volunteers and helped during the sessions.

Some pictures about Devoxx4Kids:

If you are planning to attend JavaOne 2015, make plans to arrive on Friday so you can enjoy these pre-conference events. 

see ya!

Tuesday, August 26, 2014

CLOJUG AUG 2014 - Java SE 8 - Java IoT - Adopt a JSR

Hello all! This is a small update about what we did at the Cali (CLO) Java User Group - CLOJUG during August 2014.

This month we had an extra meeting with students at Universidad Javeriana where we talked about the new features of Java SE 8: Date and Time API, Lambda expressions and Streams API. Most of the students had zero or little experience with Java but they were really interested about these new features. The presentation about Java SE 8 can be downloaded from here (in spanish).

We run our regular meeting on 23-AUG-2014 at Universidad Icesi. This meeting was about Java and IoT. One of our members, +Sandro Hdo. Preciado Castro gave us a really great talk about this topic. We all enjoyed watching him with his electronic "toys" and learning from his experience with Java, Raspberry Pi and other devices.

We also talked about Adopt a JSR, we are about to enter the program and, as a start, we'd like to Adopt JSRs from Java SE 9 such as Money and Currency API (JSR 354) and Units of Measurement API (JSR 363). We'll let you know when we have entered the program and we've started to work on these two APIs.

Here are some pictures of this event:

Stay tuned for our events and if you live in Cali-Colombia, come to our meetings and become a member of our great community!

see ya!

Saturday, August 23, 2014

Oracle Open World and Java One 2014

Hi All,

It's been a while since my last post, but I've been really busy with my job, my JUG and preparing my presentation for the Oracle Open World and Java One 2014!! Yep, I'm speaking again and I'm really excited to be part of the speakers panel at such important conference. I'll be speaking about ADF Essentials and will be participating in a Java community talk as well. Check out my profile here.

This is the place to be if you are working with Oracle technologies, you can learn from experts and be part of the community. Of course, there are other activities such as:

Duke's Café - Welcome Reception
Oracle Technology Network's Tech Fest - Featuring the amazing Australian electronic band Empire of the Sun
CX Central Fest - Featuring Los Angeles indie electronic pop group Capital Cities.
Oracle Appreciation Event - Featuring Aerosmith and Macklemore & Ryan Lewis.

So if you happend to be at the conference this year don't forget to attend my sessions :-)

See ya!

Thursday, July 3, 2014

CLOJUG - July 2014 - Campus Party Colombia

CLOJUG had the opportunity to participate as a community in Campus Party Colombia (CPCO7), it was a great experience and our members received 50% off on the entrance price. Oracle sent us some t-shirts and people loved that, didn't last 5 minutes :)

Stay tuned for our events and if you live in Cali-Colombia, come to our meetings and become a member of our great community!

see ya

Wednesday, July 2, 2014

Packt Publishing is celebrating 10 years!

To celebrate this huge milestone, Packt Publishing is offering ALL of its eBooks and Videos at just $10 each for 10 days – this promotion covers every title and you can stock up on as many copies as you like until July 5th.

For more information about Packt and this offer, visit: Remember, the campaign ends on July 5th 2014. 

see ya!

Monday, June 2, 2014

CLOJUG - May 2014: Java 8 λs Hands-On-Lab

Hello all! This is a small update about what we did at the Cali (CLO) Java User Group - CLOJUG during May 2014.

We run our regular meeting on 17-MAY-2014 at Universidad Javeriana, our new sponsor. We followed the JavaOne 2013 Hands on Lab about Lambda expressions in Java 8, but using the latest versions of Java SE 8 and Netbeans 8. Attendees were able to play with the new features by resolving some of the exercises, some of them really finished the HOL! Those who finished most of the exercises received either t-shirts or Pluralsight - Hardcore Dev and IT Training coupons.  

Here are some pictures of this event:

Stay tuned for our events and if you live in Cali-Colombia, come to our meetings and become a member of our great community!

see ya!

Saturday, May 3, 2014

CLOJUG - March and April 2014: JavaFx and Java 8 Tour

Hello all! This is a small update about what we did at the Cali (CLO) Java User Group - CLOJUG during March and April 2014.

On March, we run our regular meeting on 15-MAR-2014 at Universidad Icesi. We had the opportunity to learn about JavaFx from +Steven Lizarazo who has been speaker at JavaOne Brazil and JavaOne San Francisco. He introduced us to this technology which is useful for building rich client applications using Java. At first we had some issues with the WiFi connection, but at the end it worked.
The hangout can be found at (in spanish):

During the same meeting we introduced our attendees to some Java 8 features and they got really excited about what's coming with Java 8. This was a glimpse of what was coming on April at CLOJUG, the Java 8 Tour. Following are some pictures of the event:

Java 8 Tour
On April we had our Java 8 Tour, where Evangelists and Java Champions are visiting different Java Users Groups around the globe in order to give presentations and hands on labs about Java 8. We had Angela Caicedo on site speaking about the new features of Java 8 and Java embedded. The HOL was called: "Internet-of-Things Hackerspace", where attendees had the opportunity to interact with several Raspberry Pi that Angela brought for the HOL.

Attendees really enjoyed Angela's presentation and were excited about Java Embedded and the Raspberry Pi. Some of them are now participating in the IoT Developer Challenge for a complete trip to JavaOne 2014!

We, at CLOJUG, are very thankful of being the only Java User Group in Colombia that was part of the Java 8 Tour, which shows that we are the most active JUG in Colombia!

Here are some pictures of this event:

Stay tuned for our events and if you live in Cali-Colombia, come to our meetings and become a member of our great community!

see ya!

Wednesday, March 19, 2014

Packt Publishing reaches 2000 titles milestone

Extra! Extra!

Hello, I want to share with you all the following press release from Packt Publishing which is celebrating its title number 2000! Packt is giving its reader a chance to dive into their comprehensive catalog and Buy One, Get One Free across their entire range of eBooks during 18th-Mar-2014 and will continue until 26th-Mar-2014. The following conditions apply:

  • Unlimited purchases during the offer period
  • Offer is automatically applied at checkout

For more information about Packt, the kind of books they publish and to qualify for the discounts, visit: Remember, the campaign ends on 26th-Mar-2014.

see ya!

Thursday, February 27, 2014

CLOJUG - February 2014: Adopt a JSR + WildFly 8

Hello all! This is a small update about what we did at the Cali (CLO) Java User Group - CLOJUG during February 2014.

We run our regular meeting on 15-FEB-2014 at Universidad del Valle. We had the opportunity to learn about the JCP, JSRs, the Adopt a JSR program, etc. Why they are important to Java developers and to the Java community. We also had the intervention of other JUG leaders from soujava (Brazil), GuadalajaraJUG (Mexico) and LJC (London) who shared with us their experiences with the program and gave us advice about how to start and keep moving Java forward. Special thanks to +Bruno Souza +Guillermo Munoz +Jim Gough
The hangout can be found at:

During the same meeting we celebrated our first birthday, ate cake and had fun sharing stories from the last year. Here are some pictures from the event:

We also had another meeting where +Arun Gupta introduced us to the new WildFly 8 which is Red Hat's Java EE 7 compliant open source application server. The main features are:

  • Lightweight : It starts in about 2 secs, light disk/memory footprint, loads containers on demand
  • Centralized Administration and Management: Starts in standalone or managed domain mode, provides multiple options to manage using CLI, REST, Admin Console, Ruby, PHP, Java, and others
  • Feature rich: Java EE 7 compliant, polyglot, role based access control, highly optimized new web server

As always, Arun's presentation was very informative and attendees were glad to have another JavaEE7 compliant application server and are eager to download and start playing/using WildFly 8. The event can be found at the following link, but it was not created as a "Hangout on Air" so there is no replay, only links to the slides:

Here are some pictures of this event:

Stay tuned for our events and if you live in Cali-Colombia, come to our meetings and become a member of our great community!

see ya

Monday, February 24, 2014

GlassFish Extension for JDeveloper 12c Go live!

Hi all, I just wanted to share with you that the Glassfish Extension for JDeveloper 12c is available now. As noted in my previous post, this extension is based on the source code provided by Shay Shmeltzer. You can learn more about his GlassFish Extension for JDeveloper 11g in the following post:

The source code for the extension can be found at the Oracle JDeveloper 3rd Party Extensions project at, so you can help to enhance the extension and further develop it.
While the extension is deployed and hosted on Oracle's servers, so you can download it via JDeveloper's menu: help->check for updates, you can follow these steps in order to do a manual installation:
  1. Download the extension here: Glassfish Extension for JDeveloper 12c

  2. Open JDeveloper and go to: Help->check for updates

  3. Select Install From Local File and browse for the file that you downloaded in step 1 (a .zip file)

  4. JDeveloper will show you a summary before installation, press the Finish button and will restart itself to complete the installation

  5. Once the installation is complete, yo can find a new section in the toolbar and inside the Run menu with the Glassfish Extension buttons

  6. Before you can use the extension, you should configure the paths to your Glassfish server installation, you do that in: Tools->Preferences->Glassfish Preferences

That's it, now you can control your GlassFish server from inside JDeveloper 12c.

see ya!

Tuesday, February 11, 2014

ADF Entity Track Change History Attributes and MySQL Database

Hello all.
Oracle ADF can be used with other databases vendors rather than Oracle, however some out-of-the-box functionalities may not work properly and you'll find yourself looking for workarounds to make them work. Today, we are going to see how we can use the Track Change History properties (CreatedBy, CreatedOn, ModifiedBy, ModifiedOn) of a Business Components Entity when using MySQL.

What you need
JDeveloper 12c
MySQL 5.6.4 or higher

Before we start, you need to know the following:
  • In MySQL 5.5 and higher, InnoDB is the default storage engine. The benefits of this are: ACID Transactions, Referential Integrity, and Crash Recovery.
  • Previous versions of MySQL do NOT store fractional seconds (milliseconds) into columns of any temporal data type. More info on this, here.
  • From version 5.6.4, MySQL stores fractional seconds (milliseconds) into columns of any temporal data type. More info in this, here.
  • You can define how many milliseconds to store from 0 to 6.

To start, execute the following script in MySQL database:

CREATE  TABLE `Player` (
  `name` VARCHAR(150) NOT NULL ,
  `age` INT NOT NULL ,
  `created_by` VARCHAR(50) NULL ,
  `created_on` DATETIME(3) NULL ,
  `modified_by` VARCHAR(50) NULL ,
  `modified_on` DATETIME(3) NULL ,
  PRIMARY KEY (`idPlayer`) )

You can see that we are creating a table with an autoincrement primary key. We have seen before, a workaround about having autoincrement columns in MySQL to work with ADF, but we are not using it in this post. 

Also, notice that we are defining that the DATETIME columns will have 3 milliseconds. Once you have executed the script, go to File->New->Business Components From Tables and follow the wizard to create an Entity of the table Player, a default ViewObject and an Application Module. Remember to configure the SQL Platform as SQL92 and Data Type Map as Java:

JDeveloper will map the DATETIME columns as Timestamp fields in the Entity, which is fine since we want to store milliseconds:

Configure each history attribute as one of: Created On, Created By, Modified On, Modified By and notice that when you configure an attribute as a Track Change History Attribute, JDeveloper will select default values for other properties:

Once all the Track Change History Attributes are set, you can run the Application Module in order to test the functionality. However, you may find the following error when trying to commit to the database:

Current time is not available from SQL statement "select sysdate from dual".: Unknown column 'sysdate' in 'field list'...

This is happening because the Application Module tries to get the current date from the database using Oracle's statement: "select sysdate from dual", which is not valid in MySQL. In order to change that, go to your Application Module and edit the LOCAL configuration:

A pop up opens, go to the Properties section and look for a property called: jbo.sql92.DbTimeQuery

We need to change the value of that property to something that works on MySQL. There are many DATE related functions in MySQL, here we are going to use NOW(). So, change the value of the jbo.sql92.DbTimeQuery to:

select NOW() from dual

Click OK button and save your changes.

CAUTION: At the time of this writing, JDeveloper is using mysql-connector-java-commercial-5.1.22-bin.jar as the default MySQL library. However, when I tried the above configuration using that library, it didn't work because no milliseconds information were being stored into the database. The solution is to update the MySQL driver. You can find the official MySQL connector drivers at:

If you don't update the MySQL driver, you may experience the following error when trying to modify a row (this is the so called Phantom Error):

The following picture was taken when using the default MySQL library, notice that there is no milliseconds information saved into the database:

And here is the picture after using the latest MySQL connector, notice the milliseconds information:

When you have downloaded the new version of the driver, you have to remove the default MySQL library from your project and add the new jar. Go to your project Properties:

Run the Application Module again, create or modify rows and this time it should work.

That's it, with the above configuration you are now ready to use the Track Change History functionality when using MySQL database.

see ya!


MySQL 5.6 Reference Manual :: 12.7. Date and Time Functions. MySQL [online].
Available on Internet:
[accessed on February 09 2014].

MySQL 5.6 Reference Manual :: 11.3.6. Fractional Seconds in Time Values. MySQL [online].
Available on Internet:
[accessed on February 09 2013].

MySQL 5.6 Reference Manual :: InnoDB as the Default MySQL Storage Engine. MySQL [online].
Available on Internet:
[accessed on February 09 2013].