Archiv pro štítek: JBoss

Eskalace v CzechIdM – jBPM timery

Docent Novák si zažádal o přístup do specializované knihovny, ve které by chtěl najít odpověď na otázku, na kterou během výzkumu narazil. Žádost už ale šest dní leží někde na stole a nevypadá to, že se jí v brzké době vůbec někdo bude zabývat. Pan Pokorný, který má knihovnu na starost, totiž odjel na dlouhou služební cestu a vrátí se až za několik týdnů.

Jak situaci řešit? Pokračování textu

Časovače, Java a CzechIdM – 1. část

Toto je první část příspěvku zaměřeného na časovače a časové služby v programovacím jazyce Java. V dnešním příspěvku si na úvod uvedeme dva příklady, kde najdou časovače své uplatnění. První je spíše obecného charakteru, druhý je již specifický a popisuje použití časovačů v našem systému CzechIdM. Poté si ukážeme, jak časovat úlohy v Java SE a Java EE 5 a 6 s použitím EJB kontejneru.

Příští příspěvek bude zaměřen více specificky, a to na jBPM časovače a na projekt Quartz. Zároveň si jednotlivé možnosti shrneme a porovnáme. Nezbývá než začít.

Pokračování textu

Instalace aplikačního serveru JBoss

Tento příspěvek stručně popisuje, jak nainstalovat aplikační server JBoss na server na platformě GNU Linux CentOS 5. Instalované prostředí bude sloužit pro vývoj webových aplikací postavených na jazyku Java.

Instalace JDK

Dřív než se pustíme do instalace samotného aplikačního serveru, musíme mít v systému funkční javu. Je proto potřeba naistalovat Java SE Development Kit (JDK). Já jsem použil verzi Sun JDK, kterou lze získat z nasledující adresy http://java.sun.com/javase/downloads/widget/jdk6.jsp pro JDK 6.0 (vybrat jdk-6u<X>-linux-i586-rpm.bin, kde <X> je číslo posledního update, aktuálně <X>=19) a http://java.sun.com/javase/downloads/index_jdk5.jsp pro JDK 5.0. Variantu JDK od Sun-u (naproti OpenJDK) jsem zvolil na základě dokumentace JBoss AS a také zkušeností některých administrátorů. Nainstalujeme Sun JDK

[root@nps1:~]$ chmod 755 jdk-6u19-linux-i586-rpm.bin
[root@nps1:~]$ ./jdk-6u19-linux-i586-rpm.bin

Můžeme ověřit, že se JDK podařilo naistalovat (instaluje se do /usr/java)

[root@nps1:~]$ java -version
java version "1.6.0_19"
Java(TM) SE Runtime Environment (build 1.6.0_19-b04)
Java HotSpot(TM) Client VM (build 16.2-b04, mixed mode, sharing)

Vytvoříme si symbolické odkazy na javu z důvodu přehlednosti a případných pozdejších změn v administraci JBoss AS (např. změna verze javy, více verzí javy, atd.)

[root@nps1:~]$ mkdir -p /opt/java
[root@nps1:~]$ ln -s /usr/java/jdk1.6.0_19 /opt/java/jdk

Dále budeme potřebovat nastavit hodnoty proměnných pro javu. Můžeme si například v /etc/profile.d/ vytvořit skript java.sh s následujícím obsahem:

[root@nps1:~]$ vim /etc/profiles.d/java.sh
########################
# JAVA variables setup #
########################

JAVA_HOME=/opt/java/jdk
PATH=$PATH:$JAVA_HOME/bin

export JAVA_HOME PATH

přidáme právo pro spouštění a vyexportujeme pro aktualizaci proměnných:

[root@nps1:~]$ chmod 755 /etc/profile.d/java.sh
[root@nps1:~]$ sh /etc/profile.d/java.sh

Instalace JBoss AS

