Welcome!

Java IoT Authors: Elizabeth White, Pat Romanski, Liz McMillan, Sematext Blog, Richard Hale

Related Topics: Java IoT

Java IoT: Article

Seam: The Next Step in the Evolution of Web Applications

A powerful new application framework for managing contextual components

Web sites were originally static. Later dynamic content came about through CGI scripts paving the way for the first true Web applications. Since HTTP was entirely stateless, it became necessary to invent ways for requests to be linked together in a sequence. At first state was added to the URLs, but later the cookie concept came into being. By giving each user a special token, the server could maintain a context for each user, the HTTP session where the application can store state. As simple as it is, the HTTP session defines the entire concept of what a Web application is today.

The benefits of the HTTP session are clear, but we don't often stop to think about the drawbacks. When we use the HTTP session in a Web application, we store the sum total of the state of the user's interaction with the application in one place. This means that unless we jump through some seriously complex hoops, the user can only interact with an application in one way at a time.

Consider an application that manages a set of paged search results stored in the HTTP session. If the user were to start a new search in a new window, the new search would overwrite any previous session-scoped results. That's painful enough, but multitasking users aren't the only way session-scoped data causes Web applications to explode.

Consider our friend the back button, the mortal enemy of nearly every Web developer. When a user goes backwards in time to a previous page and presses a button, that application invocation expects to be associated with an HTTP session state that may have subsequently changed. When your application only has one context to store state, there's little hope of creating anything but the fragile Web applications that we all struggle with.

Most applications deal with this by adding state to the URLs, either going back to manually putting state information in the URLs or by adding a cookie-like token in the URL to point to a finer-grained context than the HTTP session. This can force the developer to pay a lot of attention to state management, often spending more time on it than on writing the actual application.

JBoss Seam
This article introduces JBoss Seam, a framework for managing contextual components. You'll see how Seam can manage state information in a Web application, overcoming the fundamental limitations of the HTTP session and enabling entirely new contexts that dramatically extend the capabilities of Web applications. It does all of this while simplifying your Web application development and reducing the amount of code (and XML) you have to write.

Seam is a framework for managing contextual components. What does that mean? Let's first look at a component. They go by many names: JavaBeans, POJOs, Enterprise JavaBeans. They're Java classes that provide some type of function to your application. A Java EE application might have many kinds of components: JSF backing beans creating the Web tier, entity beans providing persistence, and session beans providing business logic. To Seam, they're all components. Seam unifies these diverse component models, letting you think of them all as simply application components.

A Quick Example
The best way to see what Seam can do is to look at some examples. These examples are derived from the Seam DVD Store application. You can see the complete application in the examples directory of the Seam distribution. We'll start with a simple EJB3 entity bean for a product.

@Entity
@Name("product")
public class Product
    implements Serializable
{
     long id;
     String title;
     String description;
     float price;

     @Id @GeneratedValue(strategy=AUTO)
     public long getId() {
       return id;
     }
     public void setId(long id) {
       this.id = id;
     }

     public String getTitle() {
       return title;
     }
     public void setTitle(String title) {
       this.title = title;
     }

     // more getters and setters.
}

This is an EJB3 entity bean, a POJO with a couple of annotations. The only thing that stands out here is the @Name annotation, which marks it as a Seam component named product. We'll see later how this affects things. For now let's move on to an application component that displays a list of all the products in the system.

@Stateful
@Name("search")
@Interceptors(SeamInterceptor.class)
public class SearchAction
     implements Search
{
     @PersistenceContext(type=EXTENDED)
     private EntityManager em;

     @Out
     private List<Product> products;

     @Factory("products")
     public void loadProducts()
     {
       products = em.createQuery("from Product p")
       .getResultList();
     }
}

This is a stateful EJB3 session bean. We've marked it as a Seam component using the @Name annotation and brought in Seam functionality with the SeamInterceptor. Ignoring the remaining Seam annotations for a moment, what we have here is a simple component that keeps track of a list of Product objects.

The loadProducts() method uses the EJB3 persistence API to load that list of products. It makes use of EJB3 dependency injection to receive an EntityManager instance from the container so that it can load the the products into the product list.

The goal of this component is to provide this list of products to the UI. The @Out annotation on the product list does this. @Out marks the list as data to be shared out to the UI.

Let's jump forward to the view. This is part of the Facelets XHTML template, but for our purposes you can think of it as a JSP file that uses the JavaServer Faces tag libraries. The dataTable tag renders the list of items in table form using the three column definitions: title, description, and price.

<h:dataTable value="#{products}" var="prod">
   <h:column>
     <f:facet name="header">title</f:facet>
     #{prod.title}
   </h:column>
   <h:column>
     <f:facet name="header">description</f:facet>
     #{prod.description}
   </h:column>
   <h:column>
     <f:facet name="header">price</f:facet>
     #{prod.price}
   </h:column>
