bloggers bloggers

Marco Napolitano
Messaggi: 68
Stelle: 0
Data: 15/11/17
Jader Jed Francia
Messaggi: 50
Stelle: 0
Data: 22/09/17
Ezio Lombardi
Messaggi: 9
Stelle: 0
Data: 23/06/17
Chiara Mambretti
Messaggi: 25
Stelle: 0
Data: 27/02/17
Serena Traversi
Messaggi: 3
Stelle: 0
Data: 21/07/16
Francesco Falanga
Messaggi: 8
Stelle: 0
Data: 14/06/16
Antonio Musarra
Messaggi: 2
Stelle: 0
Data: 18/11/13
Simone Celli Marchi
Messaggi: 6
Stelle: 0
Data: 09/07/13
marcello marangio
Messaggi: 4
Stelle: 0
Data: 05/07/13
Marco Mancini
Messaggi: 1
Stelle: 0
Data: 05/06/13
Indietro

Cambiare il sito di default di una istanza

Ciao a tutti!

Il problema che vogliamo risolvere oggi è semplice, da un punto di vista di progetto: si tratta di cambiare il sito di default di una istanza su Liferay con un altro all'interno della stessa istanza.

È un caso abbastanza comune perché capita, a volte, di dover creare un sito parallelo per sistemare quello che nel sito principale "non andava" e poi si deve fare la sostituzione.

Oppure perché, se fare un import di dati massivo -o una migrazione manuale di contenuti da un Liferay all'altro (cosa sulla quale oramai siamo specializzati! ;)-, preferite farlo su un sito "parallelo" a quello principale e poi "sostituire" i due!

Di che cosa abbiamo bisogno per farlo?

Ci basterà solamente usare un client SQL, tanta pazienza -perché giocheremo con il database ;)- e, ovviamente, di un backup dei dati -che non sa mai.. ;)-.

Nota importante: tutto quello che raccontiamo qui va fatto a Liferay SPENTO!

Se avete dubbi sul perché dovete spegnere Liferay prima di fare queste operazioni chiedete nei commenti che poi vi spiego! ;)

Come procediamo?

Intanto analizziamo la struttura dei nostri dati.

Le tabelle che ci interessano sono 3:

  1. Tabella "Company"
  2. Tabella "Group_"
  3. Tabella "Virtualhost"

Vediamo che cosa sono e a che cosa servono queste tabelle, così da comprendere a grandi linee come risolvere il problema!

La tabella "Company" di Liferay

La tabella company è quella che mappa le istanze su Liferay; all'interno di questa tabella, infatti, vengono censiti tutti i valori che inserite quando create una nuova istanza dal pannello di controllo.

Una "istanza", per farla breve, è un insieme di dati "isolato" all'interno del database. Per "isolato" intendo che i dati che inserite relativi ad una singola istanza non potranno essere letti da altre istanze, a meno che non facciate voi dei vostri metodi custom!

In pratica, la tabella company è quella che in Liferay implementa la "multi-tenancy": la funzionalità con la quale potete creare più "siti" all'interno di un unico Liferay (o application server come Tomcat / JBoss / etc., per intenderci.. ;)).

La tabella "Group_" di Liferay

La tabella group_, invece, è la tabella che mappa quelli che adesso sono chiamati "Siti" sulla versione 6.1 di Liferay ma che prima erano chiamate "Community".

Non entro nel dettaglio del perché il mapping tra "cosa leggo sull'interfaccia" e "i nomi delle tabelle" sono così distanti tra di loro, perché non è obiettivo di questo post, per ora assumete semplicemente che quello che sto scrivendo corrisponde al vero! ;)

Se però siete curiosi, potete sempre fare la domanda nei commenti a questo post, così potrò raccontarvelo! ;)

La tabella "Virtualhost" di Liferay

La tabella virtualhost, infine, è quella che mantiene un map 1:1 tra il nome del sito -per nome intendo il suo "virtualhost", il suo "dominio".. Insomma, la sua URL!:)- e le relative "istanze" / "siti" sul vostro Liferay.

Fin qui dovrebbe essere tutto chiaro.

Ora vediamo come queste tre tabelle sono tra di loro relazionate nel contesto del nostro problema.

La tabella company è fondamentale perché è da qui che dobbiamo prendere il companyid che ci guiderà nelle sotto select che faremo sulle altre tabelle. Già, perché tutto quello che fate in Liferay è sempre collegato direttamente al companyid ed è quindi questa la tabella dalla quale partire.

Sulla tabella group_, invece, ci saranno tutti i siti che abbiamo creato all'interno della nostra istanza.

Attenzione! Noi vogliamo cambiare il sito principale della nostra istanza con un sito che esiste all'interno della stessa istanza, non con un sito "che è all'interno del nostro Liferay"!

