Chapter 1. Introduction

1.1. What is Seam?

This introduction will help you to understand what is Seam.

Seam is a fully featured application framework on top of Java EE
5. It is also one of the most popular enterprise Java frameworks today. Seam deeply
integrates many other standard-based or open source frameworks (e.g., JSF, EJB3, JMS,
Web Services, jBPM, JBoss Rules, Ajax4jsf, RichFaces, Facelets, Spring, iText, Quartz,
TestNG, etc.), and provides a single programming model for developers to
"drive" those underlying frameworks via simple annotated POJOs (Plain
Old Java Objects). It makes life easier for developers to tackle complex enterprise
applications with many component frameworks.

1.2. Key Features of JBoss Seam

For a start, we propose you to look through the table of main features of JBoss Seam:

Table 1.1. Key Functionality for JBoss Seam

Feature

Benefit

Chapter

Integrated JSF with EJB 3.0

JBoss Seam combines the component models of EJB3 and JSF, eliminating glue code, and thus, letting the developer think about the business problem.

Integrated AJAX

Developer can add AJAX capability to the user interface of his application without the need to write any JavaScript code as Seam supports JBoss RichFaces and ICEfaces - the best open source JSF-based AJAX solutions.

Bijection

Bijection allows auto-assembly of stateful components by the container. It even allows a component to safely and easily manipulate the value of a context variable, just by assigning it to an attribute of the component.

New Seam Project wizard

An easy step-by-step wizard to create a stand alone Seam Web Project with a form to create runtime and server instances in order to get started creating, running, and debugging J2EE (only) applications. You may also add JSF capabilities.

In this chapter we provide you with the necessary steps to start working with Seam Framework.

It is suggested that you use the specific Seam perspective that combines a number of different views and editors needed for work with resources concerned. For that select Window → Open Perspective → Other → Seam.

The Open Web Browser action is directly available in the Seam perspective.

Figure 2.1. Embedded Web Browser Button

2.1. Create standalone Seam Web Project

The best way to get started with Seam is to create a simple Seam Project and experiment with it.

Thus, you should select File → New → Other → Seam → Seam Web Project to run the New Seam Project wizard. The wizard form allows you to create runtime and server instances in order to get started creating, running, and debugging J2EE (only) applications.

Seam Web Project wizard has an option for selecting the actual Server (not just WTP runtime) that will be used for the project. This allows the wizard to identify correctly where the required datasource and driver libraries need to go.

Let's get through the wizard step-by-step. First, you should enter a name and a location directory for your new project.

Figure 2.2. New Seam Project Wizard

On the figure above you can see the runtime and the server already created.

If you need to create a new runtime, click on the New button in the Target Runtime section. It brings up the wizard where you can specify a new JBoss Server Runtime environment or the other type of runtime appropriate for your project configuration. Let's create one more JBoss Enterprise Application Platform 6.0 Runtime. Hence, after choosing it click on Next button.

Figure 2.3. Specifying Target Runtime

All what you need here is to name runtime, type the path to its install directory or locate it by using
Browse button, select a Java Runtime Environment, and select which configuration you want.

The next step is to define a Server by clicking on New button in the Target Server section. In appeared New Server dialog the last server which matches the runtime will be selected.

All declared runtimes are listed in the combobox under the servers view. Here, you can indicate a server runtime that you need. Click Add if you want to add a new Server Runtime.

Figure 2.5. Specifying Target Server

Next page allows you to verify the information for a chosen server. Leave everything as it is and click on Next.

Figure 2.6. JBoss Runtime Summary

On the last wizard step you can modify your projects to configure them on the Server.

Figure 2.7. Project Modification for Configuring on the Server

Once you have the Target Server defined click on Finish button to return to the first page of the New Seam Project wizard.

Note

Refer to the Application Server Manager Guide to find out more about runtimes and servers.

Figure 2.8. Completion of Runtime and Server Configuration

The last section on this wizard step is Configuration. Here, you can select one of the predefined project configurations either associated with Seam 1.2, Seam 2.0 or with Seam 2.1. Furthermore, you can create your own configuration by pressing the Modify button. It will open the dialog which allows to configure your own set of facets for adding extra functionality to your project.

Pass to the next section to find out more details on this dialog.

2.2. Selecting the Project Facets

The Project Facets wizard allows you to enable or disable specific facets which define necessary features for the project. When you switch to this wizard form, all critical facets are already checked for the chosen Configuration.

Notice that this page of the wizard also allows you to set the necessary version for any facet.

Figure 2.9. Project Facets Selection

Moreover, here you can specify your own preset of selected facets by checking needed ones in project facets window and clicking on the Save as button.

Figure 2.10. Specifying Custom Facet Preset

