Opas tietokantasovellusten tekemisen aloittamiseen Java-kielellä, osa 7

Edellisessä osassa kytkettiin uimarit uimaseuraan siten, että uimaseura tietää aina siihen kuuluvat uimarit.

Tässä osassa pyydetään users.cs.helsinki.fi-palvelimelle mysql ja tomcat, sekä asennetaan ohjelmisto UimariHarjoitus. Ohjeessa oletetaan, että yhteydet luodaan laitoksen koneilta.

Kone users.cs.helsinki.fi

Kone users.cs.helsinki.fi on tietojenkäsittelytieteen laitoksen opiskelijoille tarkoitettu palvelin, jossa voi ajaa omia ohjelmistoja. MySQL-tietokannan lisäksi users-koneella on mahdollista käyttää sekä Oracle-tietokantaa, että PostgreSQL-tietokantaa. Users-koneelle pääsee kirjautumaan komennolla.

ssh users.cs.helsinki.fi -l <omatunnus>

MySQL

MySQL-tietokannan saa käyttöön kirjoittamalla users-koneella komennon wanna-mysql. Kun kirjoitat komennon, sinulle luodaan tietokanta ja siihen liittyvä konfiguraatiotiedosto .my.cnf. Huom! Kun ajat komentoa wanna-mysql, ohjelma kysyy myös salasanaa mysql:n root-käyttäjälle. Kirjoita salasana muistiin!

tunnus@users:~$ wanna-mysql
Set up the /home/tunnus/.my.cnf configfile.
Initializing database in /home/tunnus/mysql directory.

Database initialized.

Now to start it for the first time, and then secure it.
<ohjelma käynnistyy, näet käynnistykseen liittyviä tulosteita>
...
PAY ATTENTION TO THIS!
New password for your mysql root user:

Re-enter new password:

Removing anonymous users, test database and remote root account.
110530 14:37:34 [Note] /usr/sbin/mysqld: Normal shutdown

110530 14:37:34 [Note] Event Scheduler: Purging the queue. 0 events
110530 14:37:34  InnoDB: Starting shutdown...
110530 14:37:35  InnoDB: Shutdown completed; log sequence number 0 44233
110530 14:37:35 [Note] /usr/sbin/mysqld: Shutdown complete

Start the database with /usr/local/bin/start-mysql
Stop with /usr/local/bin/stop-mysql
Create databases and users with mysql -u root -p
tunnus@users:~$ 

Kun olet luonut tietokannan, skripti ehdottaa tietokannan käynnistämistä komennolla start-mysql. Tämä skripti ei sovellu tarkoituksiimme, sillä se käynnistää mysql-tietokannan skip-networking -parametrilla. Skip-networking tarkoittaa että palvelin ei ota vastaan TCP-IP-yhteyksiä, jolloin emme saisi tietokantaan yhteyttä JDBC:n (ja JPA:n) yli.

Haluamme käyttää MySQL:ää siten, että palvelimme kuuntelee pyyntöjä jossain tietyssä portissa. Oletusporttia, 3306, ei kannata käyttää, sillä palvelin ja portti on henkilökohtainen. Pyritään käyttäämään käyttäjätunnukseemme liittyvää id:tä portin luonnissa. Jos käyttäjätunnustamme ei näy suoraan konsolissa, saamme sen selville komennolla whoami. Käyttäjätunnukseemme liittyvän käyttäjäid:n löytää komennolla id -u <tunnus>. Tuleva tomcat-asennuksemme käyttää oletuksena käyttäjäid:tä porttina, joten yritetään porttia käyttäjäid+1 mysql:n käyttöön.

tunnus@users:~$ whoami
tunnus
tunnus@users:~$ id -u tunnus
numero

Käynnistetään mysql arvolla numero + 1. Komento stop-mysql sulkee tietokannan. MySQL-palvelimen sulkeminen vaatii root-käyttäjän salasanan, jonka kirjoitit aiemmin muistiin.

tunnus@users:~$ /usr/sbin/mysqld --port (numero + 1) &
tunnus@users:~$ 110530 <aika> [Note] Plugin 'FEDERATED' is disabled.
110530 <aika>  InnoDB: Started; log sequence number 0 44233
110530 <aika> [Note] Event Scheduler: Loaded 0 events
110530 <aika> [Note] /usr/sbin/mysqld: ready for connections.
Version: '5.1.41-3ubuntu12.10'  socket: '/home/tunnus/mysql/socket'  port: (numero + 1)  (Ubuntu)

tunnus@users:~$