</h:dataTable>

The search component provides the products value for the table to the view, but how does the value get populated in the view? The @Factory annotation on the loadProducts() method tells Seam that if a view needs a products value, the loadProducts() method can be used as a factory method to load the products from the database.

There's something else happening here. SearchAction is a stateful session bean, and the product's value is just part of its state. Stateful components have a lifecycle. They have to be created, kept around, and eventually destroyed. In Seam, stateful components have the lifecycle of their surrounding context. If a stateful component were session-scoped, for example, it would be stored in the HTTP session and destroyed when the HTTP session is destroyed, unless it reaches its natural end of life sooner.

We mentioned earlier that Seam has several more interesting contexts than just simple session-scoped data. Stateful components, by default, have conversational scope. A conversation is a sequence of clicks within a Web application. You can think of it as an actual conversation with part of the application. You interact with one part of the application for a few clicks and say good-bye, maybe moving on to some other part of the application.

More Stories By Norman Richards

Norman Richards is a JBoss developer living in Austin, Tx. He is co-author of JBoss: A Developer's Notebook and XDoclet in Action.

Comments (1) View Comments

Share your thoughts on this story.

Add your comment
You must be signed in to add a comment. Sign-in | Register

In accordance with our Comment Policy, we encourage comments that are on topic, relevant and to-the-point. We will remove comments that include profanity, personal attacks, racial slurs, threats of violence, or other inappropriate material that violates our Terms and Conditions, and will block users who make repeated violations. We ask all readers to expect diversity of opinion and to treat one another with dignity and respect.


Most Recent Comments
SYS-CON Belgium News Desk 02/19/06 01:41:18 PM EST

Web sites were originally static. Later dynamic content came about through CGI scripts paving the way for the first true Web applications. Since HTTP was entirely stateless, it became necessary to invent ways for requests to be linked together in a sequence. At first state was added to the URLs, but later the cookie concept came into being. By giving each user a special token, the server could maintain a context for each user, the HTTP session where the application can store state. As simple as it is, the HTTP session defines the entire concept of what a Web application is today.