V zásadě máme dvě možnosti instalace. Kompilace ze zdrojových kódů nebo instalace z binárních balíčků. Já jsem zvolil instalaci z binárních balíčků. Balíček si můžeme stáhnout ze stránek projektu na adrese http://www.jboss.org/jbossas/downloads.html. Verzi jsem zvolil 5.1.0 (poslední stable release, verze 6.0.0 byla v té době ve druhé milestone verzi). Vytvoříme si cílový adresář pro JBoss AS, do kterého rozbalíme získaný balíček JBoss AS (zip soubor, jboss-5.1.0.GA.zip)

[root@nps1:~]$ mkdir -p /srv
[root@nps1:~]$ unzip -d /srv jboss-5.1.0.GA.zip

Vytvoříme symlink na kořenový adresář JBoss AS

[root@nps1:~]$ ln -s /srv/jboss-5.1.0.GA /opt/java/jboss

Stejně jako v případě javy, budeme potřebovat nastavit hodnoty proměnných pro JBoss AS. Vytvoříme si tedy skript jboss.sh v /etc/profile.d s následujícím obsahem:

[root@nps1:~]$ vim /etc/profile.d/jboss.sh
############################
# JBoss AS variables setup #
############################

JBOSS_HOME=/opt/java/jboss
PATH=$PATH:$JBOSS_HOME/bin

export JBOSS_HOME PATH

upravíme práva skriptu a aktualizujeme proměnné

[root@nps1:~]$ chmod 755 /etc/profile.d/jboss.sh
[root@nps1:~]$ sh /etc/profile.d/jboss.sh

V této chvíli máme již všechno připraveno pro spuštění JBoss AS. Aplikační server spouštíme skriptem run.sh, který se nachází v $JBOSS_HOME/bin

[root@nps1:~]$ sh $JBOSS_HOME/bin/run.sh

což odpovídá spouštění s konfigurací

[root@nps1:~]$ sh $JBOSS_HOME/bin/run.sh -c default -b 127.0.0.1

Dostupnost si ověříme na URL http://localhost:8080. JBoss AS předvoleně poslouchá jenom na localhost (127.0.0.1). Parametrem -c spouštěcího skriptu určujeme konfiguraci aplikačního serveru. Jednotlivé konfigurace se nacházejí v adresáři $JBOSS_HOME/server. Stručný popis několika základních konigurací nacházejících se v instalačním balíčku je možno najít v online dokumentaci. Parametrem -b určujeme rozsah adres, ze kterých je možno přistupovat na server. Chceme-li povolit přístup na server z libovolné adresy a s konfigurací default, spustíme server příkazem

[root@nps1:~]$ sh $JBOSS_HOME/bin/run.sh -c default -b 0.0.0.0

Aby jsme nespouštěli JBoss AS pod uživatelem root, vytvoříme si pro tuto službu samostatného uživatele a převedeme na něj vlastnická práva souborů aplikace

[root@nps1:~]$ useradd -r jboss
[root@nps1:~]$ chown -Rf /srv/jboss-5.1.0.GA

a nyní spustíme JBoss AS pod uživatelem jboss

[root@nps1:~]$ su - jboss -c $JBOSS_HOME/bin/run.sh

případně s konkrétnimi parametry.

JBoss SysV init

Aby jsme nemuseli spouštět manuálně, vytvoříme si pro JBoss AS spouštecí sysV init skript. Vzorové init skripty pro některé distribuce (Red Hat, Fedora, openSuSE) se již nacházejí v adresáři $JBOSS_HOME/bin. Vzhledem k distribuci použité na našem serveru jsem zvolil variantu pro distribuci Red Hat (soubor init_jboss_redhath.sh). Vzorový init skript zkopírujeme do adresáře /etc/init.d

[root@nps1:~]$ cp $JBOSS_HOME/bin/init_jboss_redhath.sh /etc/init.d/jboss