To see all available Server runtimes click on Runtimes tab on the left. You can create a new one using the New button. If more than one runtime is checked here, the Make Primary button will not be dimmed yet. Thus, you can make use of it to mark primary runtime.

Figure 2.11. Setting Runtime

Clicking the OK button will bring you to the Web Module wizard form again.

2.2.1. Seam project with JPA facets

For creating a Seam project with JPA support you need to select Java Persistent facet on Project Facets page and click OK.

Then press Next and you can use the default value on the Java application building page

After that you will see JPA facet page.

Figure 2.12. JPA Facet page

On this page you can choose Platform (vendor-specific JPA implementation) for your project, type of JPA Implementation, and configure the Connection to database in the Connection area.

The next page concerns Web Module Settings. Accept the default values and press the Next button.

On the next step you will see JSF Capabilities and Seam facet pages, which are mostly the same as in general Seam project.

2.3. Java application building configuration

With this wizard you can define Java source directories which will be generated on build path. Also you can specify a default output folder. If you are agree with default values, press Next

Figure 2.13. Java application building Wizard

2.4. How to Configure Web Module Settings

As we deal with a Dynamic Web Application, we should at first specify the top level directory of our application for deploying it to a server afterwards. This kind of application contains Web resources, so it is important to indicate the content directory. The wizard will put all those values itself, so you can leave everything as is.

Figure 2.14. Web Module Settings

Choose Next to switch to the next wizard form.

2.5. Adding JSF Capabilities

This wizard helps you to add JSF capabilities to your project.

Choose Library provided by Target Runtime from Library Type list if you'd like to use a default JSF implementation given by the present runtime.

Figure 2.15. Adding JSF Capabilities to Web Project

If you prefer to use your custom JSF implementation, choose User Library Item from Library Type list. In User Library list you can check required library.

Figure 2.16. Using Custom JSF implementation Library

If a new library is required, click Manage libraries... (
) button. Then you should click New.

Enter EJB project name and EAR project name in case of EAR radio button is checked.

Note

If you want to name your web project "MyProject-war" the EJB project should not be "MyProject-war-ejb", it should be "MyProject-ejb". The same for EAR and Test projects' names. They should be respectively "MyProject-ear" and "MyProject-test".

In the Code Generation section the wizard has already provided the names for your Session Bean, Entity Bean and Test packages generation (optional). Of course, you can change them on others of your choice.

Chapter 3. Maven Integration for Seam Projects

Maven integration is included by default, allowing you to create mavenized Seam projects and use Seam tools with imported Maven projects.

3.1. Creating Maven ready Seam project

Maven Integration makes the Seam Wizard capable of creating Maven ready projects to let Maven get the libraries instead of using the Seam runtime.

To create a mavenized Seam project you should perform the following steps:

Navigate to File → New → Other → Seam Web Project. Give the project a meaningful name, specify a target runtime and server and select the proper configuration for your Seam project:

Figure 3.1. Starting the Mavenized Seam Project

Click the Modify button to enable the Jboss Maven Integration facet:

Figure 3.2. Enabling the Jboss Maven Integration Facet

On the JBoss M2 capabilities page you'll be prompted to add the following maven properties: groupId, artifactId, version, packaging, name and description. Here it's possible to set a maven version of Seam and also decide whether to remove WTP classpath containers (where the path starts with org.eclipse.jst).

Figure 3.3. Adjusting JBoss M2 Capabilities

On the JSF Capabilities page you can choose Maven as libraries provider. This is possible when you use Seam version compatible Maven JSF Libraries as a type of JSF Implementing Library. Also it gives you capability to edit Dependencies and Exclusions for the mavenized Seam project directly from the wizard.

Figure 3.4. Using JSF Implementation libraries provided by Maven

On the Seam Facet page configure the Seam Facet settings and click Finish:

3.2. Existing Maven Projects Import

Maven Integration includes the Seam Maven configurator which is called when importing a project, changing pom.xml and/or calling Maven → Update Project Configuration. When importing a Maven Seam project, the Seam Maven configurator picks up the settings set up in pom.xml and adds to the project the following:

Seam nature

Seam facet and dependent facets to the EJB, EAR and WAR projects

JBoss Maven Integration facet if the Maven project contains a dependency with the org.jboss.seam groupId and an artifactId starting with 'jboss-seam'

other required facets (Web Module, Java, JSF, etc.)

If the Seam version from pom.xml matches a version of a Seam runtime configured in the workspace, Seam configurator will set that runtime, otherwise no Seam runtime will be set and you'll have to set it manually under Section 10.2, “Project Preferences”.

Seam configurator recognizes the Seam artifacts in the following way: the view folder is a web content folder from the WAR project, the source folder is the first Eclipse source folder. If there is a folder containing "hot" in the name, it will be chosen as the action source folder. Package is the first package that has children or doesn't have any subpackage.

