Map Java architecture stack to Microsoft - java

Coming from Java background, I am now working in a Microsoft shop where we use MS technologies only. Can you please map this architecture stack to the MS world? I am not looking for equivalents to specific layers of the stack, but a proven end-to-end stack that is known to work in the real world:
Thanks!
Architecture Stack:
Hibernate
Spring DAO
Spring Declarative transaction management
Domain model POJOs
Spring MVC
BlazeDS
Flex
Flex Interactive data visualization for charting and interactive data analysis
Cross cutting concerns:
Security using Acegi+ACL (Data content authorization for user roles)
Testing with Mock Objects
Deployment using Ivy+Ant
Logging with Log4J

Architecture Stack:
Hibernate -> NHibernate
Domain model POJOs -> Domain Model POCOs
Spring MVC -> ASP.net MVC
BlazeDS -> RIA Services
Flex -> Silverlight
For DI, you can just go for spring.net if that is what you are familiar with. Spring and Castle Windsor are probably the most mature, followed closely by StructureMap.
Cross cutting concerns:
Security using Acegi+ACL (Data content authorization for user roles)
probably have to roll your own.
Testing with Mock Objects
.net methods are not virtual by default like java, which dramatically limits what a dynamic proxy (the secret sauce that makes mocking frameworks work in static language) can do. Either Rhino.Mocks or Moq would be the most used that are free, and use the dynamic proxy approach. There is also Typemock Isolator which will mock pretty much anything, but it is 800$/seat.
Deployment using Ivy+Ant
Ivy would be Cruise Control if you want free, and TeamCity if you want good (caveat: I am a jetbrains fanboi ;-) Ant would be NAnt or MSBuild (virtually the same thing)
Logging with Log4J
Two main choices, either log4net or the Microsoft Enterprise Library Logging Block (love their names) log4net is definately the more lightweight of the two choices, but it depends what you want to do

The following are not so much exact equivalents, but more alternatives used in the .NET world.
Spring MVC -> ASP.NET MVC
Flex -> Silverlight (client side only)
Flex interactive data -> Silverlight charting or ASP.NET Charting
Hibernate -> ADO.NET entity framework.
EDIT:
I think the following would be a good starting point (I have left out the things I do not know anything about, such as "declarative transaction management").
SQL Server
ADO.NET Entity Framework
.NET RIA Services
Silverlight (charting components are included in the Silverlight toolkit)
For logging I prefer log4net.
As for reporting and data analysis you might also want to look at SQL Server Analysis Services and Reporting Services.
Also check out Team Foundation Server for testing, automated builds and deployment.

.NET shops tend to be a bit more prescriptive in what is "allowed", so ask your co-workers first before diving right in and just choosing something.
I've used Spring.NET, and the Castle Project and both are pretty solid but not 1:1 feature wise with their Java counterparts. MS shops often tend to stay close to the mothership so are more likely to go with things like The MS Enterprise Library/Unity (solid but verbose), ASP.NET MVC, Silverlight and Entity Framework.
For CI there's TFS (Team Foundation Server, a free version now ships with Visual Studio) but if you want to stick with free software theres CruiseControl.NET, nAnt, nUnit basically take a Java project convert the "j" to and "n" and there's probably a product ;)

I know a couple of these have equivalents:
log4j -> log4net
Hibernate -> NHibernate
Spring -> Spring.net
Also, it seems like a POJO isn't really all that java specific (well, I suppose the the J part is :)). I guess a "plain old C# object" could be considered an equivalent ...

I found something, does Sharp + Silverlight get me 80% there? Is this considered the current best practice in the .NET world?
http://wiki.sharparchitecture.net/MainPage.ashx
The biggest missing piece I see is Acegi+ACL functionality...

One thing I'd add in, since I don't think it's been mentioned yet, is that Unity is a feasible (and simpler!) alternative to Spring:
http://www.codeplex.com/unity/

Related

Alternative usage of Spring Roo

