Monday, September 5, 2016

Spring Boot

Last weekend I did a coding exercise creating a small Web MVC app with Spring Boot and Spring Data JPA.  Last year I worked through Spring Boot In Action but this was my first real Spring Boot app that went very far beyond Hello World.  I didn't need to write a single line of configuration.  I'm not just saying no XML configuration, no configuration at all.  Spring Data also does a great job of just getting out of the way and letting you work with your database.  I selected Spring Data JPA and HSQLDB from the start page and it just worked with no persistence.xml, no hibernate.cfg.xml or hibernate.properties, nothing.  This really is a game changer in terms of getting you out of the starting gate and focused on your application without having to go through a lot of Spring ceremony first.

Here's one other little thing I noticed.  With the introduction of @SpringBootTest in Spring Boot 1.4 the configuration for an integration test got a bit simpler.  This change is described here: Testing improvements in Spring Boot 1.4.

Friday, May 20, 2016

Spring Core 4.2 certification

I got my first certification today.  I have not been a big believer in these, but this is what my awesome employer was paying for this year so I took it.

I took the class first week in April and took the test today (5/20/2016).

Java configuration was a big part of this.  It seems like a big complaint people have had about Spring since the early years was the amount of XML needed to configure dependency injection.  The SpringSource/Pivotal people have been working for years to reduce the need for XML, first with annotations, then more recently with Java configuration.  I was fine with the XML and never really got on board with Java configuration, until now.  After learning this new style, well, now I can do it, but I'm still feeling lukewarm about it.  I feel like the motivation for this was more to silence the critics than to actually make the framework better.  I managed to struggle through a full conversion of a web flow application I wrote 2 1/2 years ago.  It's not quite a one-to-one mapping converting XML to Java as things are organized a little differently, and there are still a few things that aren't 100% comfortable to do in Java.

The MVC stuff was pretty familiar to me.

The class devoted quite a bit of time to RESTful web services.  The conventional wisdom in the Spring world is you could use JAX-RS but it's overkill, just implement REST services using MVC @RequestMapping.  I saw it done this way at some NFJS presentation a few years ago and since then they have added a bit more support (@RESTController, REST template).

AOP is a feature of Spring I have not really found much occasion to use, so this was something I needed to brush up on.

Some non-core topics covered in the class and the exam were Spring Data, Spring Security, Spring Boot and Spring Cloud.

I understand the focus on Spring Boot as this is quickly becoming the default way to work in Spring.  All the Getting Started guides are now written for Spring Boot and most of the labs for this class were also written as a @SpringBootApplication 'main' program.

I guess they chose to make Spring Security part of this because it is pretty much indispensable for doing any kind of real-world web development.  It has been around for a while, but my first exposure to this was in Spring Boot in Action last year, so this was a good refresher about 6 months later.

Spring Data simplifies the task of working with relational and NoSQL database so much, once you have started using it you will never go back.  In fact I questioned a little bit that they were spending time on JdbcTemplate but I guess it is part of Spring Core.  JPA is also covered.

Spring Cloud was the most 'out there' topic covered.  I have played around with this a little but some of the other people in the class were totally lost.

Generally I would say this was pretty hard.  The exam focuses on a lot of nit-picky details that you might not necessarily know even if you were working in Spring every day.  Before the class I was thinking 'could I schedule the exam on the last day of the class', but that would have been a disaster.  I spent about 6 weeks re-reading the 900+ page presentation from start to finish, experimenting with changes to my own code, and finally just re-reading selected parts of the reference documentation.  Think memorize-and-regurgitate.

There were about 5 people in the class, so, reasonable class size.  There was one guy who did not even have any Java experience who was slowing things down, and we were running behind right up until the end, but the stuff we didn't get to was not that important anyway (JMS, who uses that any more? and JMX).

The labs were just right for me.  I had to think but they weren't overwhelming or anything and I was mostly able to finish them during the allotted time or at least on the same day after class.

The supported platforms for the class are Windows and OSX.  In particular you do need one of these for the video chat for the online class.  I went to all the trouble of setting everything up in Windows 8.1 but afterwards was able to get Spring Tool Suite and the exercises working in Linux (my preferred environment).

One thing that confused people is the USB drive with the class materials comes with an ancient (3.6.4) version of STS.  That was about 16 months out of date at the time of the class.  So people were getting popups asking did they want to update?  Updating didn't seem to hurt anything, neither did simply importing all the exercises into an up to date STS version.  This was a bit troubling given the emphasis on Spring Boot, since the recent STS versions have added some Spring Boot support (Spring Boot Dashboard) that is not available in the older version.

In order to take the test, you must first take the (expensive!) class.  Taking the class entitles you to a voucher to take the test one time for free, after that it is $150.  Getting the voucher takes 2-3 weeks.  I can't help feeling they are being greedy here not allowing people to just come in off the street and take the test.  The instructor told us 'if you master the material in the lecture notes and the exercises, you will be able to pass the test', which I would agree with.  There were no surprises or anything I thought was unfair in the exam.

The test is fairly high-security.  I had to put my phone, watch, wallet and also empty my pockets(!) into a locker.  You need to sign a statement that you won't reveal the test contents to anyone.  It is 50 multiple-choice questions and the 90 minutes provided are really plenty to get through this.  I went through all the questions and then carefully went through them all again and finished in about 45 minutes.

As far as Spring itself, I'm still feeling very upbeat about this framework.  The future looks bright for Spring IMO.

It's a relief to finally finish and I'm looking forward to spending at least a couple of days not eating, breathing and sleeping Spring during every spare moment.