Configuring the Seam when importing a Maven project as well as a Seam Runtime, Seam artifacts and some facets could be suspended in the JBoss Maven Integration preferences (Window → Preferences → JBoss Tools → JBoss Maven Integration).

Chapter 4. Directory Structure of the Generated Project

In this chapter we describe where the Seam wizard puts the generated files for both EAR and WAR deployments.

The Seam Project wizard generates projects like Eclipse WTP style in order to utilize Eclipse WTP features and to have a correct classpath. To be more precise it generates one project per artifact.

4.1. WAR Deployment

The project layout for WAR projects is:

Figure 4.1. Project Layout for WAR projects

A WAR project can only use Seam JavaBean and JPA Entity bean components; it cannot use EJB3 Session beans etc.

WAR projects are generated to enable Seam war hotdeploy feature. Classes put into src/action will be deployed to WEB-INF/dev from which Seam automatically will perform hotdeploy of new components.

Note:

Because of Eclipse WTP limits the hot deployed classes also existed in WEB-INF/classes, but since Seam gives WEB-INF/dev precedence it will work.

Furthermore the Seam Project wizard generates a test project that is setup to run directly against the proper libraries and server runtime libraries. You can run tests via Run As → TestNG Test.: Chapter 15, What is TestNG?.

In order to deploy WAR project on server, right-click on the project and select Run As → Run on Server. Studio will deploy WAR project into one web application on server to deploy folder.

4.2. EAR Deployment

The project layout for EAR projects is:

Figure 4.2. Project Layout for EAR projects

An EAR project can use the whole range of Seam components, including EJB3 Session beans.

In order to deploy EAR project on server, right-click on the project with -ear postfix and select Run As → Run on Server. Studio will take care about all modules and deploy EAR project into one enterprise application on server to deploy folder. EAR application keeps ejb and war modules of the EAR project.

Note:

The WAR generated for EARs is now configured to utilize Seam hot-deployment (WEB-INF/dev) similar to standalone WAR projects.

4.3. Changing the Seam Version

To upgrade or downgrade your projects Seam version use the facet preferences. You should right-click your project, open its Properties and choose Project Facets category. Next select Seam and change its version to needed one.

Figure 4.3. Changing the Seam Facet Version

After pressing Apply the wizard for adjusting new Seam runtime settings appears.

Figure 4.4. Changing the Seam Facet Version

If you need to update the libraries for you project, check the Update libraries option. All libraries you checked will be removed and the libraries from the new Seam distribution will be added after clicking Ok.

Figure 4.5. Changing the Seam Facet Version

Note:

The note "Seam configuration files and their XSDs won't be changed" is meant that the libraries, Seam facet and runtime version will be changed, but configuration files that refer to the old version will have to be manually updated.

4.4. Changing Seam Parent Project

To change the Seam parent project, navigate to your project preferences and select Seam Settings category on the left. Press the Browse button next to the Main Seam Project section to select the other Seam parent project.

Figure 4.6. Changing Seam Parent Project

4.5. Renaming the Projects and Folders

If you need to rename one of the Seam Project artifacts (<project_name>, <project_name>-ear, <project_name>-ejb or <project_name>-test) or any entire folder like <project_name>/WebContent, <project_name>/ejbModule, <project_name>-test/test-src, or project name in packages org.domain.<project_name>.session, org.domain.<project_name>.entity, you can do this by accessing the context menu and navigating to Refactor > Rename... or just pressing Shift + Alt + R under the chosen resource.

Figure 4.7. Renaming the folder

Use Refactor > Move... (or Shift + Alt + V), if you need to move <project_name>/WebContent folder, <project_name>/ejbModule folder or <project_name>/test-src folder in the other place within the Project structure.

5.2. Navigate Menu Actions

In the next sections we are going to describe Seam actions which can help you to easily navigate through the source code.

5.2.1. Find Seam References/Declarations

To find EL expressions both in .java and .xhtml files use Find Seam References and Declarations actions. For that, in the main menu bar click on Search → Find Seam References or Search → Find Seam Declarations.

Look at the description of the actions in the table below.

Table 5.2. Find Seam References/Declarations actions

Name

Function

Keyboard Shortcut

Find Seam References

Find Seam Declarations

Find all references and declarations to the selected element. It's available for EL expressions in both .java and .xhtml files. Differs from normal Eclipse Find References/Declarations by showing an EL or Seam references in the Search View.

Ctrl+G

Ctrl+Shift+G

also Ctrl + 1 for .java files

On the screenshot example below you could see that the search results are listed in the Search view.

Figure 5.1. Find Seam Declaration for "Identity"

You can also use Ctrl + 1 in .java files to activate the actions:

Figure 5.2. Find Seam References for "Identity"

5.2.2. Open Seam Component

