You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by hn...@apache.org on 2023/08/03 14:54:28 UTC

[myfaces-tobago] 03/06: feature: Jakarta EE 10

This is an automated email from the ASF dual-hosted git repository.

hnoeth pushed a commit to branch JakartaEE10
in repository https://gitbox.apache.org/repos/asf/myfaces-tobago.git

commit 604e2923774c8bb933f257b4c2b7de42056c1fe9
Author: Henning Noeth <hn...@apache.org>
AuthorDate: Wed Jul 26 12:59:49 2023 +0200

    feature: Jakarta EE 10
    
    * support Jakarta EE 10 (Faces 4.0); drop support for Jakarta EE 9
    * switch Faces 3.0 to 4.0 in POM
    * TobagoActionSource no longer needed, because jakarta.faces.el.MethodBinding is removed and with it the deprecated methods implemented by TobagoActionSource
    * DefaultResourceResolver deleted, because jakarta.faces.view.facelets.ResourceResolver is removed. The ResourceResolver was deprecated as of Jakarta Server Faces 2.2. The same functionality is more correctly provided by jakarta.faces.application.ResourceHandler. So hopefully Tobago don't need a default implementation.
    * AbstractUITabGroup now implements ActionSource2 instead of TobagoActionSource (which had ActionSource2 implemented)
    * DeltaStateHelper: implement new eval() method
    * fix myfaces-test imports and exclude outdated junit-jupiter version
    * update Jakarta dependencies in POM; adjust MockHttpSession
    
    Issue: TOBAGO-2094
---
 pom.xml                                            | 39 ++++++------
 tobago-core/pom.xml                                |  2 +-
 .../myfaces/tobago/event/TobagoActionSource.java   | 71 ----------------------
 .../tobago/facelets/DefaultResourceResolver.java   | 51 ----------------
 .../tobago/internal/behavior/DeltaStateHelper.java |  9 ++-
 .../internal/component/AbstractUITabGroup.java     | 23 ++++---
 .../internal/config/AbstractTobagoTestBase.java    |  2 +-
 .../internal/mock/servlet/MockHttpSession.java     | 40 ------------
 .../webapp/TobagoResponseWriterUnitTest.java       |  2 +-
 tobago-example/pom.xml                             | 28 ++++-----
 tobago-example/tobago-example-demo/pom.xml         |  4 +-
 11 files changed, 59 insertions(+), 212 deletions(-)

diff --git a/pom.xml b/pom.xml
index 478345c64e..b9fce60a3e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -33,8 +33,8 @@
 
   <properties>
     <frontend.skip>true</frontend.skip>
-    <myfaces30.version>3.0.2</myfaces30.version>
-    <mojarra30.version>3.0.5</mojarra30.version>
+    <myfaces40.version>4.0.1</myfaces40.version>
+    <mojarra40.version>4.0.3</mojarra40.version>
     <openwebbeans.version>2.0.27</openwebbeans.version>
     <slf4j.version>2.0.7</slf4j.version>
     <logback.version>1.4.8</logback.version>
@@ -147,19 +147,19 @@
       <dependency>
         <groupId>org.apache.myfaces.core</groupId>
         <artifactId>myfaces-api</artifactId>
-        <version>${myfaces30.version}</version>
+        <version>${myfaces40.version}</version>
         <optional>true</optional>
       </dependency>
       <dependency>
         <groupId>org.apache.myfaces.core</groupId>
         <artifactId>myfaces-impl</artifactId>
-        <version>${myfaces30.version}</version>
+        <version>${myfaces40.version}</version>
         <optional>true</optional>
       </dependency>
       <dependency>
         <groupId>org.glassfish</groupId>
         <artifactId>jakarta.faces</artifactId>
-        <version>${mojarra30.version}</version>
+        <version>${mojarra40.version}</version>
         <optional>true</optional>
       </dependency>
       <!--      jcl-over-slf4j for myfaces -->