@ThingsExpo Stories
"We've discovered that after shows 80% if leads that people get, 80% of the conversations end up on the show floor, meaning people forget about it, people forget who they talk to, people forget that there are actual business opportunities to be had here so we try to help out and keep the conversations going," explained Jeff Mesnik, Founder and President of ContentMX, in this SYS-CON.tv interview at 18th Cloud Expo, held June 7-9, 2016, at the Javits Center in New York City, NY.
The 19th International Cloud Expo has announced that its Call for Papers is open. Cloud Expo, to be held November 1-3, 2016, at the Santa Clara Convention Center in Santa Clara, CA, brings together Cloud Computing, Big Data, Internet of Things, DevOps, Digital Transformation, Microservices and WebRTC to one location. With cloud computing driving a higher percentage of enterprise IT budgets every year, it becomes increasingly important to plant your flag in this fast-expanding business opportuni...
“delaPlex Software provides software outsourcing services. We have a hybrid model where we have onshore developers and project managers that we can place anywhere in the U.S. or in Europe,” explained Manish Sachdeva, CEO at delaPlex Software, in this SYS-CON.tv interview at @ThingsExpo, held June 7-9, 2016, at the Javits Center in New York City, NY.
From wearable activity trackers to fantasy e-sports, data and technology are transforming the way athletes train for the game and fans engage with their teams. In his session at @ThingsExpo, will present key data findings from leading sports organizations San Francisco 49ers, Orlando Magic NBA team. By utilizing data analytics these sports orgs have recognized new revenue streams, doubled its fan base and streamlined costs at its stadiums. John Paul is the CEO and Founder of VenueNext. Prior ...
IoT is rapidly changing the way enterprises are using data to improve business decision-making. In order to derive business value, organizations must unlock insights from the data gathered and then act on these. In their session at @ThingsExpo, Eric Hoffman, Vice President at EastBanc Technologies, and Peter Shashkin, Head of Development Department at EastBanc Technologies, discussed how one organization leveraged IoT, cloud technology and data analysis to improve customer experiences and effi...
The Internet of Things will challenge the status quo of how IT and development organizations operate. Or will it? Certainly the fog layer of IoT requires special insights about data ontology, security and transactional integrity. But the developmental challenges are the same: People, Process and Platform and how we integrate our thinking to solve complicated problems. In his session at 19th Cloud Expo, Craig Sproule, CEO of Metavine, will demonstrate how to move beyond today's coding paradigm ...
Internet of @ThingsExpo, taking place November 1-3, 2016, at the Santa Clara Convention Center in Santa Clara, CA, is co-located with the 19th International Cloud Expo and will feature technical sessions from a rock star conference faculty and the leading industry players in the world and ThingsExpo Silicon Valley Call for Papers is now open.
Big Data engines are powering a lot of service businesses right now. Data is collected from users from wearable technologies, web behaviors, purchase behavior as well as several arbitrary data points we’d never think of. The demand for faster and bigger engines to crunch and serve up the data to services is growing exponentially. You see a LOT of correlation between “Cloud” and “Big Data” but on Big Data and “Hybrid,” where hybrid hosting is the sanest approach to the Big Data Infrastructure pro...
"My role is working with customers, helping them go through this digital transformation. I spend a lot of time talking to banks, big industries, manufacturers working through how they are integrating and transforming their IT platforms and moving them forward," explained William Morrish, General Manager Product Sales at Interoute, in this SYS-CON.tv interview at 18th Cloud Expo, held June 7-9, 2016, at the Javits Center in New York City, NY.
A critical component of any IoT project is what to do with all the data being generated. This data needs to be captured, processed, structured, and stored in a way to facilitate different kinds of queries. Traditional data warehouse and analytical systems are mature technologies that can be used to handle certain kinds of queries, but they are not always well suited to many problems, particularly when there is a need for real-time insights.
With 15% of enterprises adopting a hybrid IT strategy, you need to set a plan to integrate hybrid cloud throughout your infrastructure. In his session at 18th Cloud Expo, Steven Dreher, Director of Solutions Architecture at Green House Data, discussed how to plan for shifting resource requirements, overcome challenges, and implement hybrid IT alongside your existing data center assets. Highlights included anticipating workload, cost and resource calculations, integrating services on both sides...
"We are a well-established player in the application life cycle management market and we also have a very strong version control product," stated Flint Brenton, CEO of CollabNet,, in this SYS-CON.tv interview at 18th Cloud Expo, held June 7-9, 2016, at the Javits Center in New York City, NY.
Unless your company can spend a lot of money on new technology, re-engineering your environment and hiring a comprehensive cybersecurity team, you will most likely move to the cloud or seek external service partnerships. In his session at 18th Cloud Expo, Darren Guccione, CEO of Keeper Security, revealed what you need to know when it comes to encryption in the cloud.
We're entering the post-smartphone era, where wearable gadgets from watches and fitness bands to glasses and health aids will power the next technological revolution. With mass adoption of wearable devices comes a new data ecosystem that must be protected. Wearables open new pathways that facilitate the tracking, sharing and storing of consumers’ personal health, location and daily activity data. Consumers have some idea of the data these devices capture, but most don’t realize how revealing and...
What are the successful IoT innovations from emerging markets? What are the unique challenges and opportunities from these markets? How did the constraints in connectivity among others lead to groundbreaking insights? In her session at @ThingsExpo, Carmen Feliciano, a Principal at AMDG, will answer all these questions and share how you can apply IoT best practices and frameworks from the emerging markets to your own business.
Ask someone to architect an Internet of Things (IoT) solution and you are guaranteed to see a reference to the cloud. This would lead you to believe that IoT requires the cloud to exist. However, there are many IoT use cases where the cloud is not feasible or desirable. In his session at @ThingsExpo, Dave McCarthy, Director of Products at Bsquare Corporation, will discuss the strategies that exist to extend intelligence directly to IoT devices and sensors, freeing them from the constraints of ...
You think you know what’s in your data. But do you? Most organizations are now aware of the business intelligence represented by their data. Data science stands to take this to a level you never thought of – literally. The techniques of data science, when used with the capabilities of Big Data technologies, can make connections you had not yet imagined, helping you discover new insights and ask new questions of your data. In his session at @ThingsExpo, Sarbjit Sarkaria, data science team lead ...
Extracting business value from Internet of Things (IoT) data doesn’t happen overnight. There are several requirements that must be satisfied, including IoT device enablement, data analysis, real-time detection of complex events and automated orchestration of actions. Unfortunately, too many companies fall short in achieving their business goals by implementing incomplete solutions or not focusing on tangible use cases. In his general session at @ThingsExpo, Dave McCarthy, Director of Products...
Traditional IT, great for stable systems of record, is struggling to cope with newer, agile systems of engagement requirements coming straight from the business. In his session at 18th Cloud Expo, William Morrish, General Manager of Product Sales at Interoute, outlined ways of exploiting new architectures to enable both systems and building them to support your existing platforms, with an eye for the future. Technologies such as Docker and the hyper-convergence of computing, networking and sto...
WebRTC is bringing significant change to the communications landscape that will bridge the worlds of web and telephony, making the Internet the new standard for communications. Cloud9 took the road less traveled and used WebRTC to create a downloadable enterprise-grade communications platform that is changing the communication dynamic in the financial sector. In his session at @ThingsExpo, Leo Papadopoulos, CTO of Cloud9, discussed the importance of WebRTC and how it enables companies to focus...