Järjestelmän asennusohjeet
Eclipsen asennus
Tässä ohjeessa oletetaan että järjestelmässä on Java 1.8 ( eclipse Luna ja uudemmat vaativat 1.8 että glassfish adapter toimii)
- Lataa ja asenna Eclipse IDE for Java EE Developers http://www.eclipse.org/downloads/. Kyllä, ihan oikeasti se EE versio :) Vältät monta ongelmaa valitsemalla oikean version!
- Asenna Oracle GlassFish Server Tools (Servers tab -> right-click -> New -> Download additional server adapters)
- Määrittele Glassfish serveri: ( Servers tab -> right-click -> New -> Glassfish 4.0 ( tai uudempi ) -> Valitse asennushakemisto -> Install server )
- Käy läpi Glassfishin asennusogheen kaikki kohdat (alla).
- Tuo projektit eclipseen: File -> Import -> Existing Maven Projects -> valitse moya/code kaikki -> Finish
- Lisää Ear-projekti glassfishiin ( Servers tab -> Valitse palvelin -> Valitse haluttu/halutut projektit -> Finish
- Valmis
Glassfishin asennus
HUOM! Jos olet asentamassa glassfishia kehitysympäristöön, on helpoin antaa eclipsen glassfish-connectorin hoitaa glassfishin asennus.
Käytetään uusinta 4 versiota. Tällä hetkellä uusimman version voi ladata osoitteesta: http://dlc.sun.com.edgesuite.net/glassfish/4.1/release/glassfish-4.1.zip
SQL connectorin asennus
Glassfishin mukana tulee muutamiin tietokantoihin tarpeelliset luokat, mutta esimerkiksi PostgreSQL:n JDBC-ajuri täytyy ladata erikseen.
- Lataa JDBC4 PostgreSQL Driver http://jdbc.postgresql.org/download.html#current
- Kopioi postgresql-X.X-.jdbc4.jar kirjasto asennushakemiston **glassfish/lib/* hakemistoon, esim:
cp ~/Downloads/postgresql-9.3-1002.jdbc41.jar /Users/tuomari/javajutut/glassfish4/glassfish/lib/
Asadmin
Suositellaan käytettäväksi asadmin-työkalua. Kaikki samat jutut onnistuvat myös wepikälistä, mutta esim 3G:n tai muun vastaavan yli asadmin ei räjäytä juttuja jos yhteys katkeaa kesken redeploy:n
Malbolgelta asadmin löytyy hakemistosta: /usr/local/share/glassfish4/bin
# ./asadmin start-domain codecrew-production`
# ./asadmin restart-domain codecrew-production`
# ./asadmin redeploy --name Moya ~/Moya.ear -p 8148`
# ./asadmin deploy ~/Moya.ear -p 8148`
## Asetetaan järjestelmä **Production** tai **Development** (default) tilaan:
# ./asadmin create-custom-resource --restype java.lang.String --factoryclass com.sun.faces.application.ProjectStageJndiFactory --property stage=Production javax.faces.PROJECT_STAGE`
Moya-ympäristön asennus
Oletetaan, että:
- git repository on checkoutattu hakemistoksi moya/
- Glassfish on hakemistossa glassfish4/
- asadmin on ./glassfish4/bin/asadmin
- windowsin käyttäjä ajaa git bashiä, ei powershelliä
Autentikaatiomokkula
Kopioi autentikaatiomoduli paikalleen:
# cp moya/MoyaAuthModulev4.jar glassfish4/glassfish/domains/domain1/lib/
Lisää glassfish/glassfish/domains/domain1/config/login.conf -tiedostoon:
moyaRealm {
fi.codecrew.moya.MoyaLoginModule required;
};
Uudelleenkäynnistä glassfish (Stop + Start. Republish ei riitä)
Rekisteröi autentikaatiomoduli glassfishiin:
# asadmin create-auth-realm --classname fi.codecrew.moya.MoyaRealm --property jaas-context=moyaRealm moyaRealm
Tietokanta
Asenna postgresql ja luo paikallinen käyttäjä, sekä tietokanta:
# createuser -P moya
# createdb -O moya moya
Lisää PostgreSQL-serverin asetuksiin rivi
max_prepared_transactions = 1000
Lataa http://jdbc.postgresql.org/download.html#current ja lisää se glassfish4/glassfish/lib/ hakemistoon:
# cp postgresql-9.3-1011.jdbc4.jar glassfish4/glassfish/lib/
Luo Connection Pool glassfishiin:
# asadmin create-jdbc-connection-pool --datasourceclassname org.postgresql.xa.PGXADataSource --restype javax.sql.XADataSource --ping true --property URL=jdbc\\:postgresql\\:moya:DatabaseName=moya:Password=Ahdoeshoish7auF:User=moya MoyaPool
Luo JDBC-resurssi glassfishiin:
# asadmin create-jdbc-resource --connectionpoolid MoyaPool jdbc/moyaDb
Sähköposti
Lisää meiliyhteys glassfishiin:
# asadmin --interactive=false create-javamail-resource --mailhost=dummyhost --mailuser=bortalmail --fromaddress=bortalmail@codecrew.fi --enabled=true --description="Bortal" --storeprotocol=imap --storeprotocolclass=com.sun.mail.imap.IMAPStore --transprotocol smtp --transprotocolclass com.sun.mail.smtp.SMTPTransport --property mail.smtp.port=587 mail/moya
Lisää JMS connection factory ja Destination resource glassfishiin:
# asadmin create-jms-resource --restype javax.jms.QueueConnectionFactory jms/moyaMailQueueFactory
# asadmin create-jms-resource --restype javax.jms.Queue --property Name=MoyaMailQueue jms/moyaMailQueue
Aseta Glassfish Default Principal to Role Mapping (HUOM! 403 asioista, ellei tätä ole ruksittu):
# asadmin set server-config.security-service.activate-default-principal-to-role-mapping=true
(Configurations -> server-config -> Security -> Default Principal To Role Mapping -> Enabled)
Muut
Jos haluat JK-connectorin käyttöön apachen kanssa:
- Configurations -> Server-config -> Network Config -> http-listner1 -> JK Listener ON
Debug-tulosteet fi namespacesta saa näkyviin seuraavasti:
# echo fi.level=FINEST >> glassfish4/glassfish/domains/domain1/config/logging.properties
Linuxissa pitää ehkä määrittää java.awt.headless:
# asadmin create-jvm-options -Djava.awt.headless=true
Käynnistä glassfish uudelleen että kaikki asetukset tulevat voimaan.
Jos haluat luoda uuden käyttäjän tyhjään kantaan onnistuu se näin (admin/admin):
insert into users (password, created, gender, login, superadmin, active) values ('{SSHA}gl1Uyul2Eoog/8pjG7Iu92v6YbO3SYT8', now(), 'UNDEFINED', 'admin', true, true);
Tuotannossa pitää asettaa "project stage" vipu Production asentoon. Pysyvästi sen voi asettaa komennolla
# ./asadmin create-custom-resource --restype java.lang.String --factoryclass com.sun.faces.application.ProjectStageJndiFactory --property stage=Production javax.faces.PROJECT_STAGE
Jos käytetään Nginx:ä proxynä, pitää asettaa headeri josta tarkistetaan käytetäänkö SSL-yhteyttä:
# ./asadmin set server.network-config.protocols.protocol.http-listener-1.http.scheme-mapping=X-Forwarded-Proto
Tietokantadumppi
Jos käytät kuvatonta tietokantaa luo puuttuvat taulut:
CREATE TABLE user_images (id SERIAL NOT NULL, description TEXT, image_data BYTEA, meta json, mime_type TEXT, name TEXT, uploaded TIMESTAMPTZ NOT NULL, user_id INTEGER, PRIMARY KEY (id));
ALTER TABLE user_images ADD CONSTRAINT FK_user_images_user_id FOREIGN KEY (user_id) REFERENCES users (id);
UPDATE users SET current_image_id = NULL;
ALTER TABLE users ADD CONSTRAINT FK_users_current_image_id FOREIGN KEY (current_image_id) REFERENCES user_images (id);
CREATE TABLE compo_entry_files (id SERIAL NOT NULL, description TEXT, file_data BYTEA, file_name TEXT, hash TEXT, meta json, mime_type TEXT, uploaded TIMESTAMPTZ NOT NULL, entry_id INTEGER NOT NULL, PRIMARY KEY (id));
ALTER TABLE compo_entry_files ADD CONSTRAINT FK_compo_entry_files_entry_id FOREIGN KEY (entry_id) REFERENCES compo_entries (id);
UPDATE compo_entries SET current_file_id = NULL;
ALTER TABLE compo_entries ADD CONSTRAINT FK_compo_entries_current_file_id FOREIGN KEY (current_file_id) REFERENCES compo_entry_files (id);