Sunday, July 3, 2016

Oracle and the fall of Java EE

Recently there has been a lot of ramblings in the interwebz about Oracle removing its funding for Java EE. A long piece by Ars Technica was recently published that had some interesting facts. I wanted to offer an op-ed on this topic since I have been knee-deep in Java EE since its inception. Yes opinions are like assholes… everybody has one… ;-) Of course I am not any different. ;-) For the sake of my “opinion”, I want to say I have been on the Java EE expert groups since post J2EE, either as a representative of Apache or as an individual. This includes JSRs 244, 316, 342, 366. I was one of the core developers of Apache Geronimo (that's where I got my open source start), and at one point I was actually writing a JBoss book. So lets just say I had a huge investment in Java EE. I essentially bet my entire career on it. Being in Java EE and now heavily invested in microservices/SOA, I have seen a huge sea change when it comes to running applications in the enterprise. I remember the days when Java EE/J2EE was the only game in town. JBoss’ success was driven by the ability of an open source project to compete with the monsters-of-app-servers (BEA/IBM/Sun) and relinquish the hold for $10K/core licensing and that methodology was literally unseated. I recall getting a meeting with some top ranks of BEA (pre-Oracle acquisition) at the time to discuss with our company (Virtuas) about how they can go the direction of open source because their licensing model was getting eaten alive. IBM’s investment in Geronimo was driven by that same very reason. I joined IBM on their Websphere CE team (That was based on Apache Geronimo) and I recall the management discussions for why they went that route, because their WAS licensing was getting consumed by JBoss and they needed a play to protect the services component and support (which really made up a large chunk of their revenue streams).

Back in the mid 2000s, I recall the #1 issue devs had with the Java EE stacks was their monolithic size and the incredible long times that it took for these containers to start up. It was no wonder that Spring had become such a success with Rod Johnson’s books that became the basis of the Spring framework. People were using Spring to develop/test their apps. Soon, companies were developing these small apps to capitalize on fast run times and quick development. Companies saw they didn’t need the whole kitchen sink to run their apps. Many companies utilize less than 10% of the offerings inside a Java EE container and they wondered why they needed all this extra “stuff” to run their web app. They just needed some DB access, some transactions, and the web container. They didn’t need corba, or EJBs, or whatever. For this reason. Geronimo went in the direction of making a modular app stack that could pass a TCK for certification, whilst allowing folks to pick and choose what they wanted to run. You could start will a small Geronimo (basically a Tomcat stack - called it Little G) or get the full tomato, which was your typical monolithic Java EE container. The difference between Geronimo and all others was that it was modular. They used this concept called GBeans which was supposed to make addition and removal of components easy. GBeans wasn’t all-that-and-a-bag-of-chips. It was essentially a home-grown OSGi without the matrix classloader. But it was a start to a modular container. In 2006 I made a strong advocation for the Geronimo container to just use OSGi, but the IBM management said, “no”. I had stated it's a modular standard and allows you to deploy/undeploy with a matrix classloader without the warts of a tree based classloader, which was the Achilles heal of all Java EE containers. But thereafter (and I had subsequently left IBM), it seemed that a modular Java EE container was the way to go. In 2012, IBM saw the light and decided it was a necessity. A majority of the Java EE containers seemed to move in that general direction as well. I guess Red Hat (JBoss), Oracle (Glassfish), etc saw that having modularity gave people a choice in how to to run their Java EE stacks. However, as modular as they were, they were still bound by massive components bound together by the required Java EE profiles.

Fast forward to the last few years, the concept of SOA and Microservices began to gain attention. Companies took the concept of a monolithic apps (EAR file, WAR file, whatever), and began to break it up into an app that could be broken into its own components and distributed. A single app could run on multiple servers utilizing persistent messaging and simple in-process upgradeability. Come Java EE 7 and Java EE 8, there was significant discussion about profiles and modularity. Lets just say I was a huge advocate for modularity because I saw the writing on the wall... Profiles were useless. People wanted to piece together what they wanted (JPA, JTA, Resful service, etc), and didn’t want to be tied to anything specific. They wanted to break their apps up into callable APIs and fully separate the GUI from the back end service. Microservices became the way of the Jedi when it came to application development and deployment. It removed the single point of failure and allowed for a cloud-friendly scaleable build with small footprints. But guess what... modularity in its true form never made in as part of the specification.

Today, a large part of my business is migrating companies off the monolithic Java EE containers into lightweight modular containers. Yes, even the tried and true banking and financial industries are moving away from Java EE. Every company has a different set of specifications for what parts they may use in a Java EE stack, but rest assured, its all going by their choice and being as small of a footprint as possible. When companies buy cloud images and the pricing is based on memory size and numbers of cores, it gets real easy to understand why they don’t want to run these stacks that require lots of resources for only needing to use less than 10% of what a Java EE stack may offer. It because it costs more to run crap that you will never use.

Oracle and I have always had a love-hate relationship over the years, primarily because they represent the quintessential corporate identity that many of us love to hate. That, along with my Apache open source roots, Oracle and I have no historical love for each other. That said, I have to somewhat defend Oracle on this decision. Many of us see this sea change. I am sure Oracle sees it as well. Oracle isn’t stupid. They see the writing on the wall. Lightweight, small footprint stacks are the way to go and its where corporate IT is going, like it or love it. I think Java EE lost its way with profiles. Java EE certainly could have been a continued success if it was truly modular and Java EE itself was really a container that *offered* services that could be tested together with a massive TCK to ensure the different components worked with each other. But it should have been small, pick and choose what you needed to use, and made a single stack that fit your needs. Gosh, that sounds an awful lot like an ESB. ;-) But we are now a day late and a dollar short when it comes to who wants what, and the kinds of changes need to be made.