Jos käynnistys epäonnistuu, ja saat virheilmoituksen jossa kerrotaan portin olevan käytössä, tai oma käyttäjätunnuksesi on suurempi kuin 65536, etsi vapaa portti väliltä 40000-65000 ja käytä sitä. Komennosta netstat -nap | grep LISTEN | grep tcp saattaa olla hyötyä alkuun pääsemisessä.

Kirjaudutaan tietokantaan ja listataan jo olemassa olevat tietokannat.

tunnus@users:~$ mysql -u root -p
Enter password: <anna tähän root-käyttäjän salasana>
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.1.41-3ubuntu12.10 (Ubuntu)

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
+--------------------+
2 rows in set (0.02 sec)

mysql> 

Tietokannat information_schema ja mysql ovat oleellisia MySQL-kannan toiminnan kannalta -- älä poista niitä.

Uimarit-tietokanta

Luodaan MySQL-tietokantaan kanta uimarit, ja lisätään sinne uusi käyttäjä jolla on oikeudet uimarit-tietokannan käyttöön. Tietokantaa ei kannata käyttää "arkikäytössä" root-käyttäjän avulla, vaan kannattaa luoda erillinen käyttäjätunnus tietokannan käyttöön.

Kirjaudutaan tietokantaan (oletetaan että tietokanta on päällä).

tunnus@users:~$ mysql -u root -p
Enter password: <anna tähän root-käyttäjän salasana>
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.1.41-3ubuntu12.10 (Ubuntu)

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 

Luodaan tietokanta uimarit.

mysql> create database uimarit;
Query OK, 1 row affected (0.03 sec)

mysql>

Listataan kaikki tietokannat, näemme listalla tietokannan uimarit.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| uimarit            |
+--------------------+
3 rows in set (0.00 sec)

mysql> 

Luodaan seuraavaksi käyttäjä u, jolla on salasana u. Käyttäjällä u on oikeudet kirjautua kaikilta koneilta. Lisää käyttäjätunnusten luonnista löytyy MySQL:n manuaalista, osa 12.4.1.1. kuvaa komennon create user syntaksin ja osa 5.4.3 käsittelee käyttäjätunnuksia ja oikeuksia kirjautumiseen.

mysql> create user 'u'@'%' identified by 'u';
Query OK, 0 rows affected (0.01 sec)

mysql> 

Lisätään käyttäjälle u oikeudet uimarit-tietokannan käyttöön.

mysql> grant all on uimarit.* to 'u'@'%';
Query OK, 0 rows affected (0.02 sec)

mysql> 

Mainiota! Kirjaudutaan seuraavaksi ulos MySQL-tietokannasta (jota olemme käyttäneet root-tunnuksella), ja kirjaudutaan takaisin sisään käyttäen käyttäjätunnusta u.

mysql> exit
Bye
tunnus@users:~$ mysql -u u -p
Enter password: <tähän käytetään käyttäjätunnuksen u salasanaa, joka asetettiin aiemmin u:ksi>
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.1.41-3ubuntu12.10 (Ubuntu)

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 

Listataan seuraavaksi vielä tietokannat ja valitaan käyttöön tietokanta uimarit.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| uimarit            |
+--------------------+
2 rows in set (0.00 sec)

mysql> use uimarit;
Database changed
mysql>

Kun olemme valinneet tietokannan uimarit käyttöön, voimme seuraavaksi lisätä sinne tauluja. Myöhemmin oma ohjelmamme luo taulut, mutta tehdään nyt testitaulu käsin. Tarkistetaan ensiksi onko tietokannassa tauluja, jonka jälkeen luomme taulun jippii.

mysql> show tables;
Empty set (0.00 sec)

mysql> create table jippii (id int, viesti varchar(255));
Query OK, 0 rows affected (0.03 sec)

Suorittamalla kyselyn select * from jippii; huomaamme ettei taulussa ole tietoa.

mysql> select * from jippii;
Empty set (0.00 sec)

mysql>

Noniin, nyt meillä on MySQL tietokanta, käyttäjä ja käyttäjän salasana. Poistetaan vielä taulu jippii, jottei se jää roskaamaan tietokantaa, varmistetaan että taulu poisteettiin, ja lopuksi poistutaan tietokannasta.

mysql> drop table jippii;
Query OK, 0 rows affected (0.02 sec)

mysql> show tables;
Empty set (0.00 sec)

mysql> exit;
Bye
tunnus@users:~$ 

Tomcat

Seuraavaksi hankimme käyttöömme tomcat-palvelimen. Laitoksella on käytössä tomcatin versio 6, jota olemme käyttäneet myös sovelluksia kehittäessä. Tomcat-palvelimen saa käyttöön komennolla wanna-tomcat.

tunnus@users:~$ wanna-tomcat

