La distribuzione Liferay di default prevede l’utilizzo del data base HSQL (Hypersonic) per la persistenza dei dati. L’utilizzo di questo tipo di data base in ambienti di produzione non è però consigliato.
Nel corso di quest’articolo vedremo Step-by-Step come configurare il data base PostgreSQL per la persistenza dei dati di Liferay. Non saranno affrontanti temi di tuning e performance riguardo questa tipologia di configurazione.
Windows azure - abbattere tempi e costi di sviluppo
Come configurare Liferay 6.0 per PostgreSQL
1. Antonio
Musarra's
Blog
The
ideal
solution
for
a
problem
Blog:
http://musarra.wordpress.com
Mail:
antonio.musarra@gmail.com
Come
configurare
Liferay
6.0
per
PostgreSQL
Nel
precedente
articolo
Come
configurare
Eclipse
per
Liferay
Portal
in
Mac
OS
X,
pubblicato
sul
mio
blog,
abbiamo
visto
come
configurare
un
ambiente
di
sviluppo
completo
per
Liferay
6.0.
La
distribuzione
Liferay
di
default
prevede
l’utilizzo
del
data
base
HSQL
(Hypersonic)
per
la
persistenza
dei
dati.
L’utilizzo
di
questo
tipo
di
data
base
in
ambienti
di
produzione
non
è
però
consigliato.
Nel
corso
di
quest’articolo
vedremo
Step-‐by-‐Step
come
configurare
il
data
base
PostgreSQL
per
la
persistenza
dei
dati
di
Liferay.
Non
saranno
affrontanti
temi
di
tuning
e
performance
riguardo
questa
tipologia
di
configurazione.
1. Requisiti
Per
terminare
con
successo
la
configurazione
Liferay/PostgreSQL
devono
essere
soddisfatti
una
serie
di
requisiti
software:
• Liferay
6.0
• PostgreSQL
8
o
superiore1
• JDBC
Driver
per
PostgreSQL2
La
versione
Liferay
di
riferimento
è
la
6.0.6
nell’edizione
Community
distribuita
con
il
Servlet
Container
Tomcat.
Il
driver
JDBC
per
PostgreSQL
è
già
distribuito
con
la
versione
di
Liferay
e
risiede
all’interno
della
directory
{liferay-‐
home}/{tomcat}/lib/ext.
Il
driver
JDBC
per
PostgreSQL
fornito
con
Liferay
è
un
JDBC
Type
33.
Ho
pubblicato
sul
mio
repository
Gist
JDBC
Type
Test
Class
una
classe
di
test
per
identificare
il
tipo
di
driver
JDBC.
1
La
versione
utilizzata
per
la
stesura
di
quest’articolo
è
la
8.4
installata
con
una
configurazione
di
default
sul
sistema
operativo
CentOS
5.6
(virtualizzato).
2
I
driver
JDBC
per
PostgreSQL
e
tutta
la
documentazione
relativa
sono
disponibili
all’indirizzo
http://jdbc.postgresql.org/index.html
3
I
driver
di
tipo
3
sono
i
cosiddetti
net
driver:
in
questo
caso
il
driver
è
diviso
in
due
parti
come
il
tipo
2,
ma
i
due
strati
adesso
comunicano
tramite
un
protocollo
proprietario
o
alle
volte
anche
via
TCP/IP
o
HTTP.
16/06/11
1
This
document
is
issued
with
license
Creative
Commons
Attribution-‐NonCommercial-‐ShareAlike
2. Antonio
Musarra's
Blog
The
ideal
solution
for
a
problem
Blog:
http://musarra.wordpress.com
Mail:
antonio.musarra@gmail.com
2. Scenario
di
configurazione
Lo
scenario
affrontato
è
molto
semplice
e
in
linea
con
quanto
previsto
da
Liferay
stessa.
Per
ragioni
di
semplicità
è
stata
volutamente
scelta
la
versione
di
Liferay
che
include
Tomcat
(come
Servlet
Container),
lo
scenario
resta
comunque
valido
per
qualunque
altro
tipo
di
Servlet
Container
o
Application
Server
J2EE
supportati
da
Liferay.
Consiglio
la
lettura
del
documento
ufficiale
Liferay
Portal
6.0
–
Administration
Guide
e
in
particolare
della
sezione
Installing
Liferay
on
an
Existing
Application
Server.
Figura
1
Scenario
di
configurazione
Liferay/PostgreSQL
per
la
persistenza
dei
dati.
La
Figura
1
mostra
lo
scenario
di
configurazione
desiderato
per
la
nostra
installazione
di
Liferay
Portal
Server.
Nel
diagramma
sono
indicate
le
configurazioni
di
rete
(che
nel
vostro
caso
potrebbero
essere
anche
diverse)
a
scopo
puramente
dimostrativo.
La
connessione
verso
il
data
base
sarà
eseguita
e
gestita
attraverso
un
JDBC
Connection
Pool4
configurato
sul
Servlet
Container
o
Application
Server.
Gli
step
necessari
al
completamento
della
configurazione
che
vedremo
nel
resto
dei
successivi
paragrafi
sono:
• Configurazione
del
data
base;
• Configurazione
del
Connection
Pool;
• Configurazione
di
Liferay
Portal.
4
Consiglio
la
lettura
dei
documenti
Connection
Pool
e
JDBC
Connection
Pooling
Best
Practices
16/06/11
2
This
document
is
issued
with
license
Creative
Commons
Attribution-‐NonCommercial-‐ShareAlike
3. Antonio
Musarra's
Blog
The
ideal
solution
for
a
problem
Blog:
http://musarra.wordpress.com
Mail:
antonio.musarra@gmail.com
3. Configurazione
di
PostgreSQL
Liferay
richiede
che
il
data
base
sui
cui
si
vuol
fare
la
persistenza
dei
dati
sia
correttamente
configurato,
ciò
si
traduce
nell’espletamento
dei
seguenti
punti:
• Configurazione
dei
parametri
di
rete;
• Creazione
dell’utente
che
accederà
al
data
base;
• Creazione
del
data
base
che
ospiterà
i
dati
di
Liferay.
Per
rispondere
al
primo
punto
indicato
sopra,
è
necessario
accertarsi
che
PostgreSQL
sia
configurato
in
modo
tale
che
sia
in
listen
sull’interfaccia
di
rete
che
sarà
poi
utilizzata
per
la
connessione
da
parte
di
Liferay.
La
verifica
ed
eventuale
modifica
dei
parametri
di
rete
è
abbastanza
semplice.
Attraverso
il
comando
mostrato
nel
Listato
1
verifichiamo
che
il
data
base
sia
in
listen
sulla
corretta
interfaccia
di
rete,
così
come
indicato
in
Figura
1.
# netstat -tanp | grep LISTEN | grep 5432
Listato
1
Comando
per
la
verifica
del
servizio
TCP/IP
di
PostgreSQL.
tcp 0 0 127.0.0.1:5432 0.0.0.0:* LISTEN 9177/postmaster
Listato
2
Output
del
comando
netstat.
L’output
del
comando
evidenzia
che
il
data
base
è
il
listen
solamente
sull’interfaccia
di
loopback
(127.0.0.1),
occorre
quindi
configurare
il
servizio
TCP/IP
del
data
base
in
listen
sull’interfaccia
avente
l’indirizzo
IP
impostato
a
192.168.56.101.
Il
file
configurazione
interessato
alla
modifica
è
mostrato
al
Listato
3.
E’
stato
aggiunto
l’indirizzo
192.168.56.101
su
cui
accettare
connessioni
TCP/IP
in
ingresso.
Affinché
la
modifica
sia
applicata,
sarà
necessario
eseguire
il
restart
del
data
base.
#----------------------------------------------------------------
# CONNECTIONS AND AUTHENTICATION
#----------------------------------------------------------------
# - Connection Settings -
# What IP address(es) to listen on;
# Comma-separated list of addresses;
# Defaults to 'localhost','*' = all
listen_addresses = '127.0.0.1,192.168.56.101'
Listato
3
File
di
configurazione
postgresql.conf.
Eseguendo
nuovamente
il
comando
mostrato
nel
Listato
1
vedremo
che
oltre
l’indirizzo
di
loopback
in
listen
sulla
porta
TCP/IP
5432,
sarà
presente
anche
il
nuovo
indirizzo,
così
come
illustrato
al
Listato
4.
La
porta
TCP/IP
assegnata
da
Internet
Assigned
Numbers
Authority
-‐
IANA
al
servizio
del
data
base
è
la
5432,
sui
sistemi
Unix/Linux/BSD
consultare
il
file
/etc/services.
16/06/11
3
This
document
is
issued
with
license
Creative
Commons
Attribution-‐NonCommercial-‐ShareAlike
4. Antonio
Musarra's
Blog
The
ideal
solution
for
a
problem
Blog:
http://musarra.wordpress.com
Mail:
antonio.musarra@gmail.com
tcp 0 0 127.0.0.1:5432 0.0.0.0:* LISTEN 9177/postmaster
tcp 0 0 192.168.56.101:5432 0.0.0.0:* LISTEN 9177/postmaster
Listato
4
Output
del
comando
netstat
dopo
la
modifica
della
configurazione
di
PostgreSQL.
Completata
la
configurazione
del
servizio
TCP/IP
del
data
base,
è
possibile
proseguire
con
la
creazione
dell’utenza
che
sarà
utilizzata
da
Liferay
per
la
connessione
e
tutte
le
altre
operazioni
necessarie
(sia
DML
sia
DDL).
Il
comando
a
seguire
è
responsabile
della
creazione
dell’utente
liferay-‐1,
per
ragioni
di
sicurezza
l’utenza
è
stata
creata
con
qualche
limite,
infatti,
è
consigliabile
limitare
il
raggio
d’azione
dell’utenza
al
solo
schema
di
competenza.
Generalmente
i
comandi
che
agiscono
sul
data
base
devono
essere
eseguiti
con
il
grado
di
dba,
l’utenza
di
default
del
sistema
operativo
avente
il
ruolo
dba
è
postgres.
$ createuser -D -R -S -e -E -P liferay-1
Listato
5
Creazione
dell’utente
liferay-‐1.
Il
comando
chiederà
l’immissione
di
una
password
a
vostra
scelta,
in
questo
caso
la
password
assegnata
è
liferay12345.
Per
terminare
la
configurazione
dell’utente,
serve
istruire
il
data
base
affinché
consenta
connessioni
in
ingresso
da
parte
dell’utente
appena
creato
dalla
rete
di
classe
192.168.56.0/24,
per
far
ciò
bisogna
aggiungere
una
nuova
direttiva
al
file
di
configurazione
pg_hba.conf.
# PostgreSQL Client Authentication Configuration File
# ===================================================
# TYPE DATABASE USER CIDR-ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all ident
# IPv4 local connections:
host all all 127.0.0.1/32 ident
host all all 127.0.0.1/32 md5
host all all 172.16.1.0/24 md5
host all all 192.168.56.0/24 md5
Listato
6
Aggiunta
dell’autorizzazione
di
connessione
da
reti
192.168.56.0/24.
L’ultima
opera
di
configurazione
è
quella
più
importante,
la
creazione
del
data
base
che
chiameremo
liferay-‐1,
così
come
l’utente.
Sempre
con
il
grado
di
dba
procediamo
con
il
comando
illustrato
nel
Listato
7.
$ createdb -e -E UTF-8 -O liferay-1 liferay-1
Listato
7
Creazione
del
data
base
liferay-‐1.
16/06/11
4
This
document
is
issued
with
license
Creative
Commons
Attribution-‐NonCommercial-‐ShareAlike
5. Antonio
Musarra's
Blog
The
ideal
solution
for
a
problem
Blog:
http://musarra.wordpress.com
Mail:
antonio.musarra@gmail.com
Il
data
base
è
stato
creato
con
un
tipo
di
encoding
UTF-‐8
e
owner
l’utente
liferay-‐1
creato
in
precedenza.
Dopo
il
riavvio
del
data
base,
necessario
per
applicare
le
nuove
regole
di
connessione,
è
possibile
verificare
che
la
nuova
configurazione
funzioni
correttamente.
La
verifica
è
molto
semplice,
basterebbe
eseguire
una
connessione
con
un
qualunque
tipo
di
client,
il
comando
a
seguire
mostra
una
connessione
al
data
base
creato
in
precedenza
utilizzando
il
client
pgsql.
$ psql -h 192.168.56.101 -U liferay-1 liferay-1
Listato
8
Connessione
al
data
base
di
Liferay.
psql (8.4.7)
liferay-1=> l
List of databases
Name | Owner | Encoding | Collation | Ctype | Access privileges
-----------+-----------+----------+-------------+-------------+-----------------------
liferay-1 | liferay-1 | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres
: postgres=CTc/postgres
template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres
: postgres=CTc/postgres
(4 rows)
liferay-1=>
Listato
9
Vista
dei
data
base
dopo
la
connessione
al
data
base
liferay-‐1.
Con
quest’ultima
verifica
la
configurazione
di
PostgreSQL
è
ultimata
e
il
data
base
è
pronto
per
ospitare
i
dati
di
Liferay.
E’
possibile
approfondire
la
configurazione
trattata
in
questo
paragrafo
consultando
la
documentazione
ufficiale
PostgreSQL
8.4
Server
Administration.
4. Configurazione
di
Tomcat
Il
nostro
scenario
di
configurazione
(vedere
la
Figura
1)
prevede
che
la
connessione
verso
il
data
base
PostgreSQL
sia
gestita
attraverso
un
Connection
Pool.
La
configurazione
di
un
Database
Connection
Pool
(DBCP)
su
Tomcat
come
risorsa
Java
Naming
and
Directory
Interface
(JNDI)
è
molto
semplice.
La
documentazione
Apache
Tomcat
6.0
-‐
JNDI
Datasource
HOW-‐TO
è
ben
fatta
e
molto
chiara,
comprende
inoltre
anche
il
caso
di
configurazione
per
un
RDBMS
PostgreSQL.
Nel
Listato
10
la
configurazione
della
risorsa
definita
come
jdbc/LiferayPool.
<Resource name="jdbc/LiferayPool" auth="Container" type="javax.sql.DataSource"
maxActive="100" maxIdle="30" maxWait="10000"
username="liferay-1" password="liferay12345"
driverClassName="org.postgresql.Driver"
url="jdbc:postgresql://liferay-portal-db-1.local:5432/liferay-1?charSet=UTF-8"/>
Listato
10
Parte
del
file
di
configurazione
context.xml.
16/06/11
5
This
document
is
issued
with
license
Creative
Commons
Attribution-‐NonCommercial-‐ShareAlike
6. Antonio
Musarra's
Blog
The
ideal
solution
for
a
problem
Blog:
http://musarra.wordpress.com
Mail:
antonio.musarra@gmail.com
Il
file
di
configurazione
completo
è
disponibile
sul
mio
repository
Gist
all’indirizzo
Apache
Tomcat
6.0
-‐
JNDI
Datasource.
Il
file
di
configurazione
context.xml
è
locato
in
{liferay-‐home}/{tomcat}/conf.
5. Configurazione
di
Liferay
La
configurazione
del
data
base
nella
versione
6.0
di
Liferay
è
rimasta
uguale
alla
precedente
release
5.2.
Il
nostro
scenario
di
configurazione
prevede
l’utilizzo
di
un
Database
Connection
Pool
(DBCP)
configurato
in
precedenza
ed
esposto
come
risorsa
JNDI.
In
maniera
molto
semplice
è
possibile
indicare
a
Liferay
il
nome
della
risorsa
JNDI
all’interno
del
file
di
properties
portal-‐ext.properties
specificando
la
proprietà
indicata
al
Listato
11.
jdbc.default.jndi.name=jdbc/LiferayPool
Listato
11
Configurazione
del
data
base
via
JNDI.
La
directory
{liferay-‐home}/{tomcat}/webapps/ROOT/WEB-‐INF/classes
contiene
il
file
portal-‐ext.properties.
Non
è
detto
che
il
file
sia
presente,
qualora
non
fosse
presente,
occorre
crearlo
da
zero
e
conterrà
la
sola
riga
mostrato
nel
procedente
listato.
6. Start
di
Liferay
con
la
nuova
configurazione
Dopo
aver
completato
tutte
le
fasi
di
configurazione,
possiamo
procedere
con
l’avvio
di
Liferay
Portal
e
verificare
che
la
nuova
configurazione
funzioni
in
modo
corretto.
Il
primo
avvio
è
quello
più
delicato
che
richiederà
un
tempo
di
start-‐up
superiore
al
normale
per
via
del
setup
(che
include
numerose
operazioni)
richiesto
per
il
nuovo
data
base
PostgreSQL.
Al
Listato
12
sono
mostrate
le
informazioni
più
rilevanti
estratte
dal
file
di
log
catalina.out
di
Tomcat.
Loading file:/opt/liferay-portal-6.0.6/tomcat-6.0.29/webapps/ROOT/WEB-
INF/classes/portal-ext.properties
12:45:34,784 INFO [DialectDetector:69] Determining dialect for PostgreSQL 8
12:45:34,890 INFO [DialectDetector:49] Using dialect
org.hibernate.dialect.PostgreSQLDialect
Starting Liferay Portal Community Edition 6.0.6 CE (Bunyan / Build 6006 / February 17,
2011)
12:45:50,056 ERROR [JDBCExceptionReporter:101] ERROR: relation "lock_" does not exist
Position: 403
12:45:50,585 WARN [ReleaseLocalServiceImpl:143] ERROR: relation "release_" does not
exist
Position: 25
12:45:50,588 INFO [ReleaseLocalServiceImpl:84] Create tables and populate with
default data
12:45:54,093 INFO [BaseDB:400] Database supports case sensitive queries
12:46:06,270 INFO [ServiceComponentLocalServiceImpl:187] Running Chat SQL scripts
12:46:13,704 INFO [ServiceComponentLocalServiceImpl:187] Running Kaleo SQL scripts
12:46:14,957 INFO [ServiceComponentLocalServiceImpl:187] Running Mail SQL scripts
Listato
12
Estratto
dal
file
log
catalina.out
al
primo
avvio.
16/06/11
6
This
document
is
issued
with
license
Creative
Commons
Attribution-‐NonCommercial-‐ShareAlike
7. Antonio
Musarra's
Blog
The
ideal
solution
for
a
problem
Blog:
http://musarra.wordpress.com
Mail:
antonio.musarra@gmail.com
Non
appena
il
server
avrà
completato
la
fase
di
start-‐up,
sarà
possibile
accedere
a
Liferay
puntando
all’indirizzo
http://liferay-‐portal-‐fe-‐1.local:8080.
In
Figura
2
è
mostrato
il
pannello
di
controllo
nella
sezione
delle
info
utente.
Figura
2
Pannello
di
controllo
Liferay
dopo
l’avvio.
L’esecuzione
del
comando
netstat
(così
come
indicato
nel
Listato
13)
su
una
delle
due
macchine,
mostra
le
connessioni
attive
verso
la
base
dati.
Nel
comando
è
stato
volutamente
omesso
il
parametro
n
in
modo
che
sia
eseguito
il
lookup
degli
indirizzi
IP
nei
rispettivi
nomi.
# netstat -ta | grep ESTABLISHED | grep postgres
Listato
13
Comando
netstat
per
la
visualizzazione
delle
connessioni
verso
PostgreSQL.
tcp 0 0 liferay-portal-db-:postgres liferay-portal-fe-1.l:49784 ESTABLISHED
tcp 0 0 liferay-portal-db-:postgres liferay-portal-fe-1.l:49737 ESTABLISHED
tcp 0 0 liferay-portal-db-:postgres liferay-portal-fe-1.l:49739 ESTABLISHED
tcp 0 0 liferay-portal-db-:postgres liferay-portal-fe-1.l:49740 ESTABLISHED
Listato
14
Output
del
comando
netstat.
16/06/11
7
This
document
is
issued
with
license
Creative
Commons
Attribution-‐NonCommercial-‐ShareAlike
8. Antonio
Musarra's
Blog
The
ideal
solution
for
a
problem
Blog:
http://musarra.wordpress.com
Mail:
antonio.musarra@gmail.com
7. Risorse
A
seguire
una
breve
lista
delle
risorse
disponibili
in
rete
che
possono
essere
rilevanti
come
approfondimento
del
tema
trattato
da
quest’articolo.
Item
Nome
risorsa
Descrizione
1
Installing
Liferay
for
an
Enterprise
Questo
documento
descrive
l’installazione
di
Liferay
in
ambienti
di
tipo
Enterprise
e
le
pratiche
più
comuni.
2
Installing
a
Bundle
Questo
documento
descrive
la
struttura
del
bundle
e
la
relativa
installazione.
3
Liferay
Wiki
Guide
Wiki
di
raccolta
articoli
forniti
dallo
staff
di
Liferay
e
dalla
comunità.
4
Database
Configuration
Questo
documento
contiene
informazioni
su
come
cambiare
l’RDBMS
di
default.
8. Conclusioni
Sono
appena
al
mio
terzo
giorno
di
convivenza
con
Liferay,
e
proprio
in
questo
giorno
ho
deciso
di
togliere
HSQL
è
mettere
sotto
il
cofano
di
Liferay
il
data
base
PostgreSQL.
L’esperienza
su
questo
tipo
di
configurazione
è
stata
molto
positiva,
riscontrando
semplicità
e
immediatezza
davvero
notevoli,
probabilmente
il
framework
Spring
in
coppia
con
l’ORM
Hibernate
sono
i
“benefattori”.
Non
sarebbe
stato
male
consentire
come
possibilità
la
creazione
automatica
del
data
base.
16/06/11
8
This
document
is
issued
with
license
Creative
Commons
Attribution-‐NonCommercial-‐ShareAlike