Blogs

SpringSource Blog

Spring Framework 3.1 goes GA

Juergen Hoeller

It is my pleasure to announce that Spring Framework 3.1 becomes generally available today! This release delivers several key features that make Spring ready for the challenges of 2012 and beyond:

* The environment abstraction and the associated bean definition profiles, along with centrally configurable property sources for placeholder resolution.

* Java-based application configuration based on @Enable* annotations on configuration classes, allowing for convenient container configuration: e.g. using @EnableTransactionManagement to activate declarative transaction processing.

* The cache abstraction with our declarative caching solution (@Cacheable etc) on top, focusing on convenient interaction between application code and cache providers.

* The Servlet 3.0 based WebApplicationInitializer mechanism for bootstrapping a Spring web application without web.xml! This is a key piece in Spring's web configuration story, providing a rich alternative to XML-based bootstrapping.

* Revised MVC processing with flash attribute support, a new @RequestPart annotation, and further REST support refinements. This new HandlerMapping/HandlerAdapter variant is also highly extensible for custom MVC needs.

Beyond the above major themes, we invested into our O/R Mapping support, allowing for JPA package scanning without persistence.xml, and supporting Hibernate 4.0 (CR7 at this time – we will fully support Hibernate 4.0 GA once released).

Last but not least, this is the first Spring release with first-class Java 7 support. While older Spring versions run perfectly fine on Java 7, Spring 3.1 goes the extra mile and fully supports JDBC 4.1 as well as convenient ForkJoinPool setup and injection.

As usual, this release also includes many recent bug fixes. Spring 3.1 is fully compatible with Spring 3.0 and continues to have Java 5+ and Servlet 2.4+ as minimum system requirements. We recommend a Spring 3.1 upgrade to all Spring 3.0.x users.

Enjoy!

Similar Posts

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