@@ -172,13 +172,13 @@
       <dependency>
         <groupId>jakarta.servlet</groupId>
         <artifactId>jakarta.servlet-api</artifactId>
-        <version>5.0.0</version>
+        <version>6.0.0</version>
         <scope>provided</scope>
       </dependency>
       <dependency>
         <groupId>jakarta.el</groupId>
         <artifactId>jakarta.el-api</artifactId>
-        <version>4.0.0</version>
+        <version>5.0.1</version>
         <scope>provided</scope>
       </dependency>
       <dependency>
@@ -240,7 +240,7 @@
       <dependency>
         <groupId>jakarta.annotation</groupId>
         <artifactId>jakarta.annotation-api</artifactId>
-        <version>2.0.0</version>
+        <version>2.1.1</version>
       </dependency>
       <dependency>
         <groupId>jakarta.validation</groupId>
@@ -250,7 +250,7 @@
       <dependency>
         <groupId>jakarta.servlet.jsp.jstl</groupId>
         <artifactId>jakarta.servlet.jsp.jstl-api</artifactId>
-        <version>2.0.0</version>
+        <version>3.0.0</version>
       </dependency>
       <dependency>
         <groupId>jakarta.inject</groupId>
@@ -261,7 +261,7 @@
       <dependency>
         <groupId>jakarta.enterprise</groupId>
         <artifactId>jakarta.enterprise.cdi-api</artifactId>
-        <version>3.0.1</version>
+        <version>4.0.1</version>
         <scope>provided</scope>
       </dependency>
       <dependency>
@@ -273,15 +273,21 @@
       <dependency>
         <groupId>org.apache.myfaces.core</groupId>
         <artifactId>myfaces-test</artifactId>
-        <version>${myfaces30.version}</version>
+        <version>${myfaces40.version}</version>
         <scope>test</scope>
+        <exclusions>
+          <exclusion>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter-api</artifactId>
+          </exclusion>
+        </exclusions>
       </dependency>
       <!--        myfaces "next"-->
 <!--
       <dependency>
         <groupId>org.apache.myfaces.core</groupId>
         <artifactId>myfaces-test</artifactId>
-        <version>${myfaces30.version}</version>
+        <version>${myfaces40.version}</version>
         <scope>test</scope>
       </dependency>
 -->
@@ -301,7 +307,6 @@
   </dependencyManagement>
 
   <dependencies>
-
     <dependency>
       <groupId>org.junit.jupiter</groupId>
       <artifactId>junit-jupiter-engine</artifactId>
@@ -1116,12 +1121,12 @@
     </profile>
 
     <profile>
-      <id>jsf-3.0</id>
+      <id>jsf-4.0</id>
       <activation>
         <property>
           <name>!jsf</name>
 <!--          <name>jsf</name>-->
-<!--          <value>myfaces-3.0</value>-->
+<!--          <value>myfaces-4.0</value>-->
         </property>
       </activation>
       <dependencyManagement>
@@ -1129,13 +1134,13 @@
           <dependency>
             <groupId>org.apache.myfaces.core</groupId>
             <artifactId>myfaces-api</artifactId>
-            <version>${myfaces30.version}</version>
+            <version>${myfaces40.version}</version>
             <optional>true</optional>
           </dependency>
           <dependency>
             <groupId>org.apache.myfaces.core</groupId>
             <artifactId>myfaces-impl</artifactId>
-            <version>${myfaces30.version}</version>
+            <version>${myfaces40.version}</version>
             <optional>true</optional>
           </dependency>
         </dependencies>
diff --git a/tobago-core/pom.xml b/tobago-core/pom.xml
index af32f006aa..db2443db81 100644
--- a/tobago-core/pom.xml
+++ b/tobago-core/pom.xml
@@ -265,7 +265,7 @@
     </profile>
 
     <profile>
