Данная статья описывает по шагам как настроить Tomcat (на текущий момент версия 6.0.26) на работу с разными компонентами Java EE 6.
- Unified EL 2.2 — язык выражений для JSF
- JSF 2.0 реализация — Mojarra (документация)
- JSR 299 реализация — Weld (документация)
- JSR 303 Bean Validation реализация — Hibernate Validator (документация)
- JPA 2.0 реализация — EclipseLink
Tomcat
Почему именно Tomcat а не Glassfish V3? Для меня важно использование именно Tomcat т.к. он компактен, быстро работает и легко объединяется в кластер под управлением Apache Httpd. V3 пока не умеет работать в кластере.Установка
- Установите JDK 6.
- Настройте переменную окружения JAVA_HOME
- Скачайте архив apache-tomcat-6.0.26.zip и распакуйте в текущую папку. Будет создана папка apache-tomcat-6.0.26.
> bin/startup.(bat|sh) - откроет новое окно или<br/>> bin/catalina.(bat|sh) run - запустит в новом окне.
Для увеличения памяти и возможности отладки перед запуском catalina.bat можно указать переменную окружения JAVA_OPTS:set JAVA_OPTS=-Xmx512m -XX:MaxPermSize=256m -Xdebug -Xrunjdwp:transport=dt_socket,address=1025,server=y,suspend=n<br/>export JAVA_OPTS=-Xmx512m -XX:MaxPermSize=256m -Xdebug -Xrunjdwp:transport=dt_socket,address=1025,server=y,suspend=n
Unified EL 2.2
Язык выражений нужен как в JSP при использовании библиотек тэгов, так и в facelets. Основные улучшения в новой версии (см. список нововведений) — возможность вызывать методы, в т.ч. с параметрами.${application.getRealPath('/data')}
Установка
- Удалите lib/el-api.jar из Tomcat.
- Скопируйте реализацию el-api-2.2.jar и el-impl-2.2.jar в папку lib в Tomcat. Это jar-ы из Glassfish V3.
- Добавьте в WEB-INF/web.xml в вашем приложении следующие строки:
<context-param><br/><param-name>com.sun.faces.expressionFactory</param-name><br/><param-value>com.sun.el.ExpressionFactoryImpl</param-value><br/></context-param>
Mojarra
Первая реализация JSF 2. Стабильно и быстро работает. Помимо реализации JSF нам также понадобится установить JSTL 1.2.Установка
- Скачайте mojarra-2.0.2-FCS-binary.zip
- Скопируйте из архива из папки mojarra-2.0.2-FCS/lib jsf-api.jar и jsf-impl.jar в папку WEB-INF/lib вашего приложения.
- Скопируйте jstl 1.2 в папку WEB-INF/lib вашего приложения.
- Добавьте в WEB-INF/web.xml в вашем приложении следующие строки:
<servlet><br/> <servlet-name>FacesServlet</servlet-name><br/> <servlet-class>javax.faces.webapp.FacesServlet</servlet-class><br/> <load-on-startup>1</load-on-startup><br/></servlet><br/><servlet-mapping><br/> <servlet-name>FacesServlet</servlet-name><br/> <url-pattern>*.xhtml</url-pattern><br/></servlet-mapping>
- Создайте файл WEB-INF/faces-config.xml в вашем приложении:
<faces-config xmlns="http://java.sun.com/xml/ns/javaee"<br/> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"<br/> xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"<br/> version="2.0"><br/></faces-config>
Weld
Weld реализует спецификацию JSR 299 Contexts and Dependency Injection.Вкратце Weld позволяет устанавливать значения полей автоматически с помощью аннотаций.Установка
- Скачайте weld-1.0.1-Final.zip
- Создайте файл WEB-INF/beans.xml со следующим содержимым:
Это нужно чтобы Weld сканировал веб-приложение на предмет Java-Beans которые будут участвовать в CDI.<?xml version="1.0" encoding="UTF-8"?><br/><beans/>
- Скопируйте weld-1.0.1-Final/artifacts/weld/weld-tomcat-support.jar из архива в lib папку в Tomcat.
- Cоздайте в вашем приложении файл META-INF/context.xml со следующим содержимым:
<?xml version="1.0" encoding="UTF-8"?><br/><Context><br/><!-- Declare Weld Bean Manager --><br/><Resource name="BeanManager"<br/> auth="Container"<br/> type="javax.enterprise.inject.spi.BeanManager"<br/> factory="org.jboss.weld.resources.ManagerObjectFactory"/><br/><!-- For Weld to support Servlet Injection --><br/><Listener className="org.jboss.weld.environment.tomcat.WeldLifecycleListener"/><br/></Context>
- Скопируйте weld-1.0.1-Final/artifacts/weld/weld-servlet.jar из архива в папку WEB-INF/lib вашего приложения.
- Добавьте в WEB-INF/web.xml следующие строки:
<!-- Weld listener --><br/><listener><br/> <listener-class>org.jboss.weld.environment.servlet.Listener</listener-class><br/></listener><br/><!-- Reference to Weld Bean Manager --><br/><resource-env-ref><br/> <description>Object factory for the CDI Bean Manager</description><br/> <resource-env-ref-name>BeanManager</resource-env-ref-name><br/> <resource-env-ref-type>javax.enterprise.inject.spi.BeanManager</resource-env-ref-type><br/></resource-env-ref>
Hibernate Validator
JSR 303 Bean Validation дает простой способ применения правил валидации как для JSF так и для JPA. Данные правила определяются через аннотации к полям в Java Beans:@NotNull@Size(min = 1)<br/>private String username;
Установка
- Скачайте hibernate-validator-4.0.2.GA-dist.zip
- Скопируйте hibernate-validator-4.0.2.GA/hibernate-validator-4.0.2.GA.jar из архива в папку WEB-INF/lib вашего приложения.
- Скопируйте из папки в архиве hibernate-validator-4.0.2.GA/lib дополнительные библиотеки slf4j-api-1.5.6.jar, validation-api-1.0.0.GA.jar в папку WEB-INF/lib вашего приложения.
EclipseLink
JPA позволяет сохранять в БД Java Beans без использования SQL. Нужные вызовы и если нужно схема БД создается автоматически. При этом используется простой интерфейс EntityManager. К сожалению т.к. Tomcat не является полноценным Java EE сервером то некоторые возможности JPA (управление транзакциями, автоматическое получение EntityManager) не доступны. Также все объекты которые будут сохранятся в БД должны быть описаны в файле конфигурации.Установка
- Данная установка предполагает что у вас настоена MySQL БД на локальном компьютере. Пароль у root пользователя БД — "" (пустой пароль).
- Cкачайте драйвер для БД и положите JAR в папку lib в Tomcat.
- Скачайте eclipselink-2.0.1.v20100213-r6600.zip
- Скопируйте eclipselink/jlib/jpa/javax.persistence_2.0.0.v201002051058.jar из архива в папку WEB-INF/lib вашего приложения.
- Скопируйте eclipselink/jlib/eclipselink.jar из архива в папку WEB-INF/lib вашего приложения.
- Создайте в вашем приложении файл WEB-INF/classes/META-INF/persistence.xml со следующим содержимым:
<?xml version="1.0" encoding="UTF-8"?><br><persistence version="1.0"<br>xmlns="http://java.sun.com/xml/ns/persistence"<br>xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"<br>xsi:schemaLocation="http://java.sun.com/xml/ns/persistence java.sun.com/xml/ns/persistence/persistence_1_0.xsd"><br> <persistence-unit name="sample" transaction-type="RESOURCE_LOCAL"><br> <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider><br> <!-- <class>your.class.Here</class> --><br> <exclude-unlisted-classes>false</exclude-unlisted-classes><br> <properties><br> <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/><br> <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/test"/><br> <property name="javax.persistence.jdbc.user" value="root"/><br> <property name="javax.persistence.jdbc.password" value=""/><br> <property name="eclipselink.logging.logger" value="JavaLogger" /><br> <property name="eclipselink.logging.level" value="FINEST"/><br> <!-- Can specify: create-tables, drop-and-create-tables --><br> <property name="eclipselink.ddl-generation" value="create-tables"/><br> <property name="eclipselink.ddl-generation.output-mode" value="database"/><br> <property name="eclipselink.target-database" value="MYSQL"/><br> <property name="eclipselink.jdbc.native-sql" value="true"/><br> </properties><br> </persistence-unit><br></persistence>
Скачать
- Настроенный Apache Tomcat 6.0.26
- Пример приложения (настроен на работу в Eclipse)
Ccылки
- HowToEnableEl22
- Integrating JSF 2.0 and Weld with Tomcat6
- JSF2: How to add the magic of EL (EL2) to JSF
- What's New in JSF 2?
- EclipseLink: Tomcat Web Tutorial
- JSF 2.0 and Tomcat