The bottom line here is the market for Java EE stacks is waning and Oracle chooses not to invest in a technology for where they think there is no future. I don’t blame them as I would make the exact same decision if it were my business. That said, the JCP is supposed to be “open” with a group of technology leaders and companies that are supposed to help make the decisions for the Java EE direction. Nothing stops a Red Hat or IBM, or an individual from taking the torch and becoming the steward for Java EE. If the masses want a Java EE of some form to continue, community members should step up. Nothing lasts forever and technology changes. If you want it that bad, then become a steward and stop complaining that its Oracle's responsibility. Its not. They think their money is better spent elsewhere and I don't blame them.

For those of you who want to steward a continued Java EE, get out there and lead the effort. Stop bitching about how Oracle is evil and they are killing Java. They aren't. They are making a business decision. They are not philanthropists and we certainly shouldn't expect them to be. My recommendations for what a successful Java EE needs to be

  1. Drop the profiles. They are useless and pointless waste of time.
  2. Make Java EE a conglomeration of technologies that are known to work together (i.e. JPA, JTA, JMS), but don't force their full installation. Let the use pick and choose what they want. Just be sure that they work together in pieces or in totality.
  3. Make it modular. Start with zero and let people add what they want to use.
  4. Get rid of the tree class loader. You need it matrix based. OSGi is fine. Jigsaw is fine. But it needs to have classes that can be loaded and unloaded without an impact on the container.
  5. The container itself should be a thin shell with remote capabilities (again OSGi/Karaf looks really good here)
  6. Make it cloud friendly. Microservices needs to be core functionality, lightweight, and run in the cloud.

But if people are going to claim the sky is falling while pushing profiles down people's throats of which only few will use, then they are heading the way of the dinosaur. In today's cloud-centric and polyglot implementations, profiles and monolithic containers will certainly not gain momentum or speed. If you disagree, then step up and become a leader in the Java EE space and try to make change. Take on the JSR and be the steward. But I wouldn't try to fragment the supporters or it will just get lost in the shuffle. Perhaps the Java EE Guardians can help make that stewardship change, but I recommend that they really look at what people want and use and think about some of the things that I proposed in my list above.

I hate to say it, but I told you so. Technologies change, paradigms change, and needs change. Stop blaming Oracle for the Java EE demise. If Java EE is needed that much, then there will be enough community to make it continue its path. If not, it will die on the vine. If people claim that Oracle's lack of investment is what will kill Java EE, then, it's already dead.

Wednesday, January 18, 2012

Google Apps Calendar #sucks

Dear @google, your Apps for domains are awesome but why does it have to suck with real push syncing on the Mac? #icloud ftw!

I have 4 main machines I use in my daily use, a MacPro (for my desk), a MacBookPro for my remote development and work, my iPad for bedtime reading and air travel, and of course my iPhone for my "keep it always with me". I need them to also always be in sync. I also use Google Apps for Domains for my email and calendar. I loved it when Google released real "push" email and calendar by simulating an exchange server for my beloved travel devices. I assumed they also had "push" in the calendar for my computers. I assumed wrong. I noticed that as I added an event on Google or my computers running iCal, the IOS devices got the events, but the Macs did not. The only way my computers got the event was if I ran iCal continuously on each machine. If I didn't, the machine would miss the event... so there I had a manual step in my "syncing" my computers. Luckily my trusty IOS apps got the event.