To open Seam Components click on Navigate → Open Seam Component in the main menu bar. This dialog is also available from toolbar icon or with hot keys combination "Ctrl+Shift+Z ".

Figure 5.3. Open Seam Components icon

In the table below read a description about the dialog.

Table 5.3. Open Seam Components Dialog

Name

Function

Keyboard Shortcut

Open Seam Components

Brings up the Open Seam Component dialog to open a component in the editor. The Open Seam Component selection dialog shows all Seam components existing in the workspace. You can search the components via their short, imported or full name.

Ctrl+Shift+Z

Enter a name in the text field and see the results as it shown on screenshot:

Figure 5.4. Open Seam Components Dialog

You can also open Seam Component from the other component where the required one is declared in @In by using Section 8.4.3, “OpenOn” (Ctrl + left click and select Open Declaration of Seam Component for seam_component in Seam_class.java ).

Chapter 6. Seam Wizards

All the Seam component generations options known from Seam-gen are available as wizards (with sensible auto-defaulting) for creating various common Seam components:

Seam Action

Seam Form

Seam Entity

Seam Conversation

Go to File → New and select the component wizard.

Figure 6.1. Seam Component Wizards

The wizards create multiple resources and place it in the appropriate folders depending on your project structure (WAR or EAR).

Let's create a WAR project using the New Seam Project wizard.

Figure 6.2. Seam Project WAR Deployment

After the project is created you need deploy it on server.

6.1. New Seam Action

In this and following sections you can see example creating Seam Components.

To create a New Seam Action you should select a necessary project, type a name for Seam component, POJO class, Method, Page and select a Package using the Browse button.

Figure 6.3. New Seam Action Wizard

If you specify a class which already exists, the wizard will warn you about it.

Figure 6.4. Wizard Warning against Existing File

You can see the action page in WebContent folder. Click on it to open in JBoss Tools HTML Editor.

Figure 6.5. Action Page in JBoss Tools HTML Editor.

Note:

You don't need to restart the server to see how the action component works. Just use context menu Run As → Run On Server.

Action component was hot-deployed. Forms and Conversations will work the same way.

Figure 6.6. Action Component

Click on actionMethod in the internal browser and add a form in your project using the New Seam Form wizard File → New → Seam Form.

6.2. New Seam Form

Select a necessary project, type a name for Seam component, POJO class, Method, Page and select a Package using Browse button.

Figure 6.7. New Seam Form Wizard

If you specify a class which already exists, the wizard will warn you about it.

Figure 6.8. Wizard Warning against Existing File

The Form Page was created in WebContent folder.

Figure 6.9. Form Page in JBoss Tools HTML Editor.

Deploy the form on server. Right click on Form Page, select Run As → Run On Server.

Figure 6.10. Form Component

Form component was hot-deployed.

Enter some value in the text field (for example, value1) and click on formMethod.

6.3. New Seam Conversation

Add a conversation using the New Seam Conversation wizard File → New → Seam Form.

You should select a necessary project, type a name for Seam component, POJO class, Method, Page and select a Package using Browse button.

Figure 6.11. New Seam Conversation Wizard

If you specify a class which already exists, the wizard will warn you about it.

Figure 6.12. Wizard Warning against Existing File

Conversation page was created in WebContent folder.

Figure 6.13. Conversation Page in JBoss Tools HTML Editor.

Right click on Conversation page, select Run As → Run On Server.

Figure 6.14. Conversation Component

Conversation component was hot-deployed.

Click on Begin and Increment buttons to check the conversation functionality.

6.4. New Seam Entity

Entities cannot be hot-deployed, so we need to stop the server.

Create an Entity using the New Entity wizard File → New → Seam Entity.

You should select a necessary project, type a name for Entity class, select a Package using Browse button, type a name for Master Page and Page.

Figure 6.15. New Seam Entity Wizard

If you specify a class which already exists, the wizard will warn you about it.

Figure 6.16. Wizard Warning against Existing File

The Master Page and the Entity were created in WebContent folder.

Figure 6.17. Master Page in JBoss Tools HTML Editor.

The Entity page is:

Figure 6.18. Entity Page in JBoss Tools HTML Editor.

Run the Entity page on server. This is what you get:

Figure 6.19. Customer Page

Let's create two customers c1 and c2. Enter the name in the text field and press the Save button. Customer should be successfully created. Press Done. Do the same for c2 customer. The result should be:

Figure 6.20. Two Customers Are Created

Chapter 7. Seam Generate Entities

Generate Entities is available by navigating to File → New → Other → Seam → Seam Generate Entities

The wizard generates a set of CRUD Seam components and web pages based on existing tables in a database or on existing entities in your application.

Figure 7.1. Generate Seam Entities Wizard

