Siamo ora pronti per realizzare codice che interagisca con l'EntityManager, una classe attraverso la quale operiamo verso il database. Per poter operare con
l'EntityManager abbiamo però bisogno di realizzare il database hotel
su Postgres, configurare JBoss Wildfly affinchè
si colleghi al database e, infine, collegare JBoss Developer Studio, e in particolare il nostro JPA, al database hotel
.
Al termine avremo un ambiente che consentirà di sperimentare il codice. Iniziamo quindi con il collegarci, attraverso PgAdmin, al server Postgres della nostra macchina.
Seguendo i diagrammi del capitolo precedente, possiamo realizzare le tabelle nel giusto ordine con le sequence e i vincoli
di primary key e foreign key.
Abbiamo omesso la tabella Hotel
, presente nello schema originario, in quanto non aggiunge nulla di nuovo da un punto di vista concettuale, è possibile in ogni caso aggiungerla come esercizio.
Con il database funzionante il successivo step e fare in modo che JBoss Wildfly si colleghi ad esso. L'architettura di JBoss è estremamente flessibile e basata
su moduli, possiamo attivare o disattivare i moduli che ci interessano in modo semplice e veloce. Nel nostro caso JBoss Wildfly
non è a conoscenza di un modulo che consenta una connessione ad un database Postgres, dobbiamo quindi definire un nuovo modulo
che utilizzi il driver JDBC di Postgres.
All'interno della directory modules
di JBoss Wildfly creiamo la directory org
, al suo interno la directory postgres
ed all'interno di postgres
la directory main
. In main
copiamo il file jar
del driver JDBC di Postgres, esso potrebbe essere ad esempio postgresql-9.4-1201-jdbc4.jar
. Infine
realizziamo il file module.xml
, sempre in main
con il seguente contenuto:
<?xml version="1.0" ?>
<module xmlns="urn:jboss:module:1.1" name="org.postgres">
<resources>
<resource-root path="postgresql-9.4-1201-jdbc4.jar"/>
</resources>
<dependencies>
<module name="javax.api"/>
<module name="javax.transaction.api"/>
</dependencies>
</module>
Abbiamo così aggiunto un nuovo modulo a JBoss per la connessione al database Postgres, in modo del tutto
analogo possiamo creare moduli per connessioni a database differenti.
Apriamo adesso il file di configurazione di JBoss che stiamo utilizzando, standalone-full.xml
, e individuiamo il sottosistema urn:jboss:domain:datasources:3.0
. Al suo interno troviamo il tag datasources
che consente di definire dei datasource per le connessioni verso database. Inseriamo una connessione verso il database hotel
:
<datasource jndi-name="java:/PostgresDS" pool-name="PostgresPool" enabled="true">
<connection-url>jdbc:postgresql://localhost:5432/hotel</connection-url>
<driver>postgres</driver>
<security>
<user-name>postgres</user-name>
<password>postgres</password>
</security>
</datasource>
e nella sezione "drivers" un collegamento al modulo driver definito precedentemente:
<driver name="postgres" module="org.postgres">
<driver-class>org.postgresql.Driver</driver-class>
</driver>
Abbiamo chiaramente assunto l'esistenza di un ruolo postgres
con password "postgres", è possibile tranquillamente creare ruoli con password differenti utilizzando PgAdmin. Queste operazioni concludono la configurazione di JBoss. Se eseguiamo lo start del server dovremmo notare la seguente linea di log sulla console:
[org.jboss.as.connector.deployers.jdbc] (MSC service thread 1-5) WFLYJCA0018: Started Driver service with driver-name = postgres