Should I use EJB3 or Spring for my business layer?
Asked Answered
S

9

73

My team is developing a new service oriented product with a web front-end. In discussions about what technologies we will use we have settled on running a JBoss application server, and Flex frontend (with possible desktop deployment using Adobe AIR), and web services to interface the client and server.

We've reached an impasse when it comes to which server technology to use for our business logic. The big argument is between EJB3 and Spring, with our biggest concerns being scalability and performance, and also maintainability of the code base.

Here are my questions:

  1. What are the arguments for or against EJB3 vs Spring?
    • What pitfalls can I expect with each?
    • Where can I find good benchmark information?
Swaddle answered 16/9, 2008 at 1:25 Comment(1)
IMHO, Spring will be useful and will contribute to your development effort in any environment. I think that i will use Spring in every scenario and i will consider using EJB3 only in special circumstances (e.g. i have some application server features that i need (like administration options)).Pluckless
G
75

There won't be much difference between EJB3 and Spring based on Performance. We chose Spring for the following reasons (not mentioned in the question):

  • Spring drives the architecture in a direction that more readily supports unit testing. For example, inject a mock DAO object to unit test your business layer, or utilize Spring's MockHttpRequest object to unit test a servlet. We maintain a separate Spring config for unit tests that allows us to isolate tests to the specific layers.
  • An overriding driver was compatibility. If you need to support more than one App Server (or eventually want the option to move from JBoss to Glassfish, etc.), you will essentially be carrying your container (Spring) with you, rather than relying on compatibility between different implementations of the EJB3 specification.
  • Spring allows for technology choices for Persistence, object remoting, etc. For example, we are also using a Flex front end, and are using the Hessian protocol for communications between Flex and Spring.
Gomer answered 16/9, 2008 at 12:7 Comment(2)
I'd just have more trust in relying on compatibility between Java EE implementations than carry some proprietary container from server to server.Mansard
"compatibility between Java EE implementations" is nice on paper but deploying your EJB app on a different app server is another story, unlike just moving a Spring container (which is not proprietary per se)Versicolor
N
38

The gap between EJB3 and Spring is much smaller than it was, clearly. That said, one of the downsides to EJB3 now is that you can only inject into a bean, so you can end up turning components into beans that don't need to be.

The argument about unit testing is fairly irrelevant now - EJB3 is clearly designed to be more easily unit testable.

The compatibility argument above is also kind of irrelevant: whether you use EJB3 or Spring, you're still reliant on 3rd party-provided implementations of transaction managers, JMS, etc.

What would swing it for me, however, is support by the community. Working on an EJB3 project last year, there just weren't a lot of people out there using it and talking about their problems. Spring, rightly or wrongly, is extremely pervasive, particularlty in the enterprise, and that makes it easier to find someone who's got the same problem you're trying to solve.

Nagano answered 5/12, 2008 at 13:29 Comment(2)
++ and that makes it easier to find someone who's got the same problem you're trying to solveTips
That could have been valid at the time of writing. In 2012, it's just not true.Mansard
C
18

What are the arguments for or against EJB3 vs Spring? Spring is always innovating and recognizes real-world constraints. Spring offered simplicity and elegance for the Java 1.4 application servers and didn't require a version of the J2EE specification that no one had access to in 2004 - 2006. At this point it is almost a religious debate that you can get sucked into - Spring + abstraction + open-source versus Java Enterprise Edition (Java EE) 5.0 specifications.

I think Spring complements more than competes with the Java EE specifications. As the features that were once unique to Spring continue to get rolled into the specification, many will argue that EJB 3 offers a 'good enough' feature set for most internal business applications.

What pitfalls can I expect with each? If your treating this as persistence issue (Spring+JPA) versus EJB3 your really not making that big of a choice.

Where can I find good benchmark information? I haven't followed the specj benchmark results for sometime, but they were popular for a while. It seems that each vendor (IBM, JBOSS, Oracle, and Sun) get less and less interested in having a compliant server. The lists get Shorter and shorter of certified vendors as you go from 1.3, 1.4. 1.5 Java Enterprise Edition. I think the days of a giant server that is fully compliant with all the specifications are over.

