2011. február 11., péntek

JBoss-orientált fejlesztőkörnyezet kialakítása - 1.

Frissítve: 2011.09.02.

A fejlesztők körében gyakori, hogy Windows-on fejlesztenek és Linux alatt csak üzemeltetik az alkalmazásokat. Ezzel korábban én is így voltam, azonban nemrég elhatároztam hogy kliens oldalon is áttérek a Linuxra, így ennek a lépéseit fogom most ismertetni. A váltás után leginkább az Eclipse megjelenésével nem voltam megbarátkozva, de erről a blog következő részében még részletesen fogok írni.

A fejlesztő környezetet az Ubuntu 10.10, SunJDK 6, MySQL 5.1, Eclipse 3.5, JBoss 5.1, JBoss Seam 2.2 és JBoss Tools 3.1 eszközökből állítottam össze.

Ubuntu 10.10
A képfájlt az Ubuntu letöltési oldaláról mentettem le. A telepítési folyamat elég egyszerű volt, olyan next->next->finish jellegű. A telepítés befejezésével egy teljesen használható rendszert kaptam, nem kellett külön meghajtó programokat keresgélnem és feltelepítenem mint Windows alatt, a bluetooth-tól kezdve a webkameráig minden egyből működött. Érdemes még megemlítenem, hogy más disztribúciókhoz képest az Ubuntu 10.10 alapértelmezett megjelenése is kifejezetten jóra sikerült, csak a fontok terén kellett egy kicsit utána állítanom.

Általában többféle java implementáció is megtalálható a gépemen, azonban legtöbbször a SUN megvalósítását szoktam használni. A Sun JDK telepítéshez először felvettem a sun-os repositoryt, majd telepítettem a csomagokat.
sudo add-apt-repository ppa:ferramroberto/java
sudo apt-get update
sudo apt-get install sun-java6-jdk sun-java6-plugin sun-java6-fonts
Mivel még régebben felraktam az OpenJDK-t, így az alapértelmezett Java-t át kellett állítanom a Sun JDK-ra. Ehhez megnéztem, hogy milyen Java implementációim vannak jelenleg: sudo update-java-alternatives -l, majd kiválasztottam a felsorolásból a java-6-sun-t: sudo update-java-alternatives -s java-6-sun. Végül a java -version -al megbizonyosodtam az átállás sikerességéről.

Minden fejlesztőnek van egy kedvenc keretrendszere, az enyém a JBoss Seam. Már jó pár éve használom és eddig nem okozott csalódást. Azt hiszem nem árulok el nagy titkot azzal, hogy a blogom olvasói még sokat fognak vele  találkozni. Visszatérve a telepítésre, letöltöttem a JBoss Seam 2.2 -es verzióját, majd kicsomagoltam a /usr/local/seam könyvtárba.

A JBoss 5.1 szervert kicsomagoltam az unzip jboss-5.1.0.GA-jdk6.zip paranccsal a /usr/local/jboss-5.1.0.GA könyvtár alá, majd készítettem egy szimbolikus linket: ln -s jboss-5.1.0.GA jboss. A jboss frissítése esetén mostmár csak a linket kell átállítani, így a /usr/local/jboss mindig az aktuális szerverre fog mutatni. Mivel a JBoss alatti könyvtárszerkezet nem követi a Linuxos fájlrendszer konvenciókat, ezért a  jboss/server/all/log, jboss/server/all/tmp és jboss/server/all/work könyvtárakra létrehoztam egy-egy szimbolikus linket, melyek a /var/log/jboss, /var/jboss/tmp és /var/jboss/work könyvtárakra mutatnak. 
A mysql eléréséhez, a mysql-connector-java.jar JDBC driver-t bemásoltam  a jboss/server/all/lib könyvtár alá. A datasource bekonfigurálásához a jboss/docs/examples/jca/mysql-ds.xml sablont átmásoltam a jboss/server/default/deploy könyvtárba majd módosítottam az alábbiak szerint:

<datasources>
  <local-tx-datasource>
   <jndi-name>testDatasource</jndi-name>
   <connection-url>
    jdbc:mysql://localhost:3306/testDB
   </connection-url>
   <driver-class>com.mysql.jdbc.Driver</driver-class>
   <user-name>testUsr</user-name>
   <password>testPwd</password>
   <exception-sorter-classname>
    org.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorter
   </exception-sorter-class-name>
   <metadata>
    <type-mapping>mySQL</type-mapping>
   </metadata>
  </local-tx-datasource>
</datasources>

