Welcome!

Java IoT Authors: Tim Hinds, Liz McMillan, Jonathan Fries, AppDynamics Blog, John Esposito

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
Digital payments using wearable devices such as smart watches, fitness trackers, and payment wristbands are an increasing area of focus for industry participants, and consumer acceptance from early trials and deployments has encouraged some of the biggest names in technology and banking to continue their push to drive growth in this nascent market. Wearable payment systems may utilize near field communication (NFC), radio frequency identification (RFID), or quick response (QR) codes and barcodes...
Artificial Intelligence has the potential to massively disrupt IoT. In his session at 18th Cloud Expo, AJ Abdallat, CEO of Beyond AI, will discuss what the five main drivers are in Artificial Intelligence that could shape the future of the Internet of Things. AJ Abdallat is CEO of Beyond AI. He has over 20 years of management experience in the fields of artificial intelligence, sensors, instruments, devices and software for telecommunications, life sciences, environmental monitoring, process...
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 ...
The IETF draft standard for M2M certificates is a security solution specifically designed for the demanding needs of IoT/M2M applications. In his session at @ThingsExpo, Brian Romansky, VP of Strategic Technology at TrustPoint Innovation, will explain how M2M certificates can efficiently enable confidentiality, integrity, and authenticity on highly constrained devices.
There is an ever-growing explosion of new devices that are connected to the Internet using “cloud” solutions. This rapid growth is creating a massive new demand for efficient access to data. And it’s not just about connecting to that data anymore. This new demand is bringing new issues and challenges and it is important for companies to scale for the coming growth. And with that scaling comes the need for greater security, gathering and data analysis, storage, connectivity and, of course, the...
A critical component of any IoT project is the back-end systems that capture data from remote IoT devices and structure it in a way to answer useful questions. Traditional data warehouse and analytical systems are mature technologies that can be used to handle large data sets, but they are not well suited to many IoT-scale products and the need for real-time insights. At Fuze, we have developed a backend platform as part of our mobility-oriented cloud service that uses Big Data-based approache...
The IoTs 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. In his session at @ThingsExpo, Craig Sproule, CEO of Metavine, will demonstrate how to move beyond today's coding paradigm and share the must-have mindsets for removing complexity from the development proc...
trust and privacy in their ecosystem. Assurance and protection of device identity, secure data encryption and authentication are the key security challenges organizations are trying to address when integrating IoT devices. This holds true for IoT applications in a wide range of industries, for example, healthcare, consumer devices, and manufacturing. In his session at @ThingsExpo, Lancen LaChance, vice president of product management, IoT solutions at GlobalSign, will teach IoT developers how t...
Manufacturers are embracing the Industrial Internet the same way consumers are leveraging Fitbits – to improve overall health and wellness. Both can provide consistent measurement, visibility, and suggest performance improvements customized to help reach goals. Fitbit users can view real-time data and make adjustments to increase their activity. In his session at @ThingsExpo, Mark Bernardo Professional Services Leader, Americas, at GE Digital, will discuss how leveraging the Industrial Interne...
Increasing IoT connectivity is forcing enterprises to find elegant solutions to organize and visualize all incoming data from these connected devices with re-configurable dashboard widgets to effectively allow rapid decision-making for everything from immediate actions in tactical situations to strategic analysis and reporting. In his session at 18th Cloud Expo, Shikhir Singh, Senior Developer Relations Manager at Sencha, will discuss how to create HTML5 dashboards that interact with IoT devic...
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...
SYS-CON Events announced today that Ericsson has been named “Gold Sponsor” of SYS-CON's @ThingsExpo, which will take place on June 7-9, 2016, at the Javits Center in New York, New York. Ericsson is a world leader in the rapidly changing environment of communications technology – providing equipment, software and services to enable transformation through mobility. Some 40 percent of global mobile traffic runs through networks we have supplied. More than 1 billion subscribers around the world re...
We’ve worked with dozens of early adopters across numerous industries and will debunk common misperceptions, which starts with understanding that many of the connected products we’ll use over the next 5 years are already products, they’re just not yet connected. With an IoT product, time-in-market provides much more essential feedback than ever before. Innovation comes from what you do with the data that the connected product provides in order to enhance the customer experience and optimize busi...
The increasing popularity of the Internet of Things necessitates that our physical and cognitive relationship with wearable technology will change rapidly in the near future. This advent means logging has become a thing of the past. Before, it was on us to track our own data, but now that data is automatically available. What does this mean for mHealth and the "connected" body? In her session at @ThingsExpo, Lisa Calkins, CEO and co-founder of Amadeus Consulting, will discuss the impact of wea...
In his session at @ThingsExpo, Chris Klein, CEO and Co-founder of Rachio, will discuss next generation communities that are using IoT to create more sustainable, intelligent communities. One example is Sterling Ranch, a 10,000 home development that – with the help of Siemens – will integrate IoT technology into the community to provide residents with energy and water savings as well as intelligent security. Everything from stop lights to sprinkler systems to building infrastructures will run ef...
Whether your IoT service is connecting cars, homes, appliances, wearable, cameras or other devices, one question hangs in the balance – how do you actually make money from this service? The ability to turn your IoT service into profit requires the ability to create a monetization strategy that is flexible, scalable and working for you in real-time. It must be a transparent, smoothly implemented strategy that all stakeholders – from customers to the board – will be able to understand and comprehe...
You deployed your app with the Bluemix PaaS and it's gaining some serious traction, so it's time to make some tweaks. Did you design your application in a way that it can scale in the cloud? Were you even thinking about the cloud when you built the app? If not, chances are your app is going to break. Check out this webcast to learn various techniques for designing applications that will scale successfully in Bluemix, for the confidence you need to take your apps to the next level and beyond.
SYS-CON Events announced today that Peak 10, Inc., a national IT infrastructure and cloud services provider, will exhibit at SYS-CON's 18th International Cloud Expo®, which will take place on June 7-9, 2016, at the Javits Center in New York City, NY. Peak 10 provides reliable, tailored data center and network services, cloud and managed services. Its solutions are designed to scale and adapt to customers’ changing business needs, enabling them to lower costs, improve performance and focus inter...
So, you bought into the current machine learning craze and went on to collect millions/billions of records from this promising new data source. Now, what do you do with them? Too often, the abundance of data quickly turns into an abundance of problems. How do you extract that "magic essence" from your data without falling into the common pitfalls? In her session at @ThingsExpo, Natalia Ponomareva, Software Engineer at Google, will provide tips on how to be successful in large scale machine lear...
SYS-CON Events announced today that Fusion, a leading provider of cloud services, will exhibit at SYS-CON's 18th International Cloud Expo®, which will take place on June 7-9, 2016, at the Javits Center in New York City, NY. Fusion, a leading provider of integrated cloud solutions to small, medium and large businesses, is the industry's single source for the cloud. Fusion's advanced, proprietary cloud service platform enables the integration of leading edge solutions in the cloud, including cloud...