-      <id>jsf-3.0</id>
+      <id>jsf-4.0</id>
       <activation>
         <property>
           <name>!jsf</name>
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/event/TobagoActionSource.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/event/TobagoActionSource.java
deleted file mode 100644
index 418d43ef4d..0000000000
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/event/TobagoActionSource.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.myfaces.tobago.event;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import jakarta.faces.component.ActionSource2;
-import jakarta.faces.el.MethodBinding;
-
-import java.lang.invoke.MethodHandles;
-
-public interface TobagoActionSource extends ActionSource2 {
-
-  Logger LOG = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
-
-  /**
-   * @deprecated Replaced by ActionSource2.getActionExpression
-   */
-//  @Override no longer overriding, because it was dropped in MyFaces 2.3-next
-  @Deprecated
-  default MethodBinding getAction() {
-    LOG.debug("JSF 1.1 style is no longer supported!");
-    return null;
-  }
-
-  /**
-   * @deprecated Replaced by ActionSource2.setActionExpression
-   */
-//  @Override no longer overriding, because it was dropped in MyFaces 2.3-next
-  @Deprecated
-  default void setAction(MethodBinding action) {
-    LOG.debug("JSF 1.1 style is no longer supported!");
-  }
-
-  /**
-   * @deprecated Replaced by getActionListeners
-   */
-//  @Override no longer overriding, because it was dropped in MyFaces 2.3-next
-  @Deprecated
-  default MethodBinding getActionListener() {
-    LOG.debug("JSF 1.1 style is no longer supported!");
-    return null;
-  }
-
-  /**
-   * @deprecated Replaced by getActionListeners
-   */
-//  @Override no longer overriding, because it was dropped in MyFaces 2.3-next
-  @Deprecated
-  default void setActionListener(MethodBinding actionListener) {
-    LOG.debug("JSF 1.1 style is no longer supported!");
-  }
-}
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/facelets/DefaultResourceResolver.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/facelets/DefaultResourceResolver.java
deleted file mode 100644
index dfcd737a4d..0000000000
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/facelets/DefaultResourceResolver.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.myfaces.tobago.facelets;
-
-import jakarta.faces.FacesException;
-import jakarta.faces.context.FacesContext;
-import jakarta.faces.view.facelets.ResourceResolver;
-
-import java.io.IOException;
-import java.net.URL;
-
-/*
- * Was copied from MyFaces-Impl, because there is no JSF base class.
- */
-public class DefaultResourceResolver extends ResourceResolver {
-
-  public DefaultResourceResolver() {
-    super();
-  }
-
-  @Override
-  public URL resolveUrl(final String path) {
-    try {
-      return Resource.getResourceUrl(FacesContext.getCurrentInstance(), path);
-    } catch (final IOException e) {
-      throw new FacesException(e);
-    }
-  }
-
-  public String toString() {
-    return "DefaultResourceResolver";
-  }
-
-}
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/behavior/DeltaStateHelper.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/behavior/DeltaStateHelper.java
index fd86a8fbc7..efb6fd5372 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/behavior/DeltaStateHelper.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/behavior/DeltaStateHelper.java
@@ -19,13 +19,12 @@
 
 package org.apache.myfaces.tobago.internal.behavior;
 
-import org.apache.myfaces.tobago.exception.TobagoException;
-
 import jakarta.el.ValueExpression;
 import jakarta.faces.component.StateHelper;
 import jakarta.faces.component.StateHolder;
 import jakarta.faces.component.UIComponentBase;
 import jakarta.faces.context.FacesContext;
+import org.apache.myfaces.tobago.exception.TobagoException;
 
 import java.io.Serializable;
 import java.util.ArrayList;
@@ -34,6 +33,7 @@ import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+import java.util.function.Supplier;
 
 // todo: clean up (is a copy of MyFaces, but not all stuff is refactored)
 
@@ -254,6 +254,11 @@ class DeltaStateHelper<A extends EventBehavior> implements StateHelper {
     return defaultValue;
   }
 