A következő pár lépést akkor érdemes elvégezni, ha a JBoss-t Linuxos szolgáltatásként is el szeretnénk indítani. Hozzunk létre egy jboss nevű felhasználót akinek a nevében fog majd futni a JBoss alkalmazás szerver: useradd -s /bin/bash -g jboss jboss. A jboss felhasználónak biztonsági okok miatt ne adjunk meg jelszót, így csak root -ként lesz lehetőségünk a jboss felhasználóra váltani a su jboss paranccsal. Ha eddig nem a jboss felhasználóval dolgoztunk, módosítsuk a /usr/local/jboss/ alatti fájlok tulajdonosi és csoport jogait a jboss felhasználóra ill. csoportra: chown jboss:jboss /usr/local/jboss/ -R. Ahhoz, hogy a JBoss szervert linuxos szolgáltatásként tudjuk futtatni, a jboss/bin/jboss_init_redhat.sh scriptet át kell másolni az /etc/init.d/ könyvtárba, majd be kell állítani a JBOSS_HOME, JBOSS_USER, JBOSS_CONF, JAVA_PATH változókat és az update-rc.d jboss_init_redhat.sh defaults parancsal telepíteni az alapértelmezett futási szintekre, melynek az eredményét a chkconfig -l paranccsal ellenőrizhetjük. Ezután a JBoss-t az /etc/init.d/jboss_init_redhat.sh start paranccsal tudjuk indítani.

Feltelepítettem a mysql szerver és kliens programot: apt-get install mysql-server mysql-client, majd a mysql biztonságosabb használata érdekében kiadtam a következő parancsot:/usr/bin/mysql_secure_installation és végrehajtottam az alábbi lépéseket. Ezután az /etc/mysql/my.cnf állományban, a [mysqld] sor után felvettem a következő változókat:

lower_case_table_names=1 
init_connect='SET NAMES utf8'
init_connect='SET collation_connection = utf8_general_ci'
default-character-set=utf8
character-set-server=utf8
collation-server=utf8_general_ci 
skip-character-set-client-handshake 

Linux alatt a mysql táblanevek alapértelmezettként case-sensitive-ek, így ezt megváltoztattam  a lower_case_table_names változó 1-re állításával. A karakterkódolási problémák elkerülése véget pedig beállítottam, hogy a mysql globálisan az utf8-at használja.
A változók hozzáadása után újraindítottam a mysql-t és csatlakoztam az adatbázishoz, majd létrehoztam egy testDB nevű adatbázist: CREATE DATABASE testDB CHARACTER SET utf8 COLLATE utf8_general_ci; és készítettem egy testUsr nevű felhasználót akihez hozzárendeltem a megfelelő jogokat: GRANT ALL PRIVILEGES ON testDB.* to 'testUsr' IDENTIFIED BY 'testPwd' WITH GRANT OPTION;

Végül összegyűjtöttem azokat a parancsokat, melyeket gyakrabban használok a mysql üzemeltetése során.

A mysql szerver újraindítása: 
service mysql restart
Sql szkript importálása a kiválasztott adatbázisba: 
mysql --user=testUsr --password=testPwd testDB < sqlscript.sql
Backup készítése a kiválasztott adatbázisról: 
mysqldump --user=testUsr --password=testPwd testDB > backup.sql
Adatbázisok megtekintése:
mysql -u testUsr --password=testPwd testDB --execute 'show databases'
A kiválasztott adatbázishoz tartozó táblák megtekintése:
mysql --user=testUsr --password=testPwd testDB --execute 'show tables'
Az alapértelmezett mysql engine megtekintése:
 
mysql -u testUsr --password=testPwd testDB --execute 'show engines' 
A mysql változók megtekintése: 
mysql -u testUsr --password=testPwd --execute 'show variables'
Mysq felhasználók listázása: 
mysql --user=testUsr --password=testPwd testDB --execute 'SELECT User, Host, Password FROM mysql.user';


A cikk következő részében a kedvenc fejlesztőeszközömmel, az Eclipse-el fogom folytatni a JBoss-orientált fejlesztőkörnyezet kialakítását. A cikk azoknak is hasznos lesz, akik nincsenek megelégedve az Eclipse alapértelmezett kinézetével Linux alatt.

2 megjegyzés:

  1. Egy apro komment: hacsak nem adminisztrator felhasznalot hozol letre, _soha_ ne hasnzald a 'WITH GRANT OPTION' kifejezest a GRANT parancsban. Ezzel ugyanis azt ered el, hogy az a felhasznalo az adott scope-ban (jelen esetben az adott adatbazison) funek-fanak tud jogot adni (usert letrehozni asszem pont nem). Ez pedig nagyon nem az, amit szeretnenk, es raadasul meg biztonsagi lyuk is. Szoval, ne, ne, ne, semmikeppen ne.

    VálaszTörlés
  2. Köszi! Az észrevétel helyes, éles környezetben ne adjunk ilyen jogosultságot a felhasználónak.

    VálaszTörlés