====== 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]]