La distinzione dev'essere fatta subito: se avete creato il sito che volete rendere principale all'interno della vostra istanza su di un'istanza diversa (quindi su un companyid differente da quello dell'istanza sulla quale lo volete mappare), allora avrete un bel po' da smanettare, perché il companyid che andrete a cambiare sarà poi da cambiare a cascata su tutte le tabelle che avrete nel frattempo popolato (journalarticle, layout, etc.).

Anche qui: se avete dubbi su questa cosa scrivetelo nei commenti che poi cercherò di spiegare / approfondire il problema! ;)

Ora che abbiamo visto cosa sono e cosa fanno queste tre tabelle, veniamo al nostro problema!

Supponiamo di avere questo scenario:

Sito Principale (da sostituire)
   --->Sito 2 <-- quello che deve diventare il default

Vediamo la struttura dei dati di questo schema, così da capire un po' più nel dettaglio il problema e la nostra soluzione.

Partiamo dalla tabella company; per brevità assumeremo che ci sarà solo una istanza, così non impazziremo! :)

liferay611=# SELECTcompanyid, webid, homeurlfrom company ;

companyid | webid | homeurl
-----------+-------------+---------
10800 | liferay.com | jed.it
Come vedete, il nostro companyid di riferimento è 10800.
A questo punto procediamo; vediamo quanti siti ci sono nella tabella group_ relativi a questa company.
liferay611=# SELECT groupid, companyid, name, type_, friendlyurl, site, active_
from group_ where companyid = 10800;
groupid | companyid | name | type_ | friendlyurl | site | active_
---------+-----------+--------------------+-------+-----------------+------+---------
10836 | 10800 | 10800 | 0 | /null | f | t
10842 | 10800 | 10840 | 0 | /test | f | t
10986 | 10800 | 10985 | 0 | /template-10985 | f | t
10996 | 10800 | 10995 | 0 | /template-10995 | f | t
11005 | 10800 | 11004 | 0 | /template-11004 | f | t
11014 | 10800 | 11013 | 0 | /template-11013 | f | t
11040 | 10800 | 11039 | 0 | /template-11039 | f | t
10817 | 10800 | Control Panel | 3 | /control_panel | t | t
10825 | 10800 | Guest | 1 | /guest | t | t
11100 | 10800 | Sito 2 | 1 | /sito2.it | t | t
10833 | 10800 | User Personal Site | 3 | /personal_site | f | t
(11 rows)
Qui invece le cose cominciano a complicarsi; abbiamo 11 righe nel db a fronte di 2 siti da migrare! :(
Ma non preoccupativi: anche a questo abbiamo dato per voi una risposta! ;)

Quello che a noi interessa, infatti, sono tutti i siti, quindi tutte le righe della tabella group_ che hanno site a true e nello specifico quelli che hanno type_ = 1.

Rifacciamo quindi la nostra query:

liferay611=# SELECT groupid, companyid, name, type_,friendlyurl, site, active_

from group_ where companyid = 10800 and site is true and type_ = 1;

groupid | companyid | name | type_ | friendlyurl | site | active_

---------+-----------+----------+-------+-----------------+------+---------

11100 | 10800 | Sito 2 | 1 | /sito2.it | t | t

10825 | 10800 | Guest | 1 | /guest | t | t

(2 rows)

Molto meglio! :)
Adesso abbiamo soltanto le nostre due righe!
Come vedete, i groupid che ci interessano, invece, sono questi: '11100' per il sito da far diventare il default e '10825' per il sito che ora è il default.
Ora passiamo invece a guardare la tabella virtualhost, quella che abbiamo detto contenere il map tra la company, il group_ ed l'URL del nostro sito!
liferay611=# SELECT * from virtualhost where companyid = 10800 ;
virtualhostid | companyid | layoutsetid | hostname
---------------+-----------+-------------+-----------------------
10943 | 10800 | 11102 | sito2.it
11104 | 10800 | 0 | sito1.it
(2 rows)
E anche qui troviamo le nostre due righe!
Come potete vedere, però, il layoutsetid del sito principale ha valore '0', mentre quello del secondo sito ha un id (nel nostro caso '11102').
Avete già capito come fare, vero? ;)
Basterà invertire i layoutsetid e tutto andrà a posto!
Fate un po' di update e poi fate ripartire Liferay!
Fate attenzione! C'è un constraint sulla tabella virtualhost che dice che la coppia companyid, layoutsetid dev'essere univoca, per ovvie ragioni... Quindi quando fate update dovete "aggirare" il vincolo! ;)
Invocate il sito principale e magicamente tutto dovrebbe andare a posto! ;)
Fatemi sapere se avete problemi o dubbi; sono a vostra disposizione per ogni cosa! :)
A presto!
Precedente
Commenti
Nessun commento. Vuoi essere il primo.