This script will create a new tomcat environment for you in directory
/home/tunnus/tomcat. Please see http://users.cs.helsinki.fi/tomcat for more
information. Do you want to create a new tomcat installation
in /home/tunnus/tomcat (y/n)? <syötä y>

....

Tomcat environment has been setup for you. Now you can run 'start-tomcat'.
tunnus@users:~$

Käynnistetään palvelin komennolla start-tomcat.

tunnus@users:~$ start-tomcat
Using CATALINA_BASE:   /home/tunnus/tomcat
Using CATALINA_HOME:   /usr/share/tomcat6
Using CATALINA_TMPDIR: /home/tunnus/tomcat/temp
Using JRE_HOME:        /usr/lib/jvm/java-6-sun
Using CLASSPATH:       /usr/share/tomcat6/bin/bootstrap.jar
Tomcat has been started. It should be visible through URL
http://t-tunnus.users.cs.helsinki.fi/

If you have problems, your tomcat log files are
available from /home/tunnus/tomcat/logs

Please, remember to stop (with stop-tomcat) tomcat instances with are
not used.
tunnus@users:~$ 

Kun menet web-selaimella osoitteeseen http://t-<tunnus>.users.cs.helsinki.fi/, näet sivun jossa on otsikkona viesti "It works!".

Tomcat-palvelimen saa suljettua komennolla stop-tomcat.

Oman ohjelmiston asennus

Lisätään seuraavaksi oma ohjelmistomme users.cs.helsinki.fi-tietokoneelle.

MySQL-kirjasto

Lisää projektin kirjastoihin MySQL JDBC ajuri.

Uusi tietokantayhteys

Luodaan uusi tietokantayhteys Services-välilehdellä. Valitse oikealle hiirennapilla Databases, ja New Connection. Uudessa ikkunassa valitse ajuriksi MySQL (Connector/J driver) ja täytä kentät. Kenttään Port tulee aiemmin valitsemasi mysql-portti.

Oikea tietokantaviite

Muutetaan persistence.xml-tiedostoa siten, että viittaamme ensiksi persistence.xml-tiedostoa siten, että käytössämme on viimeksi luotu JDBC-yhteys.

Muuta myös taulujen luontistrategiaksi Create.

Paketointi ja siirto

Valitse projekti oikealla hiirennapilla, ja valitse Clean and Build. Tämä luo projektista war-tiedoston (web application archive) projektin dist-kansioon. Projektilla UimariHarjoitus on nyt tiedosto UimariHarjoitus.war dist-kansiossa.

Kopioidaan paketti users-koneelle.

tunnus@kone:~$ scp ~/NetBeansProjects/UimariHarjoitus/dist/UimariHarjoitus.war users.cs.helsinki.fi:

Mennään koneelle users.cs.helsinki.fi, ja siirretään pakkaus tomcat-kansiossa olevaan webapps-kansioon.

tunnus@kone:~$ ssh users.cs.helsinki.fi
tunnus@users:~$ mv UimariHarjoitus.war tomcat/webapps/
tunnus@users:~$

Jos tomcat on päällä, pyrkii se käynnistämään sovelluksen automaattisesti. Näet tomcatin logeista tomcat/logs/catalina.out ohjelman logiin kirjoittamat viestit. Jos tomcat ei ole päällä, käynnistä se, ja selaa osoitteeseen http://t-tunnus.users.cs.helsinki.fi/UimariHarjoitus/Lista.

Tarkistus

Lisätään muutama uimari käyttöliittymän kautta ja kirjaudutaan tietokantaan.

tunnus@users:~$ mysql -u u -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 5.1.41-3ubuntu12.10 (Ubuntu)

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| uimarit            |
+--------------------+
2 rows in set (0.00 sec)

mysql> use uimarit;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show tables;
+-------------------+
| Tables_in_uimarit |
+-------------------+
| SEQUENCE          |
| UIMARI            |
| UIMASEURA         |
| UIMASEURA_UIMARI  |
+-------------------+
4 rows in set (0.00 sec)

mysql> select * from UIMASEURA;
+----+----------------+
| ID | NIMI           |
+----+----------------+
|  1 | Uimaseura      |
| 51 | Uusi Uimaseura |
+----+----------------+
2 rows in set (0.00 sec)

mysql> select * from UIMARI;
+----+-----------------+--------------+--------------+
| ID | NIMI            | SYNTYMAVUOSI | UIMASEURA_ID |
+----+-----------------+--------------+--------------+
|  2 | Oiva Uimari     |         1944 |            1 |
| 52 | Jaska Vauhdikas |         3431 |            1 |
+----+-----------------+--------------+--------------+
3 rows in set (0.00 sec)

mysql> exit;
Bye

Muista sulkea tomcat ja mysql kun et käytä niitä enää!