is Spring Roo supposed to be only a tool for rapid development of web applications, thanks to all that scaffolding, source code generation and similar stuff, such as grails for groovy.
Or can it be utilized as a source code generator / osgi platform for building enterprise applications ? What I mean is, that there are source code generators, that generate only domain model and light DAO layer based on metadata definition when starting a new project and you have to stick to the objective - create a web app. But there are also generators, that generate the entire DAO and service layer - fantastic for iterative dev process of bigger apps - and you are not restricted otherwise, you are just using it to build you enterprise app step by step. With this you can really build a huge enterprise applications / platforms that will be maintainable for a very long time.
Also the OSGI model could be employed in a way, that you might develop a core portal application for instance, with a package of social office addons that you may plug in, etc. etc.
My point is, that Java development needs to be "Rubyfied". I mean Ruby on Rails environment where you have everything unified and standardized. A platform that could rule the java world some time :-)
Since Thomas and #jhericks trashed Spring Roo I'm going to say I actually like it mainly because its not a framework. Roo also (now) support multi-maven modules.
To answer your question: Spring Roo is not framework. It is code generation.
So yeah it is a code generation platform not only for web apps but any Java app.
There are couple of reasons why some people don't like Roo:
It uses AspectJ
It uses Spring
It does Code Generation
After building several applications with Spring Roo I can say its greatest value is its ORM generating abilities and its DataOnDemand test generation.
Other than that Spring Roo is really just Spring *.
Frameworks like Play and Ruby on Rails are just not really the "Java Way". That is most Java (Web) Apps I see are combination of libraries and not a giant framework.
As far as I experienced, Spring Roo is meant to be a RAD/bootstrapping tool for web applications. There are some major features missing and not on the roadmap that would make it truly useful in an enterprise application context. An example being multi-module Maven support.
This rather polemic article and its follow ups summarize quite well how I feel about Roo and similar projects like Seam Forge.
If you are looking for something RoR-like for Java check out the Play Framework that currently seems to gain momentum.

Starting a Java project - IDE, Framework, etc. -

I need support in order to speed up development process. I received a request to start developing a website with java technology. I usually develop in C# - ADO for Entities - ASP.NET MVC - MSSQL server - Visual Studio. Best of these choices were:
- C# Intellisense.
- ORM.
- Complete Security Management of Users, Roles.
- Separation of Concerns into MVC.
I was wondering if any can help me to determine best Java MVC Framework - DB - IDE based on these premises, Start a project with:
- Integrated security for users, roles
- MVC
To shed more light, to replicate same functionalities I can have each time I start a website using C# ASP.NET MVC 2 project. example http://nerddinnerbook.s3.amazonaws.com/Images/image020.png
First, let's discuss IDE, ORM, and security, and DB: In my opinion, the best Java IDE is IntelliJ IDEA. It's from the same folks who have developed Resharper for Visual Studio. It has the most powerful editor of all Java IDEs and has built-in support for many popular Java frameworks.
ORM: The most powerful ORM library in Java is Hibernate. Hibernate itself is an implementation of Java Persistence API (JPA) standard. EclipseLink is another implementation of JPA, but Hibernate is a better option IMO.
Security: Spring Security is probably the most powerful security (authentication and authorization) framework available in the Java world.
DB: If you are comfortable with SQL Server, then keep on using that. However don't use Microsoft's JDBC drivers. Instead use a driver from DataDirect: http://web.datadirect.com/products/jdbc/index.html. If you don't want to use SQL Server, MySQL is a great FOSS choice and Oracle, DB2, etc. are other options.
For the Web framework, there are several options:
Option 1: If you want a RAD style framework, choose Grails. Grails is similar to Ruby on Rails but uses JVM and a Java-like but dynamic language named Groovy. Grails' ORM API is called GORM, which is built on top of Hibernate, but is much easier to use. Grails also uses Spring Security for managing security.
Option 2: If you want an enterprise-grade framework, choose JBoss Seam + JavaServer Faces. JSF is a component-based MVC framework, and there are plenty of great JSF libraries available for use: RichFaces, OpenFaces, etc. Seam integrates JSF with EJB and together they make a great enterprise framework. However it has a steep learning curve.
Option 3: Use Spring + SpringMVC + JPA.
Option 4: Use Struts 2 .
Final remarks: If you are looking for an easy-to-learn MVC + ORM framework, use Struts 2 + JPA. If you are looking for a RAD and easy-to-use MVC + ORM framework, use Grails. If you are looking for a robust and enterprise-grade (but not-easy-to-learn) framework, use JBoss Seam.
Not only Spring MVC but the whole Spring eco system will get you up and running with the least surprises. You can also download the Spring Tool Suite (a preconfigured eclipse version tailored for Spring) to get an integrated development environmanet which knows about all spring stuff.
But Spring - Spring MVC - Hibernate - Spring Security and STS seems to cover your needs and will provide a sound basis to do the project without too many bad surprises. This leaves you to focus on the customer and the jump to Java.
Afterward you might consider different options in the Java space, as there are plenty of other frameworks available with their strong points. But in the short run it is better to limit the number of moving parts
The standard, most common framework/orm setup is spring/hibernate. Both of these tools have unfortunately been grown to ridiculous extremes over the years, so they may seem daunting in size, but a simple setup with each is much easier than it may seem from looking at all of the options on their respective sites.
Best suggestion would be to follow a step-by-step to get a basic spring/hibernate setup going and just expand off of that. At one point I had a prototype project like this I'd use to generate a "starter-set" to bootstrap projects.
BTW, I'd also suggest a simple ant build script. Some people may suggest maven, but it's enormous and very (imo overly) complex, and you're going to have enough new tools to wrap your head around to want to avoid having to learn another large command set.
Welcome to the Java world. The best thing (and in some cases also the worst thing) about the Java domain is that you can create your own stack based on your requirements. You're not necessarily bound to a single vendor as is commonly the case in the .NET domain.
Since it seems you're in a greenfield situation you can:
Adopt the webdevelopment stack of a large commercial vendor like Sun/Oracle (JSF/EJB3 + NetBeans/JDeveloper + Glassfish/Weblogic + MySQL/Oracle) or IBM
Adopt the webdevelopment stack of a smaller open source vendor like JBoss, SpringSource.
Take a look at JBoss Seam and SpringSource Grails and Roo (the latter two are based on the frequently mentioned Spring/Hibernate frameworks)
Mix and match your own stack based on the above and your requirements. Although this requires deep knowledge of the various technologies, frameworks, tools available.
You have lots of options as you can see. Now since your interested in a productivity focused stack - and I suspect an opensource one - and you have no legacy I recommend either Grails or Roo. In which Roo is probably the most accessible one since you don't have to learn Groovy. If you don't like the generation tooling I advice you the stick to the Spring stack and just adopt Spring/JPA/etc.
As for IDE, the only Java IDEs worth their salt IMHO are Eclipse and Netbeans, especially since both of them are free. Use Eclipse for extensibility and ease-of-use, use Netbeans if you need to rapidly develop a GUI.

