Matt RaibleMatt Raible is a Web Developer and Java Champion. Connect with him on LinkedIn.

The Angular Mini-Book The Angular Mini-Book is a guide to getting started with Angular. You'll learn how to develop a bare-bones application, test it, and deploy it. Then you'll move on to adding Bootstrap, Angular Material, continuous integration, and authentication.

Spring Boot is a popular framework for building REST APIs. You'll learn how to integrate Angular with Spring Boot and use security best practices like HTTPS and a content security policy.

For book updates, follow @angular_book on Twitter.

The JHipster Mini-Book The JHipster Mini-Book is a guide to getting started with hip technologies today: Angular, Bootstrap, and Spring Boot. All of these frameworks are wrapped up in an easy-to-use project called JHipster.

This book shows you how to build an app with JHipster, and guides you through the plethora of tools, techniques and options you can use. Furthermore, it explains the UI and API building blocks so you understand the underpinnings of your great application.

For book updates, follow @jhipster-book on Twitter.

10+ YEARS


Over 10 years ago, I wrote my first blog post. Since then, I've authored books, had kids, traveled the world, found Trish and blogged about it all.

Seam

I have to admit, there's something about Seam that intrigues me. Maybe it's because they put up a really nice-looking demo (I'm a sucker for eye-candy), or maybe it's because it seems to be well documentated, or maybe it's the fact that it's based on J2EE standard technologies (EJB3 and JSF). It could also be that I greatly respect the work of Gavin King (who's always been respectful to me when I asked Hibernate questions back in the day).

It could be the lack of configuration, but I think it's the simplicity that gets me. A POJO (Entity Bean), a Session Bean for your business logic, and a view page (w/ Facelets no less, which is very cool). Other new frameworks this year include Wicket and Stripes. While these frameworks look cool, I really like the idea of a full-stack framework much better (I do use AppFuse after all). Well done Gavin - Seam looks very cool IMO.

On a related note, I upgraded AppFuse to MyFaces 1.1.0 yesterday w/ minimal effort. You can grab the latest from CVS if you'd like to get started with MyFaces quickly.

Posted in Java at Sep 21 2005, 10:00:28 AM MDT 15 Comments
Comments:

Another framework, another nail in the java coffin. Divide and conquer. What problems is Seam solving? "Maintaining server side state has traditionally been a painful and bugprone task." really?

Posted by Alonso on September 21, 2005 at 10:46 AM MDT #

And .NET is the way of the future? How do you like all those choices on that side of the fence?

Posted by Matt Raible on September 21, 2005 at 10:56 AM MDT #

.Net has its own set of problems. As Schwarzkopf says, "A good plan violently executed today is better than the best plan next week". In my experience, the biggest determinant to project success (from a technical perspective) is simplicity of the codebase, consistency of design patterns, and having everyone on the team be comfortable and competent with the patterns and codebase. Nothing undermines that more than introducing a new permutation of framework for each project.

If your goal is building a team of developers that are productive, Schwarzkopf is right. Maybe we have different goals, but that is my current responsibility so in that respect I will take the .Net problems instead of the issues from the java communities fork-and-mutilate approach.

Posted by Alonso on September 21, 2005 at 11:19 AM MDT #

I think what you are seeing is a flipped mentality on Java frameworks right now. Instead of requiring you to integrate with frameworks, frameworks are integrating with you. They do so with implicit behavior-- defaulting property names, column names, method signatures.

RoR does a great job of this. There's no need to integrate or write tedious code, everything is defaulted to some degree via Ruby's dynamic capabilities over your persistence layer. Java doesn't have those capabilities, so lets attack the problem from the middle via POJOs.

An example is I can use the EJB 3 entity manager to persist a plain old Java object-- defaulting property names and class names directly to columns and tables. Seam provides that same kind of behavior, except that it provides that implicit behavior in the direction of the UI layer, leveraging the existing EJB 3 capabilities.

Posted by Jacob Hookom on September 21, 2005 at 01:06 PM MDT #

>> Another framework, another nail in the java coffin.

As far as I am aware, no other framework on the market addresses the problems Seam addresses.
>> Divide and conquer.

On the contrary, Seam is based on *standards*: JSF, EJB3, Java EE 5. The idea is absolutely not to reinvent things that already exist and work well.

>> What problems is Seam solving? "Maintaining server side state has traditionally been a painful and bugprone task." really?

Yes, really. For example: how many of the web applications that you have written actually support multi-window operation? If some of them did, how much code did you have to write to make that work reliably?

For a second example: how many times have you heard advice that applications should be twisted into a stateless architecture in order to be able to scale? Have you considered the costs of that?

With respect to .net, what I've seen in the .net community is that every organization is still using their own homegrown frameworks. At least in Java we have a fairly delimited range of popular open source choices in each category.

Posted by Gavin on September 21, 2005 at 07:31 PM MDT #

>> Well done Gavin - Seam looks very cool IMO.

Thanks man! :-)

>> Gavin King (who's always been respectful to me when I asked Hibernate questions back in the day).

I would like to think that the Hibernate team is always respectful to people who are considerate of us - which means staying polite, following the user forum rules, and being understanding of the fact that answering questions is a huge drain on our time, and is often frustrating. At least that is what we strive for.

Posted by Gavin on September 21, 2005 at 07:41 PM MDT #

Alonso, the answer to your question is in the post. The problem that Seam is solving is providing an integration layer that pulls together existing technology (JSF, EJB3) into a "full-stack framework". I don't think anyone else is doing this (maybe Spring). Also, note that Seam doesn't appear to be forking anything, it is filling the gaps between existing frameworks (hence the name "seam").

Posted by Phillip Toland on September 21, 2005 at 09:09 PM MDT #

So I go to search for a hotel, get a search results list back, right click on a "View Hotel" link to open in another tab and....im back to the search screen. This is progress? This is "multi-window operation"? Funny, I swear a simple query-string centric application would never have this sort of problem.

Im not trying to be an ahole here - and I respect that people are trying to make development easier and more robust. But somewhere along the way, the java community lost sight of the other 90% of what consitutes a good development environment. When you have a thousand developers all trying to make a name for themselves by out-engineering each other you come up with some good (great?) ideas, but a community and environment that is fractured by ego to the point of being worthless. Who is the project-lead for java web framework development? Is there someone? Is there someone making the difficult decisions one way or the other to ensure consistency at the cost of flexibility? I would say no - and this is why .net is gaining traction.

I say this as someone who 2 years ago almost gouged my eyes out instead of taking a development position doing c#/.net development. It killed me to 'jump sides'. It still kills me to watch java implode.

just my .02

Posted by Alonso on September 21, 2005 at 09:26 PM MDT #

"The best way to predict the future is to invent it." - Alan Kay

Posted by 24.163.167.196 on September 21, 2005 at 09:50 PM MDT #

>> So I go to search for a hotel, get a search results list back, right click on a "View Hotel" link to open in another tab and....im back to the search screen. This is progress? This is "multi-window operation"? <<

It is the behavior that was *chosen* for the booking app. You have many choices of behavior, for example:

(1) state held in isolated conversations per browser tab
(2) state shared in the session context

Flexibility is the strength of Seams context model.

You can of course design a Seam app that is *not* conversational. But for applications where it is a business requirement that the user be able to do two isolated things at once (a common enough requirement), the conversational behavior is correct and a great improvement upon most webapps today.

And, even better, you can actually use both share sessional and conversational state and have them interact by well-defined rules. For example, I could have designed the booking app so that the list returned by the search screen was sessional, but hotel booking was conversational. Then the search results would be shared on all tabs, and right clicking on view hotel would take you to the hotel and start a new conversation. You would still be able to make multiple bookings concurrently. I didn't do it this way, because I was trying to make it easier to demonstrate the idea of conversations.

OK, so hotel booking is not a great example. On good example is JIRA. JIRA pisses me off on a daily basis, because I *often* have multiple search screens open simultaneously. Trouble is, if a change a search parameter, and refresh the search, I usually end up with the most recent search i ran, not the one that was perviously displayed in that page.

Don't mean to rag on JIRA which is a truly great product. The fact is that this kind of broken behavior is common in *many* web-based applications.

>> I say this as someone who 2 years ago almost gouged my eyes out instead of taking a development position doing c#/.net development. It killed me to 'jump sides'. It still kills me to watch java implode. <<

You sound very angry, and it seems to be clouding your openness to new ideas. I assure you it is not as bad as all that. Everything you are saying, you could have said about Hibernate, when I started that project 3 years ago. Well, Hibernate is generally agreed to have been a great success, and the ideas in Hibernate have now been standardized in EJB3. So I don't see where the problem is with experimenting with new ideas in open source, and making the successful ones standard across the industry.

Posted by Gavin on September 21, 2005 at 09:57 PM MDT #

I too am integeged by Seam. With the performance increases in EJB3 plus the ease of developemnt Seam offers I think it will be a compelling choice. I was reading about how Seam manages state and it is very flexible in that there are a lot of options on how long you want objects to live. I have always prefered to have the container manage things like this for me. I also see a definate advantage in making java applications as simple as possible.

Posted by Brian Vaughn on September 21, 2005 at 10:04 PM MDT #

>> Who is the project-lead for java web framework development? Is there someone?

Alonso, It sounds to me like a question from someone who stayed too long on the MS side of the fence... From my side, I don't see it as a "divide and conquer" problem but rather as a "convince and conquer" one.

Delivering THE web framework that will convince everybody is the task the community is currently working on. I like to see it as a huge project currently in its early phase. A couple of teams are providing their "prototypes" to the users (all of us) who criticize. But each time, they get better...

The .NET community tries to achieve the same goal differently. It has a unique authority that takes the decisions. we will see the outcome...

Posted by Thomas on September 23, 2005 at 02:06 AM MDT #

I have been a big fan of JSF and Hibernate. Now to have Gavin King work on a web framework built on top of JSF, EJB3 (Hibernate)... WOW! It seems like Seam ROCKS! This it totally cool!

Posted by Rick Hightower on September 30, 2005 at 09:22 AM MDT #

I, too, am intrigued by Seam. For me the reason it is compelling is the simplicity with the way things are tied together. I do find it a little difficult to find the code for the beans referenced by JSF pages. For example, in the DVD Store example there is a StoreManagerBean class with a @Name of "stats". Without knowing that prior to looking at the incl/stats.xhtml when you see ${stats.unitsSold} you have to search all your code to find the "stats" bean. I suppose an IDE tool could be made to show a list of them. Also, I thought that Seam was supposed to allow configuration by xml config files. I have not seen examples of that-- is it possible to configure the @Name "stats" for a bean using an xml file? I also feel that security and error handling was not considered as much as it should of. I know these weren't the end goals of Seam, but since both of these need to be addressed in nearly every project, I would of hoped the framework would of "planned" them for me-- overridable, of course. BTW, I would love to see something like RoR (and AppFuse)-- but using Maven goals and Seam.

Posted by Micah on February 11, 2006 at 02:45 PM MST #

Meh. SEAM makes a simple application simpler to code by eliminating middle tiers. These middle tiers are still required in more complex applications.

Posted by Jim Jones on October 25, 2006 at 01:19 AM MDT #

Post a Comment:
  • HTML Syntax: Allowed