By default, the generation mode is set to Reverse engineer from database. The reverse engineering from a database could be described in four steps:

The wizard gets in database, extracts the tables and their connections

On basis of this metainfomation the Entity classes are generated into org.domain.project.entity package

For the entities from step 2 the classes EntityList and EntityHome are generated into org.domain.project.session package

The xhtml pages are generated.

Note:

The entities are generated from a database based on the console configuration that is created automatically during a Seam project creation. (Read more about the console configuration in the Hibernate guides). The created console configuration is based on the connection profile set on the Section 2.6, “Configure Seam Facet Settings” while creating a project. Configured connection profile settings are hold in the generated hibernate-console.properties. To change the connection profile, double-click the console configuration. It could be found in the Hibernate Configurations view (Window → Show view → Other → Hibernate → Hibernate Configurations or just switch to the Hibernate perspective).

Checking the Use existing entities mode the wizard executes only 3 and 4 steps. It generates missing classes and xhtml pages.

8.2.3. Outline Support for Seam Pages Editor

The Diagram Navigation mode of Outline view gives a birds-view of the layout to allow quick navigation for large-scale applications.

Figure 8.4. Outline view: Diagram Navigation mode

The Tree mode shows a tree for every element in the pages.xml file. You can get a quick overview of the whole file. When selecting an element in the Outline view the related element is highlighted in the Graphical, Tree or Source page of Seam Pages Editor.

Figure 8.5. Outline view: Tree mode

8.3. Seam Components Editor

When editing components.xml a structured tree editor is available in addition to pure source editing. It has a graphical view (Tree tab) and source (Source tab).

Figure 8.6. component.xml Editor

Note:

You can view and edit components.xml and other xml files directly in the Project Explorer and Properties sheet without opening the components.xml editor.

Figure 8.7. component.xml Editor

8.4. Main Features of Seam Editors

In this chapter you will know what Seam Editors features are and how to work with them.

8.4.1. Content Assist

Content Assist (Ctrl + Space) is available when using EL expressions in the following file formats:

JSP

XHTML

XML

JAVA

Notice, the code completion for the Seam components shows the proposals marked with Seam icon.

Figure 8.8. Content Assist

Content Assist is also available for the "jsfc " attribute, it lets you select from a list of possible attribute values. Whereas, JSF components appear above all other components in the list.

Figure 8.9. Content Assist for the "jsfc" attribute

Note:

To get Code Assist available for an externally generated and imported project, don't forget to enable Seam features and configure Seam Settings in Section 10.2, “Project Preferences”.

8.4.1.1. Content Assist for components.xml

While you are editing a components.xml file you can make use of the Content Assist for inserting needed elements.

Figure 8.10. Content Assist in the component.xml Editor

The editor also makes code completion aware of methods/attributes for EntityQuery component.

Figure 8.11. Content Assist for EntityQuery Component

8.4.1.2. Content assist for @Named beans

To the nice code completion you can also use Content assist for all occurrences where @Named beans are used.

Figure 8.12. Content assist for @Named beans

8.4.2. Content Assist for Page Descriptors

Content Assist ( CA ) is available for Page Descriptors, .page.xml and page.xml files. Content Assist lets you easily compose a Page Descriptor file by suggesting elements and attributes. The suggestions are context dependent, which means that CA provides only the elements, attributes and in some cases values for the attributes, suitable in a particular place of your Page Descriptor.

Note

For more information on OpenOn, see the Visual Web Tools Reference Guide.

OpenOn in XHTML files

Using OpenOn in .xhtml files you can open:

components or properties resolved using an EL expression;

all actions described in pages.xml;

other .xhtml files that paths are specified in a current file;

image files that paths are set in the value property.The files will be opened in the default system graphical editor.

OpenOn in XML files

OpenOn is also supported in Page Descriptors (.page.xml and pages.xml). OpenOn allows you to navigate to Java beans as well as to view pages. You can Ctrl + left click on a bean or on view page file (for example, a XHTML file) to navigate to the file you clicked on.

Figure 8.14. OpenOn in .page.xml file

If you use Rule-based authorization with Drools in your Seam application you can apply OpenOn in components.xml to open the files containing rule definitions in the "rule-files" tag.

Figure 8.15. OpenOn in components.xml file

You can also use OpenOn to open jBPM components that are described in Seam component descriptor. Two places where it works are available:

inside <component> definition;

Figure 8.16. OpenOn in components.xml file

inside jbpm tags;

Figure 8.17. OpenOn in components.xml file

OpenOn in Java files

OpenOn is also supported in seam components where In annotation is presented. After pressing Ctrl + left click on the seam component specified in @In you will get the possibility to open the file where the component is declarated as well as all of the seam components where it is used in the next declarations:

@Out

@DataModel

@Role

@Roles

Figure 8.18. OpenOn in Seam Component