Náš nový init skript /etc/init.d/jboss ještě upravíme tak, aby odpovídal konfiguraci pro chkconfig. Do „hlavičky“ skriptu doplníme potřebné direktivy (i s křížkem #)

[root@nps1:~]$ vim /etc/init.d/jboss
# chkconfig: 2345 85 15 #runlevely S-priorita K-priorita
# description: JBoss Application Server
# processname: jboss
# pidfile: /var/run/jboss.pid

Dále je potřeba v skriptu upravit hodnoty některých direktiv a jíné doplnit

JBOSS_HOME=${JBOSS_HOME:-"/opt/java/jboss"}
JBOSS_USER=${JBOSS_USER:-"jboss"} #uživatel pod kterým bude služba běžet
JAVAPTH=${JAVAPTH:-"/opt/java/jdk"}
JBOSS_CONF=${JBOSS_CONF:-"default"} #konfiguračny profil
JBOSS_HOST="0.0.0.0" #rozsah adres, ze kterých je možno přistupovat

Zaregistrujeme službu chkconfigem a aktivujeme

[root@nps1:~]$ chkconfig --add jboss (název služby je shodný s názvem init skriptu)
[root@nps1:~]$ chkconfig jboss on

Program chkconfig nám automaticky vytvoří symlinky v příslušných rcX profilech (adresáře /etc/rc[0..6].d) podle hodnot direktivy chkconfig v init skripte. Ověříme

[root@nps1:~]$ chkconfig --list jboss
jboss           0:off   1:off   2:on    3:on    4:on    5:on    6:off

Teď službu JBoss AS spustíme {zastavíme|restartujeme}

[root@nps1:~]$ /etc/init.d/jboss start {stop|restart}

nebo

[root@nps1:~]$ service jboss start {stop|restart}

SSL na straně JBoss AS

Základním případem použití SSL je povolení SSL na straně JBoss AS serveru. V takovém případě budeme přistupovat na web JBoss AS přes protokol HTTPS namísto HTTP. Vzhledem k tomu, že jde o vývojové prostředí, vystačíme si se self-signed certifikátem. Nejdříve si musíme vytvořit úložiště pro uchování páru klíčů a také certifikátu pro JBoss AS server. Pro tento účel použijeme aplikaci keytool, která se nachází v adresáři $JAVA_HOME/bin. Vytvoříme si úložiště (podle nové konvence se používá parametr -genkeypair), které umístíme někam do adresářové struktury dané konfigurace JBoss AS, například do $JBOSS_HOME/server/<konfigurace>/conf/ssl

[root@nps1:~]$ mkdir -p $JBOSS_HOME/server/<konfigurace>/conf/ssl
[root@nps1:~]$ $JAVA_HOME/bin/keytool -genkey -alias <alias> -keyalg RSA -keystore $JBOSS_HOME/server/<konfigurace>/conf/ssl/jboss.keystore

Při vytváření úložište budeme dotázáni na klíč pro úložiště. Dále si vygenerujeme certifikát pro JBoss AS server a uložíme ho do stejného úložiště jako klíče. Při geneování certifikátu budeme dotázáni na některé indetifikační údaje

[root@nps1:~]$ $JAVA_HOME/bin/keytool -export -alias <alias> -keystore $JBOSS_HOME/server/<konfigurace>/conf/ssl/jboss.keystore -file $JBOSS_HOME/server/<konfigurace</conf/ssl/jboss-server.cer

Nakonec upravíme connectory pro JBoss AS web tak, aby bylo možné přistupovat jenom přes HTTPS

[root@nps1:~]$ vim $JBOSS_HOME/server/<konfigurace>/deploy/jbossweb.sar/server.xml
...
<!-- A HTTP/1.1 Connector on port 8080
  <Connector protocol="HTTP/1.1" port="8080" address="${jboss.bind.address}" 
       connectionTimeout="20000" redirectPort="8443" />
-->
...
<!-- SSL/TLS Connector configuration using the admin devl guide keystore -->
<Connector protocol="HTTP/1.1" SSLEnabled="true"
       port="8443" address="${jboss.bind.address}"
       scheme="https" secure="true" clientAuth="false"
       keystoreFile="${jboss.server.home.dir}/conf/ssl/jboss.keystore" <!-- cesta k ůložišti cetifikátu a klíče -->
       keystorePass="<heslo_k_ulozisti≫" sslProtocol = "TLS" />
...

Dostupnost JBoss AS ověříme na URL https://<domena_JBoss_AS>:8443.