Blogs

SpringSource Blog

Enterprise Java and the American Motors Gremlin

Rod Johnson

You may remember the AMC Gremlin–a strong claimant for ugliest car ever. The Gremlin was produced back in the 70s, but there are still a few around, like this one, which I photographed last year in San Francisco.

AMC Gremlin

The enterprise Java experience today reminds me of this piece of American motoring heritage. The Gremlin was a desperate response to the oil shock. AMC needed a “compact� car, so they took the smallest car they had and chopped it in half. The end result sold surprisingly well, but showed unmistakable signs of the fact that its front and rear were produced by different teams and hastily cobbled together. Needless to say, it was Japanese and European manufacturers who triumphed in the shift toward smaller cars.

Gremlins in Java

Today, enterprise Java feels a lot like the Gremlin, and it’s a major issue in terms of productivity. Both up and down the stack and throughout the application lifecycle, the parts are cobbled together from different sources. While most of the parts are perfectly fine, others are gross overkill for typical scenarios. Sadly, we’ve come to regard this as normal and become resigned to the productivity consequences. For example, it’s usual to build applications with an open source build tool (Ant or Maven); use an IDE from a different project or vendor, manually integrating numerous plugins; architect applications around open source frameworks; yet deploy to an application server from yet another vendor—with the integration often relatively superficial.

A few parts of the picture are pretty much givens: like Spring and Hibernate, an Eclipse-based tool suite, and (increasingly) Apache Tomcat. But the whole relies both on developers making numerous choices for each project, and substantial in-house glue and support—the latter, another area in which we ignore or become resigned to the cost consequences.

It doesn’t have to be that way

Experience on other platforms shows the benefit of joined up thinking. Much of the productivity achieved by Ruby on Rails is due to the fact that it provides an integrated experience; choices are made for the developer and, for example, build is addressed hand in hand with the application framework. The fact that Rails begins from the premise of the application framework establishing the programming model helps provide a basis for a coherent philosophy.

Microsoft also provides a case in point. Microsoft considers everything from Visual Studio through to SQL Server (and even, with Azure, cloud) as part of a single vision, and, while not all the constituent parts are ideal, the result is a far more integrated experience than is provided by enterprise Java.

Of course, neither example is perfect. Ruby on Rails achieves productivity partly by sacrificing the ability to deal with complex scenarios, such as working with legacy databases. Microsoft’s success is achieved through monopoly. It’s easier to achieve an integrated result when one company controls all the parts.

Fortunately, open source provides the opportunity to achieve the same results, but in a far more open manner. While no individual open source project addresses the full application lifecycle, it is possible for a vendor to build an integrated experience drawing heavily on open source and hence minimize vendor lock in. Building on open source also allows a vendor to choose market-leading solutions in each area, rather than cobble together a product from its in-house parts bin (a la AMC).

More than just Open Source

However, open source alone is not a solution. Open source projects are often brilliant at addressing specific problems in the software stack or lifecycle; they are far less good at (and less interested in) integrating all the pieces. A modern solution that addresses the big picture, throughout the application lifecycle, will inevitably rest on open source, but require the backing and support of a vendor.

Surprisingly, in the Java space, no vendor seems to have risen to the challenge, and few have even tried. Despite its control of the Java specifications, Sun has never been a strong enterprise Java vendor, and has never seemed to fully understand the productivity problem in Java. (Furthermore, productivity problems are typically solved by products rather than specifications. Only recently, and arguably too late, has Sun started to realize this in the Java space.) IBM does have solutions spanning the entire lifecycle, but in IBM’s case, having a joined up vision does not make up for the poor productivity characteristics of most of the constituent parts. Any solution to the software lifecycle that starts with Rational Application Developer and has WebSphere at its core is unlikely to provide a modern productivity experience, or make Java competitive with competing platforms. Microsoft, for all its faults, understands the needs and desires of developers at a far deeper level than any traditional enterprise Java vendor.