8.4.4. Seam Validation

Validation of various possible problematic definitions is implemented for Seam applications.

If an issue is found it will be shown in the standard Problems View.

Figure 8.19. Seam Validation

Note:

Please note, only files within source path and web content are validated, meaning temporary files or test files are not included.

In the preferences page for Seam Validator you can see and modify the validator behavior. Go to Window → Preferences → JBoss Tools → Web → Seam → Validator and select the severity level for the optional Seam Validator problem.

Figure 8.20. Seam Validator Preferences

On WTP projects validation are enabled by default and thus executed automatically, but on normal Java projects you will have to go and add the Validation builder of your project . It is available in the properties of your project under Validation.

Figure 8.21. Enabling the Validation Builder

The validations can be run manually by clicking Validate via the context menu on your project (folder or file inside your project) which will execute all the active WTP validations. Following to the project's preferences under Validation it's possible to enable/disable any validator.

Chapter 9. Seam Views

9.1. Seam Components View

The Seam Components view is available from Seam perspective. It provides a list of seam components found in a project.

Figure 9.1. Seam Components View

By right-clicking on a project and bringing up the context menu, you can create a new Seam project, action, conversation, form or entity. You can also generate entities from this menu and it is all able to be done from the Seam Components view.

Figure 9.2. Seam Components View

The Seam Components View can show a components default scope in two ways:

as labels on each component (click on the triangular symbol at the top of the Seam Components View page and select Scope Presentation → Label)

Figure 9.3. Label Scope Presentation of Seam Components

as a node per scope where the components are grouped under a node representing its default scope.

Figure 9.4. Node Scope Presentation of Seam Components

The Seam Packages can be presented in two ways:

Flat

Figure 9.5. Flat Presentation of Seam Packages

Hierarchical

Figure 9.6. Hierarchical Presentation of Seam Packages

The Seam Components view can be filtered by choosing Customize View.

Figure 9.7. Customize View

Select the Seam Components from Libraries under the Filters tab.
This will make the view ignore components defined in jars. This will hide the many built-in Seam components and leave only those that are actually defined in the project or have been actively configured via components.xml. Therefore, deselecting the filter will show you all available components.

Selecting the Seam Components from Referenced Projects will hide the components that depend on other projects.

Figure 9.8. Available Seam Component View Customizations

9.2. Project Explorer integration

If you don't like to have a view for every piece of information in Eclipse, the content of the Seam Components view is also available as a node in the built-in Project Explorer (not Package Explorer!) view in Eclipse.

10.1.1. Validator Preferences

On this page you can choose a severity level for the various Seam validator problems. For example, if you want to ignore the case when component name is duplicated expand the Components node and select Ignore next to Duplicate component name. After that you won't see the error.

Figure 10.3. Seam Validator Preference Page

In the upper right corner of the Seam Validator preferences page there is a Configure Project Specific Settings link. Clicking on it you get the form where you can choose a project for specific setting. Project specific configuration allows you to have different validator settings for each project. Check the Show only projects with project specific settings if you want to see the projects that have been already set. Click on Ok.

Figure 10.4. Project Specific Configuration

You get the validator properties page for chosen project. Check the Enable project specific settings to be able to change the settings.

Note:

You can open the same page by right clicking on the needed project in Package Explorer, then Properties → Seam Validator.

Figure 10.5. Validator Properties Page for Chosen Project

10.2. Project Preferences

Once Seam project is created you can modify its settings. Right click on Seam project in Project Explorer and select Properties → Seam Settings.

This project properties page allows you to have a flexible project layout. It means that you are not restricted with a specific project structure. You can use the Seam wizards (New Action, Form, Entity, etc.) on Maven, command line seam-gen or your own project structure.

Figure 10.6. Properties for Seam Project

Tip:

Also notice, you are not required to use the New Seam Project wizard to benefit from Seam artifact wizards. You can just enable Seam on your existing project by checking Seam Support and targeting to Seam Runtime, and then configure the folders as you want.

Figure 10.7. Properties for Seam Project when Seam runtime is not selected

Tip:

On the figure above fields for configuring Seam artifacts are unavailable because Seam Runtime is not selected.

In Seam Wizards (New Action, Form, Entity, Conversation, Generate Entities) you can get a quick access to project settings using the Settings link in the upper right corner of each wizard.

Figure 10.8. Quick Setting Link In Seam Wizards

10.3. Adding Custom Capabilities

JBoss Tools provides a possibility to add custom capabilities to any Seam project, i.e. add a support of additional frameworks built on top of JSF, such as

ADF

Facelets

JBoss Rich Faces (versions 3.1, 3.2, 3.3)

To enable it, you should call the context menu for a Seam project and select Configure → Add Custom Capabilities. Then check the needed modules and press Finish.