I think I must have set something screwy, since Google offers exchange style push for Microsoft Outlook on Windows and mobile devices. So off I went and Googled "google push ical exchange" and this appears to be a real complaint for Apple users. Apparently Google made exchange/push for IOS/Android and Microsoft Outlook users (non-Mac of course), but silently left out Apple users to have a true push experience. Not sure I get why. Tin foil hat posters seem to think its a vendetta for the Google vs Apple wars. *shrug*

Then along came Apple's iCloud. Oh how I love thee iCloud. With push and syncing between devices... It just works™. So I exported my calendars from Google and into iCloud they went. Total time to set up on all devices and computers: about 10 minutes from export to fully running synced calendars. So now, Google Apps now handles my email and iCloud wonderfully handles my calendar. I get my cake and can eat it too!

So here is what I don't get. Google must have seen the iCloud thing coming. You would think they would have thought "Hrm... we had better get our act together and give push to our Apple users or they may leave our calendars behind." But they didn't. Was it really that difficult to enable Exchange for use on Lion, especially since Lion is 100% exchange compatible? I really like Google's services and have been a faithful Apps user for Domains for several years. I would have kept my calendars at Google had they "pushed" me my calendars and never even looked at iCloud. But Apple built a better mouse trap and it will need to be something compelling to get my calendars back on Google. If Apple builds an "ICloud for domains", it will probably be adios to Google Apps for good since I can still only use IMAP or POP to my Mac email clients.

Are you listening Google?

Monday, January 16, 2012

Frist Post

First... about me... I am the founder of Savoir Technologies, a SOA/Java consulting company specializing in the Apache Services stack (ServiceMix, Karaf, CXF, ActiveMQ, and Camel). I work with a group of very talented guys and we all have contributor or commit status on some of the various aforementioned projects (and more). We contribute heavily to Open Source and believe in the Open Source methodology for integration. My hobby is Fire Fighting (yes ... really) and am a volunteer firefighter for Evergreen Fire Rescue, which is my community's volunteer fire department. I have been a fire fighter for 10 years. I am happily married to my wife Nazarena for nearly 17 years and have 3 children, Madisyn (12), Weston (10), and Coleton (5). I'm a techy geek type of guy and am a misfit's fanboi. I love hacking the iphone and was on the iPhone Dev Team as "fred_". I was the guy who wrote most of the code for the revirginizer, which fixed Apple's bricking of anyone who unlocked their iphone and was the catalyst for getting iPhone Elite reintegrated with the iPhone Dev Team... long story... ;-) But I no longer spend large swatches of time hacking the iphone because I simply just don't have the time. I found that most folks who are married and have a family lose their luster for hacking and concentrate on the more important things in life.

So... enough about my background...

It's been a long... long... time since I blogged. My old blog, 'Random Neuron Firings' was kept up until 2006. I personally hosted that blog on my own servers using the awesome Apache Roller, but it soon became too much of a headache and blogging just got plain old boring. But I'm back. Why? I'm not a socialite as I just can't get into the Twitter/Facebook thing.

Twitter just seems too much about telling people how big the turd is you just left or using dumb services like Four Square that announces to all thieves that you are not home so just burglarize me. Do I tweet? Yeah... I try once in a while so that I have some epiphany that turns on in my head and get that "ah ha" moment. But it just doesn't happen. Maybe one day?

Facebook is all about "me me me me me". I could care less about the picture of your 8 month old's dirty diaper or how you threw up all over yourself after last night's party. The only time I log into Facebook is to look up someone whose information I forgot, looking for how to connect with them (phone or email - yeah people put way too much personal crap on their Facebook page). I also use Facebook to do "background" checks on potential employees or contractors to be sure I don't hire on someone I may be sorry about later. The good thing about Facebook is it underscores that old saying my mother used to tell me, "Choose the company you keep wisely, for you will tend to be just like them" and "Birds of a feather, flock together". Facebook is great at getting a quick look into someone's personal life and it can be very telling.

Blogging is a different story. Its a great place to journal things you really want to keep. Its keeping it up to date that is the struggle. I must say I shut down my blog in 2006, but I still dig for some great tech postings ind code snippets that I wish I hadn't forgot. So for me, putting my blog here give it a bit more life and using the cloud to handle the ugly stuff.

So this blog... what's it about? Its about manly tech stuff... code snippets that I want to keep... and journal some ideas and thoughts that I want to look back on. I want it to be about my adventures in tech, fire fighting, soa, and family. I want it to be my legacy to look back on and be my little personal imprint on the web.

Thats it for my frist post... more to come...