JBoss / Wildfly
JBoss Enterprise Application Platform 6.1.0.GA
★Standalone mode vs Domain mode
Standalone mode
1つのJavaVMプロセスで1つのJBossサーバを起動
それぞれのJBossサーバを個別に管理
複数のJBossサーバでクラスタを構成
Domain mode
多数のJBossホスト(サーバの起動・停止やアプリケーションのデプロイ)を管理ホストから一元管理
★インストール
echo 'JBOSS_HOME="/opt/jboss-eap-6.1"' | sudo tee -a /etc/environment
source /etc/environment
echo $JBOSS_HOME
$JBOSS_HOME/bin/standalone.conf JVM起動設定
$JBOSS_HOME/standalone/configuration/standalone.xml ログ出力設定など
★ユーザ設定
cd $JBOSS_HOME
bin/add-user.sh → 手順
あるいは
bin/add-user.sh -u jboss -p 'xxx' -r ManagementRealm
※ one AS process to connect to another AS process: no
bin/add-user.sh -u jboss -p 'xxx' -r ApplicationRealm
※ one AS process to connect to another AS process: yes
設定ファイルのパス
$JBOSS_HOME/standalone/configuration/mgmt-users.properties
$JBOSS_HOME/domain/configuration/mgmt-users.properties
$JBOSS_HOME/standalone/configuration/application-users.properties
$JBOSS_HOME/domain/configuration/application-users.properties
$JBOSS_HOME/standalone/configuration/application-roles.properties
$JBOSS_HOME/domain/configuration/application-roles.properties
★Protect resources
web.xml
<security-constraint>
<web-resource-collection>
<web-resource-name>Restricted Access</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>user</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>BASIC</auth-method>
</login-config>
$JBOSS_HOME/bin/add-user.sh
・Select "Application User" (Added to application-users.properties)
・Create "user" role (Added to application-roles.properties)
★起動
bin/standalone.sh Web Profile起動
bin/standalone.sh -c standalone-full.xml Full Profile起動
bin/standalone.sh #Foreground
nohup bin/standalone.sh & #Background
管理方法
・管理コンソール(Web) 即座に反映 http://localhost:9990
・CLI(コマンドラインインターフェース) 即座に反映
・XML構成ファイル 再起動が必要
★Launch the Command Line Interface in graphical mode
jboss-cli.sh --gui
★停止・再起動
jboss-cli.sh --connect <IP>
jboss-cli.sh -c --command=":shutdown"
jboss-cli.sh --connect --command=:shutdown
jboss-cli.sh -c "/:shutdown()"
jboss-cli.sh -c /:shutdown
jboss-cli.sh -c :shutdown
jboss-cli.sh -c ":shutdown(restart=true)"
あるいは
bin/jboss-cli.sh
connect
:shutdown
:reload
★基本的なコマンド(command line interface)
bin/jboss-cli.sh
cn (or cd)
cd deployment
cd ..
connect
deploy
help (or h)
history
ls
pwn (or pwd)
quit (or q)
undeploy
version
★管理CLIオペレーション
構文 [ノードのパス]:[オペレーション]
read-operation 一覧を表示
:whoami
/subsystem/datasources:read-operation-names ×
/subsystem=datasources:read-operation-names ◯
jboss-cli.sh -c "/system-property=test:add(value='This\ is\ test')"
jboss-cli.sh -c "/system-property=*:read-resource"
jboss-cli.sh -c version
jboss-cli.sh help
jboss-cli.sh -c help
jboss-cli.sh -c "deploy --help"
jboss-cli.sh -c "help --commands"
jboss-cli.sh -c "ls subsystem"
jboss-cli.sh -c "ls extension"
jboss-cli.sh -c "ls profile"
jboss-cli.sh -c "ls interface"
jboss-cli.sh -c "ls socket-binding-group"
★DeployとUndeploy
方法1:File system
cp app/target/xxx.ear $JBOSS_HOME/standalone/deployments/
※ xxx.ear, xxx.war
rm $JBOSS_HOME/standalone/deployments/xxx.ear
方法2:JBoss CLI
jboss-cli.sh -c --commond="deploy app/target/xxx.ear"
jboss-cli.sh -c --commond="undeploy xxx.ear"
jboss-cli.sh -c "deploy /tmp/xxx.war"
jboss-cli.sh -c "undeploy xxx.war"
方法3:JBoss Managment Console
http://localhost:9990/ の Manage Deployments
★ログの設定
$JBOSS_HOME\standalone\configuration\standalone.xml
<profile>
<subsystem xmlns="urn:jboss:domain:logging:1.1">
<size-rotating-file-handler name="ROTETION_ROOT">
<formatter>
<pattern-formatter pattern="%d{HH:mm:ss,SSS} %-5p %x [%c{1}] (%t) %s%E%n"/>
</formatter>
<file relative-to="jboss.server.log.dir" path="xxx_server.log"/>
<rotate-size value="1K"/>
<max-backup-index value="3"/>
<append value="true"/>
</size-rotating-file-handler>
<root-logger>
<level name="INFO"/>
<handlers>
<handler name="CONSOLE"/>
<handler name="ROTETION_ROOT"/>
</handlers>
</root-logger>
★キャッシュ・メッセージキューの設定
方法1:CLIコマンド
bin/jboss-cli.sh --file="xxx.cli"
cliファイル
connect
batch
/subsystem=messaging/hornetq-server=default/jms-queue=xxxQueue:add(entries=["java:/queues/xxxQueue"])
/subsystem=messaging/hornetq-server=default/jms-queue=xxxQueue:remove
/subsystem=infinispan/cache-container=xxxCache/local-cache=application:add(start=EAGER,batching=true)/locking=LOCKING:add(isolation=REPEATABLE_READ)
run-batch
:reload
quit
方法2:standalone.xml編集
<cache-container name="xxxCache">
<local-cache name="application" start="EAGER" batching="true">
<locking isolation="REPEATABLE_READ" />
</local-cache>
</cache-container>
★データベースの設定
jboss-cli.sh -c "/subsystem=datasources:read-resource-description"
bin/jboss-cli.sh -c --command="data-source add --name=H2DS --jndi-name=java:jboss/datasources/H2DS --driver-name=h2 --connection-url=jdbc:h2:mem:h2ds --user-name=sa --password=sa"
bin/jboss-cli.sh -c --command="data-source enable --name=H2DS"
bin/jboss-cli.sh -c --command="data-source remove --name=H2DS"
MySQLを導入
bin/jboss-cli.sh --connect
module add --name=com.mysql --resources=/home/xxx/mysql-connector-java-5.1.13.jar --dependencies=javax.api,javax.transaction.api
cliファイル
connect
batch
/subsystem=datasources/jdbc-driver=mysql:add(\
driver-module-name=com.mysql,\
driver-name=mysql,\
driver-class-name=com.mysql.jdbc.Driver)
あるいは
driver-xa-datasource-class-name=com.mysql.jdbc.jdbc2.optional.MysqlXADataSource)
/subsystem=datasources/data-source=MySqlDS:add(\
enabled=false,\
jndi-name=java:jboss/datasources/test,\
use-java-context=true,\
connection-url="jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&connectionCollation=utf8_unicode_ci&characterSetResults=utf8&characterEncoding=utf8",\
user-name=root,\
password=root,\
min-pool-size=2,\
max-pool-size=100,\
driver-name=mysql)
/subsystem=datasources/data-source=MySqlDS:enable
run-batch
:reload
persistence.xml
<persistence-unit name="testUT" transaction-type="JTA">
<jta-data-source>java:jboss/datasources/test</jta-data-source>
...
</persistence-unit>
★Calling remote EJBs
META-INF/jboss-ejb-client.xml
<jboss-ejb-client xmlns="urn:jboss:ejb-client:1.0">
<client-context>
<ejb-receivers>
<remoting-ejb-receiver
outbound-connection-ref="remote-ejb-connection"/>
</ejb-receivers>
</client-context>
</jboss-ejb-client>
CLIファイル
connect
batch
/core-service=management/security-realm=my-remote:add()
/core-service=management/security-realm=my-remote/server-identity=secret:add(value=***)
/socket-binding-group=standard-sockets/remote-destination-outbound-socket-binding=remote-ejb:add(\
host=127.0.0.1,\
port=4447)
/subsystem=remoting/remote-outbound-connection=remote-ejb-connection:add(\
outbound-socket-binding-ref=remote-ejb,\
security-realm=my-remote,\
username=jboss)
/subsystem=remoting/remote-outbound-connection=remote-ejb-connection/property=SASL_POLICY_NOANONYMOUS:add(value=false)
/subsystem=remoting/remote-outbound-connection=remote-ejb-connection/property=SSL_ENABLED:add(value=false)
run-batch
:reload
★JBoss AS 7でトランザクションの動作を確認
方法1:CDIのTransactionnal Observerで確認
@Inject @Any
private Event<Book> bookEvent;
public void createBook(Book book) {
em.persist(book);
bookEvent.select(new AnnotationLiteral<Created>(){}).fire(book);
}
public void addBook(@Observes(during = AFTER_SUCCESS) @Created Book book) {
...
}
方法2:ロギングシステムにcom.arjuna.ats.jtaカテゴリを追加
${JBOSS_HOME}/bin/jboss-cli.sh
/subsystem=logging/logger=com.arjuna.ats.jta:add
/subsystem=logging/logger=com.arjuna.ats.jta:write-attribute(name="level", value="TRACE")
★圧縮の設定 (standalone.xml)
<property name="org.apache.coyote.http11.Http11Protocol.COMPRESSION" value="on"/>
<property name="org.apache.coyote.http11.Http11Protocol.COMPRESSION_MIME_TYPES" value="text/javascript,text/css,text/html,text/xml,text/json,image/png"/>
★h2(テスト用DB)の内容を確認
http://www.jboss.org/quickstarts/eap/h2-console/
jboss-eap-quickstarts-6.3.0.GAのh2console.warをdeploymentsにいれる
★Using WildFly BOMs
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.wildfly.bom</groupId>
<artifactId>jboss-javaee-7.0-with-all</artifactId>
<version>8.0.0.Final</version>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
#list all deployed applications
jboss-cli.sh -c deploy
jboss-cli.sh -c undeploy
jboss-cli.sh -c "ls deployment"
jboss-cli.sh -c "deploy -l"
jboss-cli.sh -c "undeploy -l"
方法4:standalone.xmlで指定
<deployments>
<deployment name="example-web.war" runtime-name="example-web.war">
<fs-archive path="/.../workspace/example-web/target/example-web.war"/>
</deployment>
<deployment name="example-app.ear" runtime-name="example-app.ear">
<fs-archive path="/.../workspace/example-app/target/example-app.ear"/>
</deployment>
...
</deployments>
★Debug mode
#default debug port: 8787
standalone.sh --debug
standalone.sh -d
standalone.sh -d 6000
standalone.sh --debug 6000
★トランザクションの動作を確認
1.管理コンソールでロギングシステムにcom.arjuna.ats.arjunaカテゴリを追加
2.ログレベルをTRACEにする
★JNDIを確認(jboss-cli.sh起動済み)
/subsystem=naming:jndi-view
★Security Domainについて
設定方式1
standalone/configuration/standalone.xml あるいは domain/configuration/domain.xml
<subsystem xmlns="urn:jboss:domain:security:1.2">
<security-domains>
<security-domain name="my-domain" cache-type="default">
<authentication>
<login-module
code="org.jboss.security.ClientLoginModule"
flag="required" />
</authentication>
</security-domain>
</security-domains>
</subsystem>
設定方式2(CLIファイル)
/subsystem=security/security-domain=my-domain:add(cache-type=default)
/subsystem=security/security-domain=my-domain/authentication=classic:add()
/subsystem=security/security-domain=my-domain/authentication=classic:write-attribute(\
name=login-modules,\
value=[\
{\
"code" => "org.jboss.security.ClientLoginModule",\
"flag" => "required"\
}\
]\
) {allow-resource-service-restart=true}
WEB-INF/jboss-web.xml
<jboss-web>
<security-domain>my-domain</security-domain>
</jboss-web>
ソースコード
import java.security.Principal;
import org.jboss.ejb3.annotation.SecurityDomain;
@Stateless
@SecurityDomain("my-domain")
public class MyEJB {
@Resource
private SessionContext sessionContext;
public Principal getPrincipal() {
return sessionContext.getCallerPrincipal();
}
public String getPrincipalName() {
return getPrincipal().getName();
}
public String getPrincipalInfo() {
return getPrincipal().toString();
}
}
★Configuring the mail session
@Resource(mappedName = "java:jboss/mail/Gmail")
private Session mailSession;
<subsystem xmlns="urn:jboss:domain:mail:2.0">
<mail-session name="default" jndi-name="java:jboss/mail/Default">
<smtp-server outbound-socket-binding-ref="mail-smtp"/>
</mail-session>
<mail-session name="gmail" jndi-name="java:jboss/mail/Gmail" from="<your account>@gmail.com">
<smtp-server outbound-socket-binding-ref="mail-gmail"
ssl="true" username="<your account>@gmail.com" password="<your password>"/>
</mail-session>
</subsystem>
<socket-binding-group name="standard-sockets" default-interface="public"
port-offset="${jboss.socket.binding.port-offset:0}">
<outbound-socket-binding name="mail-smtp">
<remote-destination host="localhost" port="25"/>
</outbound-socket-binding>
<outbound-socket-binding name="mail-gmail">
<remote-destination host="smtp.gmail.com" port="465"/>
</outbound-socket-binding>
</socket-binding-group>
★プロファイルの比較