Author: vrubezhny
Date: 2011-10-07 14:06:26 -0400 (Fri, 07 Oct 2011)
New Revision: 35473
Modified:
trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/web/validation/XHTMLValidator.java
trunk/jsf/tests/org.jboss.tools.jsf.test/src/org/jboss/tools/jsf/test/validation/XHTMLValidationTestMessages.java
trunk/jsf/tests/org.jboss.tools.jsf.test/src/org/jboss/tools/jsf/test/validation/XHTMLValidatorTest.java
trunk/jsf/tests/org.jboss.tools.jsf.test/src/org/jboss/tools/jsf/test/validation/messages.properties
Log:
JBIDE-9846 XHTML Syntax Validation goes into infinite loop in fillInStackTrace()
JBIDE-9828 NPE and ArrayIndexOutOfBoundsException occur in XHTML validator
Issues are fixed. JUnit Tests are created
Modified:
trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/web/validation/XHTMLValidator.java
===================================================================
---
trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/web/validation/XHTMLValidator.java 2011-10-07
17:50:35 UTC (rev 35472)
+++
trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/web/validation/XHTMLValidator.java 2011-10-07
18:06:26 UTC (rev 35473)
@@ -12,11 +12,26 @@
import java.io.IOException;
import java.io.InputStream;
+import java.io.StringReader;
+import java.net.HttpURLConnection;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLConnection;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.Stack;
+import org.apache.xerces.impl.Constants;
+import org.apache.xerces.impl.XMLErrorReporter;
+import org.apache.xerces.impl.msg.XMLMessageFormatter;
+import org.apache.xerces.util.MessageFormatter;
+import org.apache.xerces.xni.XMLResourceIdentifier;
+import org.apache.xerces.xni.XNIException;
+import org.apache.xerces.xni.parser.XMLEntityResolver;
+import org.apache.xerces.xni.parser.XMLInputSource;
+import org.apache.xerces.xni.parser.XMLParseException;
+import org.apache.xerces.xni.parser.XMLParserConfiguration;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
@@ -36,12 +51,16 @@
import org.jboss.tools.common.util.FileUtil;
import org.jboss.tools.jsf.JSFModelPlugin;
import org.xml.sax.Attributes;
+import org.xml.sax.InputSource;
import org.xml.sax.Locator;
import org.xml.sax.SAXException;
+import org.xml.sax.SAXNotRecognizedException;
+import org.xml.sax.SAXNotSupportedException;
import org.xml.sax.SAXParseException;
import org.xml.sax.XMLReader;
import org.xml.sax.ext.LexicalHandler;
import org.xml.sax.helpers.DefaultHandler;
+import org.xml.sax.helpers.LocatorImpl;
/**
*
@@ -59,21 +78,21 @@
IProgressMonitor monitor;
IResource resource;
- public boolean isXHTMLDoctype = false;
-
private String[] SAX_PARSER_FEATURES_TO_DISABLE = {
"http://xml.org/sax/features/namespaces",
"http://xml.org/sax/features/use-entity-resolver2",
"http://xml.org/sax/features/validation",
"http://apache.org/xml/features/validation/dynamic",
"http://apache.org/xml/features/validation/schema",
- "http://apache.org/xml/features/validation/schema-full-checking",
+ "http://apache.org/xml/features/validation/schema-full-checking",
"http://apache.org/xml/features/nonvalidating/load-external-dtd",
"http://apache.org/xml/features/nonvalidating/load-dtd-grammar",
"http://apache.org/xml/features/xinclude",
- "http://xml.org/sax/features/resolve-dtd-uris",
+ "http://xml.org/sax/features/resolve-dtd-uris"
+ };
+ private String[] SAX_PARSER_FEATURES_TO_ENABLE = {
"http://apache.org/xml/features/continue-after-fatal-error"
- };
+ };
private void setSAXParserFeatures(XMLReader reader, String[] features, boolean set) {
for (String feature : features) {
@@ -132,27 +151,48 @@
NestedValidatorContext context, ValidationResult result) {
displaySubtask(JSFValidationMessage.XHTML_VALIDATION, uri);
XMLValidationInfo report = new XMLValidationInfo(uri);
- XHTMLElementHandler handler = new XHTMLElementHandler(
+ XHTMLElementHandler handler = new XHTMLElementHandler(uri,
(resource instanceof IFile ? getDocument((IFile)resource) : null),
report);
- XMLReader xmlReader = new org.apache.xerces.parsers.SAXParser();
+
+ try {
+ if (!handler.isWellFormedXHTML()) {
+ SAXParseException ex = handler.getException();
+ if (ex != null) {
+ JSFModelPlugin.getDefault().logError(ex);
+ report.addError(ex.getLocalizedMessage(), ex.getLineNumber(), ex.getColumnNumber(),
uri);
+ }
+ return report;
+ }
+
+ XMLReader xmlReader = new MySAXParser();
- setSAXParserFeatures(xmlReader, SAX_PARSER_FEATURES_TO_DISABLE, false);
- setSAXParserProperty(xmlReader,
"http://xml.org/sax/properties/lexical-handler", handler);
- xmlReader.setContentHandler(handler);
- xmlReader.setDTDHandler(handler);
- xmlReader.setErrorHandler(handler);
- isXHTMLDoctype = false;
+ setSAXParserFeatures(xmlReader, SAX_PARSER_FEATURES_TO_DISABLE, false);
+ setSAXParserFeatures(xmlReader, SAX_PARSER_FEATURES_TO_ENABLE, true);
+ setSAXParserProperty(xmlReader,
"http://xml.org/sax/properties/lexical-handler", handler);
+
+
xmlReader.setProperty("http://apache.org/xml/properties/internal/ent...;,
new NullXMLEntityResolver());
- try {
+ xmlReader.setContentHandler(handler);
+ xmlReader.setDTDHandler(handler);
+ xmlReader.setErrorHandler(handler);
+ xmlReader.setEntityResolver(handler);
+
+ handler.setCurrentReader(xmlReader);
+
xmlReader.parse(uri);
} catch (IOException e) {
JSFModelPlugin.getDefault().logError(e);
report.addError(e.getLocalizedMessage(), 0, 0, uri);
+ } catch (SAXNotRecognizedException e) {
+ JSFModelPlugin.getDefault().logError(e);
+ } catch (SAXNotSupportedException e) {
+ JSFModelPlugin.getDefault().logError(e);
} catch (SAXException e) {
report.addError(e.getLocalizedMessage(), 0, 0, uri);
+ } catch (Throwable x) {
+ x.printStackTrace();
}
-
List<ElementLocation> locations = handler.getNonPairedOpenElements();
if (!locations.isEmpty()) {
for (ElementLocation location : locations) {
@@ -171,7 +211,7 @@
return report;
}
-
+
@Override
protected void addInfoToMessage(ValidationMessage validationMessage,
IMessage message) {
@@ -272,21 +312,45 @@
}
}
+ class NullXMLEntityResolver implements XMLEntityResolver {
+
+ public XMLInputSource resolveEntity(XMLResourceIdentifier rid)
+ throws XNIException, IOException {
+
+ return new XMLInputSource(rid.getPublicId(),
+ rid.getBaseSystemId()==null?rid.getLiteralSystemId():rid.getExpandedSystemId(),
+ rid.getBaseSystemId(), new StringReader(""), null);
+ }
+
+ }
+
class XHTMLElementHandler extends DefaultHandler implements LexicalHandler {
+ private String uri;
private Locator locator;
private IDocument document;
private XMLValidationInfo valinfo;
+ public boolean isXHTMLDoctype = false;
+ private boolean isWellFormed = false;
+ private XMLReader currentReader = null;
List<ElementLocation> elements = new ArrayList<ElementLocation>();
Stack<ElementLocation> nonPairedOpenElements = new
Stack<XHTMLValidator.ElementLocation>();
Stack<ElementLocation> nonPairedCloseElements = new
Stack<XHTMLValidator.ElementLocation>();
- public XHTMLElementHandler(IDocument document, XMLValidationInfo valinfo) {
+ public XHTMLElementHandler(String uri, IDocument document, XMLValidationInfo valinfo)
{
super();
+ this.uri = uri;
this.document = document;
this.valinfo = valinfo;
}
+ public void setCurrentReader (XMLReader reader) {
+ this.currentReader = reader;
+ }
+
+ public XMLReader getCurrentReader() {
+ return this.currentReader;
+ }
@Override
public void setDocumentLocator(Locator locator) {
this.locator = locator;
@@ -294,7 +358,7 @@
@Override
public void startElement(String uri, String localName, String qName, Attributes attrs)
throws SAXException {
- if (!isXHTMLDoctype)
+ if (!isWellFormed || !isXHTMLDoctype)
return;
int end = getCurrentLocation(), start = 0;
@@ -308,7 +372,7 @@
ElementLocation currentElementLocation = null;
@Override
public void endElement(String uri, String localName, String qName) throws SAXException
{
- if (!isXHTMLDoctype)
+ if (!isWellFormed || !isXHTMLDoctype)
return;
int end = getCurrentLocation(), start = 0;
@@ -354,10 +418,26 @@
return qName.toString();
}
+ @Override
+ public void fatalError(SAXParseException e) throws SAXException {
+ if (!isWellFormed) {
+ if (isNonWellFormedException(e, getCurrentReader() instanceof MySAXParser ?
((MySAXParser)getCurrentReader()).getConfiguration() : null)) {
+ super.fatalError(e);
+ }
+ }
+ // We do not need to throw any exceptions here in case of well-formed xhtml (opposite
to what super method does)!
+ }
+
+ @Override
+ public InputSource resolveEntity(String publicId, String systemId)
+ throws IOException, SAXException {
+ return new InputSource(new StringReader("")); //$NON-NLS-1$
+ }
+
List<ElementLocation> getNonPairedOpenElements() {
return nonPairedOpenElements;
}
-
+
List<ElementLocation> getNonPairedCloseElements() {
return nonPairedCloseElements;
}
@@ -365,7 +445,7 @@
private int getCurrentLocation() {
if (locator == null)
return 0;
-
+
int line = locator.getLineNumber() - 1;
int lineOffset = locator.getColumnNumber() - 1;
try {
@@ -411,12 +491,14 @@
@Override
public void startDTD(String name, String publicId, String systemId)
throws SAXException {
- valinfo.setGrammarEncountered(true);
- valinfo.setDTDEncountered(true);
- if (publicId != null && publicId.indexOf("W3C") != -1 &&
- publicId.indexOf("DTD") != -1 &&
publicId.indexOf("XHTML") != -1) {
- isXHTMLDoctype = true;
- }
+ if (!isWellFormed) {
+ valinfo.setGrammarEncountered(true);
+ valinfo.setDTDEncountered(true);
+ if (publicId != null && publicId.indexOf("W3C") != -1 &&
+ publicId.indexOf("DTD") != -1 &&
publicId.indexOf("XHTML") != -1) {
+ this.isXHTMLDoctype = true;
+ }
+ }
}
@Override
@@ -443,5 +525,293 @@
public void comment(char[] ch, int start, int length)
throws SAXException {
}
+
+ private SAXParseException exception = null;
+
+ SAXParseException getException() {
+ return exception;
+ }
+
+ public boolean isWellFormedXHTML() throws IOException, SAXException {
+ exception = null;
+ isXHTMLDoctype = false;
+ isWellFormed = false;
+
+ MySAXParser reader = new MySAXParser();
+ try {
+ setSAXParserFeatures(reader, SAX_PARSER_FEATURES_TO_DISABLE, false);
+ setSAXParserFeatures(reader, SAX_PARSER_FEATURES_TO_ENABLE, true); // Disabling this
feature
+ // due to prevent validation
+ // on non-well-formed xhtml files
+ setSAXParserProperty(reader,
"http://xml.org/sax/properties/lexical-handler", this);
+
reader.setProperty("http://apache.org/xml/properties/internal/entity...;,
new NullXMLEntityResolver());
+
+ reader.setContentHandler(this);
+ reader.setDTDHandler(this);
+ reader.setErrorHandler(this);
+ reader.setEntityResolver(this);
+
+ this.setCurrentReader(reader);
+
+ isXHTMLDoctype = false;
+ reader.parse(uri);
+ } catch (SAXParseException e) {
+ // We have to prevent further validation in case we've met the following
exception:
+ // "The markup in the document preceding the root element must be
well-formed"
+ // If the markup is not well-formed, not doing this may cause the validation to stuck
+ // in Throwable.fillInStackTrace() method (it may come into an infinite loop) for
some reason
+ //
+ if (isNonWellFormedException(e, reader.getConfiguration())) {
+ exception = e;
+ isXHTMLDoctype = false;
+ return false;
+ }
+ }
+ isWellFormed = true;
+ return this.isXHTMLDoctype;
+ }
+
+ private static final String MARKUP_NOT_RECOGNIZED_ERROR_MESSAGE_ID =
"MarkupNotRecognizedInProlog";
+ private static final String ERROR_REPORTER_PROPERTY = Constants.XERCES_PROPERTY_PREFIX
+ Constants.ERROR_REPORTER_PROPERTY;
+
+ private boolean isNonWellFormedException (SAXParseException e, XMLParserConfiguration
parserConfiguration) {
+ if (parserConfiguration == null) return true;
+
+ XMLErrorReporter errorReporter =
(XMLErrorReporter)parserConfiguration.getProperty(ERROR_REPORTER_PROPERTY);
+ if (errorReporter == null) return true;
+
+ MessageFormatter messageFormatter =
errorReporter.getMessageFormatter(XMLMessageFormatter.XML_DOMAIN);
+ String templateMessage = null;
+ if (messageFormatter != null) {
+ templateMessage =
messageFormatter.formatMessage(parserConfiguration.getLocale(),
MARKUP_NOT_RECOGNIZED_ERROR_MESSAGE_ID, null);
+ }
+ String message = e.getMessage() == null ? null : e.getMessage().toLowerCase();
+ if (templateMessage == null) {
+ return (message != null && message.contains(XMLMessageFormatter.XML_DOMAIN)
&&
+ message.contains("MarkupNotRecognizedInProlog"));
+ }
+
+ return (message != null && message.equals(templateMessage.toLowerCase()));
+ }
}
+
+ class FilteredInputStream extends InputStream {
+ InputStream base;
+
+ public FilteredInputStream(InputStream base) {
+ this.base = base;
+ }
+
+ @Override
+ public int read() throws IOException {
+ int ch = base.read();
+ return (ch == '&' ? ' ' : ch);
+ }
+
+ @Override
+ public int read(byte[] b) throws IOException {
+ return base.read(b);
+ }
+
+ @Override
+ public int read(byte[] b, int off, int len) throws IOException {
+ int length = base.read(b, off, len);
+ for (int i = 0; i < length; i++) {
+ if (b[i] == '&') b[i] = ' ';
+ }
+ return length;
+ }
+
+ @Override
+ public long skip(long n) throws IOException {
+ return base.skip(n);
+ }
+
+ @Override
+ public int available() throws IOException {
+ return base.available();
+ }
+
+ @Override
+ public void close() throws IOException {
+ base.close();
+ }
+
+ @Override
+ public synchronized void mark(int readlimit) {
+ base.mark(readlimit);
+ }
+
+ @Override
+ public synchronized void reset() throws IOException {
+ base.reset();
+ }
+
+ @Override
+ public boolean markSupported() {
+ return base.markSupported();
+ }
+ }
+
+ class MyXMLInputSource extends XMLInputSource {
+
+ public MyXMLInputSource(String publicId, String systemId,
+ String baseSystemId) {
+ super(publicId, systemId, baseSystemId);
+ }
+
+ @Override
+ public InputStream getByteStream() {
+ InputStream stream = null;
+ try {
+ URL location = new URL(getSystemId());
+ URLConnection connect = location.openConnection();
+ if (!(connect instanceof HttpURLConnection)) {
+ stream = new FilteredInputStream(connect.getInputStream());
+ }
+ } catch (MalformedURLException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ } catch (IOException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ return stream;
+ }
+ }
+
+ class MySAXParser extends org.apache.xerces.parsers.SAXParser {
+ public XMLParserConfiguration getConfiguration() {
+ return fConfiguration;
+ }
+
+
+
+ @Override
+ public void parse(String systemId) throws SAXException, IOException {
+ // parse document
+ XMLInputSource source = new MyXMLInputSource(null, systemId, null);
+ try {
+ parse(source);
+ }
+
+ // wrap XNI exceptions as SAX exceptions
+ catch (XMLParseException e) {
+ Exception ex = e.getException();
+ if (ex == null) {
+ // must be a parser exception; mine it for locator info and throw
+ // a SAXParseException
+ LocatorImpl locatorImpl = new LocatorImpl(){
+ public String getXMLVersion() {
+ return fVersion;
+ }
+ // since XMLParseExceptions know nothing about encoding,
+ // we cannot return anything meaningful in this context.
+ // We *could* consult the LocatorProxy, but the
+ // application can do this itself if it wishes to possibly
+ // be mislead.
+ public String getEncoding() {
+ return null;
+ }
+ };
+ locatorImpl.setPublicId(e.getPublicId());
+ locatorImpl.setSystemId(e.getExpandedSystemId());
+ locatorImpl.setLineNumber(e.getLineNumber());
+ locatorImpl.setColumnNumber(e.getColumnNumber());
+ throw new SAXParseException(e.getMessage(), locatorImpl);
+ }
+ if (ex instanceof SAXException) {
+ // why did we create an XMLParseException?
+ throw (SAXException)ex;
+ }
+ if (ex instanceof IOException) {
+ throw (IOException)ex;
+ }
+ throw new SAXException(ex);
+ }
+ catch (XNIException e) {
+ Exception ex = e.getException();
+ if (ex == null) {
+ throw new SAXException(e.getMessage());
+ }
+ if (ex instanceof SAXException) {
+ throw (SAXException)ex;
+ }
+ if (ex instanceof IOException) {
+ throw (IOException)ex;
+ }
+ throw new SAXException(ex);
+ }
+
+ }
+
+
+
+ @Override
+ public void parse(InputSource inputSource) throws SAXException,
+ IOException {
+ // parse document
+ try {
+ XMLInputSource xmlInputSource =
+ new XMLInputSource(inputSource.getPublicId(),
+ inputSource.getSystemId(),
+ null);
+ xmlInputSource.setByteStream(inputSource.getByteStream());
+ xmlInputSource.setCharacterStream(inputSource.getCharacterStream());
+ xmlInputSource.setEncoding(inputSource.getEncoding());
+ parse(xmlInputSource);
+ }
+
+ // wrap XNI exceptions as SAX exceptions
+ catch (XMLParseException e) {
+ Exception ex = e.getException();
+ if (ex == null) {
+ // must be a parser exception; mine it for locator info and throw
+ // a SAXParseException
+ LocatorImpl locatorImpl = new LocatorImpl() {
+ public String getXMLVersion() {
+ return fVersion;
+ }
+ // since XMLParseExceptions know nothing about encoding,
+ // we cannot return anything meaningful in this context.
+ // We *could* consult the LocatorProxy, but the
+ // application can do this itself if it wishes to possibly
+ // be mislead.
+ public String getEncoding() {
+ return null;
+ }
+ };
+ locatorImpl.setPublicId(e.getPublicId());
+ locatorImpl.setSystemId(e.getExpandedSystemId());
+ locatorImpl.setLineNumber(e.getLineNumber());
+ locatorImpl.setColumnNumber(e.getColumnNumber());
+ throw new SAXParseException(e.getMessage(), locatorImpl);
+ }
+ if (ex instanceof SAXException) {
+ // why did we create an XMLParseException?
+ throw (SAXException)ex;
+ }
+ if (ex instanceof IOException) {
+ throw (IOException)ex;
+ }
+ throw new SAXException(ex);
+ }
+ catch (XNIException e) {
+ Exception ex = e.getException();
+ if (ex == null) {
+ throw new SAXException(e.getMessage());
+ }
+ if (ex instanceof SAXException) {
+ throw (SAXException)ex;
+ }
+ if (ex instanceof IOException) {
+ throw (IOException)ex;
+ }
+ throw new SAXException(ex);
+ }
+ }
+
+
+ }
+
}
Modified:
trunk/jsf/tests/org.jboss.tools.jsf.test/src/org/jboss/tools/jsf/test/validation/XHTMLValidationTestMessages.java
===================================================================
---
trunk/jsf/tests/org.jboss.tools.jsf.test/src/org/jboss/tools/jsf/test/validation/XHTMLValidationTestMessages.java 2011-10-07
17:50:35 UTC (rev 35472)
+++
trunk/jsf/tests/org.jboss.tools.jsf.test/src/org/jboss/tools/jsf/test/validation/XHTMLValidationTestMessages.java 2011-10-07
18:06:26 UTC (rev 35473)
@@ -1,3 +1,13 @@
+/*******************************************************************************
+ * Copyright (c) 2009-2011 Red Hat, Inc.
+ * Distributed under license by Red Hat, Inc. All rights reserved.
+ * This program is made available under the terms of the
+ * Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at
http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Red Hat, Inc. - initial API and implementation
+ ******************************************************************************/
package org.jboss.tools.jsf.test.validation;
import org.eclipse.osgi.util.NLS;
@@ -6,12 +16,17 @@
private static final String BUNDLE_NAME =
"org.jboss.tools.jsf.test.validation.messages"; //$NON-NLS-1$
public static String XHTML_CONTENT_TEMPLATE;
+ public static String XHTML_BROKEN_CONTENT_TEMPLATE;
+ public static String XHTML_LARGE_CONTENT_TEMPLATE;
public static String XHTML_GOOD_PUBLIC_ID;
public static String XHTML_WRONG_PUBLIC_ID;
public static String XHTML_GOOD_URI;
public static String XHTML_WRONG_URI;
public static String XHTML_GOOD_TAGNAME;
public static String XHTML_WRONG_TAGNAME;
+ public static String XHTML_LARGE_GOOD_TAGNAME;
+ public static String XHTML_LARGE_WRONG_TAGNAME;
+ public static String XHTML_MARKUP_IS_BROKEN_ERROR;
static {
NLS.initializeMessages(BUNDLE_NAME, XHTMLValidationTestMessages.class);
Modified:
trunk/jsf/tests/org.jboss.tools.jsf.test/src/org/jboss/tools/jsf/test/validation/XHTMLValidatorTest.java
===================================================================
---
trunk/jsf/tests/org.jboss.tools.jsf.test/src/org/jboss/tools/jsf/test/validation/XHTMLValidatorTest.java 2011-10-07
17:50:35 UTC (rev 35472)
+++
trunk/jsf/tests/org.jboss.tools.jsf.test/src/org/jboss/tools/jsf/test/validation/XHTMLValidatorTest.java 2011-10-07
18:06:26 UTC (rev 35473)
@@ -1,3 +1,13 @@
+/*******************************************************************************
+ * Copyright (c) 2009-2011 Red Hat, Inc.
+ * Distributed under license by Red Hat, Inc. All rights reserved.
+ * This program is made available under the terms of the
+ * Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at
http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Red Hat, Inc. - initial API and implementation
+ ******************************************************************************/
package org.jboss.tools.jsf.test.validation;
import java.io.InputStream;
@@ -19,10 +29,15 @@
import org.jboss.tools.common.base.test.validation.TestUtil;
import org.jboss.tools.jsf.web.validation.JSFValidationMessage;
import org.jboss.tools.jsf.web.validation.XHTMLValidator;
-import org.jboss.tools.test.util.JobUtils;
import org.jboss.tools.test.util.ResourcesUtils;
import org.jboss.tools.tests.AbstractResourceMarkerTest;
+/**
+ * The JUnit test case for JBIDE-9828 and JBIDE-9846 issues
+ *
+ * @author Victor V. Rubezhny
+ *
+ */
public class XHTMLValidatorTest extends AbstractResourceMarkerTest {
protected static String PLUGIN_ID = "org.jboss.tools.jsf.test";
@@ -37,7 +52,15 @@
LOCALIZED_ERROR_MESSAGES.add(MessageFormat.format(JSFValidationMessage.XHTML_VALIDATION_NO_START_TAG,
XHTMLValidationTestMessages.XHTML_WRONG_TAGNAME));
}
-
+ protected static Set<String> LOCALIZED_LARGE_ERROR_MESSAGES = new
HashSet<String>();
+ static {
+ LOCALIZED_LARGE_ERROR_MESSAGES.add(MessageFormat.format(JSFValidationMessage.XHTML_VALIDATION_NO_END_TAG,
+ XHTMLValidationTestMessages.XHTML_LARGE_GOOD_TAGNAME));
+ LOCALIZED_LARGE_ERROR_MESSAGES.add(MessageFormat.format(JSFValidationMessage.XHTML_VALIDATION_NO_START_TAG,
+ XHTMLValidationTestMessages.XHTML_LARGE_WRONG_TAGNAME));
+ }
+ protected static String LOCALIZED_BROKEN_ERROR_MESSAGE =
XHTMLValidationTestMessages.XHTML_MARKUP_IS_BROKEN_ERROR;
+
// "Bad" file validation time should be not greater than "Good" file
validation time multiplied by 10
protected static final double NOT_BAD_DIFF_PERCENTAGE = 1000.0;
@@ -58,44 +81,33 @@
TestUtil._waitForValidation(project);
}
- /* (non-Javadoc)
- * @see junit.framework.TestCase#tearDown()
- */
- @Override
- protected void tearDown() throws Exception {
- boolean saveAutoBuild = ResourcesUtils.setBuildAutomatically(false);
- project.delete(true, true, null);
- JobUtils.waitForIdle();
- ResourcesUtils.setBuildAutomatically(saveAutoBuild);
- }
-
public void testWebContentValidation() throws CoreException {
XHTMLValidator validator = new XHTMLValidator();
ValidationState state = new ValidationState();
try {
- // Validate good file with no XHTML Syntax errors
+ // Validate file with good DOCTYPE declaration and no XHTML Syntax errors
IFile file = createTestFile(XHTMLValidationTestMessages.XHTML_CONTENT_TEMPLATE,
XHTMLValidationTestMessages.XHTML_GOOD_PUBLIC_ID,
XHTMLValidationTestMessages.XHTML_GOOD_URI,
XHTMLValidationTestMessages.XHTML_GOOD_TAGNAME,
XHTMLValidationTestMessages.XHTML_GOOD_TAGNAME);
long start = System.currentTimeMillis();
ValidationResult result = validator.validate(file, IResourceDelta.CHANGED, state, new
NullProgressMonitor());
long goodValidationTime = System.currentTimeMillis() - start;
- System.out.println("Good XHTML file with no XHTML Syntax errors validation time:
" + goodValidationTime + " ms");
- assertTrue("Good XHTML file with no XHTML Syntax errors validation takes too much
time (more than " + MAX_VALIDATION_TIME + " ms)", (goodValidationTime <
MAX_VALIDATION_TIME));
+ System.out.println("XHTML file with good DOCTYPE declaration and no XHTML Syntax
errors validation time: " + goodValidationTime + " ms");
+ assertTrue("XHTML file with good DOCTYPE declaration and no XHTML Syntax errors
validation takes too much time (more than " + MAX_VALIDATION_TIME + " ms)",
(goodValidationTime < MAX_VALIDATION_TIME));
assertNotNull("No validation result is returned", result);
assertNotNull("No validation result is returned",
result.getReporter(null));
List messages = result.getReporter(null).getMessages();
assertEquals("Wrong number of error messages reported", 0, messages == null
? 0 : messages.size());
- // Validate bad file with no XHTML Syntax errors
+ // Validate file with bad DOCTYPE declaration and no XHTML Syntax errors
file = createTestFile(XHTMLValidationTestMessages.XHTML_CONTENT_TEMPLATE,
XHTMLValidationTestMessages.XHTML_WRONG_PUBLIC_ID,
XHTMLValidationTestMessages.XHTML_WRONG_URI,
XHTMLValidationTestMessages.XHTML_GOOD_TAGNAME,
XHTMLValidationTestMessages.XHTML_GOOD_TAGNAME);
start = System.currentTimeMillis();
result = validator.validate(file, IResourceDelta.CHANGED, state, new
NullProgressMonitor());
long badValidationTime = System.currentTimeMillis() - start;
- System.out.println("Bad XHTML file with no XHTML Syntax errors validation time:
" + badValidationTime + " ms");
- assertTrue("Bad XHTML file with no XHTML Syntax errors validation takes too much
time (more than " + MAX_VALIDATION_TIME + " ms)", (badValidationTime <
MAX_VALIDATION_TIME));
+ System.out.println("XHTML file with bad DOCTYPE declaration and no XHTML Syntax
errors validation time: " + badValidationTime + " ms");
+ assertTrue("XHTML file with bad DOCTYPE declaration and no XHTML Syntax errors
validation takes too much time (more than " + MAX_VALIDATION_TIME + " ms)",
(badValidationTime < MAX_VALIDATION_TIME));
assertNotNull("No validation result is returned", result);
assertNotNull("No validation result is returned",
result.getReporter(null));
messages = result.getReporter(null).getMessages();
@@ -106,15 +118,15 @@
System.out.println("(With no errors) Validation time difference: " + diff +
"%");
assertTrue("Validation time difference between good and wrong content is greater
than " + NOT_BAD_DIFF_PERCENTAGE + "%", (diff <
NOT_BAD_DIFF_PERCENTAGE));
- // Validate good file with XHTML Syntax errors
+ // Validate file with good DOCTYPE declaration and XHTML Syntax errors
file = createTestFile(XHTMLValidationTestMessages.XHTML_CONTENT_TEMPLATE,
XHTMLValidationTestMessages.XHTML_GOOD_PUBLIC_ID,
XHTMLValidationTestMessages.XHTML_GOOD_URI,
XHTMLValidationTestMessages.XHTML_GOOD_TAGNAME,
XHTMLValidationTestMessages.XHTML_WRONG_TAGNAME);
start = System.currentTimeMillis();
result = validator.validate(file, IResourceDelta.CHANGED, state, new
NullProgressMonitor());
goodValidationTime = System.currentTimeMillis() - start;
- System.out.println("Good XHTML file with XHTML Syntax errors validation time:
" + goodValidationTime + " ms");
- assertTrue("Good XHTML file with XHTML Syntax errors validation takes too much
time (more than " + MAX_VALIDATION_TIME + " ms)", (goodValidationTime <
MAX_VALIDATION_TIME));
+ System.out.println("XHTML file with good DOCTYPE declaration and XHTML Syntax
errors validation time: " + goodValidationTime + " ms");
+ assertTrue("XHTML file with good DOCTYPE declaration and XHTML Syntax errors
validation takes too much time (more than " + MAX_VALIDATION_TIME + " ms)",
(goodValidationTime < MAX_VALIDATION_TIME));
assertNotNull("No validation result is returned", result);
assertNotNull("No validation result is returned",
result.getReporter(null));
messages = result.getReporter(null).getMessages();
@@ -125,15 +137,15 @@
assertTrue("Unexpected error message found: " + message.getText(),
LOCALIZED_ERROR_MESSAGES.contains(message.getText()));
}
- // Validate bad file with XHTML Syntax errors
+ // Validate file with bad DOCTYPE declaration and XHTML Syntax errors
file = createTestFile(XHTMLValidationTestMessages.XHTML_CONTENT_TEMPLATE,
XHTMLValidationTestMessages.XHTML_WRONG_PUBLIC_ID,
XHTMLValidationTestMessages.XHTML_WRONG_URI,
XHTMLValidationTestMessages.XHTML_GOOD_TAGNAME,
XHTMLValidationTestMessages.XHTML_WRONG_TAGNAME);
start = System.currentTimeMillis();
result = validator.validate(file, IResourceDelta.CHANGED, state, new
NullProgressMonitor());
badValidationTime = System.currentTimeMillis() - start;
- System.out.println("Bad XHTML file with XHTML Syntax errors validation time:
" + badValidationTime + " ms");
- assertTrue("Bad XHTML file with XHTML Syntax errors validation takes too much
time (more than " + MAX_VALIDATION_TIME + " ms)", (badValidationTime <
MAX_VALIDATION_TIME));
+ System.out.println("XHTML file with bad DOCTYPE declaration and XHTML Syntax
errors validation time: " + badValidationTime + " ms");
+ assertTrue("XHTML file with bad DOCTYPE declaration and XHTML Syntax errors
validation takes too much time (more than " + MAX_VALIDATION_TIME + " ms)",
(badValidationTime < MAX_VALIDATION_TIME));
assertNotNull("No validation result is returned", result);
assertNotNull("No validation result is returned",
result.getReporter(null));
messages = result.getReporter(null).getMessages();
@@ -151,7 +163,161 @@
removeTestFile();
}
}
+
+ public void testBrokenWebContentValidation() throws CoreException {
+ XHTMLValidator validator = new XHTMLValidator();
+ ValidationState state = new ValidationState();
+ try {
+ // Validate file with good DOCTYPE declaration and broken content
+ IFile file =
createBrokenTestFile(XHTMLValidationTestMessages.XHTML_BROKEN_CONTENT_TEMPLATE,
+ XHTMLValidationTestMessages.XHTML_GOOD_PUBLIC_ID,
XHTMLValidationTestMessages.XHTML_GOOD_URI);
+ long start = System.currentTimeMillis();
+ ValidationResult result = validator.validate(file, IResourceDelta.CHANGED, state, new
NullProgressMonitor());
+ long goodValidationTime = System.currentTimeMillis() - start;
+ System.out.println("XHTML file with good DOCTYPE declaration and broken content
validation time: " + goodValidationTime + " ms");
+ assertTrue("XHTML file with good DOCTYPE declaration and broken content
validation takes too much time (more than " + MAX_VALIDATION_TIME + " ms)",
(goodValidationTime < MAX_VALIDATION_TIME));
+ assertNotNull("No validation result is returned", result);
+ assertNotNull("No validation result is returned",
result.getReporter(null));
+ List messages = result.getReporter(null).getMessages();
+ assertEquals("Wrong number of error messages reported", 1, messages == null
? 0 : messages.size());
+ for (Object m : messages) {
+ assertTrue("Wrong type of validation message is returned", (m instanceof
Message));
+ Message message = (Message)m;
+// System.out.println("Error Message: " + message.getText());
+ assertTrue("Unexpected error message found: " + message.getText(),
LOCALIZED_BROKEN_ERROR_MESSAGE.contains(message.getText()));
+ }
+
+ // Validate file with DOCTYPE declaration and broken content
+ file = createBrokenTestFile(XHTMLValidationTestMessages.XHTML_BROKEN_CONTENT_TEMPLATE,
+ XHTMLValidationTestMessages.XHTML_WRONG_PUBLIC_ID,
XHTMLValidationTestMessages.XHTML_WRONG_URI);
+ start = System.currentTimeMillis();
+ result = validator.validate(file, IResourceDelta.CHANGED, state, new
NullProgressMonitor());
+ long badValidationTime = System.currentTimeMillis() - start;
+ System.out.println("XHTML file with bad DOCTYPE declaration and broken content
validation time: " + badValidationTime + " ms");
+ assertTrue("XHTML file with bad DOCTYPE declaration and broken content validation
takes too much time (more than " + MAX_VALIDATION_TIME + " ms)",
(badValidationTime < MAX_VALIDATION_TIME));
+ assertNotNull("No validation result is returned", result);
+ assertNotNull("No validation result is returned",
result.getReporter(null));
+ messages = result.getReporter(null).getMessages();
+ assertEquals("Wrong number of error messages reported", 1, messages == null
? 0 : messages.size());
+ for (Object m : messages) {
+ assertTrue("Wrong type of validation message is returned", (m instanceof
Message));
+ Message message = (Message)m;
+// System.out.println("Error Message: " + message.getText());
+ assertTrue("Unexpected error message found: " + message.getText(),
LOCALIZED_BROKEN_ERROR_MESSAGE.contains(message.getText()));
+ }
+ // Check that the difference between good and bad files validation time is not greater
that NOT_BAD_DIFF_PERCENTAGE (%) of a good value
+ double diff = 100*badValidationTime/goodValidationTime;
+ System.out.println("(With broken content) Validation time difference: " +
diff + "%");
+ assertTrue("Validation time difference between good and wrong DOCTYPE declaration
is greater than " + NOT_BAD_DIFF_PERCENTAGE + "%", (diff <
NOT_BAD_DIFF_PERCENTAGE));
+ } finally {
+ removeTestFile();
+ }
+ }
+
+ public void testLargeWebContentValidation() throws CoreException {
+ XHTMLValidator validator = new XHTMLValidator();
+ ValidationState state = new ValidationState();
+ try {
+ // Validate file with good DOCTYPE declaration and no XHTML Syntax errors
+ IFile file = createTestFile(XHTMLValidationTestMessages.XHTML_LARGE_CONTENT_TEMPLATE,
+ XHTMLValidationTestMessages.XHTML_GOOD_PUBLIC_ID,
XHTMLValidationTestMessages.XHTML_GOOD_URI,
+ XHTMLValidationTestMessages.XHTML_LARGE_GOOD_TAGNAME,
XHTMLValidationTestMessages.XHTML_LARGE_GOOD_TAGNAME);
+ long start = System.currentTimeMillis();
+ ValidationResult result = validator.validate(file, IResourceDelta.CHANGED, state, new
NullProgressMonitor());
+ long goodValidationTime = System.currentTimeMillis() - start;
+ System.out.println("Large XHTML file with good DOCTYPE declaration and no XHTML
Syntax errors validation time: " + goodValidationTime + " ms");
+ assertTrue("Large XHTML file with good DOCTYPE declaration and no XHTML Syntax
errors validation takes too much time (more than " + MAX_VALIDATION_TIME + "
ms)", (goodValidationTime < MAX_VALIDATION_TIME));
+ assertNotNull("No validation result is returned", result);
+ assertNotNull("No validation result is returned",
result.getReporter(null));
+ List messages = result.getReporter(null).getMessages();
+ assertEquals("Wrong number of error messages reported", 0, messages == null
? 0 : messages.size());
+
+ // Validate file with bad DOCTYPE declaration and no XHTML Syntax errors
+ file = createTestFile(XHTMLValidationTestMessages.XHTML_LARGE_CONTENT_TEMPLATE,
+ XHTMLValidationTestMessages.XHTML_WRONG_PUBLIC_ID,
XHTMLValidationTestMessages.XHTML_WRONG_URI,
+ XHTMLValidationTestMessages.XHTML_LARGE_GOOD_TAGNAME,
XHTMLValidationTestMessages.XHTML_LARGE_GOOD_TAGNAME);
+ start = System.currentTimeMillis();
+ result = validator.validate(file, IResourceDelta.CHANGED, state, new
NullProgressMonitor());
+ long badValidationTime = System.currentTimeMillis() - start;
+ System.out.println("Large XHTML file with bad DOCTYPE declaration and no XHTML
Syntax errors validation time: " + badValidationTime + " ms");
+ assertTrue("Large XHTML file with bad DOCTYPE declaration and no XHTML Syntax
errors validation takes too much time (more than " + MAX_VALIDATION_TIME + "
ms)", (badValidationTime < MAX_VALIDATION_TIME));
+ assertNotNull("No validation result is returned", result);
+ assertNotNull("No validation result is returned",
result.getReporter(null));
+ messages = result.getReporter(null).getMessages();
+ assertEquals("Wrong number of error messages reported", 0, messages == null
? 0 : messages.size());
+
+ // Check that the difference between good and bad files validation time is not greater
that NOT_BAD_DIFF_PERCENTAGE (%) of a good value
+ double diff = 100*badValidationTime/goodValidationTime;
+ System.out.println("(Large With no errors) Validation time difference: " +
diff + "%");
+ assertTrue("Validation time difference between good and wrong content is greater
than " + NOT_BAD_DIFF_PERCENTAGE + "%", (diff <
NOT_BAD_DIFF_PERCENTAGE));
+
+ // Validate file with good DOCTYPE declaration and XHTML Syntax errors
+ file = createTestFile(XHTMLValidationTestMessages.XHTML_LARGE_CONTENT_TEMPLATE,
+ XHTMLValidationTestMessages.XHTML_GOOD_PUBLIC_ID,
XHTMLValidationTestMessages.XHTML_GOOD_URI,
+ XHTMLValidationTestMessages.XHTML_LARGE_GOOD_TAGNAME,
XHTMLValidationTestMessages.XHTML_LARGE_WRONG_TAGNAME);
+ start = System.currentTimeMillis();
+ result = validator.validate(file, IResourceDelta.CHANGED, state, new
NullProgressMonitor());
+ goodValidationTime = System.currentTimeMillis() - start;
+ System.out.println("Large XHTML file with good DOCTYPE declaration and XHTML
Syntax errors validation time: " + goodValidationTime + " ms");
+ assertTrue("Large XHTML file with good DOCTYPE declaration and XHTML Syntax
errors validation takes too much time (more than " + MAX_VALIDATION_TIME + "
ms)", (goodValidationTime < MAX_VALIDATION_TIME));
+ assertNotNull("No validation result is returned", result);
+ assertNotNull("No validation result is returned",
result.getReporter(null));
+ messages = result.getReporter(null).getMessages();
+ assertEquals("Wrong number of error messages reported", 180, messages ==
null ? 0 : messages.size());
+ for (Object m : messages) {
+ assertTrue("Wrong type of validation message is returned", (m instanceof
Message));
+ Message message = (Message)m;
+// System.out.println("Error Message: " + message.getText());
+ assertTrue("Unexpected error message found: " + message.getText(),
LOCALIZED_LARGE_ERROR_MESSAGES.contains(message.getText()));
+ }
+
+ // Validate file with bad DOCTYPE declaration and XHTML Syntax errors
+ file = createTestFile(XHTMLValidationTestMessages.XHTML_LARGE_CONTENT_TEMPLATE,
+ XHTMLValidationTestMessages.XHTML_WRONG_PUBLIC_ID,
XHTMLValidationTestMessages.XHTML_WRONG_URI,
+ XHTMLValidationTestMessages.XHTML_LARGE_GOOD_TAGNAME,
XHTMLValidationTestMessages.XHTML_LARGE_WRONG_TAGNAME);
+ start = System.currentTimeMillis();
+ result = validator.validate(file, IResourceDelta.CHANGED, state, new
NullProgressMonitor());
+ badValidationTime = System.currentTimeMillis() - start;
+ System.out.println("Large XHTML file with bad DOCTYPE declaration and XHTML
Syntax errors validation time: " + badValidationTime + " ms");
+ assertTrue("Large XHTML file with bad DOCTYPE declaration and XHTML Syntax errors
validation takes too much time (more than " + MAX_VALIDATION_TIME + " ms)",
(badValidationTime < MAX_VALIDATION_TIME));
+ assertNotNull("No validation result is returned", result);
+ assertNotNull("No validation result is returned",
result.getReporter(null));
+ messages = result.getReporter(null).getMessages();
+ assertEquals("Wrong number of error messages reported", 180, messages ==
null ? 0 : messages.size());
+ for (Object m : messages) {
+ assertTrue("Wrong type of validation message is returned", (m instanceof
Message));
+ Message message = (Message)m;
+// System.out.println("Error Message: " + message.getText());
+ assertTrue("Unexpected error message found: " + message.getText(),
LOCALIZED_LARGE_ERROR_MESSAGES.contains(message.getText()));
+ }
+ // Check that the difference between good and bad files validation time is not greater
that NOT_BAD_DIFF_PERCENTAGE (%) of a good value
+ diff = 100*badValidationTime/goodValidationTime;
+ System.out.println("(Large With errors) Validation time difference: " + diff
+ "%");
+ assertTrue("Validation time difference between good and wrong content is greater
than " + NOT_BAD_DIFF_PERCENTAGE + "%", (diff <
NOT_BAD_DIFF_PERCENTAGE));
+ } finally {
+ removeTestFile();
+ }
+ }
+
+ public void testBrokenEntityWebContentValidation() throws CoreException {
+ XHTMLValidator validator = new XHTMLValidator();
+ ValidationState state = new ValidationState();
+ try {
+ // Validate file with good DOCTYPE declaration and no XHTML Syntax errors
+ IFile file = createTestFile(XHTMLValidationTestMessages.XHTML_LARGE_CONTENT_TEMPLATE,
+ XHTMLValidationTestMessages.XHTML_GOOD_PUBLIC_ID,
XHTMLValidationTestMessages.XHTML_GOOD_URI,
+ XHTMLValidationTestMessages.XHTML_LARGE_GOOD_TAGNAME,
XHTMLValidationTestMessages.XHTML_LARGE_GOOD_TAGNAME);
+ ValidationResult result = validator.validate(file, IResourceDelta.CHANGED, state, new
NullProgressMonitor());
+ } catch (NullPointerException e) {
+ fail("Validation on XHTML file with a 'broken' entity has failed with
NullPointerException: " + e.getLocalizedMessage());
+ } catch (ArrayIndexOutOfBoundsException e) {
+ fail("Validation on XHTML file with a 'broken' entity has failed with
ArrayIndexOutOfBoundsException: " + e.getLocalizedMessage());
+ } finally {
+ removeTestFile();
+ }
+ }
+
private IFile createTestFile(String template, String publicId, String uri, String
openingTagName, String closingTagName) {
IFile testFile = project.getFile(FILE_NAME);
String content = MessageFormat.format(template, publicId, uri, openingTagName,
closingTagName);
@@ -167,7 +333,24 @@
}
return testFile;
}
+
+ private IFile createBrokenTestFile(String template, String publicId, String uri) {
+ IFile testFile = project.getFile(FILE_NAME);
+ String content = MessageFormat.format(template, publicId, uri);
+ InputStream source = new StringBufferInputStream(content);
+ try {
+ if (testFile.exists()) {
+ testFile.setContents(source, true, false, new NullProgressMonitor());
+ } else {
+ testFile.create(source, true, new NullProgressMonitor());
+ }
+ } catch (CoreException e) {
+ fail(e.getLocalizedMessage());
+ }
+ return testFile;
+ }
+
private void removeTestFile() {
IFile testFile = project.getFile(FILE_NAME);
if (testFile.exists()) {
Modified:
trunk/jsf/tests/org.jboss.tools.jsf.test/src/org/jboss/tools/jsf/test/validation/messages.properties
===================================================================
---
trunk/jsf/tests/org.jboss.tools.jsf.test/src/org/jboss/tools/jsf/test/validation/messages.properties 2011-10-07
17:50:35 UTC (rev 35472)
+++
trunk/jsf/tests/org.jboss.tools.jsf.test/src/org/jboss/tools/jsf/test/validation/messages.properties 2011-10-07
18:06:26 UTC (rev 35473)
@@ -4,9 +4,2339 @@
<{2} name=""> \
</{3}> \
</ui:composition>
+XHTML_BROKEN_CONTENT_TEMPLATE=<!DOCTYPE composition PUBLIC "{0}"
"{1}"> \
+</
XHTML_GOOD_PUBLIC_ID=-//W3C//DTD XHTML 1.0 Transitional//EN
XHTML_WRONG_PUBLIC_ID=-//W3C//DTD XHTMLs 1.0 Transitional//EN
XHTML_GOOD_URI=http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd
XHTML_WRONG_URI=http://hans-moleman.w3.org/TR/xhtml1/DTD/xhtml1-transitio...
XHTML_GOOD_TAGNAME=ui:define
-XHTML_WRONG_TAGNAME=enifed:iu
\ No newline at end of file
+XHTML_WRONG_TAGNAME=enifed:iu
+XHTML_LARGE_GOOD_TAGNAME=rich:panel
+XHTML_LARGE_WRONG_TAGNAME=lenep:hcir
+XHTML_MARKUP_IS_BROKEN_ERROR=The markup in the document preceding the root element must
be well-formed.
+XHTML_LARGE_CONTENT_TEMPLATE=<!DOCTYPE composition PUBLIC "{0}"
"{1}"> \
+<ui:composition
xmlns="http://www.w3.org/1999/xhtml" \
+
xmlns:s="http://jboss.com/products/seam/taglib" \
+
xmlns:ui="http://java.sun.com/jsf/facelets" \
+
xmlns:f="http://java.sun.com/jsf/core" \
+
xmlns:h="http://java.sun.com/jsf/html" \
+
xmlns:rich="http://richfaces.org/rich"
template="layout/template.xhtml"> \
+ <ui:define name="body"> \
+ <h1>Welcome to Seam!</h1> \
+ <{2}> \
+ <h:panelGrid columns="2" \
+ border="" \
+ bgcolor=""> \
+ <h:graphicImage value="/img/seamlogo.png" alt="Seam logo &
copyright" /> \
+ <s:div styleClass="info"> \
+ <p><strong>Your seam-gen project is deployed!</strong> Here are \
+ some of the features this project provides:</p> \
+ <ul class="bullets"> \
+ <li>Ant build script</li> \
+ <li>Deployment to JBoss AS (EAR or WAR)</li> \
+ <li>Development & production profiles</li> \
+ <li>Integration testing using TestNG & Embedded JBoss</li> \
+ <li>JavaBean or EJB 3.0 Seam components</li> \
+ <li>JPA entity classes</li> \
+ <li>A configurable DataSource & JPA EntityManager</li> \
+ <li>Templated Facelets views</li> \
+ <li>RichFaces panels & tables</li> \
+ <li>Default CSS stylesheet</li> \
+ <li>Internationalization support</li> \
+ </ul> \
+ </s:div> \
+ </h:panelGrid> \
+ </{3}> \
+ <{2}> \
+ <h:panelGrid columns="2" \
+ border="" \
+ bgcolor=""> \
+ <h:graphicImage value="/img/seamlogo.png" alt="Seam logo &
copyright" /> \
+ <s:div styleClass="info"> \
+ <p><strong>Your seam-gen project is deployed!</strong> Here are \
+ some of the features this project provides:</p> \
+ <ul class="bullets"> \
+ <{2}> \
+ <h:panelGrid columns="2" \
+ border="" \
+ bgcolor=""> \
+ <h:graphicImage value="/img/seamlogo.png" alt="Seam logo &
copyright" /> \
+ <s:div styleClass="info"> \
+ <{2}> \
+ <h:panelGrid columns="2" \
+ border="" \
+ bgcolor=""> \
+ <h:graphicImage value="/img/seamlogo.png" alt="Seam logo
& copyright" /> \
+ <s:div styleClass="info"> \
+ <{2}> \
+ <h:panelGrid columns="2" \
+ border="" \
+ bgcolor=""> \
+ <h:graphicImage value="/img/seamlogo.png" alt="Seam logo
& copyright" /> \
+ <s:div styleClass="info"> \
+ <p><strong>Your seam-gen project is \
+ deployed!</strong> Here are some of the features this project \
+ provides:</p> \
+ <ul class="bullets"> \
+ <li>Ant build script</li> \
+ <li>Deployment to JBoss AS (EAR or WAR)</li> \
+ <li>Development & production profiles</li> \
+ <li>Integration testing using TestNG & Embedded \
+ JBoss</li> \
+ <li>JavaBean or EJB 3.0 Seam components</li> \
+ <li>JPA entity classes</li> \
+ <li>A configurable DataSource & JPA EntityManager</li> \
+ <li>Templated Facelets views</li> \
+ <li>RichFaces panels & tables</li> \
+ <li>Default CSS stylesheet</li> \
+ <li>Internationalization support</li> \
+ </ul> \
+ </s:div> \
+ </h:panelGrid> \
+ </{3}> \
+ <p><strong>Your seam-gen project is deployed!</strong> \
+ Here are some of the features this project provides:</p> \
+ <ul class="bullets"> \
+ <li>Ant build script</li> \
+ <li>Deployment to JBoss AS (EAR or WAR)</li> \
+ <li>Development & production profiles</li> \
+ <li>Integration testing using TestNG & Embedded \
+ JBoss</li> \
+ <li>JavaBean or EJB 3.0 Seam components</li> \
+ <li>JPA entity classes</li> \
+ <li>A configurable DataSource & JPA EntityManager</li> \
+ <li>Templated Facelets views</li> \
+ <li>RichFaces panels & tables</li> \
+ <li>Default CSS stylesheet</li> \
+ <li>Internationalization support</li> \
+ </ul> \
+ </s:div> \
+ </h:panelGrid> \
+ </{3}> \
+ <p><strong>Your seam-gen project is deployed!</strong> Here \
+ are some of the features this project provides:</p> \
+ <ul class="bullets"> \
+ <li>Ant build script</li> \
+ <li>Deployment to JBoss AS (EAR or WAR)</li> \
+ <li>Development & production profiles</li> \
+ <li>Integration testing using TestNG & Embedded JBoss</li> \
+ <li>JavaBean or EJB 3.0 Seam components</li> \
+ <li>JPA entity classes</li> \
+ <li>A configurable DataSource & JPA EntityManager</li> \
+ <li>Templated Facelets views</li> \
+ <li>RichFaces panels & tables</li> \
+ <li>Default CSS stylesheet</li> \
+ <li>Internationalization support</li> \
+ </ul> \
+ </s:div> \
+ </h:panelGrid> \
+ </{3}> \
+ <li>Ant build script</li> \
+ <li>Deployment to JBoss AS (EAR or WAR)</li> \
+ <li>Development & production profiles</li> \
+ <li>Integration testing using TestNG & Embedded JBoss</li> \
+ <li>JavaBean or EJB 3.0 Seam components</li> \
+ <li>JPA entity classes</li> \
+ <li>A configurable DataSource & JPA EntityManager</li> \
+ <li>Templated Facelets views</li> \
+ <li>RichFaces panels & tables</li> \
+ <li>Default CSS stylesheet</li> \
+ <li>Internationalization support</li> \
+ </ul> \
+ </s:div> \
+ </h:panelGrid> \
+ </{3}> \
+ <{2}> \
+ <h:panelGrid columns="2" \
+ border="" \
+ bgcolor=""> \
+ <h:graphicImage value="/img/seamlogo.png" alt="Seam logo &
copyright" /> \
+ <s:div styleClass="info"> \
+ <p><strong>Your seam-gen project is deployed!</strong> Here are \
+ some of the features this project provides:</p> \
+ <ul class="bullets"> \
+ <li>Ant build script</li> \
+ <li>Deployment to JBoss AS (EAR or WAR)</li> \
+ <li>Development & production profiles</li> \
+ <li>Integration testing using TestNG & Embedded JBoss</li> \
+ <li>JavaBean or EJB 3.0 Seam components</li> \
+ <li>JPA entity classes</li> \
+ <li>A configurable DataSource & JPA EntityManager</li> \
+ <li>Templated Facelets views</li> \
+ <li>RichFaces panels & tables</li> \
+ <li>Default CSS stylesheet</li> \
+ <li>Internationalization support</li> \
+ </ul> \
+ </s:div> \
+ </h:panelGrid> \
+ </{3}> \
+ <{2}> \
+ <h:panelGrid columns="2" \
+ border="" \
+ bgcolor=""> \
+ <h:graphicImage value="/img/seamlogo.png" alt="Seam logo &
copyright" /> \
+ <s:div styleClass="info"> \
+ <p><strong>Your seam-gen project is deployed!</strong> Here are \
+ some of the features this project provides:</p> \
+ <ul class="bullets"> \
+ <{2}> \
+ <h:panelGrid columns="2" \
+ border="" \
+ bgcolor=""> \
+ <h:graphicImage value="/img/seamlogo.png" alt="Seam logo &
copyright" /> \
+ <s:div styleClass="info"> \
+ <{2}> \
+ <h:panelGrid columns="2" \
+ border="" \
+ bgcolor=""> \
+ <h:graphicImage value="/img/seamlogo.png" alt="Seam logo
& copyright" /> \
+ <s:div styleClass="info"> \
+ <{2}> \
+ <h:panelGrid columns="2" \
+ border="" \
+ bgcolor=""> \
+ <h:graphicImage value="/img/seamlogo.png" alt="Seam logo
& copyright" /> \
+ <s:div styleClass="info"> \
+ <p><strong>Your seam-gen project is \
+ deployed!</strong> Here are some of the features this project \
+ provides:</p> \
+ <ul class="bullets"> \
+ <li>Ant build script</li> \
+ <li>Deployment to JBoss AS (EAR or WAR)</li> \
+ <li>Development & production profiles</li> \
+ <li>Integration testing using TestNG & Embedded \
+ JBoss</li> \
+ <li>JavaBean or EJB 3.0 Seam components</li> \
+ <li>JPA entity classes</li> \
+ <li>A configurable DataSource & JPA EntityManager</li> \
+ <li>Templated Facelets views</li> \
+ <li>RichFaces panels & tables</li> \
+ <li>Default CSS stylesheet</li> \
+ <li>Internationalization support</li> \
+ </ul> \
+ </s:div> \
+ </h:panelGrid> \
+ </{3}> \
+ <p><strong>Your seam-gen project is deployed!</strong> \
+ Here are some of the features this project provides:</p> \
+ <ul class="bullets"> \
+ <li>Ant build script</li> \
+ <li>Deployment to JBoss AS (EAR or WAR)</li> \
+ <li>Development & production profiles</li> \
+ <li>Integration testing using TestNG & Embedded \
+ JBoss</li> \
+ <li>JavaBean or EJB 3.0 Seam components</li> \
+ <li>JPA entity classes</li> \
+ <li>A configurable DataSource & JPA EntityManager</li> \
+ <li>Templated Facelets views</li> \
+ <li>RichFaces panels & tables</li> \
+ <li>Default CSS stylesheet</li> \
+ <li>Internationalization support</li> \
+ </ul> \
+ </s:div> \
+ </h:panelGrid> \
+ </{3}> \
+ <p><strong>Your seam-gen project is deployed!</strong> Here \
+ are some of the features this project provides:</p> \
+ <ul class="bullets"> \
+ <li>Ant build script</li> \
+ <li>Deployment to JBoss AS (EAR or WAR)</li> \
+ <li>Development & production profiles</li> \
+ <li>Integration testing using TestNG & Embedded JBoss</li> \
+ <li>JavaBean or EJB 3.0 Seam components</li> \
+ <li>JPA entity classes</li> \
+ <li>A configurable DataSource & JPA EntityManager</li> \
+ <li>Templated Facelets views</li> \
+ <li>RichFaces panels & tables</li> \
+ <li>Default CSS stylesheet</li> \
+ <li>Internationalization support</li> \
+ </ul> \
+ </s:div> \
+ </h:panelGrid> \
+ </{3}> \
+ <li>Ant build script</li> \
+ <li>Deployment to JBoss AS (EAR or WAR)</li> \
+ <li>Development & production profiles</li> \
+ <li>Integration testing using TestNG & Embedded JBoss</li> \
+ <li>JavaBean or EJB 3.0 Seam components</li> \
+ <li>JPA entity classes</li> \
+ <li>A configurable DataSource & JPA EntityManager</li> \
+ <li>Templated Facelets views</li> \
+ <li>RichFaces panels & tables</li> \
+ <li>Default CSS stylesheet</li> \
+ <li>Internationalization support</li> \
+ </ul> \
+ </s:div> \
+ </h:panelGrid> \
+ </{3}> \
+ <{2}> \
+ <h:panelGrid columns="2" \
+ border="" \
+ bgcolor=""> \
+ <h:graphicImage value="/img/seamlogo.png" alt="Seam logo &
copyright" /> \
+ <s:div styleClass="info"> \
+ <p><strong>Your seam-gen project is deployed!</strong> Here are \
+ some of the features this project provides:</p> \
+ <ul class="bullets"> \
+ <li>Ant build script</li> \
+ <li>Deployment to JBoss AS (EAR or WAR)</li> \
+ <li>Development & production profiles</li> \
+ <li>Integration testing using TestNG & Embedded JBoss</li> \
+ <li>JavaBean or EJB 3.0 Seam components</li> \
+ <li>JPA entity classes</li> \
+ <li>A configurable DataSource & JPA EntityManager</li> \
+ <li>Templated Facelets views</li> \
+ <li>RichFaces panels & tables</li> \
+ <li>Default CSS stylesheet</li> \
+ <li>Internationalization support</li> \
+ </ul> \
+ </s:div> \
+ </h:panelGrid> \
+ </{3}> \
+ <{2}> \
+ <h:panelGrid columns="2" \
+ border="" \
+ bgcolor=""> \
+ <h:graphicImage value="/img/seamlogo.png" alt="Seam logo &
copyright" /> \
+ <s:div styleClass="info"> \
+ <p><strong>Your seam-gen project is deployed!</strong> Here are \
+ some of the features this project provides:</p> \
+ <ul class="bullets"> \
+ <{2}> \
+ <h:panelGrid columns="2" \
+ border="" \
+ bgcolor=""> \
+ <h:graphicImage value="/img/seamlogo.png" alt="Seam logo &
copyright" /> \
+ <s:div styleClass="info"> \
+ <{2}> \
+ <h:panelGrid columns="2" \
+ border="" \
+ bgcolor=""> \
+ <h:graphicImage value="/img/seamlogo.png" alt="Seam logo
& copyright" /> \
+ <s:div styleClass="info"> \
+ <{2}> \
+ <h:panelGrid columns="2" \
+ border="" \
+ bgcolor=""> \
+ <h:graphicImage value="/img/seamlogo.png" alt="Seam logo
& copyright" /> \
+ <s:div styleClass="info"> \
+ <p><strong>Your seam-gen project is \
+ deployed!</strong> Here are some of the features this project \
+ provides:</p> \
+ <ul class="bullets"> \
+ <li>Ant build script</li> \
+ <li>Deployment to JBoss AS (EAR or WAR)</li> \
+ <li>Development & production profiles</li> \
+ <li>Integration testing using TestNG & Embedded \
+ JBoss</li> \
+ <li>JavaBean or EJB 3.0 Seam components</li> \
+ <li>JPA entity classes</li> \
+ <li>A configurable DataSource & JPA EntityManager</li> \
+ <li>Templated Facelets views</li> \
+ <li>RichFaces panels & tables</li> \
+ <li>Default CSS stylesheet</li> \
+ <li>Internationalization support</li> \
+ </ul> \
+ </s:div> \
+ </h:panelGrid> \
+ </{3}> \
+ <p><strong>Your seam-gen project is deployed!</strong> \
+ Here are some of the features this project provides:</p> \
+ <ul class="bullets"> \
+ <li>Ant build script</li> \
+ <li>Deployment to JBoss AS (EAR or WAR)</li> \
+ <li>Development & production profiles</li> \
+ <li>Integration testing using TestNG & Embedded \
+ JBoss</li> \
+ <li>JavaBean or EJB 3.0 Seam components</li> \
+ <li>JPA entity classes</li> \
+ <li>A configurable DataSource & JPA EntityManager</li> \
+ <li>Templated Facelets views</li> \
+ <li>RichFaces panels & tables</li> \
+ <li>Default CSS stylesheet</li> \
+ <li>Internationalization support</li> \
+ </ul> \
+ </s:div> \
+ </h:panelGrid> \
+ </{3}> \
+ <p><strong>Your seam-gen project is deployed!</strong> Here \
+ are some of the features this project provides:</p> \
+ <ul class="bullets"> \
+ <li>Ant build script</li> \
+ <li>Deployment to JBoss AS (EAR or WAR)</li> \
+ <li>Development & production profiles</li> \
+ <li>Integration testing using TestNG & Embedded JBoss</li> \
+ <li>JavaBean or EJB 3.0 Seam components</li> \
+ <li>JPA entity classes</li> \
+ <li>A configurable DataSource & JPA EntityManager</li> \
+ <li>Templated Facelets views</li> \
+ <li>RichFaces panels & tables</li> \
+ <li>Default CSS stylesheet</li> \
+ <li>Internationalization support</li> \
+ </ul> \
+ </s:div> \
+ </h:panelGrid> \
+ </{3}> \
+ <li>Ant build script</li> \
+ <li>Deployment to JBoss AS (EAR or WAR)</li> \
+ <li>Development & production profiles</li> \
+ <li>Integration testing using TestNG & Embedded JBoss</li> \
+ <li>JavaBean or EJB 3.0 Seam components</li> \
+ <li>JPA entity classes</li> \
+ <li>A configurable DataSource & JPA EntityManager</li> \
+ <li>Templated Facelets views</li> \
+ <li>RichFaces panels & tables</li> \
+ <li>Default CSS stylesheet</li> \
+ <li>Internationalization support</li> \
+ </ul> \
+ </s:div> \
+ </h:panelGrid> \
+ </{3}> \
+ <{2}> \
+ <h:panelGrid columns="2" \
+ border="" \
+ bgcolor=""> \
+ <h:graphicImage value="/img/seamlogo.png" alt="Seam logo &
copyright" /> \
+ <s:div styleClass="info"> \
+ <p><strong>Your seam-gen project is deployed!</strong> Here are \
+ some of the features this project provides:</p> \
+ <ul class="bullets"> \
+ <li>Ant build script</li> \
+ <li>Deployment to JBoss AS (EAR or WAR)</li> \
+ <li>Development & production profiles</li> \
+ <li>Integration testing using TestNG & Embedded JBoss</li> \
+ <li>JavaBean or EJB 3.0 Seam components</li> \
+ <li>JPA entity classes</li> \
+ <li>A configurable DataSource & JPA EntityManager</li> \
+ <li>Templated Facelets views</li> \
+ <li>RichFaces panels & tables</li> \
+ <li>Default CSS stylesheet</li> \
+ <li>Internationalization support</li> \
+ </ul> \
+ </s:div> \
+ </h:panelGrid> \
+ </{3}> \
+ <{2}> \
+ <h:panelGrid columns="2" \
+ border="" \
+ bgcolor=""> \
+ <h:graphicImage value="/img/seamlogo.png" alt="Seam logo &
copyright" /> \
+ <s:div styleClass="info"> \
+ <p><strong>Your seam-gen project is deployed!</strong> Here are \
+ some of the features this project provides:</p> \
+ <ul class="bullets"> \
+ <{2}> \
+ <h:panelGrid columns="2" \
+ border="" \
+ bgcolor=""> \
+ <h:graphicImage value="/img/seamlogo.png" alt="Seam logo &
copyright" /> \
+ <s:div styleClass="info"> \
+ <{2}> \
+ <h:panelGrid columns="2" \
+ border="" \
+ bgcolor=""> \
+ <h:graphicImage value="/img/seamlogo.png" alt="Seam logo
& copyright" /> \
+ <s:div styleClass="info"> \
+ <{2}> \
+ <h:panelGrid columns="2" \
+ border="" \
+ bgcolor=""> \
+ <h:graphicImage value="/img/seamlogo.png" alt="Seam logo
& copyright" /> \
+ <s:div styleClass="info"> \
+ <p><strong>Your seam-gen project is \
+ deployed!</strong> Here are some of the features this project \
+ provides:</p> \
+ <ul class="bullets"> \
+ <li>Ant build script</li> \
+ <li>Deployment to JBoss AS (EAR or WAR)</li> \
+ <li>Development & production profiles</li> \
+ <li>Integration testing using TestNG & Embedded \
+ JBoss</li> \
+ <li>JavaBean or EJB 3.0 Seam components</li> \
+ <li>JPA entity classes</li> \
+ <li>A configurable DataSource & JPA EntityManager</li> \
+ <li>Templated Facelets views</li> \
+ <li>RichFaces panels & tables</li> \
+ <li>Default CSS stylesheet</li> \
+ <li>Internationalization support</li> \
+ </ul> \
+ </s:div> \
+ </h:panelGrid> \
+ </{3}> \
+ <p><strong>Your seam-gen project is deployed!</strong> \
+ Here are some of the features this project provides:</p> \
+ <ul class="bullets"> \
+ <li>Ant build script</li> \
+ <li>Deployment to JBoss AS (EAR or WAR)</li> \
+ <li>Development & production profiles</li> \
+ <li>Integration testing using TestNG & Embedded \
+ JBoss</li> \
+ <li>JavaBean or EJB 3.0 Seam components</li> \
+ <li>JPA entity classes</li> \
+ <li>A configurable DataSource & JPA EntityManager</li> \
+ <li>Templated Facelets views</li> \
+ <li>RichFaces panels & tables</li> \
+ <li>Default CSS stylesheet</li> \
+ <li>Internationalization support</li> \
+ </ul> \
+ </s:div> \
+ </h:panelGrid> \
+ </{3}> \
+ <p><strong>Your seam-gen project is deployed!</strong> Here \
+ are some of the features this project provides:</p> \
+ <ul class="bullets"> \
+ <li>Ant build script</li> \
+ <li>Deployment to JBoss AS (EAR or WAR)</li> \
+ <li>Development & production profiles</li> \
+ <li>Integration testing using TestNG & Embedded JBoss</li> \
+ <li>JavaBean or EJB 3.0 Seam components</li> \
+ <li>JPA entity classes</li> \
+ <li>A configurable DataSource & JPA EntityManager</li> \
+ <li>Templated Facelets views</li> \
+ <li>RichFaces panels & tables</li> \
+ <li>Default CSS stylesheet</li> \
+ <li>Internationalization support</li> \
+ </ul> \
+ </s:div> \
+ </h:panelGrid> \
+ </{3}> \
+ <li>Ant build script</li> \
+ <li>Deployment to JBoss AS (EAR or WAR)</li> \
+ <li>Development & production profiles</li> \
+ <li>Integration testing using TestNG & Embedded JBoss</li> \
+ <li>JavaBean or EJB 3.0 Seam components</li> \
+ <li>JPA entity classes</li> \
+ <li>A configurable DataSource & JPA EntityManager</li> \
+ <li>Templated Facelets views</li> \
+ <li>RichFaces panels & tables</li> \
+ <li>Default CSS stylesheet</li> \
+ <li>Internationalization support</li> \
+ </ul> \
+ </s:div> \
+ </h:panelGrid> \
+ </{3}> \
+ <{2}> \
+ <h:panelGrid columns="2" \
+ border="" \
+ bgcolor=""> \
+ <h:graphicImage value="/img/seamlogo.png" alt="Seam logo &
copyright" /> \
+ <s:div styleClass="info"> \
+ <p><strong>Your seam-gen project is deployed!</strong> Here are \
+ some of the features this project provides:</p> \
+ <ul class="bullets"> \
+ <li>Ant build script</li> \
+ <li>Deployment to JBoss AS (EAR or WAR)</li> \
+ <li>Development & production profiles</li> \
+ <li>Integration testing using TestNG & Embedded JBoss</li> \
+ <li>JavaBean or EJB 3.0 Seam components</li> \
+ <li>JPA entity classes</li> \
+ <li>A configurable DataSource & JPA EntityManager</li> \
+ <li>Templated Facelets views</li> \
+ <li>RichFaces panels & tables</li> \
+ <li>Default CSS stylesheet</li> \
+ <li>Internationalization support</li> \
+ </ul> \
+ </s:div> \
+ </h:panelGrid> \
+ </{3}> \
+ <{2}> \
+ <h:panelGrid columns="2" \
+ border="" \
+ bgcolor=""> \
+ <h:graphicImage value="/img/seamlogo.png" alt="Seam logo &
copyright" /> \
+ <s:div styleClass="info"> \
+ <p><strong>Your seam-gen project is deployed!</strong> Here are \
+ some of the features this project provides:</p> \
+ <ul class="bullets"> \
+ <{2}> \
+ <h:panelGrid columns="2" \
+ border="" \
+ bgcolor=""> \
+ <h:graphicImage value="/img/seamlogo.png" alt="Seam logo &
copyright" /> \
+ <s:div styleClass="info"> \
+ <{2}> \
+ <h:panelGrid columns="2" \
+ border="" \
+ bgcolor=""> \
+ <h:graphicImage value="/img/seamlogo.png" alt="Seam logo
& copyright" /> \
+ <s:div styleClass="info"> \
+ <{2}> \
+ <h:panelGrid columns="2" \
+ border="" \
+ bgcolor=""> \
+ <h:graphicImage value="/img/seamlogo.png" alt="Seam logo
& copyright" /> \
+ <s:div styleClass="info"> \
+ <p><strong>Your seam-gen project is \
+ deployed!</strong> Here are some of the features this project \
+ provides:</p> \
+ <ul class="bullets"> \
+ <li>Ant build script</li> \
+ <li>Deployment to JBoss AS (EAR or WAR)</li> \
+ <li>Development & production profiles</li> \
+ <li>Integration testing using TestNG & Embedded \
+ JBoss</li> \
+ <li>JavaBean or EJB 3.0 Seam components</li> \
+ <li>JPA entity classes</li> \
+ <li>A configurable DataSource & JPA EntityManager</li> \
+ <li>Templated Facelets views</li> \
+ <li>RichFaces panels & tables</li> \
+ <li>Default CSS stylesheet</li> \
+ <li>Internationalization support</li> \
+ </ul> \
+ </s:div> \
+ </h:panelGrid> \
+ </{3}> \
+ <p><strong>Your seam-gen project is deployed!</strong> \
+ Here are some of the features this project provides:</p> \
+ <ul class="bullets"> \
+ <li>Ant build script</li> \
+ <li>Deployment to JBoss AS (EAR or WAR)</li> \
+ <li>Development & production profiles</li> \
+ <li>Integration testing using TestNG & Embedded \
+ JBoss</li> \
+ <li>JavaBean or EJB 3.0 Seam components</li> \
+ <li>JPA entity classes</li> \
+ <li>A configurable DataSource & JPA EntityManager</li> \
+ <li>Templated Facelets views</li> \
+ <li>RichFaces panels & tables</li> \
+ <li>Default CSS stylesheet</li> \
+ <li>Internationalization support</li> \
+ </ul> \
+ </s:div> \
+ </h:panelGrid> \
+ </{3}> \
+ <p><strong>Your seam-gen project is deployed!</strong> Here \
+ are some of the features this project provides:</p> \
+ <ul class="bullets"> \
+ <li>Ant build script</li> \
+ <li>Deployment to JBoss AS (EAR or WAR)</li> \
+ <li>Development & production profiles</li> \
+ <li>Integration testing using TestNG & Embedded JBoss</li> \
+ <li>JavaBean or EJB 3.0 Seam components</li> \
+ <li>JPA entity classes</li> \
+ <li>A configurable DataSource & JPA EntityManager</li> \
+ <li>Templated Facelets views</li> \
+ <li>RichFaces panels & tables</li> \
+ <li>Default CSS stylesheet</li> \
+ <li>Internationalization support</li> \
+ </ul> \
+ </s:div> \
+ </h:panelGrid> \
+ </{3}> \
+ <li>Ant build script</li> \
+ <li>Deployment to JBoss AS (EAR or WAR)</li> \
+ <li>Development & production profiles</li> \
+ <li>Integration testing using TestNG & Embedded JBoss</li> \
+ <li>JavaBean or EJB 3.0 Seam components</li> \
+ <li>JPA entity classes</li> \
+ <li>A configurable DataSource & JPA EntityManager</li> \
+ <li>Templated Facelets views</li> \
+ <li>RichFaces panels & tables</li> \
+ <li>Default CSS stylesheet</li> \
+ <li>Internationalization support</li> \
+ </ul> \
+ </s:div> \
+ </h:panelGrid> \
+ </{3}> \
+ <{2}> \
+ <h:panelGrid columns="2" \
+ border="" \
+ bgcolor=""> \
+ <h:graphicImage value="/img/seamlogo.png" alt="Seam logo &
copyright" /> \
+ <s:div styleClass="info"> \
+ <p><strong>Your seam-gen project is deployed!</strong> Here are \
+ some of the features this project provides:</p> \
+ <ul class="bullets"> \
+ <li>Ant build script</li> \
+ <li>Deployment to JBoss AS (EAR or WAR)</li> \
+ <li>Development & production profiles</li> \
+ <li>Integration testing using TestNG & Embedded JBoss</li> \
+ <li>JavaBean or EJB 3.0 Seam components</li> \
+ <li>JPA entity classes</li> \
+ <li>A configurable DataSource & JPA EntityManager</li> \
+ <li>Templated Facelets views</li> \
+ <li>RichFaces panels & tables</li> \
+ <li>Default CSS stylesheet</li> \
+ <li>Internationalization support</li> \
+ </ul> \
+ </s:div> \
+ </h:panelGrid> \
+ </{3}> \
+ <{2}> \
+ <h:panelGrid columns="2" \
+ border="" \
+ bgcolor=""> \
+ <h:graphicImage value="/img/seamlogo.png" alt="Seam logo &
copyright" /> \
+ <s:div styleClass="info"> \
+ <p><strong>Your seam-gen project is deployed!</strong> Here are \
+ some of the features this project provides:</p> \
+ <ul class="bullets"> \
+ <{2}> \
+ <h:panelGrid columns="2" \
+ border="" \
+ bgcolor=""> \
+ <h:graphicImage value="/img/seamlogo.png" alt="Seam logo &
copyright" /> \
+ <s:div styleClass="info"> \
+ <{2}> \
+ <h:panelGrid columns="2" \
+ border="" \
+ bgcolor=""> \
+ <h:graphicImage value="/img/seamlogo.png" alt="Seam logo
& copyright" /> \
+ <s:div styleClass="info"> \
+ <{2}> \
+ <h:panelGrid columns="2" \
+ border="" \
+ bgcolor=""> \
+ <h:graphicImage value="/img/seamlogo.png" alt="Seam logo
& copyright" /> \
+ <s:div styleClass="info"> \
+ <p><strong>Your seam-gen project is \
+ deployed!</strong> Here are some of the features this project \
+ provides:</p> \
+ <ul class="bullets"> \
+ <li>Ant build script</li> \
+ <li>Deployment to JBoss AS (EAR or WAR)</li> \
+ <li>Development & production profiles</li> \
+ <li>Integration testing using TestNG & Embedded \
+ JBoss</li> \
+ <li>JavaBean or EJB 3.0 Seam components</li> \
+ <li>JPA entity classes</li> \
+ <li>A configurable DataSource & JPA EntityManager</li> \
+ <li>Templated Facelets views</li> \
+ <li>RichFaces panels & tables</li> \
+ <li>Default CSS stylesheet</li> \
+ <li>Internationalization support</li> \
+ </ul> \
+ </s:div> \
+ </h:panelGrid> \
+ </{3}> \
+ <p><strong>Your seam-gen project is deployed!</strong> \
+ Here are some of the features this project provides:</p> \
+ <ul class="bullets"> \
+ <li>Ant build script</li> \
+ <li>Deployment to JBoss AS (EAR or WAR)</li> \
+ <li>Development & production profiles</li> \
+ <li>Integration testing using TestNG & Embedded \
+ JBoss</li> \
+ <li>JavaBean or EJB 3.0 Seam components</li> \
+ <li>JPA entity classes</li> \
+ <li>A configurable DataSource & JPA EntityManager</li> \
+ <li>Templated Facelets views</li> \
+ <li>RichFaces panels & tables</li> \
+ <li>Default CSS stylesheet</li> \
+ <li>Internationalization support</li> \
+ </ul> \
+ </s:div> \
+ </h:panelGrid> \
+ </{3}> \
+ <p><strong>Your seam-gen project is deployed!</strong> Here \
+ are some of the features this project provides:</p> \
+ <ul class="bullets"> \
+ <li>Ant build script</li> \
+ <li>Deployment to JBoss AS (EAR or WAR)</li> \
+ <li>Development & production profiles</li> \
+ <li>Integration testing using TestNG & Embedded JBoss</li> \
+ <li>JavaBean or EJB 3.0 Seam components</li> \
+ <li>JPA entity classes</li> \
+ <li>A configurable DataSource & JPA EntityManager</li> \
+ <li>Templated Facelets views</li> \
+ <li>RichFaces panels & tables</li> \
+ <li>Default CSS stylesheet</li> \
+ <li>Internationalization support</li> \
+ </ul> \
+ </s:div> \
+ </h:panelGrid> \
+ </{3}> \
+ <li>Ant build script</li> \
+ <li>Deployment to JBoss AS (EAR or WAR)</li> \
+ <li>Development & production profiles</li> \
+ <li>Integration testing using TestNG & Embedded JBoss</li> \
+ <li>JavaBean or EJB 3.0 Seam components</li> \
+ <li>JPA entity classes</li> \
+ <li>A configurable DataSource & JPA EntityManager</li> \
+ <li>Templated Facelets views</li> \
+ <li>RichFaces panels & tables</li> \
+ <li>Default CSS stylesheet</li> \
+ <li>Internationalization support</li> \
+ </ul> \
+ </s:div> \
+ </h:panelGrid> \
+ </{3}> \
+ <{2}> \
+ <h:panelGrid columns="2" \
+ border="" \
+ bgcolor=""> \
+ <h:graphicImage value="/img/seamlogo.png" alt="Seam logo &
copyright" /> \
+ <s:div styleClass="info"> \
+ <p><strong>Your seam-gen project is deployed!</strong> Here are \
+ some of the features this project provides:</p> \
+ <ul class="bullets"> \
+ <li>Ant build script</li> \
+ <li>Deployment to JBoss AS (EAR or WAR)</li> \
+ <li>Development & production profiles</li> \
+ <li>Integration testing using TestNG & Embedded JBoss</li> \
+ <li>JavaBean or EJB 3.0 Seam components</li> \
+ <li>JPA entity classes</li> \
+ <li>A configurable DataSource & JPA EntityManager</li> \
+ <li>Templated Facelets views</li> \
+ <li>RichFaces panels & tables</li> \
+ <li>Default CSS stylesheet</li> \
+ <li>Internationalization support</li> \
+ </ul> \
+ </s:div> \
+ </h:panelGrid> \
+ </{3}> \
+ <{2}> \
+ <h:panelGrid columns="2" \
+ border="" \
+ bgcolor=""> \
+ <h:graphicImage value="/img/seamlogo.png" alt="Seam logo &
copyright" /> \
+ <s:div styleClass="info"> \
+ <p><strong>Your seam-gen project is deployed!</strong> Here are \
+ some of the features this project provides:</p> \
+ <ul class="bullets"> \
+ <{2}> \
+ <h:panelGrid columns="2" \
+ border="" \
+ bgcolor=""> \
+ <h:graphicImage value="/img/seamlogo.png" alt="Seam logo &
copyright" /> \
+ <s:div styleClass="info"> \
+ <{2}> \
+ <h:panelGrid columns="2" \
+ border="" \
+ bgcolor=""> \
+ <h:graphicImage value="/img/seamlogo.png" alt="Seam logo
& copyright" /> \
+ <s:div styleClass="info"> \
+ <{2}> \
+ <h:panelGrid columns="2" \
+ border="" \
+ bgcolor=""> \
+ <h:graphicImage value="/img/seamlogo.png" alt="Seam logo
& copyright" /> \
+ <s:div styleClass="info"> \
+ <p><strong>Your seam-gen project is \
+ deployed!</strong> Here are some of the features this project \
+ provides:</p> \
+ <ul class="bullets"> \
+ <li>Ant build script</li> \
+ <li>Deployment to JBoss AS (EAR or WAR)</li> \
+ <li>Development & production profiles</li> \
+ <li>Integration testing using TestNG & Embedded \
+ JBoss</li> \
+ <li>JavaBean or EJB 3.0 Seam components</li> \
+ <li>JPA entity classes</li> \
+ <li>A configurable DataSource & JPA EntityManager</li> \
+ <li>Templated Facelets views</li> \
+ <li>RichFaces panels & tables</li> \
+ <li>Default CSS stylesheet</li> \
+ <li>Internationalization support</li> \
+ </ul> \
+ </s:div> \
+ </h:panelGrid> \
+ </{3}> \
+ <p><strong>Your seam-gen project is deployed!</strong> \
+ Here are some of the features this project provides:</p> \
+ <ul class="bullets"> \
+ <li>Ant build script</li> \
+ <li>Deployment to JBoss AS (EAR or WAR)</li> \
+ <li>Development & production profiles</li> \
+ <li>Integration testing using TestNG & Embedded \
+ JBoss</li> \
+ <li>JavaBean or EJB 3.0 Seam components</li> \
+ <li>JPA entity classes</li> \
+ <li>A configurable DataSource & JPA EntityManager</li> \
+ <li>Templated Facelets views</li> \
+ <li>RichFaces panels & tables</li> \
+ <li>Default CSS stylesheet</li> \
+ <li>Internationalization support</li> \
+ </ul> \
+ </s:div> \
+ </h:panelGrid> \
+ </{3}> \
+ <p><strong>Your seam-gen project is deployed!</strong> Here \
+ are some of the features this project provides:</p> \
+ <ul class="bullets"> \
+ <li>Ant build script</li> \
+ <li>Deployment to JBoss AS (EAR or WAR)</li> \
+ <li>Development & production profiles</li> \
+ <li>Integration testing using TestNG & Embedded JBoss</li> \
+ <li>JavaBean or EJB 3.0 Seam components</li> \
+ <li>JPA entity classes</li> \
+ <li>A configurable DataSource & JPA EntityManager</li> \
+ <li>Templated Facelets views</li> \
+ <li>RichFaces panels & tables</li> \
+ <li>Default CSS stylesheet</li> \
+ <li>Internationalization support</li> \
+ </ul> \
+ </s:div> \
+ </h:panelGrid> \
+ </{3}> \
+ <li>Ant build script</li> \
+ <li>Deployment to JBoss AS (EAR or WAR)</li> \
+ <li>Development & production profiles</li> \
+ <li>Integration testing using TestNG & Embedded JBoss</li> \
+ <li>JavaBean or EJB 3.0 Seam components</li> \
+ <li>JPA entity classes</li> \
+ <li>A configurable DataSource & JPA EntityManager</li> \
+ <li>Templated Facelets views</li> \
+ <li>RichFaces panels & tables</li> \
+ <li>Default CSS stylesheet</li> \
+ <li>Internationalization support</li> \
+ </ul> \
+ </s:div> \
+ </h:panelGrid> \
+ </{3}> \
+ <{2}> \
+ <h:panelGrid columns="2" \
+ border="" \
+ bgcolor=""> \
+ <h:graphicImage value="/img/seamlogo.png" alt="Seam logo &
copyright" /> \
+ <s:div styleClass="info"> \
+ <p><strong>Your seam-gen project is deployed!</strong> Here are \
+ some of the features this project provides:</p> \
+ <ul class="bullets"> \
+ <li>Ant build script</li> \
+ <li>Deployment to JBoss AS (EAR or WAR)</li> \
+ <li>Development & production profiles</li> \
+ <li>Integration testing using TestNG & Embedded JBoss</li> \
+ <li>JavaBean or EJB 3.0 Seam components</li> \
+ <li>JPA entity classes</li> \
+ <li>A configurable DataSource & JPA EntityManager</li> \
+ <li>Templated Facelets views</li> \
+ <li>RichFaces panels & tables</li> \
+ <li>Default CSS stylesheet</li> \
+ <li>Internationalization support</li> \
+ </ul> \
+ </s:div> \
+ </h:panelGrid> \
+ </{3}> \
+ <{2}> \
+ <h:panelGrid columns="2" \
+ border="" \
+ bgcolor=""> \
+ <h:graphicImage value="/img/seamlogo.png" alt="Seam logo &
copyright" /> \
+ <s:div styleClass="info"> \
+ <p><strong>Your seam-gen project is deployed!</strong> Here are \
+ some of the features this project provides:</p> \
+ <ul class="bullets"> \
+ <{2}> \
+ <h:panelGrid columns="2" \
+ border="" \
+ bgcolor=""> \
+ <h:graphicImage value="/img/seamlogo.png" alt="Seam logo &
copyright" /> \
+ <s:div styleClass="info"> \
+ <{2}> \
+ <h:panelGrid columns="2" \
+ border="" \
+ bgcolor=""> \
+ <h:graphicImage value="/img/seamlogo.png" alt="Seam logo
& copyright" /> \
+ <s:div styleClass="info"> \
+ <{2}> \
+ <h:panelGrid columns="2" \
+ border="" \
+ bgcolor=""> \
+ <h:graphicImage value="/img/seamlogo.png" alt="Seam logo
& copyright" /> \
+ <s:div styleClass="info"> \
+ <p><strong>Your seam-gen project is \
+ deployed!</strong> Here are some of the features this project \
+ provides:</p> \
+ <ul class="bullets"> \
+ <li>Ant build script</li> \
+ <li>Deployment to JBoss AS (EAR or WAR)</li> \
+ <li>Development & production profiles</li> \
+ <li>Integration testing using TestNG & Embedded \
+ JBoss</li> \
+ <li>JavaBean or EJB 3.0 Seam components</li> \
+ <li>JPA entity classes</li> \
+ <li>A configurable DataSource & JPA EntityManager</li> \
+ <li>Templated Facelets views</li> \
+ <li>RichFaces panels & tables</li> \
+ <li>Default CSS stylesheet</li> \
+ <li>Internationalization support</li> \
+ </ul> \
+ </s:div> \
+ </h:panelGrid> \
+ </{3}> \
+ <p><strong>Your seam-gen project is deployed!</strong> \
+ Here are some of the features this project provides:</p> \
+ <ul class="bullets"> \
+ <li>Ant build script</li> \
+ <li>Deployment to JBoss AS (EAR or WAR)</li> \
+ <li>Development & production profiles</li> \
+ <li>Integration testing using TestNG & Embedded \
+ JBoss</li> \
+ <li>JavaBean or EJB 3.0 Seam components</li> \
+ <li>JPA entity classes</li> \
+ <li>A configurable DataSource & JPA EntityManager</li> \
+ <li>Templated Facelets views</li> \
+ <li>RichFaces panels & tables</li> \
+ <li>Default CSS stylesheet</li> \
+ <li>Internationalization support</li> \
+ </ul> \
+ </s:div> \
+ </h:panelGrid> \
+ </{3}> \
+ <p><strong>Your seam-gen project is deployed!</strong> Here \
+ are some of the features this project provides:</p> \
+ <ul class="bullets"> \
+ <li>Ant build script</li> \
+ <li>Deployment to JBoss AS (EAR or WAR)</li> \
+ <li>Development & production profiles</li> \
+ <li>Integration testing using TestNG & Embedded JBoss</li> \
+ <li>JavaBean or EJB 3.0 Seam components</li> \
+ <li>JPA entity classes</li> \
+ <li>A configurable DataSource & JPA EntityManager</li> \
+ <li>Templated Facelets views</li> \
+ <li>RichFaces panels & tables</li> \
+ <li>Default CSS stylesheet</li> \
+ <li>Internationalization support</li> \
+ <h1>Welcome to Seam!</h1> \
+ <{2}> \
+ <h:panelGrid columns="2" \
+ border="" \
+ bgcolor=""> \
+ <h:graphicImage value="/img/seamlogo.png" alt="Seam logo
& copyright" /> \
+ <s:div styleClass="info"> \
+ <p><strong>Your seam-gen project is deployed!</strong> \
+ Here are some of the features this project provides:</p> \
+ <ul class="bullets"> \
+ <li>Ant build script</li> \
+ <li>Deployment to JBoss AS (EAR or WAR)</li> \
+ <li>Development & production profiles</li> \
+ <li>Integration testing using TestNG & Embedded \
+ JBoss</li> \
+ <li>JavaBean or EJB 3.0 Seam components</li> \
+ <li>JPA entity classes</li> \
+ <li>A configurable DataSource & JPA EntityManager</li> \
+ <li>Templated Facelets views</li> \
+ <li>RichFaces panels & tables</li> \
+ <li>Default CSS stylesheet</li> \
+ <li>Internationalization support</li> \
+ </ul> \
+ </s:div> \
+ </h:panelGrid> \
+ </{3}> \
+ <{2}> \
+ <h:panelGrid columns="2" \
+ border="" \
+ bgcolor=""> \
+ <h:graphicImage value="/img/seamlogo.png" alt="Seam logo
& copyright" /> \
+ <s:div styleClass="info"> \
+ <p><strong>Your seam-gen project is deployed!</strong> \
+ Here are some of the features this project provides:</p> \
+ <ul class="bullets"> \
+ <{2}> \
+ <h:panelGrid columns="2" \
+ border="" \
+ bgcolor=""> \
+ <h:graphicImage value="/img/seamlogo.png" \
+ alt="Seam logo & copyright" /> \
+ <s:div styleClass="info"> \
+ <{2}> \
+ <h:panelGrid columns="2" \
+ border="" \
+ bgcolor=""> \
+ <h:graphicImage value="/img/seamlogo.png" \
+ alt="Seam logo & copyright" /> \
+ <s:div styleClass="info"> \
+ <{2}> \
+ <h:panelGrid columns="2" \
+ border="" \
+ bgcolor=""> \
+ <h:graphicImage value="/img/seamlogo.png" \
+ alt="Seam logo & copyright" /> \
+ <s:div styleClass="info"> \
+ <p><strong>Your seam-gen project is \
+ deployed!</strong> Here are some of the features this \
+ project provides:</p> \
+ <ul class="bullets"> \
+ <li>Ant build script</li> \
+ <li>Deployment to JBoss AS (EAR or WAR)</li> \
+ <li>Development & production profiles</li> \
+ <li>Integration testing using TestNG & \
+ Embedded JBoss</li> \
+ <li>JavaBean or EJB 3.0 Seam components</li> \
+ <li>JPA entity classes</li> \
+ <li>A configurable DataSource & JPA \
+ EntityManager</li> \
+ <li>Templated Facelets views</li> \
+ <li>RichFaces panels & tables</li> \
+ <li>Default CSS stylesheet</li> \
+ <li>Internationalization support</li> \
+ </ul> \
+ </s:div> \
+ </h:panelGrid> \
+ </{3}> \
+ <p><strong>Your seam-gen project is \
+ deployed!</strong> Here are some of the features this project
\
+ provides:</p> \
+ <ul class="bullets"> \
+ <li>Ant build script</li> \
+ <li>Deployment to JBoss AS (EAR or WAR)</li> \
+ <li>Development & production profiles</li> \
+ <li>Integration testing using TestNG & \
+ Embedded JBoss</li> \
+ <li>JavaBean or EJB 3.0 Seam components</li> \
+ <li>JPA entity classes</li> \
+ <li>A configurable DataSource & JPA \
+ EntityManager</li> \
+ <li>Templated Facelets views</li> \
+ <li>RichFaces panels & tables</li> \
+ <li>Default CSS stylesheet</li> \
+ <li>Internationalization support</li> \
+ </ul> \
+ </s:div> \
+ </h:panelGrid> \
+ </{3}> \
+ <p><strong>Your seam-gen project is \
+ deployed!</strong> Here are some of the features this project \
+ provides:</p> \
+ <ul class="bullets"> \
+ <li>Ant build script</li> \
+ <li>Deployment to JBoss AS (EAR or WAR)</li> \
+ <li>Development & production profiles</li> \
+ <li>Integration testing using TestNG & Embedded \
+ JBoss</li> \
+ <li>JavaBean or EJB 3.0 Seam components</li> \
+ <li>JPA entity classes</li> \
+ <li>A configurable DataSource & JPA \
+ EntityManager</li> \
+ <li>Templated Facelets views</li> \
+ <li>RichFaces panels & tables</li> \
+ <li>Default CSS stylesheet</li> \
+ <li>Internationalization support</li> \
+ </ul> \
+ </s:div> \
+ </h:panelGrid> \
+ </{3}> \
+ <li>Ant build script</li> \
+ <li>Deployment to JBoss AS (EAR or WAR)</li> \
+ <li>Development & production profiles</li> \
+ <li>Integration testing using TestNG & Embedded \
+ JBoss</li> \
+ <li>JavaBean or EJB 3.0 Seam components</li> \
+ <li>JPA entity classes</li> \
+ <li>A configurable DataSource & JPA EntityManager</li> \
+ <li>Templated Facelets views</li> \
+ <li>RichFaces panels & tables</li> \
+ <li>Default CSS stylesheet</li> \
+ <li>Internationalization support</li> \
+ </ul> \
+ </s:div> \
+ </h:panelGrid> \
+ </{3}> \
+ <{2}> \
+ <h:panelGrid columns="2" \
+ border="" \
+ bgcolor=""> \
+ <h:graphicImage value="/img/seamlogo.png" alt="Seam logo
& copyright" /> \
+ <s:div styleClass="info"> \
+ <p><strong>Your seam-gen project is deployed!</strong> \
+ Here are some of the features this project provides:</p> \
+ <ul class="bullets"> \
+ <li>Ant build script</li> \
+ <li>Deployment to JBoss AS (EAR or WAR)</li> \
+ <li>Development & production profiles</li> \
+ <li>Integration testing using TestNG & Embedded \
+ JBoss</li> \
+ <li>JavaBean or EJB 3.0 Seam components</li> \
+ <li>JPA entity classes</li> \
+ <li>A configurable DataSource & JPA EntityManager</li> \
+ <li>Templated Facelets views</li> \
+ <li>RichFaces panels & tables</li> \
+ <li>Default CSS stylesheet</li> \
+ <li>Internationalization support</li> \
+ </ul> \
+ </s:div> \
+ </h:panelGrid> \
+ </{3}> \
+ <{2}> \
+ <h:panelGrid columns="2" \
+ border="" \
+ bgcolor=""> \
+ <h:graphicImage value="/img/seamlogo.png" alt="Seam logo
& copyright" /> \
+ <s:div styleClass="info"> \
+ <p><strong>Your seam-gen project is deployed!</strong> \
+ Here are some of the features this project provides:</p> \
+ <ul class="bullets"> \
+ <{2}> \
+ <h:panelGrid columns="2" \
+ border="" \
+ bgcolor=""> \
+ <h:graphicImage value="/img/seamlogo.png" \
+ alt="Seam logo & copyright" /> \
+ <s:div styleClass="info"> \
+ <{2}> \
+ <h:panelGrid columns="2" \
+ border="" \
+ bgcolor=""> \
+ <h:graphicImage value="/img/seamlogo.png" \
+ alt="Seam logo & copyright" /> \
+ <s:div styleClass="info"> \
+ <{2}> \
+ <h:panelGrid columns="2" \
+ border="" \
+ bgcolor=""> \
+ <h:graphicImage value="/img/seamlogo.png" \
+ alt="Seam logo & copyright" /> \
+ <s:div styleClass="info"> \
+ <p><strong>Your seam-gen project is \
+ deployed!</strong> Here are some of the features this \
+ project provides:</p> \
+ <ul class="bullets"> \
+ <li>Ant build script</li> \
+ <li>Deployment to JBoss AS (EAR or WAR)</li> \
+ <li>Development & production profiles</li> \
+ <li>Integration testing using TestNG & \
+ Embedded JBoss</li> \
+ <li>JavaBean or EJB 3.0 Seam components</li> \
+ <li>JPA entity classes</li> \
+ <li>A configurable DataSource & JPA \
+ EntityManager</li> \
+ <li>Templated Facelets views</li> \
+ <li>RichFaces panels & tables</li> \
+ <li>Default CSS stylesheet</li> \
+ <li>Internationalization support</li> \
+ </ul> \
+ </s:div> \
+ </h:panelGrid> \
+ </{3}> \
+ <p><strong>Your seam-gen project is \
+ deployed!</strong> Here are some of the features this project
\
+ provides:</p> \
+ <ul class="bullets"> \
+ <li>Ant build script</li> \
+ <li>Deployment to JBoss AS (EAR or WAR)</li> \
+ <li>Development & production profiles</li> \
+ <li>Integration testing using TestNG & \
+ Embedded JBoss</li> \
+ <li>JavaBean or EJB 3.0 Seam components</li> \
+ <li>JPA entity classes</li> \
+ <li>A configurable DataSource & JPA \
+ EntityManager</li> \
+ <li>Templated Facelets views</li> \
+ <li>RichFaces panels & tables</li> \
+ <li>Default CSS stylesheet</li> \
+ <li>Internationalization support</li> \
+ </ul> \
+ </s:div> \
+ </h:panelGrid> \
+ </{3}> \
+ <p><strong>Your seam-gen project is \
+ deployed!</strong> Here are some of the features this project \
+ provides:</p> \
+ <ul class="bullets"> \
+ <li>Ant build script</li> \
+ <li>Deployment to JBoss AS (EAR or WAR)</li> \
+ <li>Development & production profiles</li> \
+ <li>Integration testing using TestNG & Embedded \
+ JBoss</li> \
+ <li>JavaBean or EJB 3.0 Seam components</li> \
+ <li>JPA entity classes</li> \
+ <li>A configurable DataSource & JPA \
+ EntityManager</li> \
+ <li>Templated Facelets views</li> \
+ <li>RichFaces panels & tables</li> \
+ <li>Default CSS stylesheet</li> \
+ <li>Internationalization support</li> \
+ </ul> \
+ </s:div> \
+ </h:panelGrid> \
+ </{3}> \
+ <li>Ant build script</li> \
+ <li>Deployment to JBoss AS (EAR or WAR)</li> \
+ <li>Development & production profiles</li> \
+ <li>Integration testing using TestNG & Embedded \
+ JBoss</li> \
+ <li>JavaBean or EJB 3.0 Seam components</li> \
+ <li>JPA entity classes</li> \
+ <li>A configurable DataSource & JPA EntityManager</li> \
+ <li>Templated Facelets views</li> \
+ <li>RichFaces panels & tables</li> \
+ <li>Default CSS stylesheet</li> \
+ <li>Internationalization support</li> \
+ </ul> \
+ </s:div> \
+ </h:panelGrid> \
+ </{3}> \
+ <{2}> \
+ <h:panelGrid columns="2" \
+ border="" \
+ bgcolor=""> \
+ <h:graphicImage value="/img/seamlogo.png" alt="Seam logo
& copyright" /> \
+ <s:div styleClass="info"> \
+ <p><strong>Your seam-gen project is deployed!</strong> \
+ Here are some of the features this project provides:</p> \
+ <ul class="bullets"> \
+ <li>Ant build script</li> \
+ <li>Deployment to JBoss AS (EAR or WAR)</li> \
+ <li>Development & production profiles</li> \
+ <li>Integration testing using TestNG & Embedded \
+ JBoss</li> \
+ <li>JavaBean or EJB 3.0 Seam components</li> \
+ <li>JPA entity classes</li> \
+ <li>A configurable DataSource & JPA EntityManager</li> \
+ <li>Templated Facelets views</li> \
+ <li>RichFaces panels & tables</li> \
+ <li>Default CSS stylesheet</li> \
+ <li>Internationalization support</li> \
+ </ul> \
+ </s:div> \
+ </h:panelGrid> \
+ </{3}> \
+ <{2}> \
+ <h:panelGrid columns="2" \
+ border="" \
+ bgcolor=""> \
+ <h:graphicImage value="/img/seamlogo.png" alt="Seam logo
& copyright" /> \
+ <s:div styleClass="info"> \
+ <p><strong>Your seam-gen project is deployed!</strong> \
+ Here are some of the features this project provides:</p> \
+ <ul class="bullets"> \
+ <{2}> \
+ <h:panelGrid columns="2" \
+ border="" \
+ bgcolor=""> \
+ <h:graphicImage value="/img/seamlogo.png" \
+ alt="Seam logo & copyright" /> \
+ <s:div styleClass="info"> \
+ <{2}> \
+ <h:panelGrid columns="2" \
+ border="" \
+ bgcolor=""> \
+ <h:graphicImage value="/img/seamlogo.png" \
+ alt="Seam logo & copyright" /> \
+ <s:div styleClass="info"> \
+ <{2}> \
+ <h:panelGrid columns="2" \
+ border="" \
+ bgcolor=""> \
+ <h:graphicImage value="/img/seamlogo.png" \
+ alt="Seam logo & copyright" /> \
+ <s:div styleClass="info"> \
+ <p><strong>Your seam-gen project is \
+ deployed!</strong> Here are some of the features this \
+ project provides:</p> \
+ <ul class="bullets"> \
+ <li>Ant build script</li> \
+ <li>Deployment to JBoss AS (EAR or WAR)</li> \
+ <li>Development & production profiles</li> \
+ <li>Integration testing using TestNG & \
+ Embedded JBoss</li> \
+ <li>JavaBean or EJB 3.0 Seam components</li> \
+ <li>JPA entity classes</li> \
+ <li>A configurable DataSource & JPA \
+ EntityManager</li> \
+ <li>Templated Facelets views</li> \
+ <li>RichFaces panels & tables</li> \
+ <li>Default CSS stylesheet</li> \
+ <li>Internationalization support</li> \
+ </ul> \
+ </s:div> \
+ </h:panelGrid> \
+ </{3}> \
+ <p><strong>Your seam-gen project is \
+ deployed!</strong> Here are some of the features this project
\
+ provides:</p> \
+ <ul class="bullets"> \
+ <li>Ant build script</li> \
+ <li>Deployment to JBoss AS (EAR or WAR)</li> \
+ <li>Development & production profiles</li> \
+ <li>Integration testing using TestNG & \
+ Embedded JBoss</li> \
+ <li>JavaBean or EJB 3.0 Seam components</li> \
+ <li>JPA entity classes</li> \
+ <li>A configurable DataSource & JPA \
+ EntityManager</li> \
+ <li>Templated Facelets views</li> \
+ <li>RichFaces panels & tables</li> \
+ <li>Default CSS stylesheet</li> \
+ <li>Internationalization support</li> \
+ </ul> \
+ </s:div> \
+ </h:panelGrid> \
+ </{3}> \
+ <p><strong>Your seam-gen project is \
+ deployed!</strong> Here are some of the features this project \
+ provides:</p> \
+ <ul class="bullets"> \
+ <li>Ant build script</li> \
+ <li>Deployment to JBoss AS (EAR or WAR)</li> \
+ <li>Development & production profiles</li> \
+ <li>Integration testing using TestNG & Embedded \
+ JBoss</li> \
+ <li>JavaBean or EJB 3.0 Seam components</li> \
+ <li>JPA entity classes</li> \
+ <li>A configurable DataSource & JPA \
+ EntityManager</li> \
+ <li>Templated Facelets views</li> \
+ <li>RichFaces panels & tables</li> \
+ <li>Default CSS stylesheet</li> \
+ <li>Internationalization support</li> \
+ </ul> \
+ </s:div> \
+ </h:panelGrid> \
+ </{3}> \
+ <li>Ant build script</li> \
+ <li>Deployment to JBoss AS (EAR or WAR)</li> \
+ <li>Development & production profiles</li> \
+ <li>Integration testing using TestNG & Embedded \
+ JBoss</li> \
+ <li>JavaBean or EJB 3.0 Seam components</li> \
+ <li>JPA entity classes</li> \
+ <li>A configurable DataSource & JPA EntityManager</li> \
+ <li>Templated Facelets views</li> \
+ <li>RichFaces panels & tables</li> \
+ <li>Default CSS stylesheet</li> \
+ <li>Internationalization support</li> \
+ </ul> \
+ </s:div> \
+ </h:panelGrid> \
+ </{3}> \
+ <{2}> \
+ <h:panelGrid columns="2" \
+ border="" \
+ bgcolor=""> \
+ <h:graphicImage value="/img/seamlogo.png" alt="Seam logo
& copyright" /> \
+ <s:div styleClass="info"> \
+ <p><strong>Your seam-gen project is deployed!</strong> \
+ Here are some of the features this project provides:</p> \
+ <ul class="bullets"> \
+ <li>Ant build script</li> \
+ <li>Deployment to JBoss AS (EAR or WAR)</li> \
+ <li>Development & production profiles</li> \
+ <li>Integration testing using TestNG & Embedded \
+ JBoss</li> \
+ <li>JavaBean or EJB 3.0 Seam components</li> \
+ <li>JPA entity classes</li> \
+ <li>A configurable DataSource & JPA EntityManager</li> \
+ <li>Templated Facelets views</li> \
+ <li>RichFaces panels & tables</li> \
+ <li>Default CSS stylesheet</li> \
+ <li>Internationalization support</li> \
+ </ul> \
+ </s:div> \
+ </h:panelGrid> \
+ </{3}> \
+ <{2}> \
+ <h:panelGrid columns="2" \
+ border="" \
+ bgcolor=""> \
+ <h:graphicImage value="/img/seamlogo.png" alt="Seam logo
& copyright" /> \
+ <s:div styleClass="info"> \
+ <p><strong>Your seam-gen project is deployed!</strong> \
+ Here are some of the features this project provides:</p> \
+ <ul class="bullets"> \
+ <{2}> \
+ <h:panelGrid columns="2" \
+ border="" \
+ bgcolor=""> \
+ <h:graphicImage value="/img/seamlogo.png" \
+ alt="Seam logo & copyright" /> \
+ <s:div styleClass="info"> \
+ <{2}> \
+ <h:panelGrid columns="2" \
+ border="" \
+ bgcolor=""> \
+ <h:graphicImage value="/img/seamlogo.png" \
+ alt="Seam logo & copyright" /> \
+ <s:div styleClass="info"> \
+ <{2}> \
+ <h:panelGrid columns="2" \
+ border="" \
+ bgcolor=""> \
+ <h:graphicImage value="/img/seamlogo.png" \
+ alt="Seam logo & copyright" /> \
+ <s:div styleClass="info"> \
+ <p><strong>Your seam-gen project is \
+ deployed!</strong> Here are some of the features this \
+ project provides:</p> \
+ <ul class="bullets"> \
+ <li>Ant build script</li> \
+ <li>Deployment to JBoss AS (EAR or WAR)</li> \
+ <li>Development & production profiles</li> \
+ <li>Integration testing using TestNG & \
+ Embedded JBoss</li> \
+ <li>JavaBean or EJB 3.0 Seam components</li> \
+ <li>JPA entity classes</li> \
+ <li>A configurable DataSource & JPA \
+ EntityManager</li> \
+ <li>Templated Facelets views</li> \
+ <li>RichFaces panels & tables</li> \
+ <li>Default CSS stylesheet</li> \
+ <li>Internationalization support</li> \
+ </ul> \
+ </s:div> \
+ </h:panelGrid> \
+ </{3}> \
+ <p><strong>Your seam-gen project is \
+ deployed!</strong> Here are some of the features this project
\
+ provides:</p> \
+ <ul class="bullets"> \
+ <li>Ant build script</li> \
+ <li>Deployment to JBoss AS (EAR or WAR)</li> \
+ <li>Development & production profiles</li> \
+ <li>Integration testing using TestNG & \
+ Embedded JBoss</li> \
+ <li>JavaBean or EJB 3.0 Seam components</li> \
+ <li>JPA entity classes</li> \
+ <li>A configurable DataSource & JPA \
+ EntityManager</li> \
+ <li>Templated Facelets views</li> \
+ <li>RichFaces panels & tables</li> \
+ <li>Default CSS stylesheet</li> \
+ <li>Internationalization support</li> \
+ </ul> \
+ </s:div> \
+ </h:panelGrid> \
+ </{3}> \
+ <p><strong>Your seam-gen project is \
+ deployed!</strong> Here are some of the features this project \
+ provides:</p> \
+ <ul class="bullets"> \
+ <li>Ant build script</li> \
+ <li>Deployment to JBoss AS (EAR or WAR)</li> \
+ <li>Development & production profiles</li> \
+ <li>Integration testing using TestNG & Embedded \
+ JBoss</li> \
+ <li>JavaBean or EJB 3.0 Seam components</li> \
+ <li>JPA entity classes</li> \
+ <li>A configurable DataSource & JPA \
+ EntityManager</li> \
+ <li>Templated Facelets views</li> \
+ <li>RichFaces panels & tables</li> \
+ <li>Default CSS stylesheet</li> \
+ <li>Internationalization support</li> \
+ </ul> \
+ </s:div> \
+ </h:panelGrid> \
+ </{3}> \
+ <li>Ant build script</li> \
+ <li>Deployment to JBoss AS (EAR or WAR)</li> \
+ <li>Development & production profiles</li> \
+ <li>Integration testing using TestNG & Embedded \
+ JBoss</li> \
+ <li>JavaBean or EJB 3.0 Seam components</li> \
+ <li>JPA entity classes</li> \
+ <li>A configurable DataSource & JPA EntityManager</li> \
+ <li>Templated Facelets views</li> \
+ <li>RichFaces panels & tables</li> \
+ <li>Default CSS stylesheet</li> \
+ <li>Internationalization support</li> \
+ </ul> \
+ </s:div> \
+ </h:panelGrid> \
+ </{3}> \
+ <{2}> \
+ <h:panelGrid columns="2" \
+ border="" \
+ bgcolor=""> \
+ <h:graphicImage value="/img/seamlogo.png" alt="Seam logo
& copyright" /> \
+ <s:div styleClass="info"> \
+ <p><strong>Your seam-gen project is deployed!</strong> \
+ Here are some of the features this project provides:</p> \
+ <ul class="bullets"> \
+ <li>Ant build script</li> \
+ <li>Deployment to JBoss AS (EAR or WAR)</li> \
+ <li>Development & production profiles</li> \
+ <li>Integration testing using TestNG & Embedded \
+ JBoss</li> \
+ <li>JavaBean or EJB 3.0 Seam components</li> \
+ <li>JPA entity classes</li> \
+ <li>A configurable DataSource & JPA EntityManager</li> \
+ <li>Templated Facelets views</li> \
+ <li>RichFaces panels & tables</li> \
+ <li>Default CSS stylesheet</li> \
+ <li>Internationalization support</li> \
+ </ul> \
+ </s:div> \
+ </h:panelGrid> \
+ </{3}> \
+ <{2}> \
+ <h:panelGrid columns="2" \
+ border="" \
+ bgcolor=""> \
+ <h:graphicImage value="/img/seamlogo.png" alt="Seam logo
& copyright" /> \
+ <s:div styleClass="info"> \
+ <p><strong>Your seam-gen project is deployed!</strong> \
+ Here are some of the features this project provides:</p> \
+ <ul class="bullets"> \
+ <{2}> \
+ <h:panelGrid columns="2" \
+ border="" \
+ bgcolor=""> \
+ <h:graphicImage value="/img/seamlogo.png" \
+ alt="Seam logo & copyright" /> \
+ <s:div styleClass="info"> \
+ <{2}> \
+ <h:panelGrid columns="2" \
+ border="" \
+ bgcolor=""> \
+ <h:graphicImage value="/img/seamlogo.png" \
+ alt="Seam logo & copyright" /> \
+ <s:div styleClass="info"> \
+ <{2}> \
+ <h:panelGrid columns="2" \
+ border="" \
+ bgcolor=""> \
+ <h:graphicImage value="/img/seamlogo.png" \
+ alt="Seam logo & copyright" /> \
+ <s:div styleClass="info"> \
+ <p><strong>Your seam-gen project is \
+ deployed!</strong> Here are some of the features this \
+ project provides:</p> \
+ <ul class="bullets"> \
+ <li>Ant build script</li> \
+ <li>Deployment to JBoss AS (EAR or WAR)</li> \
+ <li>Development & production profiles</li> \
+ <li>Integration testing using TestNG & \
+ Embedded JBoss</li> \
+ <li>JavaBean or EJB 3.0 Seam components</li> \
+ <li>JPA entity classes</li> \
+ <li>A configurable DataSource & JPA \
+ EntityManager</li> \
+ <li>Templated Facelets views</li> \
+ <li>RichFaces panels & tables</li> \
+ <li>Default CSS stylesheet</li> \
+ <li>Internationalization support</li> \
+ </ul> \
+ </s:div> \
+ </h:panelGrid> \
+ </{3}> \
+ <p><strong>Your seam-gen project is \
+ deployed!</strong> Here are some of the features this project
\
+ provides:</p> \
+ <ul class="bullets"> \
+ <li>Ant build script</li> \
+ <li>Deployment to JBoss AS (EAR or WAR)</li> \
+ <li>Development & production profiles</li> \
+ <li>Integration testing using TestNG & \
+ Embedded JBoss</li> \
+ <li>JavaBean or EJB 3.0 Seam components</li> \
+ <li>JPA entity classes</li> \
+ <li>A configurable DataSource & JPA \
+ EntityManager</li> \
+ <li>Templated Facelets views</li> \
+ <li>RichFaces panels & tables</li> \
+ <li>Default CSS stylesheet</li> \
+ <li>Internationalization support</li> \
+ </ul> \
+ </s:div> \
+ </h:panelGrid> \
+ </{3}> \
+ <p><strong>Your seam-gen project is \
+ deployed!</strong> Here are some of the features this project \
+ provides:</p> \
+ <ul class="bullets"> \
+ <li>Ant build script</li> \
+ <li>Deployment to JBoss AS (EAR or WAR)</li> \
+ <li>Development & production profiles</li> \
+ <li>Integration testing using TestNG & Embedded \
+ JBoss</li> \
+ <li>JavaBean or EJB 3.0 Seam components</li> \
+ <li>JPA entity classes</li> \
+ <li>A configurable DataSource & JPA \
+ EntityManager</li> \
+ <li>Templated Facelets views</li> \
+ <li>RichFaces panels & tables</li> \
+ <li>Default CSS stylesheet</li> \
+ <li>Internationalization support</li> \
+ </ul> \
+ </s:div> \
+ </h:panelGrid> \
+ </{3}> \
+ <li>Ant build script</li> \
+ <li>Deployment to JBoss AS (EAR or WAR)</li> \
+ <li>Development & production profiles</li> \
+ <li>Integration testing using TestNG & Embedded \
+ JBoss</li> \
+ <li>JavaBean or EJB 3.0 Seam components</li> \
+ <li>JPA entity classes</li> \
+ <li>A configurable DataSource & JPA EntityManager</li> \
+ <li>Templated Facelets views</li> \
+ <li>RichFaces panels & tables</li> \
+ <li>Default CSS stylesheet</li> \
+ <li>Internationalization support</li> \
+ </ul> \
+ </s:div> \
+ </h:panelGrid> \
+ </{3}> \
+ <{2}> \
+ <h:panelGrid columns="2" \
+ border="" \
+ bgcolor=""> \
+ <h:graphicImage value="/img/seamlogo.png" alt="Seam logo
& copyright" /> \
+ <s:div styleClass="info"> \
+ <p><strong>Your seam-gen project is deployed!</strong> \
+ Here are some of the features this project provides:</p> \
+ <ul class="bullets"> \
+ <li>Ant build script</li> \
+ <li>Deployment to JBoss AS (EAR or WAR)</li> \
+ <li>Development & production profiles</li> \
+ <li>Integration testing using TestNG & Embedded \
+ JBoss</li> \
+ <li>JavaBean or EJB 3.0 Seam components</li> \
+ <li>JPA entity classes</li> \
+ <li>A configurable DataSource & JPA EntityManager</li> \
+ <li>Templated Facelets views</li> \
+ <li>RichFaces panels & tables</li> \
+ <li>Default CSS stylesheet</li> \
+ <li>Internationalization support</li> \
+ </ul> \
+ </s:div> \
+ </h:panelGrid> \
+ </{3}> \
+ <{2}> \
+ <h:panelGrid columns="2" \
+ border="" \
+ bgcolor=""> \
+ <h:graphicImage value="/img/seamlogo.png" alt="Seam logo
& copyright" /> \
+ <s:div styleClass="info"> \
+ <p><strong>Your seam-gen project is deployed!</strong> \
+ Here are some of the features this project provides:</p> \
+ <ul class="bullets"> \
+ <{2}> \
+ <h:panelGrid columns="2" \
+ border="" \
+ bgcolor=""> \
+ <h:graphicImage value="/img/seamlogo.png" \
+ alt="Seam logo & copyright" /> \
+ <s:div styleClass="info"> \
+ <{2}> \
+ <h:panelGrid columns="2" \
+ border="" \
+ bgcolor=""> \
+ <h:graphicImage value="/img/seamlogo.png" \
+ alt="Seam logo & copyright" /> \
+ <s:div styleClass="info"> \
+ <{2}> \
+ <h:panelGrid columns="2" \
+ border="" \
+ bgcolor=""> \
+ <h:graphicImage value="/img/seamlogo.png" \
+ alt="Seam logo & copyright" /> \
+ <s:div styleClass="info"> \
+ <p><strong>Your seam-gen project is \
+ deployed!</strong> Here are some of the features this \
+ project provides:</p> \
+ <ul class="bullets"> \
+ <li>Ant build script</li> \
+ <li>Deployment to JBoss AS (EAR or WAR)</li> \
+ <li>Development & production profiles</li> \
+ <li>Integration testing using TestNG & \
+ Embedded JBoss</li> \
+ <li>JavaBean or EJB 3.0 Seam components</li> \
+ <li>JPA entity classes</li> \
+ <li>A configurable DataSource & JPA \
+ EntityManager</li> \
+ <li>Templated Facelets views</li> \
+ <li>RichFaces panels & tables</li> \
+ <li>Default CSS stylesheet</li> \
+ <li>Internationalization support</li> \
+ </ul> \
+ </s:div> \
+ </h:panelGrid> \
+ </{3}> \
+ <p><strong>Your seam-gen project is \
+ deployed!</strong> Here are some of the features this project
\
+ provides:</p> \
+ <ul class="bullets"> \
+ <li>Ant build script</li> \
+ <li>Deployment to JBoss AS (EAR or WAR)</li> \
+ <li>Development & production profiles</li> \
+ <li>Integration testing using TestNG & \
+ Embedded JBoss</li> \
+ <li>JavaBean or EJB 3.0 Seam components</li> \
+ <li>JPA entity classes</li> \
+ <li>A configurable DataSource & JPA \
+ EntityManager</li> \
+ <li>Templated Facelets views</li> \
+ <li>RichFaces panels & tables</li> \
+ <li>Default CSS stylesheet</li> \
+ <li>Internationalization support</li> \
+ </ul> \
+ </s:div> \
+ </h:panelGrid> \
+ </{3}> \
+ <p><strong>Your seam-gen project is \
+ deployed!</strong> Here are some of the features this project \
+ provides:</p> \
+ <ul class="bullets"> \
+ <li>Ant build script</li> \
+ <li>Deployment to JBoss AS (EAR or WAR)</li> \
+ <li>Development & production profiles</li> \
+ <li>Integration testing using TestNG & Embedded \
+ JBoss</li> \
+ <li>JavaBean or EJB 3.0 Seam components</li> \
+ <li>JPA entity classes</li> \
+ <li>A configurable DataSource & JPA \
+ EntityManager</li> \
+ <li>Templated Facelets views</li> \
+ <li>RichFaces panels & tables</li> \
+ <li>Default CSS stylesheet</li> \
+ <li>Internationalization support</li> \
+ </ul> \
+ </s:div> \
+ </h:panelGrid> \
+ </{3}> \
+ <li>Ant build script</li> \
+ <li>Deployment to JBoss AS (EAR or WAR)</li> \
+ <li>Development & production profiles</li> \
+ <li>Integration testing using TestNG & Embedded \
+ JBoss</li> \
+ <li>JavaBean or EJB 3.0 Seam components</li> \
+ <li>JPA entity classes</li> \
+ <li>A configurable DataSource & JPA EntityManager</li> \
+ <li>Templated Facelets views</li> \
+ <li>RichFaces panels & tables</li> \
+ <li>Default CSS stylesheet</li> \
+ <li>Internationalization support</li> \
+ </ul> \
+ </s:div> \
+ </h:panelGrid> \
+ </{3}> \
+ <{2}> \
+ <h:panelGrid columns="2" \
+ border="" \
+ bgcolor=""> \
+ <h:graphicImage value="/img/seamlogo.png" alt="Seam logo
& copyright" /> \
+ <s:div styleClass="info"> \
+ <p><strong>Your seam-gen project is deployed!</strong> \
+ Here are some of the features this project provides:</p> \
+ <ul class="bullets"> \
+ <li>Ant build script</li> \
+ <li>Deployment to JBoss AS (EAR or WAR)</li> \
+ <li>Development & production profiles</li> \
+ <li>Integration testing using TestNG & Embedded \
+ JBoss</li> \
+ <li>JavaBean or EJB 3.0 Seam components</li> \
+ <li>JPA entity classes</li> \
+ <li>A configurable DataSource & JPA EntityManager</li> \
+ <li>Templated Facelets views</li> \
+ <li>RichFaces panels & tables</li> \
+ <li>Default CSS stylesheet</li> \
+ <li>Internationalization support</li> \
+ </ul> \
+ </s:div> \
+ </h:panelGrid> \
+ </{3}> \
+ <{2}> \
+ <h:panelGrid columns="2" \
+ border="" \
+ bgcolor=""> \
+ <h:graphicImage value="/img/seamlogo.png" alt="Seam logo
& copyright" /> \
+ <s:div styleClass="info"> \
+ <p><strong>Your seam-gen project is deployed!</strong> \
+ Here are some of the features this project provides:</p> \
+ <ul class="bullets"> \
+ <{2}> \
+ <h:panelGrid columns="2" \
+ border="" \
+ bgcolor=""> \
+ <h:graphicImage value="/img/seamlogo.png" \
+ alt="Seam logo & copyright" /> \
+ <s:div styleClass="info"> \
+ <{2}> \
+ <h:panelGrid columns="2" \
+ border="" \
+ bgcolor=""> \
+ <h:graphicImage value="/img/seamlogo.png" \
+ alt="Seam logo & copyright" /> \
+ <s:div styleClass="info"> \
+ <{2}> \
+ <h:panelGrid columns="2" \
+ border="" \
+ bgcolor=""> \
+ <h:graphicImage value="/img/seamlogo.png" \
+ alt="Seam logo & copyright" /> \
+ <s:div styleClass="info"> \
+ <p><strong>Your seam-gen project is \
+ deployed!</strong> Here are some of the features this \
+ project provides:</p> \
+ <ul class="bullets"> \
+ <li>Ant build script</li> \
+ <li>Deployment to JBoss AS (EAR or WAR)</li> \
+ <li>Development & production profiles</li> \
+ <li>Integration testing using TestNG & \
+ Embedded JBoss</li> \
+ <li>JavaBean or EJB 3.0 Seam components</li> \
+ <li>JPA entity classes</li> \
+ <li>A configurable DataSource & JPA \
+ EntityManager</li> \
+ <li>Templated Facelets views</li> \
+ <li>RichFaces panels & tables</li> \
+ <li>Default CSS stylesheet</li> \
+ <li>Internationalization support</li> \
+ </ul> \
+ </s:div> \
+ </h:panelGrid> \
+ </{3}> \
+ <p><strong>Your seam-gen project is \
+ deployed!</strong> Here are some of the features this project
\
+ provides:</p> \
+ <ul class="bullets"> \
+ <li>Ant build script</li> \
+ <li>Deployment to JBoss AS (EAR or WAR)</li> \
+ <li>Development & production profiles</li> \
+ <li>Integration testing using TestNG & \
+ Embedded JBoss</li> \
+ <li>JavaBean or EJB 3.0 Seam components</li> \
+ <li>JPA entity classes</li> \
+ <li>A configurable DataSource & JPA \
+ EntityManager</li> \
+ <li>Templated Facelets views</li> \
+ <li>RichFaces panels & tables</li> \
+ <li>Default CSS stylesheet</li> \
+ <li>Internationalization support</li> \
+ </ul> \
+ </s:div> \
+ </h:panelGrid> \
+ </{3}> \
+ <p><strong>Your seam-gen project is \
+ deployed!</strong> Here are some of the features this project \
+ provides:</p> \
+ <ul class="bullets"> \
+ <li>Ant build script</li> \
+ <li>Deployment to JBoss AS (EAR or WAR)</li> \
+ <li>Development & production profiles</li> \
+ <li>Integration testing using TestNG & Embedded \
+ JBoss</li> \
+ <li>JavaBean or EJB 3.0 Seam components</li> \
+ <li>JPA entity classes</li> \
+ <li>A configurable DataSource & JPA \
+ EntityManager</li> \
+ <li>Templated Facelets views</li> \
+ <li>RichFaces panels & tables</li> \
+ <li>Default CSS stylesheet</li> \
+ <li>Internationalization support</li> \
+ </ul> \
+ </s:div> \
+ </h:panelGrid> \
+ </{3}> \
+ <li>Ant build script</li> \
+ <li>Deployment to JBoss AS (EAR or WAR)</li> \
+ <li>Development & production profiles</li> \
+ <li>Integration testing using TestNG & Embedded \
+ JBoss</li> \
+ <li>JavaBean or EJB 3.0 Seam components</li> \
+ <li>JPA entity classes</li> \
+ <li>A configurable DataSource & JPA EntityManager</li> \
+ <li>Templated Facelets views</li> \
+ <li>RichFaces panels & tables</li> \
+ <li>Default CSS stylesheet</li> \
+ <li>Internationalization support</li> \
+ </ul> \
+ </s:div> \
+ </h:panelGrid> \
+ </{3}> \
+ <{2}> \
+ <h:panelGrid columns="2" \
+ border="" \
+ bgcolor=""> \
+ <h:graphicImage value="/img/seamlogo.png" alt="Seam logo
& copyright" /> \
+ <s:div styleClass="info"> \
+ <p><strong>Your seam-gen project is deployed!</strong> \
+ Here are some of the features this project provides:</p> \
+ <ul class="bullets"> \
+ <li>Ant build script</li> \
+ <li>Deployment to JBoss AS (EAR or WAR)</li> \
+ <li>Development & production profiles</li> \
+ <li>Integration testing using TestNG & Embedded \
+ JBoss</li> \
+ <li>JavaBean or EJB 3.0 Seam components</li> \
+ <li>JPA entity classes</li> \
+ <li>A configurable DataSource & JPA EntityManager</li> \
+ <li>Templated Facelets views</li> \
+ <li>RichFaces panels & tables</li> \
+ <li>Default CSS stylesheet</li> \
+ <li>Internationalization support</li> \
+ </ul> \
+ </s:div> \
+ </h:panelGrid> \
+ </{3}> \
+ <{2}> \
+ <h:panelGrid columns="2" \
+ border="" \
+ bgcolor=""> \
+ <h:graphicImage value="/img/seamlogo.png" alt="Seam logo
& copyright" /> \
+ <s:div styleClass="info"> \
+ <p><strong>Your seam-gen project is deployed!</strong> \
+ Here are some of the features this project provides:</p> \
+ <ul class="bullets"> \
+ <{2}> \
+ <h:panelGrid columns="2" \
+ border="" \
+ bgcolor=""> \
+ <h:graphicImage value="/img/seamlogo.png" \
+ alt="Seam logo & copyright" /> \
+ <s:div styleClass="info"> \
+ <{2}> \
+ <h:panelGrid columns="2" \
+ border="" \
+ bgcolor=""> \
+ <h:graphicImage value="/img/seamlogo.png" \
+ alt="Seam logo & copyright" /> \
+ <s:div styleClass="info"> \
+ <{2}> \
+ <h:panelGrid columns="2" \
+ border="" \
+ bgcolor=""> \
+ <h:graphicImage value="/img/seamlogo.png" \
+ alt="Seam logo & copyright" /> \
+ <s:div styleClass="info"> \
+ <p><strong>Your seam-gen project is \
+ deployed!</strong> Here are some of the features this \
+ project provides:</p> \
+ <ul class="bullets"> \
+ <li>Ant build script</li> \
+ <li>Deployment to JBoss AS (EAR or WAR)</li> \
+ <li>Development & production profiles</li> \
+ <li>Integration testing using TestNG & \
+ Embedded JBoss</li> \
+ <li>JavaBean or EJB 3.0 Seam components</li> \
+ <li>JPA entity classes</li> \
+ <li>A configurable DataSource & JPA \
+ EntityManager</li> \
+ <li>Templated Facelets views</li> \
+ <li>RichFaces panels & tables</li> \
+ <li>Default CSS stylesheet</li> \
+ <li>Internationalization support</li> \
+ </ul> \
+ </s:div> \
+ </h:panelGrid> \
+ </{3}> \
+ <p><strong>Your seam-gen project is \
+ deployed!</strong> Here are some of the features this project
\
+ provides:</p> \
+ <ul class="bullets"> \
+ <li>Ant build script</li> \
+ <li>Deployment to JBoss AS (EAR or WAR)</li> \
+ <li>Development & production profiles</li> \
+ <li>Integration testing using TestNG & \
+ Embedded JBoss</li> \
+ <li>JavaBean or EJB 3.0 Seam components</li> \
+ <li>JPA entity classes</li> \
+ <li>A configurable DataSource & JPA \
+ EntityManager</li> \
+ <li>Templated Facelets views</li> \
+ <li>RichFaces panels & tables</li> \
+ <li>Default CSS stylesheet</li> \
+ <li>Internationalization support</li> \
+ </ul> \
+ </s:div> \
+ </h:panelGrid> \
+ </{3}> \
+ <p><strong>Your seam-gen project is \
+ deployed!</strong> Here are some of the features this project \
+ provides:</p> \
+ <ul class="bullets"> \
+ <li>Ant build script</li> \
+ <li>Deployment to JBoss AS (EAR or WAR)</li> \
+ <li>Development & production profiles</li> \
+ <li>Integration testing using TestNG & Embedded \
+ JBoss</li> \
+ <li>JavaBean or EJB 3.0 Seam components</li> \
+ <li>JPA entity classes</li> \
+ <li>A configurable DataSource & JPA \
+ EntityManager</li> \
+ <li>Templated Facelets views</li> \
+ <li>RichFaces panels & tables</li> \
+ <li>Default CSS stylesheet</li> \
+ <li>Internationalization support</li> \
+ </ul> \
+ </s:div> \
+ </h:panelGrid> \
+ </{3}> \
+ <li>Ant build script</li> \
+ <li>Deployment to JBoss AS (EAR or WAR)</li> \
+ <li>Development & production profiles</li> \
+ <li>Integration testing using TestNG & Embedded \
+ JBoss</li> \
+ <li>JavaBean or EJB 3.0 Seam components</li> \
+ <li>JPA entity classes</li> \
+ <li>A configurable DataSource & JPA EntityManager</li> \
+ <li>Templated Facelets views</li> \
+ <li>RichFaces panels & tables</li> \
+ <li>Default CSS stylesheet</li> \
+ <li>Internationalization support</li> \
+ </ul> \
+ </s:div> \
+ </h:panelGrid> \
+ </{3}> \
+ <{2}> \
+ <h:panelGrid columns="2" \
+ border="" \
+ bgcolor=""> \
+ <h:graphicImage value="/img/seamlogo.png" alt="Seam logo
& copyright" /> \
+ <s:div styleClass="info"> \
+ <p><strong>Your seam-gen project is deployed!</strong> \
+ Here are some of the features this project provides:</p> \
+ <ul class="bullets"> \
+ <li>Ant build script</li> \
+ <li>Deployment to JBoss AS (EAR or WAR)</li> \
+ <li>Development & production profiles</li> \
+ <li>Integration testing using TestNG & Embedded \
+ JBoss</li> \
+ <li>JavaBean or EJB 3.0 Seam components</li> \
+ <li>JPA entity classes</li> \
+ <li>A configurable DataSource & JPA EntityManager</li> \
+ <li>Templated Facelets views</li> \
+ <li>RichFaces panels & tables</li> \
+ <li>Default CSS stylesheet</li> \
+ <li>Internationalization support</li> \
+ </ul> \
+ </s:div> \
+ </h:panelGrid> \
+ </{3}> \
+ <{2}> \
+ <h:panelGrid columns="2" \
+ border="" \
+ bgcolor=""> \
+ <h:graphicImage value="/img/seamlogo.png" alt="Seam logo
& copyright" /> \
+ <s:div styleClass="info"> \
+ <p><strong>Your seam-gen project is deployed!</strong> \
+ Here are some of the features this project provides:</p> \
+ <ul class="bullets"> \
+ <{2}> \
+ <h:panelGrid columns="2" \
+ border="" \
+ bgcolor=""> \
+ <h:graphicImage value="/img/seamlogo.png" \
+ alt="Seam logo & copyright" /> \
+ <s:div styleClass="info"> \
+ <{2}> \
+ <h:panelGrid columns="2" \
+ border="" \
+ bgcolor=""> \
+ <h:graphicImage value="/img/seamlogo.png" \
+ alt="Seam logo & copyright" /> \
+ <s:div styleClass="info"> \
+ <{2}> \
+ <h:panelGrid columns="2" \
+ border="" \
+ bgcolor=""> \
+ <h:graphicImage value="/img/seamlogo.png" \
+ alt="Seam logo & copyright" /> \
+ <s:div styleClass="info"> \
+ <p><strong>Your seam-gen project is \
+ deployed!</strong> Here are some of the features this \
+ project provides:</p> \
+ <ul class="bullets"> \
+ <li>Ant build script</li> \
+ <li>Deployment to JBoss AS (EAR or WAR)</li> \
+ <li>Development & production profiles</li> \
+ <li>Integration testing using TestNG & \
+ Embedded JBoss</li> \
+ <li>JavaBean or EJB 3.0 Seam components</li> \
+ <li>JPA entity classes</li> \
+ <li>A configurable DataSource & JPA \
+ EntityManager</li> \
+ <li>Templated Facelets views</li> \
+ <li>RichFaces panels & tables</li> \
+ <li>Default CSS stylesheet</li> \
+ <li>Internationalization support</li> \
+ </ul> \
+ </s:div> \
+ </h:panelGrid> \
+ </{3}> \
+ <p><strong>Your seam-gen project is \
+ deployed!</strong> Here are some of the features this project
\
+ provides:</p> \
+ <ul class="bullets"> \
+ <li>Ant build script</li> \
+ <li>Deployment to JBoss AS (EAR or WAR)</li> \
+ <li>Development & production profiles</li> \
+ <li>Integration testing using TestNG & \
+ Embedded JBoss</li> \
+ <li>JavaBean or EJB 3.0 Seam components</li> \
+ <li>JPA entity classes</li> \
+ <li>A configurable DataSource & JPA \
+ EntityManager</li> \
+ <li>Templated Facelets views</li> \
+ <li>RichFaces panels & tables</li> \
+ <li>Default CSS stylesheet</li> \
+ <li>Internationalization support</li> \
+ </ul> \
+ </s:div> \
+ </h:panelGrid> \
+ </{3}> \
+ <p><strong>Your seam-gen project is \
+ deployed!</strong> Here are some of the features this project \
+ provides:</p> \
+ <ul class="bullets"> \
+ <li>Ant build script</li> \
+ <li>Deployment to JBoss AS (EAR or WAR)</li> \
+ <li>Development & production profiles</li> \
+ <li>Integration testing using TestNG & Embedded \
+ JBoss</li> \
+ <li>JavaBean or EJB 3.0 Seam components</li> \
+ <li>JPA entity classes</li> \
+ <li>A configurable DataSource & JPA \
+ EntityManager</li> \
+ <li>Templated Facelets views</li> \
+ <li>RichFaces panels & tables</li> \
+ <li>Default CSS stylesheet</li> \
+ <li>Internationalization support</li> \
+ </ul> \
+ </s:div> \
+ </h:panelGrid> \
+ </{3}> \
+ <li>Ant build script</li> \
+ <li>Deployment to JBoss AS (EAR or WAR)</li> \
+ <li>Development & production profiles</li> \
+ <li>Integration testing using TestNG & Embedded \
+ JBoss</li> \
+ <li>JavaBean or EJB 3.0 Seam components</li> \
+ <li>JPA entity classes</li> \
+ <li>A configurable DataSource & JPA EntityManager</li> \
+ <li>Templated Facelets views</li> \
+ <li>RichFaces panels & tables</li> \
+ <li>Default CSS stylesheet</li> \
+ <li>Internationalization support</li> \
+ </ul> \
+ </s:div> \
+ </h:panelGrid> \
+ </{3}> \
+ </ul> \
+ </s:div> \
+ </h:panelGrid> \
+ </{3}> \
+ <li>Ant build script</li> \
+ <li>Deployment to JBoss AS (EAR or WAR)</li> \
+ <li>Development & production profiles</li> \
+ <li>Integration testing using TestNG & Embedded JBoss</li> \
+ <li>JavaBean or EJB 3.0 Seam components</li> \
+ <li>JPA entity classes</li> \
+ <li>A configurable DataSource & JPA EntityManager</li> \
+ <li>Templated Facelets views</li> \
+ <li>RichFaces panels & tables</li> \
+ <li>Default CSS stylesheet</li> \
+ <li>Internationalization support</li> \
+ </ul> \
+ </s:div> \
+ </h:panelGrid> \
+ </{3}> \
+ <{2}> \
+ <h:panelGrid columns="2" \
+ border="" \
+ bgcolor=""> \
+ <h:graphicImage value="/img/seamlogo.png" alt="Seam logo &
copyright" /> \
+ <s:div styleClass="info"> \
+ <p><strong>Your seam-gen project is deployed!</strong> Here are \
+ some of the features this project provides:</p> \
+ <ul class="bullets"> \
+ <li>Ant build script</li> \
+ <li>Deployment to JBoss AS (EAR or WAR)</li> \
+ <li>Development & production profiles</li> \
+ <li>Integration testing using TestNG & Embedded JBoss</li> \
+ <li>JavaBean or EJB 3.0 Seam components</li> \
+ <li>JPA entity classes</li> \
+ <li>A configurable DataSource & JPA EntityManager</li> \
+ <li>Templated Facelets views</li> \
+ <li>RichFaces panels & tables</li> \
+ <li>Default CSS stylesheet</li> \
+ <li>Internationalization support</li> \
+ </ul> \
+ </s:div> \
+ </h:panelGrid> \
+ </{3}> \
+ <{2}> \
+ <h:panelGrid columns="2" \
+ border="" \
+ bgcolor=""> \
+ <h:graphicImage value="/img/seamlogo.png" alt="Seam logo &
copyright" /> \
+ <s:div styleClass="info"> \
+ <p><strong>Your seam-gen project is deployed!</strong> Here are \
+ some of the features this project provides:</p> \
+ <ul class="bullets"> \
+ <{2}> \
+ <h:panelGrid columns="2" \
+ border="" \
+ bgcolor=""> \
+ <h:graphicImage value="/img/seamlogo.png" alt="Seam logo &
copyright" /> \
+ <s:div styleClass="info"> \
+ <{2}> \
+ <h:panelGrid columns="2" \
+ border="" \
+ bgcolor=""> \
+ <h:graphicImage value="/img/seamlogo.png" alt="Seam logo
& copyright" /> \
+ <s:div styleClass="info"> \
+ <{2}> \
+ <h:panelGrid columns="2" \
+ border="" \
+ bgcolor=""> \
+ <h:graphicImage value="/img/seamlogo.png" alt="Seam logo
& copyright" /> \
+ <s:div styleClass="info"> \
+ <p><strong>Your seam-gen project is \
+ deployed!</strong> Here are some of the features this project \
+ provides:</p> \
+ <ul class="bullets"> \
+ <li>Ant build script</li> \
+ <li>Deployment to JBoss AS (EAR or WAR)</li> \
+ <li>Development & production profiles</li> \
+ <li>Integration testing using TestNG & Embedded \
+ JBoss</li> \
+ <li>JavaBean or EJB 3.0 Seam components</li> \
+ <li>JPA entity classes</li> \
+ <li>A configurable DataSource & JPA EntityManager</li> \
+ <li>Templated Facelets views</li> \
+ <li>RichFaces panels & tables</li> \
+ <li>Default CSS stylesheet</li> \
+ <li>Internationalization support</li> \
+ </ul> \
+ </s:div> \
+ </h:panelGrid> \
+ </{3}> \
+ <p><strong>Your seam-gen project is deployed!</strong> \
+ Here are some of the features this project provides:</p> \
+ <ul class="bullets"> \
+ <li>Ant build script</li> \
+ <li>Deployment to JBoss AS (EAR or WAR)</li> \
+ <li>Development & production profiles</li> \
+ <li>Integration testing using TestNG & Embedded \
+ JBoss</li> \
+ <li>JavaBean or EJB 3.0 Seam components</li> \
+ <li>JPA entity classes</li> \
+ <li>A configurable DataSource & JPA EntityManager</li> \
+ <li>Templated Facelets views</li> \
+ <li>RichFaces panels & tables</li> \
+ <li>Default CSS stylesheet</li> \
+ <li>Internationalization support</li> \
+ </ul> \
+ </s:div> \
+ </h:panelGrid> \
+ </{3}> \
+ <p><strong>Your seam-gen project is deployed!</strong> Here \
+ are some of the features this project provides:</p> \
+ <ul class="bullets"> \
+ <li>Ant build script</li> \
+ <li>Deployment to JBoss AS (EAR or WAR)</li> \
+ <li>Development & production profiles</li> \
+ <li>Integration testing using TestNG & Embedded JBoss</li> \
+ <li>JavaBean or EJB 3.0 Seam components</li> \
+ <li>JPA entity classes</li> \
+ <li>A configurable DataSource & JPA EntityManager</li> \
+ <li>Templated Facelets views</li> \
+ <li>RichFaces panels & tables</li> \
+ <li>Default CSS stylesheet</li> \
+ <li>Internationalization support</li> \
+ </ul> \
+ </s:div> \
+ </h:panelGrid> \
+ </{3}> \
+ <li>Ant build script</li> \
+ <li>Deployment to JBoss AS (EAR or WAR)</li> \
+ <li>Development & production profiles</li> \
+ <li>Integration testing using TestNG & Embedded JBoss</li> \
+ <li>JavaBean or EJB 3.0 Seam components</li> \
+ <li>JPA entity classes</li> \
+ <li>A configurable DataSource & JPA EntityManager</li> \
+ <li>Templated Facelets views</li> \
+ <li>RichFaces panels & tables</li> \
+ <li>Default CSS stylesheet</li> \
+ <li>Internationalization support</li> \
+ </ul> \
+ </s:div> \
+ </h:panelGrid> \
+ </{3}> \
+ </ui:define> \
+</ui:composition>
\ No newline at end of file