Built with Seam

You can find the full source code for this website in the Seam package in the directory /examples/wiki. It is licensed under the LGPL.


Here are a few ideas we have for self-contained, greenfield development within Seam. These projects are ideal for students looking for a dissertation/thesis topic, or for interns. If you interested in a project, please get in contact with Shane Bryzak or Dan Allen

Spring module for Seam 3

Spring is a popular bean container and dependency injection framework. Developers interested in adopting CDI, the standard dependency injection facility in Java EE 6, may need to integrate with existing business logic contained within Spring beans. Fortunately, CDI supports alternative bean metadata sources, one of which can be the Spring container. This project would leverage the CDI extension SPI to register Spring beans as CDI beans so that they can be injected directly into other CDI beans. It could build on the work done in Seam Solder and Seam Config.

Java-based configuration provider for Seam Config

One of the compelling features of Guice, another dependency injection framework for Java, is its Java-based bean configuration and wiring. Seam Config currently provides the option to configure beans using XML as an alternative, or supplement, to annotation-based configuration. This student project would introduce an additional configuration provider to the Seam Config module that would allow beans to be wired using a Java-based API.

CDI for Android/Dalvik

Weld extends CDI outside of Java EE 6 to Servlet and Java SE environments. One place it hasn't ventured yet is Android. Android developers have to instantiate services the old-fashioned way, using the new operator. This student project would focus on getting Weld to run inside of Android/Dalvik as a way to bring CDI to Android. Once Weld is running, the next step is to research building custom scopes for a single activity, nested activities (conversation) and for sessions that span multiple passivations of an application. Not only will developers benefit from having dependency injection, but also simplified state management.

Conversations and workspace management for CDI

CDI provides a conversation scope, but it's much more simplistic than what Seam 2 offers. In particular, there is no facility for switching between parallel conversations, a feature labeled workspace management. This student project would introduce a custom conversation scope that would allow conversations to be switched. This includes having both a Java API and UI controls. Conversations should also support a name and a description. The project can also research natural conversations--conversations that are identified by a business key--so that conversations can be switched implicitly by navigating to a previously visited resource.

Integration with additional networks in Seam Social

Social networking is exploding and there is an ever increasing demand for applications to participate in those networks. A recent addition to the Seam family of modules, Seam Social provides integration with several well-known social networks (Twitter, LinkedIn, etc). However, there is still much work to be done. This student project would introduce additional adapters and perhaps explore different ways for an application to interact with social networks. One area to focus on is security integration. The goal is to make it as simple as possible for an application developer to post and read information via a social network.

JBoss ESB integration with CDI

JBoss ESB is used as part of the JBoss SOA offering as the core infrastructure logic provider via processes orchestration, protocol translation, change management, quality of service and service management. However you still need to write your services, and the business logic they encapsulate. CDI's services (and the integrations it offers with Java EE technologies as well as it's extension ecosystem) should be available for use here.

Errai (GWT) integration with Seam Security

(Errai (GWT) integration with CDI is a prerequiste for this project). Seam security offers a rich, extensible model for providing authentication, authorization and identity management for your project in a declarative, type safe fashion. It has strong integration with JBoss AS, reusing many of the services JBoss AS has to offer.

GWT applications also need security, and providing an elegant mapping between the two will produce a compelling story.

Seam Image module

Support for image storage and caching, basic image manipulation such as resize, crop, rotate, brightness and contrast, etc.

Conversations with remote EJBs

Investigate how the conversation scope works with remote EJBs.

JMX Support for CDI and Common monitoring operations for apps using CDI

Take the JMX annotations from Infinispan or CDI JMX support written by German Escobar and create a shared project with annotations and base classes to implement. Add the ability to expose CDI beans as MBeans via a CDI extension. Additionally add in docs and examples using the RHQ Annotations for plugin generation and the tool for creating plugins.

Add some common interceptors and statistics MBeans to the extension, that support operations such as:

  • Method call timing
  • Method call counting
  • Exceptions thrown by methods
  • Others, as use cases come in

Monitoring and Management for apps using Weld

Write some MBeans that expose monitoring and management for the Weld core, as well as an RHQ plugin to produce a nice GUI. For example

Conversation management -- stats
  • how may times was a lock requested and not given
  • how long are locks held for on average
  • active conversations
  • memory usage of conversations
  • how many conversations expire
  • contents
  • how many are actively ended
Session Context
  • memory usage
  • existing sessions
  • contents
App Context
  • mem usage
  • contents
Conversation management
  • configure conversation defaults (expiration/lock timeout)
  • CDI - interceptors/decorators/alternatives/beans in a deployment
  • what beans are installed and drill down into them (inc. ability to enter type and qualifiers and see what is resolved)

Proposing a project

If you are proposing a project, please remember that the project needs to have some element of research (into a previously unexplored area) - this can be looking at how two projects can work together, or looking at a new feature.