The established vendors in enterprise Java are also responsible for creating the complexity that produced many of the productivity problems in the first place, and hence are not the likeliest candidates to resolve them. Plus, especially after the industry’s recent consolidation, they are huge companies. Huge companies usually don’t get simplicity—and, often, it’s not in their interests to do so.

Moving forward

Java needs a new flag bearer, and it will not be one of the incumbents. SpringSource is dedicated to transforming the enterprise Java experience—and we are well positioned to deliver.

Spring, and SpringSource, has always been focused on eliminating enterprise Java complexity. Appropriately, “Eliminating Enterprise Java complexityâ€? is now our company tagline. To this end, we’ve been working hard for over 6 years. While Spring began by minimizing enterprise Java API complexity through innovation, it has long since moved to address broader challenges–such as security, batch, integration and web services—while SpringSource as a company has become broader than Spring. With Spring, Grails, Spring Dynamic Modules and SpringSource dm Server and the simplification of OSGi, SpringSource has long set the agenda for enterprise Java productivity.

Eliminating enterprise Java complexity means considering every stage of the application lifecycle. It means more than just a server or application framework, no matter how good. It’s hard to imagine any modern fully integrated solution that does not rely heavily on Spring, but Spring is only part of the picture.

Build, Run, Manage

Enhancing productivity overall involves considering three keys stages of the lifecycle: the Build stage, when applications are developed; the Run stage, when applications are deployed to a server; and the Manage stage, when applications are kept in production and maintained in an operational setting.

This focus explains why we are now the company behind Grails–the most productive technology on the JVM; and why we built the SpringSource Tool Suite to help speed up enterprise Java development with Spring.

It explains why we have moved into other areas, such as the application server space—taking a leading position in the industry’s leading application server (Tomcat) and building SpringSource dm Server, a next-generation modular application server. It explains why SpringSource tc Server and SpringSource AMS (Application Management Suite) provide powerful management capabilities for applications deployed to the data center.

The Build/Run/Manage lifecycle is central to how we see the world. You will see major announcements in the next weeks and months about product and build initiatives to strengthen our story throughout the lifecycle. You will see us extend our technology in order to pursue it.

I’m confident that SpringSource will become a major middleware vendor as a result of solving these problems. However, the real winner is you. Enterprise Java can be (and needs to be) much more productive. SpringSource is focused on this goal, has the ability to deliver, and the community both underpins and stands to benefit greatly from our efforts.

Similar Posts

Share this Post
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks
  • DZone
  • LinkedIn
  • Slashdot
  • Technorati
  • Twitter
 