Taking the next step with java development?

I want to take the next step in java web development, I am hoping to get insight & feedback on: what my next steps should be and how best to take them.
While learning the basics of java web development, I put together a simple web app that performs simple accounting and financial calculations. The web app is on a single jvm, uses Tomcat, and has standard web functionality - i.e. login/logout, basic security, etc.
How can I make this web app more "enterprise ready" - distribute functionality of tiers over different servers/jvms, HA, balance-able, etc.
What do I need to know/learn? - i.e. EJB3 or Spring Framework (seems spring is better option), REST and/or SOAP, etc.
How would one recommend (books, websites, etc.) I learn the "requirements" (see preceding line)?
Thanks!
In my opinion, you should try different approaches for a same problem, so you could compare the pros and cons of different tools and frameworks.
For instance, try to build an application using EJB, and then the same application using Spring. Take the presentation layer of your code written with JSF and then rewrite it using Tapestry.
I think this will be very helpful to you, as you'll be able to make best decisions when choosing tools for your future developments.
A few things to consider, as food for thought:
How good is the error handling/logging of the application? For example, if the user tries to put in X in for a currency value, what does the application do?
What is configurable within the application from the user and what is in configuration files and what is in a database with regards to configuration? Do you have passwords encrypted within the application?
What patterns would used in building this application? Are there patterns you could see using now that you have a prototype?
Is this application ready to handle different currencies and languages?
What happens if someone leaves the screen for a few hours and tries to use a form?
What administrative functionality does the application have?
Does it handle the case where the user has JavaScript disabled?
What are the limitations of your application, IOW what can't it handle the way it is?
Have you considered trying to write a manual for the application?
EJB or Spring? gets asked quite a lot nowadays, here's a decent related question about them.
Have some real users using your application. You'll be amazed on how many "new" features/improvements can be performed in your app ( and the technologies you'll learn to satisfy those requirements ) by having real users using it.
I would suggest the following books/tutorials are a must for every Java developer:
Manning: Spring in Action - 2nd edition
Manning: Java Persistence with Hibernate
Core JavaServer Faces
Adobe Flex ( Adobe website video tutorials )
Effective Java
Apart from the standard technologies above you must be familiar with
Different testing frameworks , JUnit is a must
Build tools like ANT and Maven
Also you can build small projects by downloading trial versions of MyEclipse or Flex Builder.
I suggest that you create small java experiment projects for each new framework/library that you want to learn.
I've had good success using maven to help me quickly and consistently create java projects that I use to experiment with one technology at a time, such as Spring, Hibernate, etc. I use maven's site life cycle to record notes about what I learned and to document how to build and run each project. So, now I have 20 or so projects that I can use as baseline projects, one for each framework, to build upon.
Also, I prefer buying and reading books rather than relying on google and websites to learn new frameworks. Seems that I'm able to learn a lot faster this way.
I also suggest that you write web apps that you, yourself, would want to use. Or write a web app that solves a problem you've been having. I've found that I learn a lot more this way rather than simply copying and pasting from examples in a text book.
Hope that helps,
- Dave
Spring or Tapestry would be good options for new learnings. Does your app use any web services? If not work those in. Work with other application servers like JBoss and Weblogic and note their nuances with java. I'd also recommend learning Maven and work that into your build/deploy process.
Have fun,
Mike
You could vastly reduce the time taken to build your apps by learning some Test-Driven Development.
Try learning JUnit - it's becoming a core skill now, even in unagile shops.
If you're focussing on the web, try out Selenium - which has a Java controller to drive your tests from Java test cases.
After investing a bit of time in TDD will pay off no matter which frameworks or apps you work on. If you learn to test drive your code, you'll end up with smaller, cleaner code and less debugging.
You might look at AppFuse, which is a bundle of Java things together.
Or, you might take a look at a few more technologies to play with and add in:
Version Control - SVN
Tools - Ant or Maven
Framework - Spring, Seam, Struts
ORM - Hibernate or iBatis
Test Driven Development - JUnit, Emma
Continuous Integration - Hudson
I'd also read the Pragmatic Programmer and/or Code Complete.
Allow me to state that "enterprise"-ready does not necessarily imply scale-out solutions, many, many enterprise Java applications are running on larger systems requiring long-running-systems skill of their own.
I recommend mastering the Java language and runtime, understanding how bytecodes and loading traverse the JVM vs. focus on any given framework.
Speaking of frameworks and if you really have the time, try recreating an application framework yourself. Try and re-invent the wheel. IMO it is an excellent lesson in why frameworks themselves exist and teaches one to employ the features instead of always trying to work around them.
One more thing, never forget the database. I don't care what that looks like Oracle, MySQL or NoSQL, but become also an equal master at the data store.

