Actualització Canigó 3.6 a Canigó 3.8

Darrera actualització: 15-01-2024

A qui va dirigit

Aquesta guia va dirigida a tots aquells usuaris que vulguin actualitzar a Canigó 3.8 la seva aplicació Canigó 3.6.

Versió de Canigó

Els passos descrits en aquest document apliquen a la versió 3.8 del Framework Canigó.

Introducció

Al mes de gener del 2024 s’ha publicat la versió 3.8 del Framework Canigó. Aquesta versió és una versió LTS i es recomana actualitzar les aplicacions Canigó a aquesta versió per tal de tenir un suport continuat, així com la màxima estabilitat que proporciona una versió LTS.

L’objectiu d’aquesta guia és mostrar els procediments necessaris per a actualitzar una aplicació realitzada amb Canigó 3.8 i el punt de partida d’aquesta guia és una aplicació creada amb l’arquetipus maven de Canigó.

Configuració prèvia

A la Matriu de Compatibilitats podeu consultar les versions dels mòduls i components de Canigó de les versions 3.6.x i 3.8.x.

Per tant, caldrà fer:

1. Actualitzar els intervals de versions dels mòduls utilitzats per l’aplicació per a migrar a Canigó 3.8.0

2. Per a actualitzar de la versió 3.6 a la 3.8, es necessari realitzar l’actualització de les dependències del nostre projecte.

Les dependències específiques que han d’actualitzar-se la seva les següents:

2.1 Spring Boot 3.1.4

   <parent>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-parent</artifactId>
      <version>3.1.4</version>
   </parent>

2.2 Spring Framework 6.1.1

   <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>6.1.1</version>
   </dependency>

2.3 OpenJDK 17

   <maven.compiler.source>17</maven.compiler.source>
   <maven.compiler.target>17</maven.compiler.target>

2.4 Spring Security 6.1.3

   <dependency>
      <groupId>org.springframework.security</groupId>
      <artifactId>spring-security-core</artifactId>
      <version>6.1.3</version>
   </dependency>

2.5 Junit 4 a Junit 5 (Jupiter) 5.10.1.

   <dependency>
      <groupId>org.junit.jupiter</groupId>
      <artifactId>junit-jupiter-api</artifactId>
      <version>5.10.1</version>
      <scope>test</scope>
   </dependency>
   <dependency>
      <groupId>org.junit.jupiter</groupId>
      <artifactId>junit-jupiter-engine</artifactId>
      <version>5.10.1</version>
      <scope>test</scope>
   </dependency>
   <dependency>
      <groupId>org.junit.jupiter</groupId>
      <artifactId>junit-jupiter-params</artifactId>
      <version>5.10.1</version>
      <scope>test</scope>
   </dependency>

NOTA: Si tens dependències de Javax, és necessari actualitzar-les a la versió més recent de Jakarta, ja que OpenJDK 17 no és compatible amb Javax.

Passes a realitzar

Un cop actualitzades les versions dels mòduls, segons s’ indica a la secció anterior, serà necessari realitzar els següents passos:


1. Reemplaça les dependències de Javax per Jakarta en l’arxiu pom.xml.

Pom.xml

<dependency>
   <groupId>javax.annotation</groupId>
   <artifactId>javax.annotation-api</artifactId>
   <version>1.3.2</version>
</dependency>

per

<dependency>
   <groupId>jakarta.annotation</groupId>
   <artifactId>jakarta.annotation-api</artifactId>
   <version>1.3.5</version>
</dependency>

2. Reemplaçar l’ imports de javax per jakarta en totes les classes Java que utilitzin el import de javax.

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

per

import jakarta.persistence.EntityManager;
import jakarta.persistence.PersistenceContext;
import jakarta.persistence.Query;

3. És necessari modificar els JUnit per a utilitzar JUnit 5 (Jupiter).

Per a realitzar les modificacions correctament, hem de tenir en compte els següents punts:

  • 1.: Comptar amb les dependències de JUnit 4 canviades a JUnit 5 (Jupiter).
   <dependency>
      <groupId>org.junit.jupiter</groupId>
      <artifactId>junit-jupiter-api</artifactId>
      <version>5.10.1</version>
      <scope>test</scope>
   </dependency>
   <dependency>
      <groupId>org.junit.jupiter</groupId>
      <artifactId>junit-jupiter-engine</artifactId>
      <version>5.10.1</version>
      <scope>test</scope>
   </dependency>
   <dependency>
      <groupId>org.junit.jupiter</groupId>
      <artifactId>junit-jupiter-params</artifactId>
      <version>5.10.1</version>
      <scope>test</scope>
   </dependency>
  • 2.: Actualitzar les següents anotacions en el nostre codi perquè siguin compatibles amb JUnit 5.

    • @org.junit.Test per @org.junit.jupiter.api.Test (import org.junit.jupiter.api.Test;).

    • @Before ara és @BeforeEach (import org.junit.jupiter.api.BeforeEach;).

    • @After ara és @AfterEach (import org.junit.jupiter.api.AfterEach;).

    • @BeforeClass ara és @BeforeAll (import org.junit.jupiter.api.BeforeAll;).

    • @AfterClass ara és @AfterAll (import org.junit.jupiter.api.AfterAll;).

    • @Ignore ara és @Disabled (import org.junit.jupiter.api.Disabled;).

    • @RunWith ara és @ExtendWith (import org.junit.jupiter.api.extension.ExtendWith;)

    • @Category ara és @Tag (import org.junit.jupiter.api.Tag;)

    • @Test (expected = Exception.class) ara és Assertions.assertThrows

      • Exemple
      @Test(expected = IndexOutOfBoundsException.class)
      public void testIndexOutOfBoundsException() {
         ArrayList emptyList = new ArrayList();
         Object o = emptyList.get(0);
      }
      

      per

      @Test
      public void testIndexOutOfBoundsException() {
         ArrayList emptyList = new ArrayList();
         Assertions.assertThrows(IndexOutOfBoundsException.class, () -> {
            Object o = emptyList.get(0);
         });
      }
      

4. És recomanable utilitzar l’última versió de l’schema del XSD de Spring Security. Per exemple de: http://www.springframework.org/schema/security/spring-security-5.4.xsd a: http://www.springframework.org/schema/security/spring-security.xsd

5. S’ha modificat la URL d’accés a swagger passant de: http://localhost:8080/swagger-ui/index.html a: http://localhost:8080/api/swagger-ui/index.html