====== Migrazione alla 4.6.X ======
===== Prerequisiti =====
==== Java ====
Java 8 o superiore.
==== Application Server ====
=== Tomcat ===
- [[Tomcat 9|https://tomcat.apache.org/download-90.cgi]]
- [[Tomcat 8.5|https://tomcat.apache.org/download-80.cgi]]
Non sono supportate versioni 10+, basate su **jakarta**
=== Wildfly ===
- wildfly 20.0.1.Final [[wildfly|https://www.wildfly.org/downloads/]]
==== Database ====
=== Oracle ===
Geoweb 4.6.0 utilizza il driver oracle **ojdbc8 v 21.5.0.0**.
In base alla matrice di compatibilità ufficiale, per utilizzare questa versione di Geoweb è necessario assicurarsi che la versione del database sia **'12.2 or 12cR2' o superiore**.
Matrice di compatibilità [[https://docs.oracle.com/en/database/oracle/oracle-database/19/jjdbc/JDBC-getting-started.html#GUID-926E5324-D89A-4A00-B1AE-975C1089F0EA|qui]]
=== Postgre ===
Geoweb 4.6.0 utilizza il driver **postgresql v 42.6.0**. In base alla matrice di compatibilità ufficiale, per utilizzare questa versione di Geoweb è necessario assicurarsi che la versione del database sia **"PostgreSQL 8.2 or newer"**.
Matrice di compatibilità [[https://jdbc.postgresql.org/download/|qui]].
=== MsSqlServer ===
Geoweb 4.6.0 utilizza il driver **mssql-jdbc v 12.2.0.jre8**.
In base alla matrice di compatibilità ufficiale, per utilizzare questa versione di Geoweb è necessario assicurarsi che la versione del database sia **SQL Server 2014**.
Matrice di compatibilità [[https://learn.microsoft.com/en-us/sql/connect/jdbc/microsoft-jdbc-driver-for-sql-server-support-matrix?view=sql-server-ver16|qui]]
==== MongoDB ====
La minima versione testata è **MongoDB 4.2**.
In caso contrario l'applicativo segnalerà un errore del tipo:
....ERROR .... - Server at 127.0.0.1:27017 reports wire version 4, but this version of the driver requires at least 6 (MongoDB 3.6).
==== Alfresco ====
I vecchi componenti CMIS continuano a lavorare, come prima, con **Alfresco 5**.
I nuovi componenti CMS, necessitano di **Alfresco 7**.
==== SharePoint ====
===== Passaggi da seguire =====
* Creare un repository ex-novo ex-novo o modificare quello esistente intervenendo su tutti i file necessari come descritto nella parte [[gwusermanual:migration_to_4_6_x#Migrazione repository|Migrazione repository]]
* Apportare le opportune modifiche nello schema dei metadati, come descritto nella parte [[gwusermanual:migration_to_4_6_x#Migrazione metadati|Migrazione metadati]]
* leggere le [[gwusermanual:migration_to_4_6_x#Note Migrazione|Note Migrazione]]
===== Migrazione repository =====
==== Repository git nuovi ====
I nuovi repository git, di progetto o di commessa, dovrebbero utilizzare fin da subito il nuovo template di progetto **gw-webapp-template**.
La prima cosa da fare per creare un progetto di base nel proprio pc cliccare sul seguente link e avviare il download della cartella ZIP {{ :custom:makegproj-4.6.x.zip |}}.
==== Repository git preesistenti ====
Per tutti i progetti git in corso:
* va adeguato il [[gwusermanual:migration_to_4_6_x#pom.xml|pom.xml]].
* vanno sostituiti specifici file nel vecchio template di progetto. file interessati:
* [[gwusermanual:migration_to_4_6_x#spring-security.xml|spring-security.xml]]
* [[gwusermanual:migration_to_4_6_x#dispatcher-servlet.xml|dispatcher-servlet.xml]]
* [[gwusermanual:migration_to_4_6_x#web.xml|web.xml]]
* [[gwusermanual:migration_to_4_6_x#configuration.properties|configuration.properties]]
* log4j.properties, sostituito da [[gwusermanual:migration_to_4_6_x#log4j2.properties|log4j2.properties]]
Questi file potrebbero comunque necessitare di ulteriori integrazioni dovute a personalizzazioni a suo tempo seguite sul cliente.
=== Note ===
log4j.properties va proprio eliminato. Se configurato male può causare la non partenza del server, con errore sul log standard error del server.
log4j:ERROR Could not find value for key log4j.appender.access
log4j:ERROR Could not instantiate appender named "access".
==== pom.xml ====
Per le versioni 4.6.X è stato creato un apposito template **gw-webapp-template 1.0.0**, che sostituisce il vecchio template **gw-webapp-template 1.0.0**. Il template va generato tramite {{ :custom:makegproj-4.6.x.zip |}}.
Al contempo sono state fatti vari refactor di vario genere sui maven module del framework:
* refactor nome dei moduli
* tutti i moduli ora partono per 'gw-'
* tutti name in minuscolo
* key-word staccate con '-'
* niente parole ridondanti nei name dei moduli maven: //plugin, service, utils//
* //artifactId// (//non il groupId//) del pom generale geowebframework passa da //com.geowebframework// a //geowebframework// (interessa solo gli sviluppatori che devono generare nuovi maven plugin)
* moduli integrati nel repository git di //geowebframework//
* moduli tirati fuori dal repository git di //geowebframework//, in quanto di prodotto/commessa
Per i progetti preesistenti modificare il pom.xml utilizzando i nuovi //artifactId//, e lasciando inalterato il //groupId//.
=== Tabella riepilogativa ===
^ NOME MODULO MAVEN (artifactId) ^^ spostato da git geowebframework ^ MOVED/DELETED ^ Deprecated ^ NOTE ^
^ VECCHIO ^ NUOVO ^ ^ ^ ^ ^
|calendar | gw-advanced |||||
|cde | gw-cde | SI | (git CDE) ||specifico CDE, da spostare su repo di prodotto |
|classificationplugin | gw-classification |||||
|gwApproval | gw-approvals |||||
|furnitureplugin | gw-furnitures | SI | (git SPACE) | | specifico SPACE, da spostare su repo di prodotto |
|googleStreetView | gw-google-street-view |||||
|dataservice | gw-data |||||
|- | gw-cms ||||versione 1.0.0. Aggiunto per ospitare i servizi cms rest|
|gwCsvConnector| gw-csv-connector | | MOVED | | integrato in git geowebframework, versionamento corrente 2.0.0 |
|gwindex | gw-index | | | SI | pagine di accesso specifiche per il cde, da spostare su repo di prodotto |
|gwMnemonicCode | gw-mnemonic-code |||||
|gwProvisioning | gw-provisioning | | | | usato solo da Università Padova, ma generale (provisioning dei loro utenti, copiati sul nostro DB)|
|gwRabbitApi | gw-rabbit-api |||||
|gwRabbitConsumer | gw-rabbit-consumer |||||
|gwRabbitPublisher | gw-rabbit-publisher |||||
|gwScenari | gw-scenarios |||||
|gwXktVisualizer | gw-xkt-visualizer |||||
|hierarchicalFilterMenu||| MOVED || integrato in git geowebframework, ora senza versionamento specifico |
|indexPortal | gw-index-portal | | | SI | pagine di accesso specifiche per vecchie commesse |
|keycloak-userspi | gw-keycloak-userspi | | | | intesa Cloud, rimane in comune per ora ma non più usato con il nuovo KEYCLOACK |
|metadataservice | gw-metadata |||||
|portalApi | gw-portal-api |||SI||
|portalObjects | gw-portal-commons |||SI||
|printMapFlow | - | | MOVED | | usato solo in SPACE (Intesa) per ora, ma di carattere generale: accorpato in gw-print-map-legend, senza versionamento sprcifico |
|printMapLegend | gw-print-map-legend |||||
|restapi | gw-rest-api | SI | | | rimosse chiamate del modulo EQUIPMENT (@Deprecated), tenuto per spostare servizi interoperabilità |
|smartplatformplugin | gw-smartplatform | SI | MOVED | SI | widget (indicatori in mappa auto aggiornanti, serie storiche, etc..) e funzionalità per integrazione dati sensori provenienti dalla smartplatform |
|thematism | gw-thematism |||||
|ThreeDVisualizer | gw-3d-visualizer |||||
|transfer-objects | gw-commons + gw-commons-web |||| splittato in due moduli gw-commons + gw-commons-web |
|umplugin | gw-upload-manager |||||
|webadmin | gw-webadmin |||||
|webclient | gw-webclient |||||
|workflowservice | gw-workflow |||||
|xeokitUtils | gw-xeokit |SI |DELETED |SI |cancellato, mai usato nel CDE (sostituito da rabbit-consumer) |
|webclientTemplate | gw-webapp-template ||||nuovo template 1.0.0 |
excel censimento moduli: [[https://docs.google.com/spreadsheets/d/1kqvL8uERY4FJDFaPrl44kl7L1QYpds4pR55I1MhUGv8/edit#gid=0]]
=== Esempi ===
Esempio 1:
com.geowebframework
calendar
${com.geowebframework.version}
...
com.geowebframework
ThreeDVisualizer
${com.geowebframework.version}
...
com.geowebframework
umplugin
${com.geowebframework.version}
diventa:
com.geowebframework
gw-advanced
${com.geowebframework.version}
...
com.geowebframework
gw-3d-visualizer
${com.geowebframework.version}
...
com.geowebframework
gw-upload-manager
${com.geowebframework.version}
Esempio 2, da rimuovere:
com.geowebframework
printMapFlow
${com.geowebframework.version}
...
com.geowebframework
hierarchicalFilterMenu
${com.geowebframework.version}
==== spring-security.xml ====
Localizzazione: //WEB-INF/spring-security.xml//
Nel nuovo template di progetto **gw-webapp-template**, sono resi disponibili i seguenti template di //spring-security*.xml//:
* [[gwusermanual:migration_to_4_6_x#spring-security-base.xml|spring-security.xml-base]] - NO KEYCLOAK
* [[gwusermanual:migration_to_4_6_x#spring-security-keycloak.xml|spring-security-keycloak.xml]] - KEYCLOAK
* [[gwusermanual:migration_to_4_6_x#spring-security-deprecated.xml|spring-security-deprecated.xml]] - NO KEYCLOAK, ma con altri tag http, meccanismi di autenticazione, ora deprecati, o di uso particolare:
* usati dalle app e servizi rest, legati alla parte oauth2
* usati dalle app e servizi rest, legati alla parte oauth2
* preAuthFilter
* preAuthAuthenticationProviderExt
* oauth2
* LDAP
=== Quando usare uno specifico template ===
* [[gwusermanual:migration_to_4_6_x#spring-security-base.xml|spring-security.xml]] Nei casi **dove c'è un ID (Identity Provider)** esterno o comunque messo a diposizione dal cliente (i cui //bean// di configurazione dovranno eventualmente essere integrati)
* [[gwusermanual:migration_to_4_6_x#spring-security-keycloak.xml|spring-security-keycloak.xml]] Nei casi **dove non c'è un ID (Identity Provider)** del cliente, o nei nostri ambienti interni, dove l'ID scelto è per l'appunto //keycloak//
*[[gwusermanual:migration_to_4_6_x#spring-security-deprecated.xml|spring-security-deprecated.xml]] **MAI**, usarlo solo come riferimento per integrare negli altri due template solo la parte eventualmente necessaria
=== spring-security-base.xml ===
classpath*:locale/messages*
=== spring-security-keycloak.xml ===
classpath*:locale/messages*
=== Modifiche ===
E' stato modificato il blocco ...
in particolare sono stati aggiunte le parti:
...
..
e modificate queste:
Sono stati inoltre rimossi bean ora conservati in **spring-security-deprecated.xml**
==== dispatcher-servlet.xml ====
Localizzazione: //WEB-INF/dispatcher-servlet.xml//
=== Modifiche ===
E' stato rimosso il blocco //log4jInitialization//, non piu necessario con **log4j2**
classpath:log4j.properties
10000
==== web.xml ====
Localizzazione: //WEB-INF/web.xml//
GeoWeb Manager
index.html
dispatcher
org.springframework.web.servlet.DispatcherServlet
1
true
/tmp
104857600
209715200
0
dispatcher
*.html
dispatcher
/rest/*
dispatcher
/services/*
dispatcher
/files/*
dispatcher
/
ImageServlet
net.sf.jasperreports.j2ee.servlets.ImageServlet
true
ImageServlet
/jrImage
http://geowebframework.com/jsp/jstl/functions
/WEB-INF/gwutil-functions.tld
*.jsp
UTF-8
org.springframework.web.context.ContextLoaderListener
org.springframework.web.context.request.RequestContextListener
contextConfigLocation
/WEB-INF/spring-security.xml
springSecurityFilterChain
org.springframework.web.filter.DelegatingFilterProxy
true
contextAttribute
org.springframework.web.servlet.FrameworkServlet.CONTEXT.dispatcher
springSecurityFilterChain
/*
encodingFilter
org.springframework.web.filter.CharacterEncodingFilter
true
encoding
UTF-8
forceEncoding
true
encodingFilter
/*
customOptionsMethodFilter
com.geowebframework.webclient.security.cors.CustomOptionsMethodFilter
customOptionsMethodFilter
/*
customCorsFilter
com.geowebframework.webclient.security.cors.CustomCorsFilter
customCorsFilter
/*
XSSFilter
com.geowebframework.webclient.security.xss.CrossSiteScriptingFilter
XSSFilter
/*
MultipartFilter
org.springframework.web.multipart.support.MultipartFilter
MultipartFilter
/*
com.sun.faces.sendPoweredByHeader
false
15
=== Modifiche ===
Nel blocco sottostante si può scegliere quale spring-security utilizzare fra //spring-security.xml// e //spring-security-keycloak.xml//. Il default è spring-security.xml
...
contextConfigLocation
/WEB-INF/spring-security.xml
...
==== configuration.properties ====
Localizzazione:
* //[static-contents-folder]/conf/configuration.properties//
* //src/main/resources/configuration.properties//
Va utilizzato il template disponibile [[gwUserManual:configuration_4_6_x|qui ]], integrandolo con i dati e le personalizzazioni del vecchio //configuration.properties//
==== log4j2.properties ====
Nelle versioni 4.6.X è stato introdotto **log4j2**, che sostituisce **log4j**.
Localizzazione:
* //[static-contents-folder]/conf/log4j2.properties//
* //src/main/resources/log4j2.properties//
Va utilizzato il template disponibile nella [[gwusermanual:log4j2_properties|guida]], integrandolo con i dati del vecchio log4j.properties.
In particolare dovrebbe essere solo necessario riprendere i nomi dei file di log, e configurali nei blocchi:
appender.rolling.fileName = ${sys:catalina.home}/logs/geoweb_client.log
appender.rolling.filePattern = ${sys:catalina.home}/logs/geoweb_client-%d{yyyy-MM-dd-HH-mm-ss}-%i.log
appender.rollingEmail.fileName = ${sys:catalina.home}/logs/gwMail.log
appender.rollingEmail.filePattern = ${sys:catalina.home}/logs/gwMail-%d{yyyy-MM-dd-HH-mm-ss}-%i.log
appender.rollingAccess.fileName = ${sys:catalina.home}/logs/gwAccess.log
appender.rollingAccess.filePattern = ${sys:catalina.home}/logs/gwAccess-%d{yyyy-MM-dd-HH-mm-ss}-%i.log
Eventualmente integrate ulteriori personalizzazione di progetto/commessa.
===== Migrazione metadati =====
Nella 4.6.0-SNAPSHOT la mappa 2D è stata resa configurabile con un xml nel webadmin (come le mappe BIM) (issue #563). A tale scopo è stato aggiunto il campo **xml_map_mode (stringa, maxLenght 4000)** alla tabella dei metadati **gwm_maps**.
Quindi, tramite script del //gw_resource_deployer//, o manualamente va eseguito lo script:
ALTER TABLE [SCHEMA_NAME].GWM_MAPS ADD XML_MAP_MODE VARCHAR2(4000 BYTE);
I metadati che si riferiscono a versioni particolarmente vecchie possono essere importati dal **webadmin**, e venire automaticamente aggiustati, tramite gli appositi //converters// che si preoccupano di effettuare il passaggio da una versione all'altra.
Al momento non viene ancora gestito il popolamento automatico dell'xml. Utilizzare quindi il template seguente:
Il template va anche puntualmente configurato per decidere quali gruppi di bottoni, tab e controlli visualizzare e quali no.
In precedenza queste configurazioni erano globali ed impostatabili dall'xml di progetto. Tutti quei tag vanno considerati **deprecati**:
true
true
true
true
true
true
true
true
...
===== Note Migrazione =====
==== Download gw-webadmin war (Webadmin) ====
=== Release ufficiali ===
Il download dell'applicazione gw-webadmin-X.Y.Z.war rilasciate è disponibile in artifactory a questo link (utilizzare le credenziali aziendali):
http://artifactory.geowebframework.com/artifactory/gw-release/com/geowebframework/gw-webadmin/**X.Y.Z**/gw-webadmin-**X.Y.Z**.war
dove al posto di X.Y.Z è necessario specificare la versione di geoweb rischiesta.
== Esempio webadmin versione 4.6.10 ==
[[http://artifactory.geowebframework.com/artifactory/gw-release/com/geowebframework/gw-webadmin/4.6.10/gw-webadmin-4.6.10.war]]
=== HOTFIX ===
Nel caso straordinario in cui si richiede una versione hotfix la struttura del link è la seguente:
http://artifactory.geowebframework.com/artifactory/gw-hotfix/com/geowebframework/gw-webadmin/**X.Y.Z**-HOTFIX/gw-webadmin-**X.Y.Z**-HOTFIX.war
[[http://artifactory.geowebframework.com/artifactory/gw-hotfix/com/geowebframework/gw-webadmin/4.6.11-HOTFIX/gw-webadmin-4.6.11-HOTFIX.war]]
==== Workflow ====
In presenza del modulo del workflow, //Activiti// provvederà ad aggiornare le tabelle **act_***. In particolare viene aggiornata l'informazione sulla version di activiti che passa da 5.17.0
a 5.23.0
.
**Questo renderà inutilizzabili eventuali applicativi webapp che puntano allo stesso database, e che sono versioni precedenti alla 4.6.X**
==== Preferiti del browser ====
La pagina di login è passata da **login.html** a **loginPage.html**.
Nel caso in cui nei //preferiti//, il link sia salvato con parti oltrelo / successivo al contesto, come per esempio
[server]/[nome_progetto]/login.html
Modificare il link della voce dei preferiti, cosi:
[server]/[nome_progetto]/
==== File groovy ====
Con il passaggio alla versione 4.6.0 del framework, c’è stato un’aggiornamento di librerie.
Vanno quindi allineati tutti i **file .groovy** che facevano riferimento alla vecchia versione.
In rosso i vecchi import, in verde i nuovi path per l’ import.
=== log4j ===
Era affetta da varie falle di sicurezza. Adesso viene utilizzato log4j2.
private static final org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger("com.geowebframework.groovy");
private static final org.apache.logging.log4j.Logger log = org.apache.logging.log4j.LogManager.getLogger("com.geowebframework.groovy");
----------------------------------------------------------
import org.apache.log4j.Logger;
…
private static final Logger log = Logger.getLogger("com.geowebframework.groovy");
----------------------------------------------------------
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
…
private static Logger log = LogManager.getLogger("com.geowebframework.groovy");
Inoltre ora log4j 2 viene gestito come parametro sia String che CharSequence, quindi nei .groovy potrebbe generarsi l'errore
2023-01-23 16:15:06,330 [ajp-nio-8019-exec-70] ERROR com.geowebframework.dataservice.service.GwClassListService - Ambiguous method overloading for method org.apache.logging.log4j.core.Logger#warn.
Cannot resolve which method to invoke for [null, class java.lang.NullPointerException] due to overlapping prototypes between:
[interface java.lang.CharSequence, class java.lang.Throwable]
[interface org.apache.logging.log4j.message.Message, class java.lang.Throwable]
[interface org.apache.logging.log4j.util.MessageSupplier, class java.lang.Throwable]
[interface org.apache.logging.log4j.util.Supplier, class java.lang.Throwable]
groovy.lang.GroovyRuntimeException: Ambiguous method overloading for method org.apache.logging.log4j.core.Logger#warn.
Cannot resolve which method to invoke for [null, class java.lang.NullPointerException] due to overlapping prototypes between:
[interface java.lang.CharSequence, class java.lang.Throwable]
[interface org.apache.logging.log4j.message.Message, class java.lang.Throwable]
[interface org.apache.logging.log4j.util.MessageSupplier, class java.lang.Throwable]
[interface org.apache.logging.log4j.util.Supplier, class java.lang.Throwable]
in casi del tipo:
log.warn(e.getMessage(), e);
Da sostituire con:
log.warn((String) e.getMessage(), e);
=== jackson ===
import org.codehaus.jackson.map.annotate.JsonSerialize.Inclusion;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
----------------------------------------------------------
import org.codehaus.jackson.map.JsonMappingException;
import com.fasterxml.jackson.databind.JsonMappingException;
----------------------------------------------------------
import org.codehaus.jackson.type.TypeReference;
import com.fasterxml.jackson.core.type.TypeReference;
----------------------------------------------------------
import org.codehaus.jackson.JsonGenerationException;
import com.fasterxml.jackson.core.JsonGenerationException;
----------------------------------------------------------
import org.codehaus.jackson.map.ObjectMapper;
import com.fasterxml.jackson.databind.ObjectMapper;
=== JTS ===
in generale:
import com.vividsolutions.jts.*
import org.locationtech.jts.*
----------------------------------------------------------
import com.vividsolutions.jts.geom.Geometry;
import org.locationtech.jts.geom.Geometry;
----------------------------------------------------------
import org.locationtech.jts.geom.Coordinate;
import org.locationtech.jts.geom.Geometry;
import org.locationtech.jts.geom.GeometryCollection;
import org.locationtech.jts.geom.GeometryFactory;
import org.locationtech.jts.geom.LineString;
import org.locationtech.jts.geom.LinearRing;
import org.locationtech.jts.geom.MultiLineString;
import org.locationtech.jts.geom.MultiPoint;
import org.locationtech.jts.geom.MultiPolygon;
import org.locationtech.jts.geom.Point;
import org.locationtech.jts.geom.Polygon;
import org.locationtech.jts.geom.Coordinate;
import org.locationtech.jts.geom.Envelope;
==== Report ====
La libreria di JasperReports **6.20.1**. E' consigliabile utilizzare per la gestione dei file //.jasper// l'ultimo [[https://community.jaspersoft.com/project/jaspersoft-studio/releases|Jaspersoft Studio]].
Il passaggio a **java 11**, ha portato con se il definito superamento di una serie di classi che erano da tempo state marchiate come deprecate, e che adesso sono inutilizzabili.
In particolare, in alcune implementazioni di report, posoono essere stati utilizzati costrutti non piu funzionanti, in particolare che fanno riferimento a metodi della **class java.util.Date**.
Vanno quindi allineati tutti i **file .jrxml** che facevano riferimento a metodi non più supportati.
In rosso esempi di vecchio codice, in verde il nuovo equivalente.
=== java.util.Date format() ===
risorse utili:
* [[https://www.baeldung.com/java-8-date-time-intro|java-8-date-time-intro]]
* [[https://mkyong.com/java8/java-8-how-to-format-localdatetime/|java-8-how-to-format-localdatetime]]