+  @Override
+  public Object eval(Serializable serializable, Supplier<Object> supplier) {
+    return eval(serializable, supplier.get());
+  }
+
   @Override
   public Object get(final Serializable key) {
     return fullState.get(key);
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUITabGroup.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUITabGroup.java
index 68d8f05838..e4c6883942 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUITabGroup.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUITabGroup.java
@@ -19,19 +19,9 @@
 
 package org.apache.myfaces.tobago.internal.component;
 
-import org.apache.myfaces.tobago.component.Attributes;
-import org.apache.myfaces.tobago.component.SupportsAutoSpacing;
-import org.apache.myfaces.tobago.event.TabChangeEvent;
-import org.apache.myfaces.tobago.event.TabChangeListener;
-import org.apache.myfaces.tobago.event.TabChangeSource;
-import org.apache.myfaces.tobago.event.TobagoActionSource;
-import org.apache.myfaces.tobago.model.SwitchType;
-import org.apache.myfaces.tobago.util.FacesELUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
 import jakarta.el.MethodExpression;
 import jakarta.el.ValueExpression;
+import jakarta.faces.component.ActionSource2;
 import jakarta.faces.component.UIComponent;
 import jakarta.faces.component.behavior.ClientBehaviorHolder;
 import jakarta.faces.context.FacesContext;
@@ -39,6 +29,15 @@ import jakarta.faces.event.AbortProcessingException;
 import jakarta.faces.event.ActionListener;
 import jakarta.faces.event.FacesEvent;
 import jakarta.faces.event.PhaseId;
+import org.apache.myfaces.tobago.component.Attributes;
+import org.apache.myfaces.tobago.component.SupportsAutoSpacing;
+import org.apache.myfaces.tobago.event.TabChangeEvent;
+import org.apache.myfaces.tobago.event.TabChangeListener;
+import org.apache.myfaces.tobago.event.TabChangeSource;
+import org.apache.myfaces.tobago.model.SwitchType;
+import org.apache.myfaces.tobago.util.FacesELUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import java.io.IOException;
 import java.lang.invoke.MethodHandles;
@@ -49,7 +48,7 @@ import java.util.List;
  * {@link org.apache.myfaces.tobago.internal.taglib.component.TabGroupTagDeclaration}
  */
 public abstract class AbstractUITabGroup extends AbstractUIPanelBase
-    implements TabChangeSource, TobagoActionSource, ClientBehaviorHolder, SupportsAutoSpacing {
+    implements TabChangeSource, ActionSource2, ClientBehaviorHolder, SupportsAutoSpacing {
 
   private static final Logger LOG = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
 
diff --git a/tobago-core/src/test/java/org/apache/myfaces/tobago/internal/config/AbstractTobagoTestBase.java b/tobago-core/src/test/java/org/apache/myfaces/tobago/internal/config/AbstractTobagoTestBase.java
index 815c2dc319..a7d89d1fbf 100644
--- a/tobago-core/src/test/java/org/apache/myfaces/tobago/internal/config/AbstractTobagoTestBase.java
+++ b/tobago-core/src/test/java/org/apache/myfaces/tobago/internal/config/AbstractTobagoTestBase.java
@@ -24,7 +24,7 @@ import jakarta.faces.component.behavior.AjaxBehavior;
 import jakarta.faces.convert.DateTimeConverter;
 import jakarta.faces.render.RenderKit;
 import jakarta.servlet.ServletContext;
-import org.apache.myfaces.test.base.junit4.AbstractJsfTestCase;
+import org.apache.myfaces.test.base.junit.AbstractJsfTestCase;
 import org.apache.myfaces.test.config.ResourceBundleVarNames;
 import org.apache.myfaces.test.mock.MockFacesContext;
 import org.apache.myfaces.test.mock.MockHttpServletRequest;
diff --git a/tobago-core/src/test/java/org/apache/myfaces/tobago/internal/mock/servlet/MockHttpSession.java b/tobago-core/src/test/java/org/apache/myfaces/tobago/internal/mock/servlet/MockHttpSession.java
index aed387f751..212e81cb30 100644
--- a/tobago-core/src/test/java/org/apache/myfaces/tobago/internal/mock/servlet/MockHttpSession.java
+++ b/tobago-core/src/test/java/org/apache/myfaces/tobago/internal/mock/servlet/MockHttpSession.java
@@ -21,7 +21,6 @@ package org.apache.myfaces.tobago.internal.mock.servlet;
 
 import jakarta.servlet.ServletContext;
 import jakarta.servlet.http.HttpSession;
-import jakarta.servlet.http.HttpSessionContext;
 
 import java.util.Enumeration;
 import java.util.HashMap;
@@ -62,33 +61,6 @@ public class MockHttpSession implements HttpSession {
     return 0;
   }
 
-  /**
-   * @deprecated
-   */
-  @Deprecated
-  @Override
-  public HttpSessionContext getSessionContext() {
-    return null;
-  }
-
-  /**
-   * @deprecated
-   */
-  @Deprecated
-  @Override
-  public Object getValue(final String s) {
-    return null;
-  }
-
-  /**
-   * @deprecated
-   */
-  @Deprecated
-  @Override
-  public String[] getValueNames() {
-    return new String[0];
-  }
-
   @Override
   public void invalidate() {
   }
@@ -98,23 +70,11 @@ public class MockHttpSession implements HttpSession {
     return false;
   }
 
-  /**
-   * @deprecated
-   */
-  @Deprecated
-  @Override
-  public void putValue(final String s, final Object o) {
-  }
-
   @Override
   public void removeAttribute(final String s) {
     attributes.remove(s);
   }
 
-  @Override
-  public void removeValue(final String s) {
-  }
-
   @Override
   public void setAttribute(final String s, final Object o) {
     attributes.put(s, o);
diff --git a/tobago-core/src/test/java/org/apache/myfaces/tobago/webapp/TobagoResponseWriterUnitTest.java b/tobago-core/src/test/java/org/apache/myfaces/tobago/webapp/TobagoResponseWriterUnitTest.java
index 49418de4dc..cf59ed8b96 100644
--- a/tobago-core/src/test/java/org/apache/myfaces/tobago/webapp/TobagoResponseWriterUnitTest.java
+++ b/tobago-core/src/test/java/org/apache/myfaces/tobago/webapp/TobagoResponseWriterUnitTest.java
@@ -19,7 +19,7 @@
 
 package org.apache.myfaces.tobago.webapp;
 
-import org.apache.myfaces.test.base.junit4.AbstractJsfTestCase;
+import org.apache.myfaces.test.base.junit.AbstractJsfTestCase;
 import org.apache.myfaces.tobago.internal.webapp.HtmlResponseWriter;
 import org.apache.myfaces.tobago.internal.webapp.XmlResponseWriter;
 import org.apache.myfaces.tobago.renderkit.html.HtmlAttributes;
diff --git a/tobago-example/pom.xml b/tobago-example/pom.xml
index 0eaf8d1bad..3580b349cf 100644
--- a/tobago-example/pom.xml
+++ b/tobago-example/pom.xml
@@ -178,49 +178,49 @@
         <dependency>
           <groupId>org.apache.myfaces.core</groupId>
           <artifactId>myfaces-api</artifactId>
-          <version>${myfaces30.version}</version>
+          <version>${myfaces40.version}</version>
           <scope>provided</scope>
         </dependency>
         <dependency>
           <groupId>org.apache.myfaces.core</groupId>
           <artifactId>myfaces-impl</artifactId>
-          <version>${myfaces30.version}</version>
+          <version>${myfaces40.version}</version>
           <scope>provided</scope>
         </dependency>
       </dependencies>
     </profile>
 
     <profile>
-      <id>myfaces-3.0</id>
+      <id>myfaces-4.0</id>
       <activation>
         <property>
           <name>!jsf</name>
           <!--          <name>jsf</name>-->
-          <!--          <value>myfaces-3.0</value>-->
+          <!--          <value>myfaces-4.0</value>-->
         </property>
       </activation>
       <dependencies>
         <dependency>
           <groupId>org.apache.myfaces.core</groupId>
           <artifactId>myfaces-api</artifactId>
-          <version>${myfaces30.version}</version>
+          <version>${myfaces40.version}</version>
           <scope>compile</scope>
         </dependency>
         <dependency>
           <groupId>org.apache.myfaces.core</groupId>
           <artifactId>myfaces-impl</artifactId>
-          <version>${myfaces30.version}</version>
+          <version>${myfaces40.version}</version>
           <scope>runtime</scope>
         </dependency>
       </dependencies>
     </profile>
 
     <profile>
-      <id>mojarra-3.0</id>
+      <id>mojarra-4.0</id>
       <activation>
         <property>
           <name>jsf</name>
-          <value>mojarra-3.0</value>
+          <value>mojarra-4.0</value>
         </property>
       </activation>
       <dependencies>
@@ -401,13 +401,13 @@
         <dependency>
           <groupId>org.apache.myfaces.core</groupId>
           <artifactId>myfaces-api</artifactId>
-          <version>${myfaces30.version}</version>
+          <version>${myfaces40.version}</version>
           <scope>compile</scope>
         </dependency>
         <dependency>
           <groupId>org.apache.myfaces.core</groupId>
           <artifactId>myfaces-impl</artifactId>
-          <version>${myfaces30.version}</version>
+          <version>${myfaces40.version}</version>
           <scope>runtime</scope>
         </dependency>
         <dependency>
@@ -539,13 +539,13 @@
         <dependency>
           <groupId>org.apache.myfaces.core</groupId>
           <artifactId>myfaces-api</artifactId>
-          <version>${myfaces30.version}</version>
+          <version>${myfaces40.version}</version>
           <scope>provided</scope>
         </dependency>
         <dependency>
           <groupId>org.apache.myfaces.core</groupId>
           <artifactId>myfaces-impl</artifactId>
-          <version>${myfaces30.version}</version>
+          <version>${myfaces40.version}</version>
           <scope>provided</scope>
         </dependency>
         <dependency>
@@ -604,13 +604,13 @@
         <dependency>
           <groupId>org.apache.myfaces.core</groupId>
           <artifactId>myfaces-api</artifactId>
-          <version>${myfaces30.version}</version>
+          <version>${myfaces40.version}</version>
           <scope>provided</scope>
         </dependency>
         <dependency>
           <groupId>org.apache.myfaces.core</groupId>
           <artifactId>myfaces-impl</artifactId>
-          <version>${myfaces30.version}</version>
+          <version>${myfaces40.version}</version>
           <scope>provided</scope>
         </dependency>
         <!-- this enables the development mode -->
diff --git a/tobago-example/tobago-example-demo/pom.xml b/tobago-example/tobago-example-demo/pom.xml
index fcd18cba44..2050ed14c2 100644
--- a/tobago-example/tobago-example-demo/pom.xml
+++ b/tobago-example/tobago-example-demo/pom.xml
@@ -374,13 +374,13 @@
         <dependency>
           <groupId>org.apache.myfaces.core</groupId>
           <artifactId>myfaces-api</artifactId>
-          <version>${myfaces30.version}</version>
+          <version>${myfaces40.version}</version>
           <scope>compile</scope>
         </dependency>
         <dependency>
           <groupId>org.apache.myfaces.core</groupId>
           <artifactId>myfaces-impl</artifactId>
-          <version>${myfaces30.version}</version>
+          <version>${myfaces40.version}</version>
           <scope>runtime</scope>
         </dependency>
         <dependency>