28 responses


  1. Congratulations guys with this GA release. Keep up the work…


  2. GREATE WORK!!!!!


  3. Congratulations!

    3.1's already working in one of the project I'm involved at – it's a governmental site with WebSphere 6 which won't go away soon.

    Welcome to the real JavaEE world! Spring is de-facto Java Enterprise!

    regards
    Grzegorz Grzybek


  4. With Java EE 6 having so much industry support and Java EE 7 just around the corner, is Spring really still relevant?

    I don't mean to insult your work, but I just mean that Spring was once an answer to a horrible J2EE and it had a clear use. But now with Java EE being so powerful, what's the exact purpose of Spring?


  5. Hi Juergen Hoeller,

    Good to here that 3.1. GA is out. We tested one of our application(war) by migrating to 3.1 it works good with out having any problems. But when we tested my other application(ear) by deploying it on jboss, we are not able work (The version of spring deployer that we are using is having 3.0.6 release compaitable jars). Can you please share your thoughts in this.


  6. Mahesh, we generally recommend the use of Spring within WAR files, simply putting the framework jars into WEB-INF/lib. Any server-specific deployment solutions are likely to cause problems such as the one you are seeing, with the server vendor having to catch up with newer Spring releases. The WAR based deployment approach does not suffer from any such issues.


  7. Mike,

    I summarized my position on the Spring on Java EE topic in a blog post around SpringOne last year:

    http://blog.springsource.org/2010/10/19/spring-3-on-a-java-ee-6-server/

    While that post was not meant as a comprehensive statement on the subject overall, it does make important points from my perspective.

    In the meantime, as of late 2011, we of course have more Java EE 6 server products available: beyond GlassFish 3, that would be WebSphere 8, WebLogic 12, and JBoss 7 (even if the latter is 'just' Java EE 6 Web Profile compliant at this point). However, this does not change the fundamental points made in the blog post above. Spring still is a complete programming and configuration model in its own right, which one may develop against without making a lot of assumptions in terms of deployment platforms. You can make good use of Java EE 6 facilities when available, but your application can easily be deployed against other (and older) platforms as well.

    With respect to Java EE 7, even if this is still a while away (we expect a Q4 2012 delivery of the final specs there), we have support for several related specifications in the plan for our upcoming Spring Framework 3.2 generation: in particular, JCache, JMS 2.0, JPA 2.1, Bean Validation 1.1, Servlet 3.1, and JSF 2.2. So Spring will once again be an enabler for using some of the latest specifications on existing deployment platforms, i.e. without a server upgrade. FWIW, a lot of Spring 3.2's functionality and some of the brand-new spec support will even work on WebSphere 6.1!

    Hope that helps,

    Juergen


  8. Thanks for the comprehensive reply Juergen.

    I know Spring is a programming model in its own right, but I was originally wondering whether the (Java) world really still needs this? Okay, I see some benifit in Spring and Java EE keeping eachother from getting lazy, but it's also a big source of fragmentation in an already fragmented world. Wouldn't Spring be interested in joining forces with Java EE as Hibernate once did?

    There is one thing I did not understand. You talk about using newer technology on older platforms as a kind of advantage of Spring. But how does this work? If I'm using Spring 2, then I need to upgrade to Spring 3.1 if I want to use Spring 3.1 features, right?

    Similarly, if I'm using J2EE 1.4 (eg Websphere 6) and I want to use Java EE 6, I need to upgrade to Java EE 6 (eg Websphere 8). What's the fundamental difference?


  9. As for the newer technology on older platforms part, it's a matter of who makes the decision for a server upgrade. Such a server upgrade has wide-reaching implications, similar to a database system upgrade. This is often in the hands of a dedicated operations team, making decisions based on management and system integration characteristics – in particular in a data center environment. As a consequence, a server upgrade is something an application development team may lobby for but may not be able to decide on themselves. This is fundamentally the reason why WebSphere 6.1 is still commonly found in data centers out there, with application development teams having to live with it.

    Spring on the other hand is usually deployed as a jar file within a WAR (i.e. in the WEB-INF/lib directory). Since each WAR has an independent copy of jars that will affect that particular application only, each individual app may independently decide to upgrade its embedded frameworks and libraries (as long as they are compatible with the server's base specifications). Such an upgrade of libraries within the application's own deployment unit is fundamentally the application team's responsibility, so they may upgrade when it fits their purposes. Other applications on the same server may keep using older versions of Spring without any issues – each app (including its libraries) is fully isolated, after all.

    Of course, not everybody lives in such a data center environment where an operations team is making such independent decisions. However, this is very common in corporate, banking and public administration environments. It may not matter to you (in your present job) but it does matter to a lot of people out there.

    As a quite different twist to that argument, it is also about future-proofing an application for upcoming deployment environments. For longer-lived systems, you may have a specific server to deploy to initially, but can you make bets on what the deployment landscape will look like in, say, 3 or 5 years? With the ongoing innovation in cloud platforms, we see a trend coming our way where Java EE – at this point – does not play much of a role at all. Building a Spring based application allows for making good use of Java EE server facilities when available, while also being portable to cloud-based PaaS environments such as Google App Engine, Amazon Elastic Beanstalk and VMware's own Cloud Foundry.

    Juergen


  10. Indeed a great news. Spring has been my favorite framework from start and look forward to this new version. can you also post release notes link ?


  11. @Mike Versteegh

    Juergen said exactly what I've experienced. Ask yourslef a question of lifecycle – who decides what constitutes your application and who – the environment the app's goiing to be deployed?
    The application is created, then fixed then maintained – each release is (simplifying) a WAR – you can put anything you want in it. But the application appears in a particular moment in destination environment. For me it was one WebSphere 5 (back in 2004).
    You said that "if I'm using J2EE 1.4 (eg Websphere 6) and I want to use Java EE 6, I need to upgrade to Java EE 6 (eg Websphere 8)" – there is a difference between "I need to upgrade" and "do the customers want their environment upgraded"!
    For example (incompatible lifecycles): our app was up and running fine on WAS 5 (Spring Framework upgraded from 1.0.2 to some other – maybe 1.2.6 release) and suddenly there was POLITICAL decision to migrate to WAS 6 – we had to change everything J2EE described (JSP, MDB, servlets, …) – of course the specifications were better and the changes resulted in code decrease, but it was not our decision. Guess what – WebSphere 6 is still working there – now there's political decision NOT TO migrate to WAS 7 (which is JavaEE 5). So we're stick with J2EE 1.4.
    Now the great part – for you it's obvious that if you want JavaEE 6 you have to upgrade to WAS 8. For me it's not that obvius – if I want JavaEE 6 (e.g. JPA 2) I just need Spring 3 on WebSphere 6 – I can choose Spring, I can't change WAS 6 – simple.

    My observation is this: JavaSE promised platform independence – that's great for developers, not so great for platform vendors. So JavaEE was born – not with standards, freedom or developers in mind (generally) but as a way to make profit by platform vendors. JavaEE turned platform (OS) independence into another platform (app server) dependence – the TCKs promise indepence at this new level, but there are many quirks which in the long term tie you to the particular implementation. Hibernate looks the same as EclipseLink at API level, but not at implementation level – are you going to risk your enterprise application with implementation switches? I'm not.

    So in enterprise environments it's maybe rude, but necessary to treat platform (INCLUDING) app server just as JavaSE promised – not as services provider, but simply as classloader for your WARs. It's my experience. Maybe my WARs are heavier, maybe my app starts (loads classes!) slower (in production I restart it about once a year), but I know and rely on every depencency I have in WEB-INF/lib. I don't care about JAX-WS, JPA (since Thymeleaf even about JSP) which my app server provides – I have the same implementation on Tomcat, WebSphere and Jenkins.

    Once again Mike – I can have JavaEE 6 on WAS 6. It's primitive, but real assumption – there is MY application and THEIR app server.

    I'm not against "JavaEE", I'm against tying my application's lifecycle to the lifecycle of Application Servers' upgrades. I'm against recommending "Vanila JavaEE" as a fastest way to develop Enterprise Java Applications – it looks good on slides, deploys fast to GlassFish on conferences, but in practise it gives you headache when trying to run the same application on Jetty, Tomcat, WebSphere and Glassfish.

    (With "Jetty Nested" you can even run Jetty 8 inside WAS 6 – however without Servlet 3.0 support)


  12. >This is often in the hands of a dedicated operations team, making decisions based on management and system integration characteristics – in particular in a data center environment.
    [...]
    >Spring on the other hand is usually deployed as a jar file within a WAR (i.e. in the WEB-INF/lib directory).

    There are two things here.

    1. Obviously, if the dedicated operations team decides that a server should not be upgraded, why would it be okay to upgrade the server anyway it it's hidden inside a war?

    The problem is of course what constitutes a "server". At the end it are all just classes running on the JVM. Why not consider the JVM the deployment platform and consider JBoss application logic as "the application"? The Play! framework actually takes that approach.

    What's the fundamental difference between the JSF libs that are already installed at the server, vs say the Wicket libs in a war? Why should operations decide about the faith of the first one and the engineers about the faith of the second one?

    Especially when you are not running multiple applications on a single application server (which works only sketchy anyway) and resort to a much saner model of having a virtual machine (as in XEN, VM-Ware, etc) per application, then there is no reason to see libs installed in some location vs ones inside a war as fundamentally different things.

    A Java application server is an implementation of some Java EE version, e.g. JSF, EJB, JPA, etc. The engineers have knowledge about these standards, operations typically does not and does little else than restart the thing in case of problems. If just makes no sense that they should decide about what JSF version is used.

    So, it's not technically Java EE's fault, it's just a political problem. Who makes decisions about what? There are few *real* advantages in using Spring over Java EE (or the other way around, the programming models are really fairly similar).

    The thing it always seems to boil down to in every discussion is that Spring can be used to sneak updates past operations and management by effectively hiding a full application server inside a war, that bypasses most if not all functionality of whatever is installed.

    Can we perhaps say that if any Java EE vendor ever introduces a full Java EE implementation that can be directly as-is embedded in a war, that Spring is hosed?

    2. Make sure to emphasis *usually* in that last statement.

    As you might be aware, there's a Tc Server Spring Edition and one can simply pre-load the Spring libs to the typical common/lib directory found in most application servers. The other way around, the majority of the Java EE functionality can already be shipped in a .jar, especially if Tomcat or Jetty is the deployment target. This does require a fair amount of manual stack-building effort by the user, but it absolutely can be done.


  13. @grzegrorz

    You say it was a POLITICAL reason to upgrade to Was6, but why wouldn't it be a POLITICAL reason if you are forced to upgrade from Spring2 to Spring3?

    Why would whoever makes those decissions about upgrading only make this decission for Java EE and not for Spring???

    The only reason I can think of is if the decission maker never actually checks your work and you betray your company by secretely using something else than you are supposed to. If that's the case, then it's a rather unhealthy place to work (for both sides).


  14. [quote]The thing it always seems to boil down to in every discussion is that Spring can be used to sneak updates past operations and management by effectively hiding a full application server inside a war, that bypasses most if not all functionality of whatever is installed.[/quote]

    This is a fundamentally unfair statement. Spring is a perfectly fine citizen within a WAR file and uses established Java EE contracts when interacting with the server, just like any regular application does. Spring does *not* constitute "hiding a full application server inside a WAR" by any means. Check the contracts in the details before making such claims. From the app server's perspective, an application using Spring inside is just a fancy application – it nevertheless relies on standard app contracts.

    The coincidence that some of Spring's functionality overlaps with functionality included in the EE server does not make it a bad citizen on EE by any means. In fact, Spring is effectively offering alternative ways to tap into established server functionality, using standard server contracts. E.g. Spring's @Transactional translating itself onto the server's JTA UserTransaction is just as fine as the app using EJB3 transactions for that purpose, or the app programmatically accessing the JTA UserTransaction itself.

    Finally, check a typical EE server's implementation jars. Maybe 5% (jar size wise) of a typical server's functionality relates to programming model features (EJB, CDI) that Spring provides a direct alternative to. The remaining 95% are hardcore middleware services (Servlets, JPA, JTA, JMS, all the server-specific management and monitoring) that a Spring based application plays very nicely with. How you could end up assuming that such an app "bypasses most if not all functionality of whatever is installed" is beyond me.

    Juergen


  15. @Eddie

    [quote]What's the fundamental difference between the JSF libs that are already installed at the server, vs say the Wicket libs in a war[/quote]

    The difference is you can choose any Wicket version you want. You can't easily change JSF implementation AND even version without interferring with other applications deployed on server (the same concerns JAX-WS, JPA, etc.)

    [quote]Especially when you are not running multiple applications on a single application server[/quote]

    That's not what 50K$ worth WAs is for :)

    [quote]So, it's not technically Java EE's fault, it's just a political problem.[/quote]

    The problem with JavaEE is that App Server (e.g. WAS) is often selected before ANY technical decisions…

    [quote]The thing it always seems to boil down to in every discussion is that Spring can be used to sneak updates past operations and management by effectively hiding a full application server inside a war, that bypasses most if not all functionality of whatever is installed.[/quote]

    You're wrong. Spring's not full application server – Juergen explained it. Spring's part of your application just as commons-collections, hibernate-core or slf4j. I can't imagine sysadmins choosing my collection library…

    [quote]Can we perhaps say that if any Java EE vendor ever introduces a full Java EE implementation that can be directly as-is embedded in a war, that Spring is hosed?[/quote]

    No. does JavaEE contain such beautiful MVC Framework?. I don't think so. JSF has maybe some uses, but not as many as MVC frameworks.

    @Mike

    [quote]but why wouldn't it be a POLITICAL reason if you are forced to upgrade from Spring2 to Spring3?[/quote]

    First – no one will force me to change Spring version, just as no one will force me to change commons-beanutils version.

    [quote]The only reason I can think of is if the decission maker never actually checks your work and you betray your company by secretely using something else than you are supposed to[/quote]

    No. I have to use WAS6 and make the application work. WAS was bought for serious money and it "has to be used". Everyone knows it's old, so something has to be done :)

    regards
    Grzegorz Grzybek


  16. @Juergen

    I can relate to what Eddy said, but I don't think anyone meant to say that Spring itself does anything wrong or does something sneaky.

    The point is that a war containing a Spring application usually (but not necessarily) is able to run on a bare Tomcat or Jetty.

    As you of course know, Tomcat is just a Servlet container. It doesn't contain JSF, CDI, JPA, EJB, JMS, JTA, JAX-RS or any (Spring) equivalents. This means that to use this kind of functionality, the war will contain it. Combined all of this together can be seen as an "application server", hence the not rarely heard sentiment of including an AS inside the war.

    If the war thus contains all of the above mentioned functionality, what's left to be used from say JBoss AS? If the same war must also run on Tomcat the only answer can be "not much, if anything at all".

    That's why Spring applications typically (but again not necessarily) bypass the functionality of the installed server (from a programmers/api point of view this is even more true).


  17. @grzegorz

    Spring does not equals common bean utils. Spring is much more equivalent to CDI, EJB, JSF, JAX-RS, etc.

    Obviously, when "they" decide the version of was to use (or glassfish, jboss, tomee), they decide the version of CDI etc. Since CDI is equal to Spring core, they should also decide the version of Spring then, right?

    And JSF 2 is a very good MVC framework really ;-)

    For running a single app per AS via xen, just use JBoss, Glassfish, Geronimo or any other of the totally free Java EE implementations.


  18. @Mike

    That's why Spring applications typically (but again not necessarily) bypass the functionality of the installed server

    For me, if this server is almost 10 years old – of course. The point is the server will still be there in the next 10 years. Why pay next 50k when "all is working"?
    I also ask myself the question – why WAS in the first place? Believe me – I don't know and I don't want to know, and it seems I'm not supposed to know…

    The problem with WAS (sometimes with OAS) is that it's "already there" when developers are starting to decide. First the consultants and salespersons come with their powerpoint slides, pie charts and marketing talk, then it's too late… Then it's just "we've paid for it – use it". And finally it's 2012 and we're running on 10 years old server. Spring puts some life in the dying infrastructure…

    Since CDI is equal to Spring core, they should also decide the version of Spring then, right?

    First – CDI is not equal. I know the spec, but prefer the choices Spring gives me (bean profiles, bean factory postprocessors, XSD specialized config, …).
    Second – "their" decision to choose WAS is not technical, but political: "our big company can't run something that's called 'Tomcat' – it can't be free – how we'd look?"

    Believe me – if I was the one to make decisions – it would always be Tomcat/Jetty – they're good at converting HTTP traffic into Servlets' invocations.

    regards
    Grzegorz Grzybek


  19. >Why pay next 50k when "all is working"?

    Maybe stop thinking in Websphere terms for the moment. The discussion was I think about Java EE in general. Glassfish, JBoss, Geronimo, TomEE and Resin are all free (as in free beer) and open source. I can upgrade Glassfish as often as I want and never pay a penny to anyone.

    Upgrading Glassfish is NOT inherently different than upgrading Spring. In both cases it should only be done after careful consideration and with the grace of a lead developer, and after carefully testing that everything still works as expected. This should be done by the engineers (developers).

    In both cases neither operations nor management should have much say in that.

    > First – CDI is not equal. I know the spec, but prefer the choices Spring gives me (bean profiles, bean factory postprocessors, XSD specialized config, …).

    Sorry, but I think you don't get the argument. To me it was clear that CDI and Spring are comparable as they represent a core programming model. Commons-beanutils is not directly comparable with any of those.

    >Believe me – if I was the one to make decisions – it would always be Tomcat/Jetty – they're good at converting HTTP traffic into Servlets' invocations.

    Tomcat/Jetty still provide the Servlet implementation and you're still stuck with whatever JVM is underneath all of that. So your war still doesn't contain everything your app depends on!

    IMHO, what -you- need is a type of archive that contains a JVM application server your application. Hmmm, I think those are called "executables" and they actually exist!


  20. p.s.

    >"their" decision to choose WAS is not technical, but political: "our big company can't run something that's called 'Tomcat' – it can't be free – how we'd look?"

    I don't get this.

    If you are not allowed to run free software (which IMHO is crazy), how can you use Spring then? Or do you use a special supported version of Spring? If so, you do know that you can also use a special supported version of Tomcat (e.g. Tc Server, there's even a version that already includes Spring), don't you?


  21. [quote]Obviously, when "they" decide the version of was to use (or glassfish, jboss, tomee), they decide the version of CDI etc. Since CDI is equal to Spring core, they should also decide the version of Spring then, right?[/quote]

    Well, the subtle but important difference here is that a choice of server product implies a specific version of CDI – or no CDI at all, in case of a Java EE 5 server or in case of Tomcat.

    Generally speaking, operations teams do not care about a version of CDI, or CDI itself to begin with. They may choose a great server product for its operational characteristics, and then this server happens to come with some version of CDI as part of that.

    In other words, they'd let you choose the version of CDI – if it was technically possible. However, with a Java EE 6 server, this is all a fixed part of the server. In contrast, your version of Spring remains flexible and can be chosen independently for each app.

    Juergen


  22. @Juergen

    your version of Spring remains flexible and can be chosen independently for each app

    Exactly – I can't have multiple versions of e.g. JPA Implementation. I can't (without digging in the protected areas of the server) have CXF on WAS7 (I can have Axis2 insome snapshot version – see yourself).

    IMO that's another problem with JavaEE servers – they should provide such "services" which they were supposed to provide – clustering, monitoring, load balancing, etc. If their main feature is to "provide" what I can easly have in WEB-INF/lib, then something's wrong here – usually instead of "providing JPA service" they're making difficult for application developer to choose whatever JPA implementation they want (e.g. Hibernate 4 on JBoss 5 or Hibernate 3 instead of TopLink on Oas 10). Application servers' role should be more similar to operating systems – to provide lower-level services. Polluting web applications' class loaders is not what I need.

    The same problem (at much smaller scale) is with JavaSE – they're making using XML Parsers more difficult than it should be (all the endorsed and ext dirs, META-INF/services and static methods)…

    @Johan

    Tomcat/Jetty still provide the Servlet implementation and you're still stuck with whatever JVM is underneath all of that. So your war still doesn't contain everything your app depends on!

    You're mixing different abstractions here – my application needs libraries which perform slightly more lower-level functions than my business logic. These are: MVC Framework, templating engine, persistence engine, AOP (not always), … These libraries change quite often – I can see new functions/fixes about once a month – why not include e.g. new version of WSS4J when it comes out? To be closer to JavaEE – why not use CXF 2.5.0 when it came out? Ask yourself a question – what's easier – change cxf-*.jars in WEB-INF/lib or change them in JBoss 6's UCLs?

    You may ask me then – why not change application server? I can answer one more time – WAS6 (the same real-life example as always) is there (version 6.1.0.15 to be more precise) – I can't tell "them" to replace it with Tomcat – even with JBoss support. Please – go to some public institution and tell them how wonderful Glassfish 3.1.1 is – I bet the salespersons of much bigger companies (the ones with names starting with: I, O (java) or M (not java)) were there before and have signed some (very) long term contracts.

    If you are not allowed to run free software (which IMHO is crazy), how can you use Spring then? Or do you use a special supported version of Spring?

    I can use because it's part of my application – that's were my "commons-beanutils" analogy fits. Spring's framework and library. IMO App Server's role is to provide services (as I've mentioned hereabove: clustering, monitoring and such like), not hard-to-replace libraries I can have in WEB-INF/lib.

    regards
    Grzegorz Grzybek


  23. >Generally speaking, operations teams do not care about a version of CDI, or CDI itself to begin with. They may choose a great server product for its operational characteristics, and then this server happens to come with some version of CDI as part of that.

    At the core of this is the IMHO misunderstanding that e.g. JBoss AS is "the server" that operations should care about. Still IMHO, it's not.

    The kind of server operations should care about is the Linux installation and the hardware it runs on. Which network devices does it have, what remote management interface is there, how is installed, what is the virtualization solution (Xen, VMWare, etc) how are the firewalls configured, how is the Apache *server* in front of the Java app configured.

    The term "application server" is perhaps unfortunate, as JBoss AS and co are first and foremost implementations of Java EE. There is barely any "server" element to it to speak of. This is even more true for Tomcat. Operations should see this as a Java application, that needs a connection to the front-end server via AJP.

    I've worked for a couple of companies and for projects that ran on farms of servers and projects that were hosted on a single server for intranet usage. The most I've ever seen operations do is execute /etc/init.d/jboss restart. Devops is a different story, but a traditional operations team does only that.

    They are NOT going to configure JMS destinations or wire EJB configuration via deployments descriptors that override annotations. That's a wicked pipe dream that has very little to no connection to reality. Just like the Spring or CDI jars are owned by the engineering team, the piece of software called JBoss AS should be owned by that team. Some organizations get this (sometimes via a devops movement), some don't.

    Spring's default way of working is to work around this political wrong phenomenon, but as was mentioned before;

    1. There's Tc Server Spring Edition which is just like JBoss AS, Glassfish, etc
    2. All Java EE libs can be embedded in a war as well. For Spring core's most direct competitor (CDI I think) this is even fairly common. For Spring MVC's most direct competitor (JSF) this is also absolutely common.

    >Ask yourself a question – what's easier – change cxf-*.jars in WEB-INF/lib or change them in JBoss 6's UCLs?

    Well, at our company we happen to run on JBoss AS 6.10 and we update the JSF mojarra libs every time when necessary. We're currently on Mojarra 2.1.4 and locally testing with the latest builds. Updating JSF libs on JBoss is absolutely trivial. You can either make a new config, add that to the list of configs and make it the default, or even easier, simply replace the jars.

    As soon as we have fully tested that our application works correctly, we (the engineering team) prepare a new JBoss archive, which is pushed to our QA servers and once again tested and if this passes it is pushed to production. This is exactly the same process as with updating the JDK. There's nothing particularly hard about it.

    On average we update our JBoss archive approximately every 3 months, sometimes a bit more, sometimes a bit less. When JBoss itself releases a minor new version (e.g. AS 6.0 -> AS 6.10) we update to that via the same process. Major new versions (AS 6 -> AS 7) take some more consideration and planning, but that's also true for major new versions of the libs we depend on (e.g. JSF 1.2 -> JSF 2.0).

    Our EARs are pushed more frequently into production, on average every 3 weeks (the length of our scrum sprint).

    I totally don't get where the idea comes from that a JBoss archive is being put on the server and sits there for years untouched, and that engineers are not even allowed near it. I know there are companies like that, but for us this is completely alien. Application code is developed together with a target JBoss and a specific JDK version, and whenever any of these need to be pushed into production they are prepared by the engineers, tested by QA and actually deployed by the deployment guys.


  24. Johan, thanks for sharing some insight into how your team works there. I find such case studies quite interesting since people rarely talk about those practical implications. It seems that it works well for you guys, with the app team 'owning' the server.

    That said – it's also clear that different teams face very different arrangements here. I personally don't understand why people question the general viability of Spring just because they are in a position to update their own server rather frequently.

    After all, this is a Spring 3.1 GA announcement post. There's plenty of cool stuff in this release, worth being chosen for its features and style in its own right. From that perspective, why are we just talking about its WEB-INF/lib deployment nature here?


  25. @Juergen

    You are right, there is plenty of cool stuff in 3.1. I especially like the caching annotations. I haven't even congratulated you guys on the release and dived straight into the discussion, so here then:

    congratulations on the release ;)

    It is a strange thing though, that whenever there's a Java EE/Spring discussion going on, 99% of the time this WEB-INF/lib deployment comes up. It would be more constructive to actually compare features.


  26. Congratulations on the Spring Framework 3.1 release! Keep up the good work.


  27. Do you know when the "instrumented" version of this release will be out? I do not see anything higher than 3.0.5.RELEASE in the Springsource Artifactory.

    Thanks!
    Allen


  28. Keep up the good work.It seems alot of cool stuff is avilable in this version. i have to explore more on this to know the features avilable with this release

20 trackbacks

Leave a Reply