17 responses


  1. I think you are exactly right in most of your commentary and I'm also quite a believer in the spring source suite of products as a solution. Having just built a rather large piece of enterprise infrastructure from scratch, including all public-facing web presence and internal management tools, and having used Spring at every layer of the stack to do so (OK, so I haven't had time to port from raw tomcat to dm server just yet, but it will happen),

    I've been tremendously impressed by the productivity granted by the spring tools. And not just for me – the architect, spring evangelist, and resident expert user. My team consists almost entirely of spring and enterprise java novices, and the rate at which their productivity reaches high levels after beginning work on the project has to be seen to be believed. And that is where true development efficiency lies, if you ask me. Sure, there are certain types of code that you can execute faster in RoR or other environments, but I don't know that there's a single environment where novices can become experts so quickly and easily with such minimal guidance. Most other product 'suites' can have a very steep learning curve as soon as a developer attempts to step outside of the core competence of the product, but the Spring product suite never seems to run into that wall. No matter how sophisticated our application gets, Spring is always quick to lend a helping hand to conquer that next piece of complexity. You won't find that ANYWHERE else, in my experience.

    It's rare that I'll put my real name on a piece of public commentary, let alone such a gushing endorsement, but I do so here without hesitation, as I've been nothing but impressed by everything you guys have done since I first stumbled onto the Spring 3 years ago. If anyone can realize the vision you elucidate above, I think it is Spring Source, and I'm definitely along for the ride. Thanks for all your hard work.


  2. I'm a Spring believer from the beginning, reading Rod's book and trying out the sample code. I've used Spring ever since.. but I still think Spring is not quite there, yet.

    Really,
    Is Spring MVC the best we can do?
    What about Spring RCP/Desktop?
    The Spring AMS suite, for example, looks just like a cheesy copy of JBoss RHQ management console and _is_ very ugly and un-intuitive to use.

    Besides that, the quality of the community support degraded badly the last few months; there are a lot of messages on the Spring fora without a decent answer and there is a lot of cluttering.

    Spring is still a good choice for enterprise Java development, but I hope you don't forget were you come from… It is better to just get a few things right, than a lot of things wrong.


  3. FoX: Don't diss Spring MVC. It's surprisingly useful and flexible. It's not a be-all-and-end-all framework. Instead, it's the sweet spot for a minimal MVC framework. A step up from JSPs & servlets, without the overbearing complexity of other frameworks. I've been very impressed with Spring MVC. But there's a reason why web flow sits on top of it — MVC is a base abstraction.


  4. Rod,

    Mentioning AMS with your other technologies is really a stretch. How many people are working on it, how has it evolved in the last year? We have tried it and it was been very disappointing.

    If you want to tout AMS, maybe you could take another look at it and prioritize some focus there.


  5. AMS today provides an operational dashboard with detailed metrics for your distributed datacenter.
    SpringSource Enterprise provides real-time metrics from your Spring-powered applications that AMS is able to centrally collect.
    These metrics provide unique visibility into the runtime and performance behavior of your Spring applications.

    AMS 2.0 is included with SpringSource tc Server, our enterprise Tomcat product. tc Server is in public beta and extends significantly beyond real-time monitoring to provide application deployment, configuration, pre-configured alerts and more for your Tomcat applications. Control of your distributed tc Server deployments is available both from the existing AMS GUI Dashboard, and from a new command line scripting utility. Early response from sysadmins participating in the tc Server beta program has been overwhelmingly positive. We expect, and are already seeing in the beta program, significant growth in AMS usage among our customer base.

    Later this year, you will see AMS provide similar capabilities for SpringSource dm Server 2.0.

    AMS provides complete sysadmin support, from configuration to deployment, to monitoring and alerts across the breadth of SpringSource runtime containers and is a strategic area we will continue to invest in.

    We encourage you to download the tc Server public beta and give it a try.

    We are always looking to improve our products, so please share your feedback.


  6. The AMC pacer was the ugliest car – http://en.wikipedia.org/wiki/AMC_Pacer

    We had 2 gremlins. They were all engine. Which was bad in snow, unless you really wanted to do donuts and then it was perfect! :) As a side note, someone i went to school bought a gremlin and ended up using duct tape to keep the body together. LOL. If I can find a year book i think there is a picture in there. Too funny.


  7. I think Spring must be careful not to become the next J2EE.
    I like Spring and it offers many great things, but learning and mastering! Spring is now not any easier than mastering JEE5. Sometimes, the things Spring adds don't bring much benefit (like the Hibernate stuff).
    Others are great but not as powerful as they could be (MVC) or as good as the competition (Seam).

    That said, I like Spring and use it regularly but you know be careful to keep things as simple as possible while still powerful. Grails is the perfect example for how to do it right.

    For my last project (a medium-sized project from scratch) I used Django and this is way more productive than all Java (except Grails).
    I would still prefer Spring for larger projects, but solutions like Django or Rails have matured and are much more powerful than 2 years ago.

    So you will face competition from "below". If you can keep Spring simple, it will have an even greater future, as will Grails.


  8. Eliminating JEE complexity has been the goal of JEE5 and JEE6. SpringSource is going to start losing a lot of users soon after the release of JEE6, especially since the standards based components can be used individually in Tomcat. JEE users along with GlassFish, MySQL, NetBeans and OpenSolaris have enjoyed a fully integrated stack from one vendor for years, but have had to use Spring DI until JEE6. We'll have to wait and see what Oracle's plans are now. We know they also want a fully integrated solution from one vendor, are committed to open standards, and have the deep pockets to fund it. Almost all Java developers I've talked to are happy to see Oracle take the reigns.

    As good as your software is, it is your un-professional bashing of the competition and re-inventing everything in Java EE promoting vendor lock-in that makes it impossible for me and others I've spoken with to love your company. Whenever I listen to you do a talk or read blog entries like this one, you leave me with the same impression as this guy: http://www.jroller.com/obie/entry/top_10_reasons_why_java


  9. Ryan,

    I'm sorry you don't like me. I do dispute "unprofessional," however :-)

    Regarding eliminating enterprise Java complexity: last time around Java EE proponents argued stridently that EJB 3.0 eliminated Java EE complexity and that Spring was unnecessary. Meanwhile EE6 was another shot at reinventing Java EE, when it was clear that EJB 3.0 didn't solve the key problems, and developers continued to flock to Spring. And to Tomcat, largely sidestepping EE. Looking at EE6, it's an advance, but I don't believe it is enough to refresh the EE franchise, either. Meanwhile Spring is proven, very widely adopted, and isn't standing still, and Tomcat is deployed almost twice as often in production as any Java EE server. Plus you can run Spring on any application server, without needing to upgrade to get the latest programming model. Remember, WebSphere is still #1 among Java EE application servers–or, #2 if you go beyond Java EE and include Tomcat.

    As for "re-inventing everything in Java EE"–I think that's unfair. Spring has consistently innovated. In the last few years it has been Java EE that has tended to "re-invent" Spring (not very successfully, in the case of EJB 3 injection and interception, for example), rather than the reverse. Certainly Spring grew out of the problems of Java EE (and built on Java EE APIs), but would Java EE look anything like it does today without Spring?

    Regarding "vendor lock-in": We are deeply committed to open source, engaged not merely in Spring but Apache and Eclipse projects also. Most of the IP SpringSource produces is open sourced.

    Certainly we can expect Oracle to present an integrated stack. They've clearly promised to do so, from the "disk to the application". (It's unlikely to include MySQL as a first class citizen, however.) I hope that Oracle *do* provide an integrated experience–Java certainly needs it, as I argued in my post. I'm very happy for what we produce to be compared with what they produce: On productivity, innovation, quality and cost. And openness. It's going to be an interesting year!

    Rgds
    Rod


  10. Hi Rod,

    I didn't say that I don't like you, I just don't like the way you bash the competition in ways I've never seen other vendors do before. The way your company has influenced standards and provided a usable solution for developers until Java EE finally matures is appreciated, and I currently use Spring core in place of EJB 3.0.

    I can completely agree that JEE5 was not enough, but it was a step in the right direction largely thanks to Spring, Hibernate and Java 5. It is my opinion that EE6 "is finally there" with JCDI, EJBs in servlet container, the final missing pieces of EJB implemented, JSF 2.0, JPA 2.0, Beans Validation, JAX-RS, etc. I think there are a lot of people choosing standard API's like JPA and only using vendor specific APIs where the specs are lacking until the next revision. Since JEE6 "is there", they can finally move to a complete open standards based EE6 stack, swapping out implementations when necessary (for better performance, better caching features, cost, or whatever).

    Regarding vendor lock-in, if I write to your web service APIs then I can't swap out the implementation for CXF, Axis, Metro, Jersey, or whatever. Sure my app will run on other application servers but it is tied to your implementation. Same goes for deploying to Spring DM server.

    Regarding "re-inventing everything in Java EE", that mostly came from Spring creating its own SOAP and REST APIs, web framework, declaring that Java EE packaging formats will be replaced by Spring's OSGi based formats, etc. I'm not commenting on their quality, I would just prefer working with a company who contributes to improving open standards rather than re-inventing them and creating proprietary solutions. Sun has been that company for me up until the Oracle buyout. They are committed to high quality, well documented, open, standards based, commercially supported, affordable software.

    Ryan


  11. Ryan

    I just don't like the way you bash the competition in ways I've never seen other vendors do before: Larry Ellison (and plenty of others) tend to be pretty robust regarding competitors. In any case, my views on EJB and the whole Java EE enchilada predate SpringSource being a competitor, and are based on my technical opinions. For example, regarding the present blog post: I don't think it is a matter of debate that enterprise Java productivity needs to improve, and I see being honest about that as constructive–assuming we all want to be working on the Java platform in years to come.

    Thanks for bringing up some specific points. Let me address them:

    • Regarding Spring "creating its own SOAP and REST APIs": We looked hard at supporting JSR-311 annotations and decided it wasn't the right technical path because our REST support grew out of Spring MVC. The easiest, most elegant route for our users was to extend the Spring MVC annotations. If you want to use JSR-311 annotations with Spring, Jersey and other projects have great Spring integration, so that's a choice that already exists.
    • Regarding Spring "re-inventing everything in Java EE" by "creating its own web framework": There's nothing in Java EE that does what Spring MVC or Spring Web Flow does. We work with the lower level Servlet, JSP and JSF specifications. Certainly Spring MVC competed with Struts when it started out, but I think people welcomed the choice. Web frameworks have been the domain of open source for years in Java: We didn't start that–hopefully we've made a useful contribution.
    • "Declaring that Java EE packaging formats will be replaced by SpringSource's OSGi-based formats": Firstly, both our dm Server and tc Server products take regular WAR files. But we don't believe that WAR or EAR files are the best possible deployment units today, for a variety of reasons, especially around modularity and duplication. What we've done here is driven by technical reasoning. We don't want our deployment formats to be "SpringSource" only: We're working to standardize the OSGi constructs dm Server uses (or equivalents), which we introduced only because nothing already delivered the experience we wanted. Plus, with Spring DM, the programming model is not dm Server (or even OSGi) specific.
    • "I would just prefer working with a company who contributes to improving open standards rather than re-inventing them and creating proprietary solutions": We contribute to a number of standards. For example, we are heavily engaged with the OSGi Alliance. I suspect you and I differ largely about which standards are important. In any case, "proprietary" is a questionable term when we're talking about open source.

    Rgds
    Rod


  12. I disagree with these comments on Java EE 6:

    > There's nothing in Java EE that does what Spring MVC or Spring Web Flow does.

    > Looking at EE6, it's an advance, but I don't believe it is enough to refresh the EE franchise, either.

    > (written from memory, Java Posse interview) "WebBeans/JCDI is unproven" (it improves on ideas from proven Seam and Guice, and Spring copied some ideas from Guice).

    If you had to pay for Java EE 6 APIs to use them then it wouldn't survive. But, the main APIs have free open source implementations, and application servers such as GlassFish and JBoss make Java EE 6 attractive.

    I do agree with you on this point:

    > I suspect you and I differ largely about which standards are important.


  13. Ryan

    > There's nothing in Java EE that does what Spring MVC or Spring Web Flow does.
    You referred to Spring "re-inventing everything in Java EE" by "creating its own web framework". I pointed out that that was not the case, in view of the history of the Java web tier. Yes, Java EE6 adds some more web tier functionality, but it still does not offer the same functionality as Spring MVC or Spring Web Flow.

    > (written from memory, Java Posse interview) "WebBeans/JCDI is unproven" (it improves on ideas from proven Seam and Guice, and Spring copied some ideas from Guice).
    Yes, Spring borrowed some ideas from Guice–with acknowledgment. Unlike EJB 3.0, Guice genuinely did advance the art regarding DI, and we recognize that. Incorporating ideas from Guice in Spring 2.5 made Spring better. I stick by my statement that JCDI is unproven, and I'm not alone. Consider this recent comment from Guice creator Bob Lee, who shares my skepticism:

    If 299 looks superficially like Guice, it's because I was heavily involved.
    I left the EG over a year ago because I disagreed with the leadership and
    technical direction.

    So far, I haven't bothered to actively oppose 299 for a few reasons:

    1) 299 doesn't seem to have gained any real traction. Only RedHat is
    pushing it. You've heard of design by committee? 299 is design by Gavin. :-)

    2) 299 is part of EE, which we don't use or care much about. I think the
    risk of 299 imposing itself on SE is zero.

    3) I choose to spend my time constructively (on the Java language, Guice,
    JSR 166, Android, etc.), not playing political games.

    My advice to our users is to continue using the Guice API. Your code will be
    more maintainable as a result. JSR 299 does not represent consensus. It's a
    land grab by unqualified vendors who would rather prematurely set an
    unproven design in stone than compete on a level playing field. It's EJB and
    JSF all over again. By comparison, the Guice API has enjoyed many times the
    scrutiny by people who actually use and understand this stuff. Guice is
    simpler, better specified and more future proof as a result.

    In other words, Guice will not directly support 299, but you could easily
    build a 299 extension for Guice. You'd be better off sticking to the Guice
    API though.

    Bob


  14. Thanks for the interesting post by Bob Lee. I did not know he wrote that. Still, what JSR 299 brings to Java EE is very much needed if Java EE wants to offer a complete solution.

    http://blog.hibernate.org/Bloggers/NewsOnTheJSR299PublicReview

    —–
    The really good news is that there is now unanimous agreement between the folks involved in these discussions that:

    * the EE platform needs a contextual dependency injection solution with capabilities that match the capabilities of existing proprietary solutions
    * the approach taken by JSR-299 is, overall, a good one
    * that the goal of this work is inclusion of JSR-299 in all Java EE 6 profiles, and in the "embedded" EJB Lite environment
    —–

    I've read that they incorporated a lot of feedback from IBM and others, so it's not just Gavin.

    I think the pairing of JCDI/JSR299 EJB 3.1 will be competitive to core Spring Web Flow.


  15. Does anyone here have real world experience with Seam? How much is this solving the productivity issue with Java based web app development? Thanks.


  16. Hi, having just led a project for developing the first version of a new web Java EE based product, I could not agree more with Rod's diagnosis of what ails java development today.
    But despite this clear vision of the problem, SpringSource has not been able to deliver a real solution in the last couple of years. By solution, I mean providing out-of-the-box end-to-end web development framework – and improving constituents like the Spring Controllers hierarchy,(I believe deprecated in 3.0 now) adding support/tags for Ajax libraries like Dojo, and providing good documentation and training. For instance, there is almost no training provided in India, unbelievable!! And detailed documentation on writing annotation based controllers is still wanted, for those who ventured into Spring MVC. Instead of focusing on such bread-and-butter issues, so much energy is being expended on OSGi and Grails which are irrelevant for the typical java development project. I guess Spring provides enough ammo to blow the enterprise complexity away, but learning to load and use its artillery is almost as complex – so yes, Spring could become the next J2EE! :(


  17. > By solution, I mean providing out-of-the-box end-to-end web development framework – and improving constituents like the Spring Controllers hierarchy

    I think, the main advantage of Spring is it's less invasive and pluggable. Choose what you like/consider best fit.

    >Instead of focusing on such bread-and-butter issues, so much energy is being expended on OSGi and Grails which are irrelevant for the typical java development project.

    I believe Innovation can come from Grails that might help Java/Spring's cause. Those who use Spring want innovation, and it need to be written all in Java.

    > so yes, Spring could become the next J2EE

    I don't totally share this concern. I'm eager to see the next innovation for Spring. Also, you don't make major innovations, just about every other day, it takes time. To be fair, Spring in its current form is good enough and caters to the needs of application developers, and will most probably do so for some years to come.

    Finally, today its Java and Spring, in the coming years it could be Grails and something else. As developers, we should just keep our minds open, and cultivate the ability to learn and absorb new ideas, regardless of the source.

    History has proved that innovation, and solutions that really solve the needs have always been successful. Spring has been one of them. It would be interesting to see if they continue with it or someone else would take it from where they stop.

    We live in interesting times. The next 2 years are surely going to be interesting for Java.

10 trackbacks

Leave a Reply