Figure 10.9. Custom Capabilities be added to Seam Project

The next page displays all the updates that have been made to the project.

Note:

Seam refactoring could be only performed in the file that is not marked as Read only in its properties.

Figure 11.1. Properties View for Java File

11.1. Using the Refactorinig Wizard

This wizard is opened always when the user clicks the Rename Seam Component,Rename Seam Context Variable or Rename command in any of the views/editors mentioned later in this chapter.

Figure 11.2. Refactoring Wizard

In the Seam Components name field you should enter a new name of the component, then click Next and follow the next wizard steps:

Figure 11.3. Navigating Between the Differences

As you see, when performing a refactoring operation, you can preview all of the changes resulting from a refactoring action before you choose to carry them out.

The view represents two windows: one with the original source code and the other with refactored one.

With the help of
,
,
,
buttons you can quickly navigate between the differences in the code. If you don't agree with some changes you can't undo them but you can remove the class from the list of classes that need refactoring.

Figure 11.4. List of classes that need refactoring

To apply the changes click Finish.

Renaming the selected seam component corrects all references to the component (also in other files in the project). Renaming a type doesn't allow to rename similarly named variables and methods.

11.2.1. Renaming Seam Components in the Java Editor

If you want to rename certain seam component using Java editor, first of all it's necessary to open it. If you don't know, where the seam component is declared, use Section 5.2.2, “Open Seam Component” icon.

To rename a Seam component in the Java editor it's necessary to select the component, left click the file and then select Seam Refactor → Rename Seam Component.

Figure 11.5. Opening Refactoring Wizard in Java Editor

11.2.2. Renaming Seam Components in the Seam Components View

To open the Refactoring wizard in the Seam Components view you should left click the component you want to open and choose Rename Seam Component option.

Figure 11.6. Opening Refactoring Wizard in Seam Components View

11.2.3. Renaming Seam Components in the Seam Components Editor

When you open components.xml file using JBoss Tools XML Editor, open the Refactoring wizard in the Tree tab by left-clicking the component in components area and choosing Rename option.

Chapter 13. Generate a CRUD Database Application

13.1. What is CRUD?

CRUD is an acronym for the four basic types of SQL commands: Create, Read, Update, Delete. Most applications have some kind of CRUD functionality, and we can assume that every programmer had to deal with CRUD at some point. A CRUD application is one that uses forms to get data into and out of a database.

In the next section we will create a Seam Web application, connect it to the HSQL database and add CRUD support.

13.2. How to create the CRUD Database Application with Seam

First, you should download the employee-hsqlb database, extract the employee-hsqldb.zip and start it by running ./runDBServer.sh or runDBServer.bat from the database directory.

Create a new Seam Web Project using New Seam Project wizard or main menu File → New → Seam Web Project.

Figure 13.1. Seam Web Project Creation

Name your project as crudapp, specify Target Runtime, Server and Seam Runtime configuration. Then press Next and follow the next wizard steps keeping default settings.

On Seam Facet page click New... next to the Connection profile section to create a new Connection profile.

Figure 13.3. Seam Facet page

On New Connection Profile dialog select the HSQLDB connection profile type, name it cruddb and click Next.

Figure 13.4. New JDBC Connection Profile

On the next page click the round icon next to the Drivers field to select a database driver.

Figure 13.5. New JDBC Connection Profile Database Driver

Now you should see the New Driver Definition dialog. On the first tab select the HSQLDB JBDC Driver. Underneath in the Driver name field you can change its name if you need.

Figure 13.6. Database Driver Type

You may notice the note on the previous figure. It prompts that you should specify the driver of the type you pointed. Set the location of the driver by selecting hsqldb.jar from the list and clicking the Edit JAR/ZIP button.

Figure 13.7. Driver Definition

On the Properties tab set the Connection URL to jdbc:hsqldb:hsql://localhost:1701, Database Name to employee and User ID to sa and click OK.

Figure 13.8. Driver Definitions Properties

After clicking OK to submit the newly created driver you can observe and if you need edit all specified connection details.

Figure 13.9. Driver and Connection Details

Now click Test Connection to be sure that connection can be established.

Figure 13.10. JDBC Connection is OK

Validate JDBC Connection profile settings and press Finish or Back if something is wrong.

Figure 13.11. Validate JDBC Connection settings

After clicking Finish two projects crudapp and crudapp-test will be created.

Figure 13.12. CRUDAPP Seam Project

You can expand the WebContent folder of the crudapp project in the Project Explorer and open home.xhtml or login.xhtml with JBoss Visual Editor.

Figure 13.13. login.xhtml in VPE

Switch to Database Development perspective with Window → Open Perspective → Other.

Connect to the cruddb database if not already connected to it.

Figure 13.14. Connecting to the CRUDDB database

