Hacker Read top | best | new | newcomments | leaders | about | bookmarklet login

The way I remember it is if you were single-stack from client to server, yeah, EJBs and others in the J2EE worked pretty well.

On the other hand, if you wanted to get of the rails and have clients in multiple stacks and clients who talked to different stacks, then it just all fell apart. Even multiple vendors in the J2EE space could be a problem.

Being able to do things simply hid a lot of complexity. It was hard to investigate that complexity when things went wrong.

It feels like chaos today, with myriad front-end frameworks and best practices changing every three months, but I would take this over mid-2000's Java tech because it just simply seems like less magic. I can break out Postman and just see what's going on.

I agree that there's no golden bullet, and that there's no end of crappy REST definitions. Furthermore, it's mostly not even REST, not in a HATEOAS kind of way.

But that's ok, I still feel more productive than I did 15 years ago, and I wouldn't want to go back.



sort by: page size:

No. I mean, there are still people in the industry today who think Java EE is the greatest, but I recall it making no sense the first time I saw it. The Java app server space was fractious at the time and I spent a lot of time with ATG Dynamo which was proprietary but had a fantastic design for the time and was very innovative. J2EE felt like a big step back. It got some adoption from IT architects who only know how to follow trends, but most of us just spent some time in the wilderness until Spring came along to rescue us.

Was J2EE obviously awful at the time? I'm honestly not sure.

I had a summer job working on EJBs at a company that had built everything on CORBA. It was basically a research project; they knew they had to switch to EJB, because it was going to be the standard (ha), and they wanted to know how. This was in the EJB 1.x era, so somewhere between 1998 and 2001 - i don't remember exactly when!

I remember thinking that it was all rather complicated, especially around persistence. And i remember being appalled that beans didn't actually implement their interfaces. We came up with some rather complicated pattern to work around that - i think there was a master interface where all the methods threw RemoteException, then the bean interface trivially extended that, and there was a local interface that extended it but overrode all the methods to not throw RemoteException, then the bean implemented that. And i spent most of my time there wrestling with the fact that the performance characteristics of local and remote calls are very different, and how that impacted design; we ended up with DTOs mirroring every entity bean to save network round-trips.

But the thing is, there was nothing else around at the time that did anything similar. Remote object invocation, with declarative transactions, and container-managed object lifecycles, including pulling objects out of a database on demand. That seemed like saucer tech! So it seemed, glaring design flaws aside, fair enough that it was complicated. Hey, i might have to write an XML document, but at least it wasn't ten thousand lines of C++.


Ho man, I remember when J2EE came on the scene and it was a breath of fresh air compared to the 10,000lb CORBA and DCOM gorilla that was common then.

People like to bash Java without understanding how things turned out as they did.


I think Java veered wildly off track with EJB. It's legacy lives on (unfortunately), but at, least it's not the de facto standard for enterprise dev that it once was.

So, in some senses, at least the rabid drive toward implementing the full spec has been deprecated, if not the technology itself.


But EJB felt over-engineered even compared to today's stack. Maybe it was actually not, and just felt that way, of course.

Hard to say... it was a comparatively darker time for information availability. Other odd, awkward, over-puffed products like ATG Dyanmo, Plumtree, Interwoven, etc., were killing it in the market too.

I was really green in enterprise software then, and Websphere's suggestion of useful clustering, configuration management, managed pooling, etc., seemed tantalizing. (Look how long it takes to start up--it must be doing useful and complicated stuff!) That said, it didn't take all that long for Tomcat, JBoss, and others to eat its lunch on projects not rolling along on enormous sunk costs into IBM tech.

I never actually dug into EJBs or wacky things like container-managed Javamail. Some colleagues did. They spent a lot of time struggling with the tooling.

And now I'm just remembering VisualAge for Java. /shudder/


That's very true -- it is reminiscent of the old J2EE days 12+ years ago. But it didn't really take long back then for a consensus to emerge about how awful most of that technology was (enterprise java beans, etc) and for people to settle on more simplified, streamlined approaches. How long will it take for the momentum in the front end community to similarly shift away from these bloatware approaches?

Actually what I've seen with Java is that the committee-designed J2EE frameworks failed to keep up and got left behind. In the last five years, the only times I've heard of teams using EJB or JSF were either moving away from them or embarrassed by them.

I'd argue much of that time has passed now. I used to write J2EE code. Now we have frameworks like lagom and dropwizard which make life exponentially better. I'd suggest taking another look.

J2EE could have had all that but it was missing an OTP. [Java got the competing 'application server' vendors competing themselves out of a massive market.] Components with well defined life cycles, request/reply and message processing, dynamic remote interface binding, isolated execution environment, pure single threaded application level code ('business logic'), declarative composition ... that's all in the specs.

Erlang is mainly about OTP. OTP delivered an opionated take on distributed components -- think of Erlang on OTP as Ruby on Rails -- and did it exceptionally well.

But one could still do this with Java btw. The specs are still there and they are solid.


J2EE was awful because it was rushed; the early vision of Java was all applets, and when that didn't pan out, Sun was desperate to find a market, and settled on Java as the new COBOL. Even now I'll wager 95% of what people use EJBs for they could do with POJOs.

Early Java EE was astoundingly bad. It's vastly improved now (from EJB 3 onwards), but still not wonderful.

In one job, i used an enterprise framework that actually predated Java EE. Several ideas in EE were copied from it. But incredibly, this framework was substantially better than early EE. I believe, because that framework was built by people who actually needed to ship products to customers to pay their bills, which limited the amount of overcomplication and obstruction they could get away with. There was no such limit on Sun's architects.


Recently did some nodejs work. It was surprisingly fun. There are A LOT of sharp edges, but working "closer to the metal" is great. Fast deploy and startup is GREAT.