Django or RoR like common Java or ASP web-frameworks

I am a fan of big agile software development methodology and love to develop web pages using Django and RoR. However, it creates a big constrain as there are really very few Django or RoR developers to hire.
For a new web project, we will be hiring developers and even though I would love to see these employees using such tools, sadly it will be either impossible to find related developers or even if we find them(virtually impossible for my country), we will be very dependant on them.
Also time is a big constrain thus considering "finding clever programmers and letting them learn these technologies" is not an option.
Under these conditions, I would like to hear common Java or .Net alternatives and why would you suggest them.
I can think of Spring, Hibernate, Stripes, Struts and Wicket for Java
Also Microsoft ASP.NET MVC looks really promising.
EDIT: I Need to mention that I won't be an active developer for this project but act as a manager.
Regards
If you want Java, Spring, and Hibernate with RoR-like "convention over coding", why not try Grails? It's based on Java, Groovy, Spring, and Hibernate. You'll be able to get a lift similar to RoR for web-based CRUD apps.
ASP.NET MVC is quite promising. It "borrows" a lot of its ideas from the Rails framework and community. I am a ASP.NET (MVC)/C# developer primarily, but had the opportunity of doing some Rails development before I moved from traditional ASP.NET WebForms to ASP.NET MVC. After doing development in Rails, I found it quite easy to make the transition to ASP.NET MVC.
Also, I haven't done any web development in Java, but since there are so many web frameworks to choose from, you may not find enough Java developers to build out and ramp up a team quickly enough, all with experience in the same Java web framework.
web4j might be what you're asking for. However, it is not that popular and your developers will have to learn the framework too. I think it will be faster than learning a new language though.
I believe that building a framework in java or .Net that resembles RoR or DJango is very difficult. This because the languages designs are so different. Also because Java and .Net target the enterprise market, which usually requires more robustness.
Agile development really has nothing to do with what languages or tools you're using. Of course, certain tools and methodologies make it easier (MVC tends to make it easier), but my suggestions would be as such:
Go with ASP.NET MVC. It borrows a lot of the good stuff from Rails, and provides some powerful tools that will make developing ASP very friendly to everyone involved.
Use an agile planning tool. I suggest Skinnyboard, as it allows you to do true agile planning.
Don't fret about the tech! Agile is how you manage the project, not the technologies that the project is using.
You're asking how to develop webapps fast with enterprise frameworks vs RoR.
My initial answer is you can't expect to develop webapps in .NET/(Spring/Hiberbnate) as you would for RoR. Lots more setup, lots more to learn and understand at a deeper level. Lots of configuration.
I don't see php here. I assume a lot more people use php. Why not look at php and symfony. Symfony derives its fundamentals from RoR.
If none of the above fit the bill I'd go for Spring/Hibernate/MySQL/Tomcat. We developed multiple largescale web apps with that stack in an agile Scrum/Sprint scenerio
For Java, VRaptor has a controller+view implementation similar to rails actionpack, and uses a DI Container based on Spring. Also has some nice integration with Hibernate/JPA, XML/JSON serialization using XStream, helpers for Integration Tests and a pretty nice documentation.
Haven't tried it myself, but Play! Framework for Java looks very promising. RESTful architecture, MVC and a neat admin interface (like Django) built in.
A platform based on Seam/Hibernate/JBoss sounds exactly like what you're looking for.
Seam is the web framework, Hibernate is the object relational model, and JBoss is the server container.
After coming up with a database schema, you can even use seam-gen to reverse engineer it and do your "scaffolding."
It's flexible, enterprise level, and free to work with.
Furthermore, Java developers are everywhere.