Connate answered 16/9, 2008 at 4:49 Comment(1)
Nice. The benchmarks didn't take into account spring, unfortunately. But this is overall great information.Swaddle
S
9

I would definitely recommend EJB3 over spring. We find that it's more streamlined, nicer to code in, and better supported. I have in the past used Spring and found it to be very confusing, and not as well documented as EJB3 (or JPA I guess at the end of the day)

  1. As of EJB3 you no longer have to deal with external config files, and there's only one POJO that you annotate per database table. This POJO can be passed to your web tier without any problems. IDEs like Netbeans can even auto-generate these POJOs for you. We've used EJB3 now as the back end for quite a few large scale applications, and haven't noticed any performance problems. Your Session Beans can be easily exposed as web services which you could expose to your Flex frontend. Session beans are easy to lock down at either a method or class level to assign roles and things like that if you need to.

I can't speak that much about spring, as I only tried it out for a few weeks. But my overall impression of it was very poor. That doesn't mean it's bad framework, but our team here has found EJB3 to be the best for the persistence/business layer.

Skeg answered 16/9, 2008 at 2:9 Comment(4)
@rustyshelf: can you comment on the size of your database and number of users logged on simultaneously, or number of transactions per second?Swaddle
One of our applications has 2500 registered users, of which probably only 100 at most would ever be logged in at once. The others have less simultaneous users, but have received constant hits since they went up. We use Glassfish as our container with Apache in front, but sometimes just GF by itself.Skeg
In terms of database size, do you mean tables, or rows in the tables? I'm assuming you mean data, and if so then our tables are pretty 'small'. I would say that we wouldn't have more than 20,000 rows in any of our tables.Skeg
I meant rows, so that is pretty small. Thanks for the perspective.Swaddle
P
7

I tend to prefer Spring over EJB3 but my recommendation would be whichever approach you take, try to stick to writing POJOs and use the standard annotations where possible, like the JSR annotations such as @PostConstruct, @PreDestroy and @Resource which work with both EJB3 or Spring so you can pick whichever framework you prefer.

e.g. you could decide on some project to use Guice instead for IoC.

If you want to use pre-request injection such as in a web application you might find Guice is quite a bit faster for dependency injection than Spring.

Session beans mostly boil down to dependency injection and transactions; so EJB3 and Spring are kinda similar really for that. Where Spring has the edge is on better dependency injection and nicer abstractions for things like JMS

Pratt answered 16/9, 2008 at 16:6 Comment(0)
K
2

i have used a very similar architecture in the past. Spring + Java 1.5 + Actionscript 2/3 when combined with Flex Data Services made it all very easy (and fun!) to code. though, a Flex front end means you need adequately powerful client machines.

Kippar answered 16/9, 2008 at 5:27 Comment(1)
Is Flex Data Services the proprietary version of BlazeDS?Swaddle
D
1

Regarding your question:

What are the arguments for or against EJB3 vs Spring?

I suggest reading the response from the experts: A RESPONSE TO: EJB 3 AND SPRING COMPARATIVE ANALYSIS by Mark Fisher. Read the comments to find Reza Rahman's remarks (EJB 3.0).

Dahliadahlstrom answered 4/1, 2012 at 2:7 Comment(0)
Z
0

Another thing in favor of spring is that most of the other tools / frameworks out there have better support for integration with spring, most of them use spring internally as well (e.g. activemq, camel, CXF etc).

It is also more mature and there are a lot more resources (books, articles, best practices etc) & experienced developers available than for EJB3.

Zarzuela answered 5/12, 2008 at 14:32 Comment(1)
Maybe at the time of writing (can't prove otherwise, at lease). Certainly not in 2012.Mansard
T
-3

I think EJB is a good component technology but not a good framework.Spring is the best framework available as of today.So i should consider Spring as the best implementation of JEE in the sense of a framework and my recommendation is to use spring in every project which gives us the flexibility to integrate with any component technology easily .

Tantalic answered 22/2, 2011 at 2:16 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.