Подтвердить что ты не робот

Как использовать альтернативную версию Mojarra с Glassfish 4 (Netbeans/Maven)

Я использовал Eclipse/ Ant в течение некоторого времени и решил взглянуть на Netbeans/Maven для моей разработки JSF. По пути я думал, что попытаюсь использовать версию Mojarra, которая новее, чем тот, который я установил в glassfish/modules. Кажется, я не могу заставить это работать, и поскольку я новичок в Maven и Netbeans, я не уверен, что это что-то с ними или что-то еще.

Я сделал очень простое приложение, которое использует резервную копию bean для печати версии Mojarra со страницы индекса:

Info.java

@Named
@RequestScoped
public class Info
{
  public String getVersion()
  {
    return FacesContext.class.getPackage().getImplementationVersion();
  }
}

index.xhtml

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://xmlns.jcp.org/jsf/html">
  <h:body>
    <h:outputText value="The Mojarra version is #{info.version}" />
  </h:body>
</html>

Когда я запускаю это, я вижу содержимое страницы

Версия Моджары - 2.2.5

как я ожидал (я поставил 2.2.5 jar в glassfish/modules некоторое время назад). Затем я добавил зависимость для Mojarra 2.2.7, которую я нашел из веб-сайта Mojarra:

<dependency>
  <groupId>org.glassfish</groupId>
  <artifactId>javax.faces</artifactId>
  <version>2.2.x</version>
</dependency>

с заменой "x" на "7". Получившийся POM файл выглядит так (большинство из них - шаблон из Netbeans):

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.mycompany</groupId>
  <artifactId>mavenproject1</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>

  <name>mavenproject1</name>

  <properties>
    <endorsed.dir>${project.build.directory}/endorsed</endorsed.dir>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>
    <dependency>
      <groupId>javax</groupId>
      <artifactId>javaee-web-api</artifactId>
      <version>7.0</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.glassfish</groupId>
      <artifactId>javax.faces</artifactId>
      <version>2.2.7</version>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.1</version>
        <configuration>
          <source>1.8</source>
          <target>1.8</target>
          <compilerArguments>
            <endorseddirs>${endorsed.dir}</endorseddirs>
          </compilerArguments>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-war-plugin</artifactId>
        <version>2.3</version>
        <configuration>
          <failOnMissingWebXml>false</failOnMissingWebXml>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-dependency-plugin</artifactId>
        <version>2.6</version>
        <executions>
          <execution>
            <phase>validate</phase>
            <goals>
              <goal>copy</goal>
            </goals>
            <configuration>
              <outputDirectory>${endorsed.dir}</outputDirectory>
              <silent>true</silent>
              <artifactItems>
                <artifactItem>
                  <groupId>javax</groupId>
                  <artifactId>javaee-endorsed-api</artifactId>
                  <version>7.0</version>
                  <type>jar</type>
                </artifactItem>
              </artifactItems>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
</project>

Когда я запускаю приложение, нет никакой разницы в выходе, он по-прежнему показывает версию 2.2.5. Я нашел эту статью с ответом @BalusC, в котором упоминается, что Glassfish должно быть явно сказано переопределить установленную версию лиц для использования альтернативной версии, развернутой с приложением, это в WEB-INF/glassfish-web.xml для ранних версий GF3:

<class-loader delegate="false" />
<property name="useBundledJsf" value="true" />

Даже если я использую GF4, я думал, что попробую, и добавил glassfish-web.xml с этим:

GlassFish-web.xml:

<glassfish-web-app error-url="">
  <class-loader delegate="false" />
  <property name="useBundledJsf" value="true" />
</glassfish-web-app>

В результате отображается страница с сообщением с пустой строкой версии:

Версия Mojarra

В журнале GF также отсутствуют ошибки. Созданный .war файл содержит WEB-INF/lib/javax.faces-2.2.7.jar, поэтому я подозреваю, что проблема имеет какое-то отношение к конфигурации GF, а не к упаковке Netbeans/Maven.

Я знаю, что могу загрузить банку 2.2.7 и поместить ее в каталог glassfish/modules (так я начал использовать 2.2.5). Но конечная цель - попробовать альтернативные версии JSF с помощью приложения (в идеале, просто изменив координаты Maven для зависимости JSF), вместо того, чтобы изменять установку GF. Нужно ли это сделать через конфигурацию приложения и без изменения установки GF?


Обновление 9/14/2015: Я построил новый проект Netbeans:
  • GlassFish 4.1 (из коробки), который имеет Mojarra 2.2.7, по умолчанию.
  • Проект NB Maven/Web Application с JSF 2.2 Framework.
  • Изменен файл index.xhtml, как показано выше.
  • Добавлен класс Info.java, содержащий содержимое выше (javax.enterprise.context.RequestScoped, javax.inject.Named).
  • Добавлен WEB-INF/glassfish-web.xml и добавлены строки, показанные выше.
  • Добавлена ​​зависимость к файлу pom.xml, как показано выше, но с использованием javax.faces версии 2.2.12.

По сути, я получаю тот же результат. Если свойство useBundledJsf не находится в файле glassfish-web.xml, версия отображается как 2.2.7 (хотя файл войны имеет 2.2.12). И если имеется свойство свойства useBundledJsf, а также изменение класса-загрузчика на "false", версия пуста.

Я также установил Mojarra 2.2.10, изменив файл javax.faces в установке glassfish, чтобы использовать 2.2.10. Когда я это делаю, я получаю те же результаты - либо версия пуста, либо она показывает 2.2.10 (2.2.12 все еще настроен и в войне в обоих случаях).

4b9b3361

Ответ 1

Альтернативным решением может быть попытка Payara 4.1.1.154, поскольку он поставляется в комплекте с Mojarra 2.2.12

Я думаю, что это может быть хорошим решением для ваших нужд.

This section details the modules that have been updated since the last release (4.1.153).

Mojarra 2.2.12
Webservices 2.3.2-b608
JAXB 2.2.12-b141219.1637
JAXB-API 2.2.13-b141020.1521
Weld 2.2.16.Final
Tyrus 1.11
JBatch 1.0.1-b09
Grizzly 2.3.23
HK2 2.4.0-b32
Jersey 2.22
Hazelcast 3.5.2