How to boost productivity in my Flex/Java stack?

I am embarking on a new RIA project with Java on the backend. I'm the only developer, and the app is a line-of-business application. My current stack looks like this:
MySQL || Spring(JdbcTemplate for data access) || BlazeDS (remoting) || Flex(Cairngorm)
My question is: what changes can I make to improve productivity? Manually coding SQL, server-side entity objects, client-side value objects and all the Cairngorm stuff is obviously a drag, but I'm not sure what higher-level frameworks to introduce.
What Flex/Java stack has served you well?
Manually coding SQL
Hibernate is an option to cut this out.
One thing that may be of interest is Grails with the available Flex Plugin. It's built on Spring, Hibernate and BlazeDS, so it's all there for you. It was unbelieveably easy to get it remoting stored objects and responding to AMF calls. I was using this and then moved over to a RESTful E4X implementation as I found it a lot easier to debug and tweak as I could inspect the server output in a browser and have tighter control over exactly what I returned to my Flex app (lazy loading problems in collections using BlazeDS were a headache at times).
Here is a quick tutorial showing how easy the whole Grails + Flex Plugin stack is: BlazeDS in Grails
I would seriously reconsider using Cairngorm. In my opinion it's a pretty bloated framework that introduces a lot of abstraction you'll never use. Check out:
http://code.google.com/p/swizframework
http://www.spicefactory.org
Both introduce the concept of dependency-injection into your Flex app.
Also +1 for Hibernate. I would use the standard JPA annotations on a Java class and extend that with Hibernate Annotations as you find you need additional functionality.
Check out springsource.org's new Spring BlazeDS Integration Project
Spring BlazeDS Integration is a new
addition to the Spring portfolio, and
a component of the complete Spring Web
stack. This project's purpose is to
make it easier to build Spring-powered
Rich Internet Applications using Adobe
Flex as the front-end client. It aims
to achieve this purpose by providing
first-class support for using the open
source Adobe BlazeDS project and its
powerful remoting and messaging
facilities in combination with the
familiar Spring programming model.
As alternative to hand-coding sql, aside from hibernate, you might wanna consider JPA/Toplink. And since you are already from a Spring camp, check out Spring ActionScript (formerly known as Prana), it's an IOC framework for Flex. It solves many inherent problems in Cairngorm. Also a good IDE that supports Flex/Actionscript like IntelliJ IDEA 8.
Whats missing between Flex and BlazeDS is, it doesnt have any sort of landing page where you have a listing of all the available services by just typing a url on the browser (similar to webservice endpoint).
You can try GraniteDS. It's an alternative to BlazeDS, with an actionScript generator, Spring integration (an Spring security), and if you use an JPA implementation, help you with the Lazy Initialization (in a transparent way).

Categories

Resources