Am an early, vocal Java partisan. Java world HTTP servers fell into a ditch and kept digging. Servlets and JSP weren't too bad. Wasn't crazy about Tomcat or NetSuite, but ok. Then it just got more and more nutty. J2EE, Spring, XML, schemas, annotations, etc.

There's nothing about Java that rules out simple and quick. For medical records stuff, I replaced a huge J2EE/BizTalk style backend with stupid simple process runner for stupid simple tasks. Think Windows OS Task Manager running AWS Lambdas.

In conclusion, I remain sad about the enterprisey detour Java took.


Tangentially related I hope developers will realize that the current stack inherited from them is basically enterprise software made for large teams of interchangeable developers, just with better marketing than J2EE 15 years ago.

For reference: https://martin.kleppmann.com/2008/05/11/ruby-on-rails-vs-jav...

> I believe that if there was a full standard distribution for Java EE (e.g. Icefaces+JSF+Seam+EJB3+JPA+Hibernate+Glassfish, to name just one possible API stack out of thousands of different combinations), people would write a lot more good documentation for that particular stack, and it would become a lot easier for more developers to start using it effectively. With the right tools and good documentation, productivity could potentially be about the same for Rails and Java, but at the moment Java is shooting itself in the foot in this regard.


The original goal of EJB's was to push functional decomposition out onto the network.

Entity beans were always a disaster, and Stateful Session Beans had scaling problems, but Stateless Session beans by the time of EJB3 were an easy way to push logic out to the network while getting a whole bunch of stuff (pooling, scaling, failover, transaction management, security, etc) for free.

These days they'd be calling them micro services.

The main problem was combining everything into the big ball of mud that is J2EE. If they had let each component live and die on its own merits I think the ecosystem would be in a much better state today.


You're looking at this ecosystem after we've already gone through multiple versions of EJBs that are all very different from each other, several different JMS implementations from many vendors now deprecating them (IBM is deprecating a couple of their JMS implementations for cloud services in favor of a hosted Kafka offering, for example), and the endless XML-based configuration of all services and their components combined with a lot of tight coupling requiring different services to be re-deployed upon updating their EJB entities or face class unmarshalling problems. I'm not a fan of sloppy configuration, but there is historically far too many things that were necessary to configure to get a basic JEE service started.

A lot of what's in JPA now came after Hibernate became such an industry-wide standard and because EJB 2's EntityBeans were so awkward. For early adopters in the 90s, EJB 1.0 was really, really difficult to work with and overall a frustrating experience compared to using Spring + Hibernate. This pain was much more keenly felt for enterprise software start-ups that couldn't afford release cycles and deployments that take so much time.

JMS is not the end-all be-all of enterprise messaging either and the J2EE ecosystem made certain technology innovations more difficult due to its byzantine nature. The AMQP working group came out of their frustrations with JMS and it includes a lot of experts with JMS implementations from the usual vendors.

I challenge you to find communities of developers other than H1Bs, older, offshored, and other disadvantaged (and in no way technically deficient either!) workers that are writing anything with EJBs for their jobs these days. Look at the career possibilities for these places as an engineer - do you imagine IT outsourcing and banking backends is something highly motivated and talented engineers would find fulfilling when there's other options? Furthermore, I challenge you to find operations teams that enjoy supporting these systems compared to architectures built around microservices / SOA using lightweight containers using, say, Kubernetes. J2EE architecture is simply not easy to maintain in production with typical enterprise sysadmins despite the billions spent on improving them over multiple decades now (and due to the hostile atmosphere of enterprise software vendor-client relationships impeding technical progress since time immemorial), and this is a deal-breaker for large organizations that are trying to reduce operations costs.

Even though ultimately we as an industry seem to be reinventing the wheel constantly probably to keep ourselves busy rather than to build highly maintainable software, this is preferable to millions of developers around the world in a monoculture writing constantly refactored and improved COBOL and Fortran if we approached the world of software with the JEE vision. It's been shown academically that for software reliability and maintainability, if you need to rewrite more than a certain percentage (I believe it was around only 30%) of the software, it is more economical and practical to rewrite it all. It is the rigidity of the JEE vision and competing enterprise standards that made interoperability and thus freedom for motivated, creative developers difficult that pushed them away from both larger companies and toward smaller companies united by open and probably less stable ecosystems. Moreover, it is really difficult to argue that the MIT Approach [1] fits everywhere in the software world and also that there is no merit to Worse is Better.

It's funny that you mention RoR in that there's been some concern by the community that it's becoming more like J2EE. It's a bit sad in a way because if everyone writing mature software winds up ultimately implementing J2EE, it has shown how little progress we've made as a software community despite so many different software design philosophies gaining market traction.

[1] https://en.wikipedia.org/wiki/Worse_is_better#The_MIT_approa...


Come on! They scrapped almost everything because it sucked and everyone knew it. Judging EJBs as a pile of shit is quite deserving. I mean this as a programmer who wrote Java code for a living.

OTOH, the servlet API is nice.


Im a java dev, and it was all servlets, some early JSP's but time spent with early connection pools and early versions of tomcat

I always remember when EJB's first appeared on the scene as a cure all - but EJB1 wasnt. Session beans were ok - but Entity beans werent that great

We didnt unit test as much as we do now. There were early versions of junit - but it was difficult to configure in an enterprise environment. So you would go to workplaces and people would tell you they were testing - but then you look at the code and there were few tests


It was a ~8 year old mix and mesh of tech was not really fixable. We also got too many requests for enterprise clients for Java. And that would have been impossible. We more than doubled in revenue after the rewrite because now we could go for fortune 500 countries.

It was a different time: the product was a combi of perl, php, c++. And then the business world, at least here, went over to java backends.

next

Legal | privacy