Bio Mark Pollack worked as a Java developer in the late 90s and early 2000, then found shifted to .Net development. During his time as a Java developer he came across the Spring framework. Desiring to continue using it in .Net, he asked permission from the team to go ahead and start a total new code base from the ground up with all that .Net-isms so it would be very natural to .Net developers.
SpringOne 2GX is an annual event; it includes a technical exploration of the Spring ecosystem along with the latest developments in the Groovy/Grails space. As a participant, you will have the opportunity to attend two great events at one venue. Whether you're a Spring enthusiast, Tomcat user, Groovy/Grails fan, or just interested in open source development, you'll find valuable content in sessions presented here.
1. My name is Ryan Slobojan and I am here with Mark Pollack who is the founder and lead of Spring.NET project and also a Microsoft MVP. Mark, why don't you tell us a little bit about Spring.NET? What does is provide for the .NET community?
Spring.NET is an application framework, so it covers a wide variety areas and application developments stretching from the UI with an ASP.NET framework down into middle tier with declarative transaction management as well as several data access functionalities, but commonly people come across it because more and more in the Microsoft community people are looking for dependency injection solutions as well as increasing awareness of the Aspect Oriented Programming, which are features that you can find in the Spring framework.
One of the new features are solution templates for Visual Studio, so for a variety of common scenarios such as developing ASP.NET website using Spring's web framework or NHibernate integration; they are solution templates, project templates, item templates that should make it easier for people to get up and running with Spring.NET. The other major features are mostly evolutionary. We originally had messaging support for making it very easy to create multithreaded message listener applications for Active MQ. We've expanded that now to support TIBCO EMS product, next version, Spring 2.0 support WebSphere MQ, same with the integrations testing support we have, which we supported NUnit, now we also support Microsoft's test framework as well and the last bit of new functionality was sort of filling a minor hole as you look at the feature set Spring Java versus Spring.NET which is making a bit easier to use and configure NVelocity, which is a template engine for code generation or markup generation.
The most important things for us to focus on are dependency injection functionality that is on par with what is in the Spring Java feature set. So right now Spring.NET is heavily XML based in terms of the configuration for DI and that clearly is showing signs of age in the scenario where we need to essentially catch up with other competitors in the .NET market as well as Spring Java. So we will be adding support for using attributes to detect or to mark points in the code where you want injection to take place as well as a type safe code based way to configure classes, so external to the code but yet still type safe. This is features that are currently available in Spring Java.
Same could be said of the AOP framework, there is a style of configuring aspects and writing aspects in Spring Java that we can bring over to .NET. So, the AOP containers terms of being completely on par is a major goal for us. The other area is to provide some ASP .NET MVC integration, so we'd like to support some very simple things like out of the box configuration of your controllers with DI, but hopefully go a bit beyond that in terms of added value, and adding WebSphere MQ support for our messaging stack. So that would be complemented TIBCO in the Active MQ stuff that we have now and there is another related project which is not Spring 2.0, but as a major effort we'd like to go into is there is a project called Spring Integration on the Java side. Many customers and clients have asked about this on the .NET side. We started work on that area and we'd like to continue to push, so while it's not Spring 2.0, it's an area where will be placing increasing effort as well to help.
It will be the same structure as there is between Spring.NET and Spring Java. They may be a pure project, obviously since the Spring Integration for Java project was there first, the first releases are largely catch-up in nature. But then these things even out, generally you can expect some cross-pollination of issues and I would work close with Mark Fisher and there are actually several contributors to the project external to SpringSource that so far have really been the driving factor in terms of getting that project off the ground.
I see it mostly used in fairly large enterprises, some large banks, consulting firms. They are typical enterprise shops, but I wouldn't say there is a niche area per say where it excels. There is obviously overlap in terms of the Spring Java programming model, so there are people who come to it from that angle because they are familiar with Spring Java; I say the other big camp are people who come to it because they want to use Spring.NET's ASP.NET framework. So those are the two major camps of people, those who like to have this sort of same programming model and bring it over to .NET, so that is a full sort of mirror stack in the .NET world namely and Hibernate and Spring.NET, NUnit and the same in Java and then the ASP.NET framework there really isn't that much out there for doing classic ASP.NET web form development which isn't the most sexy thing going on nowadays, but the fact is where the majority of the web development is going on in Microsoft community right now.
Yes. I mean it's clearly dependent on the structure of the organization, if there is a tendency for one person to have skills in both languages or both platforms. I've done several trainings where usually the first couple of days will be Spring.NET, then it will be the mapping on to Java that they are already familiar with or vice-versa where some are doing Spring Java and I come in and tell them the difference and usually the first speech is beans becomes objects and a class becomes type in your XML configuration and then you are kind of half way there. So it definitely is a way to copy the same design patterns, the same sort of Spring style, can be very easily ported across. That said, there are some organizations where there is a huge wall between the Microsoft developers and the Java developers. In that case it seems that nothing but changing the political landscape would bring the two closer together.
There is a pretty good history here of cross pollination of ideas in terms of things coming from Spring.NET into Spring Java, actual use of namespaces in the Spring Java came out of cutting our teeth in Spring.NET with a namespace support and most recently in the Spring 3.0 project for Java there is the introduction of an expression language and that comes directly out of its usage and the various places you can stick these EL expressions inside Spring.NET. So the idea of EL has always been around in the Java community clearly, but sort of taking into this next level something that Spring.NET had already done before.
That said there is obviously a wealth of things that have been ported the other way, so it's not unidirectional, but I would say it's mostly unidirectional and now as the frameworks mature, probably there will be more and more diversions as we specialize in more areas that are focused on .NET technologies, things that leverage new language features, such as lambda expressions. There is a whole wealth of things that are in the .NET ecosystem that just have no counterpart at all in Java, and so I should mention as part of the Spring.NET 2.0 is to bring all of that in as a first class citizen. We've been held back in some sense by our support, believe it or not of .NET 1.1, over 25% of the documentation downloads are for .NET 1.1 even though it's the deprecated platform so even though C# or .NET 4.0 is coming out there is a lot of stickiness there and that's held us back unnecessarily probably. So this will be a clean break and then we can really make live advances in that regard, so that is sort of another housekeeping or future path-paving road for Spring.NET, the 2.0 release.
Yes. The Stonehenge project is an Apache project started by Microsoft with contributors in the typical Apache way, but mostly focused on different vendors, namely Sun and Spring and other people, PHP vendors as well, are all around platform interoperability. The essence is that most organizations have a mixture of technologies, I think, various surveys put it between anywhere in 70-80 %, so there is no such thing really as a pure Microsoft shop or pure Java shop and when the systems have to talk to each other it's often a problem because there isn't really clear guidance or the guidance is really lacking in terms of practical hands on expertise. So the Stonehenge project is meant to address these interoperability concerns that basically are left unanswered as to-do exercises.
So the first focus is on web services interoperability which people normally assume: "Oh, it should just work!", but in fact when you bring in things like web services security and mixing and matching different stacks is a lot more subtlety to it then it just works, which is the reason people obviously adopt things like REST or other technologies. So initial interoperability work is around demo apps, guidance, around web services and then moving on to message oriented middleware and REST style interactions. So if you are in a need for sort of one-stop shop to cure interoperability blues, hopefully this will be a great place to go, not just for Java and .NET, but for PHP, for Ruby, for any platform that wants to join the project and basically have an interoperability guidance.