A friend of mine has requested me some help for improving his skills in Java EE and Spring Framework.
An exciting question, indeed.
The general context
He’s working for a company since 2008. To work for a company for a long time has a lot of pros, but a couple of drawbacks, being one of them a little bit worrying: the chance of obsolescence.
If you’re using the same environment along the years, let’s say IBM products, you’ll loose the chance to discover other approaches, for instance Oracle solutions, or even better, open source projects.
Even worst, if the company are not willing to upgrade their products (that is very reasonable if there are budget concerns) or their libraries (that is really unwise, or the direct consequence that you don’t have a good testing process) suddenly you find yourself that you’re out of the market.
This is not really a problem as long as your current technology is the best technology for your needs, but sooner or later you have to face to the technical debt (a really interesting topic that you should care about). This day will happen when you’re spending more time in fixing issues than in adding new features to your software.
The problem continues if you try to reinventing the wheel or if you don’t realize that the plane is already invented. It’s 21st century, you can fly with the appropriate machine.
The particular concern
As I said at the beginning of this entry, he is a Java EE developer that uses Spring Framework in his daily work. But he still has to program for WebSphere Application Server 6.1 (a.k.a. WAS 6.1, that is Java EE 1.4 compliance using Java 5 SE) using Spring framework 3 (2.5 for some projects)
At the time of this writing, Java EE 7 is already released and the current version of Spring Framework is 4.0.6. Not mentioning that Java 8 is now with us.
Thus, he wants to get up to date for improving the way he writes code that will be profitable for the company he works for.
I appreciate his request, because I’ll have to review what I really know.
Well. Enough introduction. In coming posts I will write about my particular thoughts of what you can do to know Java a little better.
Next, a summary of the topics that I want to talk about:
Suggested topics
- Java SE
- Java 5
- Java 6
- Java 7
- Java Concurrency
- Vogella’s Java concurrency (multi-threading) – Tutorial
- Jenkov’s Java Concurrency / Multithreading Tutorial and Java Concurrency Utilities
- Java EE 7
- HTML5 (WebSockets and JSON)
- Simplified JMS 2.0 API
- Batch applications
- Concurrency utilities (at last JSR 236 is finished)
- Context Dependency Injection (CDI. Yeah, introduced in Java EE 6, it has been enhanced to compete with Spring’s @Autowired)
- Java API for RESTful Web Services (JAX-RS) 2.0 (webservices, clients and more)
- Servlet 3.1
- Spring Projects
- Other technologies good to know
The Java EE platform is built on top of the Java SE platform. The Java EE platform provides a particular API for server programming. So,it’s very reasonable to have a good knowledge of Java SE.
In particular, I assume that you have basic knowledge of Java.
But if you want to improve, you need to know the new features that have been published during the last years:
Generics, enhanced loops, autoboxing, enums (I love them), varargs, static import, and maybe the most important: annotations (they change our life as Java developers)
JDBC 4.0, Support for the Web Services stack and XML processing, and many more.
A quite handy features for developing like Strings in switch statements, Binary integral literals and underscores in numeric literals, Multi-catch and more precise rethrow, diamond operator, try-with-resources, Simplified varargs method invocation.
As Java 8 has been released very recently, you can skip it for a little while.
Why a specific section for Java SE Concurrency?
Because in Java SE 5 everything changed. Concurrency in Java was improved in a way that provides a more natural approach to multi-threading (I had great joy with two of the enhancement of Java 5: Generics and Callable) and at the same time it avoids the long-term errors that the concurrency library had: the method Thread.stop() (actually, it already exists, and I don’t know why)
Not only you need to try not using Thread.start() anymore, try ExceutorService instead, you also need to know about Future and the new way to synchronize threads for understanding new features for concurrency of Java EE 7.
Besides, it’s really an improvement to know about Executor Framework in Java.
There are a couple of good Java Concurrency tutorials:
In spite of there are only a few Java EE 7 compatible servers, it’s time to know about the exciting new features that will allow you to create better and faster applications:
I want to create particular blog entries for each Spring project that I’ve worked with, but in the meantime, the best way to getting started would be to take a look to the guides that they provide.
Since you’re using Java for writing programs to build solutions for business, it’s good to know the new environments that provides modern approaches for the current challenges.
You have to take a look to NoSQL, being MongoDB the most popular, with good documentation, including programming with Java.
The next step should be Big Data. Hadoop is the project that you have to pay attention for, but it’s so big, with several related projects, and so complex, that I still haven’t found a good introductory tutorial.
Finally, Asynchronous I/O, that is the new solution for a problem that has been created by the new economy based on the internet of the things, that is, the need of handle scaling transactions from hundreds, thousands, even millions of users and the requirement of high-performance, high-speed for these operations.
There are several new frameworks that are worth it: Akka, Vert.x, Reactor (a foundational framework for asynchronous applications on the JVM, by Spring, but it’s not part of the portfolio) and Node.js (yes, it’s JavaScript)
That’s all for now. I hope my colleague finds this entry interesting and I wish it is the first of a series of articles.
Let’s see.