Expand cruddb nodes to view its Schemas, Tables, Columns etc.

Figure 13.15. CRUDDB Database

Switch back to the Seam perspective. From the toolbar select New → Seam Generate Entities to create a set of CRUD Seam components and web pages based on existing tables in the database. On the first page of Generate Seam Entities wizard, select Reverse engineer from database click press Next.

Figure 13.16. Generate Seam Entities

Click Refresh to display all the tables from the database.

Figure 13.17. Dialog for Selecting Tables

Now you can filter the tables. Use the Include button to include those that are necessary and click Finish.

Figure 13.18. Selecting Tables

Under WebContent folder you can find all generated xhtml files:

Figure 13.19. Entities Web Pages

And under src folder java classes are created.

Figure 13.20. Entities Java Classes

Switch to Hibernate perspective with Window → Open Perspective → Other.... On Hibernate Configurations view expand the crudapp configuration. Right click on Customers and select Open Mapping Diagram from the popup menu.

Figure 13.21. Hibernate Configurations View

Observe the Mapping Diagram opened in the editor. Here you can see the relations between models and database tables. For better navigating on the diagram use the Outline view.

Figure 13.22. Mapping Diagram

For example, select Customers entity, right click and select Open Source File. This will open the Customers.java file in the java editor. You can also do this by right-clicking on the same entity on the Mapping Diagram.

Figure 13.23. Entity class from Mapping Diagram

So far, you are ready to deploy your application to JBoss Application Server. This is described in the next chapter.

Chapter 15. What is TestNG?

TestNG ("Testing, the Next Generation") is a Java unit testing framework that aims to overcome many limitations of JUnit. TestNG introduces some new functionalities that make it more powerful and easier to use, such as:

Supported by a variety of tools and plug-ins (Eclipse, IDEA, Maven, etc...)

Embeds BeanShell for further flexibility

Default JDK functions for runtime and logging (no dependencies)

Dependent methods for application server testing

15.1. How to use the generated Seam-test project to run Seam tests?

Create a new Seam Web Project with EAR deployment using the New Seam Project wizard.

After a project is created you will have the generated Seam-test project that is setup to run TestNG directly against the proper libraries and server runtime libraries.

Figure 15.1. Seam-test Project

Add Seam Action to your project via File → New → Seam Action.

Figure 15.2. Seam Action Creation

Fill out the wizard fields. New Seam Action wizard will create resources and place them in the appropriate folders dependent on EAR project structure.

Figure 15.3. New Seam Action Wizard

When Action is created you will see actionPage.xhtml in Package Explorer view. ActionBean.java will be automatically opened in Java Editor.

Figure 15.4. Created Action

Select ActionLocalTest.xml in Seam-test project and run the test with right click Run As → TestNG Suite.

Note

OpenOn is available in testNG XML files opened in JBoss XML Editor

Figure 15.5. Running TestNG

The test process will start and its output will be written in Console View.

Figure 15.6. Test is Finished

After running TestNG you will have the test results in test-output folder in Seam-test project (press F5 to refresh the Package Explorer view). Open index.html file with Web Browser or simply use the TestNG view.

The below view shows a successful run of the test.

Figure 15.7. Viewing the Test Results

You can see the test results in Web Browser.

Figure 15.8. Test Results in Browser

After clicking on ActionLocal Tests link you will see the Results for ActionLocal Tests.

Figure 15.9. Test Information

Select a result on the left-hand pane and its details will be displayed on the right-hand one.

Figure 15.10. ActionLocal Test Details

Thus with Seam tooling you can easily take advantage of TestNG framework. As you can see, it generates its own TestNG project as a separate module within which you can easily monitor the tests execution and their output.

16.1. How to get Code Assist for Seam specific resources in an externally generated project?

To get Code Assist for Seam specific resources in an externally generated project, you should enable Seam features in Project Preferences. Right click an imported project and navigate Properties → Seam Settings. Check Seam support box to enable all available Section 10.2, “Project Preferences”.

16.2. How to import an example Seam project from jboss-eap directory?

To import an example Seam project from jboss-eap into your working directory, you should perform the following steps:

Go to New → Other → Java Project from Existing Buildfile

Point to the build.xml of any chosen project by pressing Browse button

Hit Finish to open the project

As these seam examples are non WTP projects, next you should enable Seam support for them. To do that, right click the project and go to Properties → Seam Settings.

Important

Projects are not directly deployable unless they are in the correct state, such as an archive created through Project Archives. As an alternative, working examples are provided for Seam by navigating to Help → Project Examples → Seam

16.3. How to change the deploy folders for Seam source code from src/hot and src/main?

You should right-click the project, select Properties → Java Build Path, then switch to the Source tab, select the output folder for src/hot (src/main) and click Edit to change their output location.