Posts tagged ‘Administration’
GlassFish データベースの設定
GlassFishはデータベースとの接続にデータベースベンダーが提供するJDBCドライバを使用します.
GlassFishにはインストール時デフォルトで Java DBが付属しており,あらかじめJava DBに対するJDBCリソースと接続プールの設定がされています.そして GlassFish の監視系の機能の一つである,「呼び出しフロー」のデータ保存先として使用されています.
ここでは,新たにMySQL 5.1との接続設定方法について紹介します.MySQLと接続するためには,MySQLのJDBCドライバを事前に入手しておいてください.
また以降の手順ではMySQLが既にインストールされていることを前提に説明します.
JDBCドライバに対するクラスパスを設定
dashost > asadmin get “cluster1-config.java-config.server-classpath” cluster1-config.java-config.server-classpath = dashost > asadmin set “cluster1-config.java-config.server-classpath=/sun/glassfish-v2.1.1/lib/mysql-connector-java-5.1.5-bin.jar” cluster1-config.java-config.server-classpath = /sun/glassfish-v2.1.1/lib/mysql-connector-java-5.1.5-bin.jar |
クラスパスの設定は,管理コンソールから左ペインの「設定」→「対象のコンフィグ(cluster1-config)」→「JVM 設定」を選択し右ペインの「サーバクラスパス」内に記載し設定できます.
次に JDBC の接続プールを作成します.
dashost > asadmin create-jdbc-connection-pool –datasourceclassname com.mysql.jdbc.jdbc2.optional.MysqlDataSource –restype=javax.sql.DataSource –property user=root:password=password:DatabaseName=MySQL:ServerName=localhost:port=3306:URL=”jdbc\:mysql\://localhost\:3306/test” MySQL-Pool コマンド create-jdbc-connection-pool は正常に実行されました。 |
分散トランザクションが必要な場合,リソースタイプ,データソースにそれぞれ下記を使用してください.
javax.sql.XADataSource
com.mysql.jdbc.jdbc2.optional.MysqlXADataSource
管理コンソールからは下記の手順に従い設定してください.
まず、左ペインの「リソース」→「JDBC」→ 「接続プール」を選択し右ペインの「新規 …」ボタンを押下します.
次に,「接続プール名」,「リソースタイプ」,「データベースベンダー」を選択し「次へ」ボタンを押下します.
最後に,JDBC の各種詳細な設定項目を選択/入力し「完了」ボタンを押下します.
JDBCドライバ等の設定項目一覧が数多くリストされますが,ここでは最低限下記の項目のみ編集して設定を完了します.
名前 | 値 |
user | root |
password | password |
DatabaseName | MySQL |
ServerName | localhost |
port | 3306 |
URL | jdbc:mysql://localhost:3306/test |
「完了」ボタンを押下すると下記の画面が表示されます.
ここで、作成した JDBC 接続プールが有効か否か疎通確認を行います.
成功時:
dashost > asadmin ping-connection-pool MySQL-Pool コマンド ping-connection-pool は正常に実行されました。 |
失敗時:
dashost > asadmin ping-connection-pool MySQL-Pool com.mysql.jdbc.exceptions.jdbc4.CommunicationsException CLI137 コマンド ping-connection-pool は失敗しました。 |
また,管理コンソールから左ペインの「リソース」→「 JDBC」→「 接続プール」より対象の接続プールを選択し「Ping」ボタンを押下し確認できます.
成功時:
失敗時:
次に、作成した JDBC 接続プールに対して,リソース設定を行います.
アプリケーションはここで設定する JNDI 名を利用して DB にアクセスできるようになります.
dashost > asadmin create-jdbc-resource –connectionpoolid MySQL-Pool jdbc/mysql コマンド create-jdbc-resource は正常に実行されました。 |
管理コンソールからは下記の手順に従い設定してください.
まず、左ペインの「リソース」→「JDBC」→ 「 JDBCリソース」を選択し右ペインより「新規 …」ボタンを押下します.
続いて,「JNDI 名」,「プール名」,有効状態のチェックをつけ「利用可能なターゲット」に対象のクラスタ(cluster1)を追加して「了解」ボタンを押下します.
「了解」ボタンを押下すると下記の画面が表示され JDBC リソースの設定は完了します.以降アプリケーションはここで設定した “jdbc/mysql” を利用して DB
に対して接続ができるようになります.
DBの設定情報の取得
ここで,DB の設定可能な項目の一覧をリストしてみます.asadmin の get コマンドを実行して確認ができます.各設定項目は asadmin set コマンドで設定変更を更新できますので必要に応じて設定変更を行ってください.
dashost > asadmin get “domain.resources.jdbc-connection-pool.MySQL-Pool.*” domain.resources.jdbc-connection-pool.MySQL-Pool.allow-non-component-callers = false domain.resources.jdbc-connection-pool.MySQL-Pool.associate-with-thread = false domain.resources.jdbc-connection-pool.MySQL-Pool.connection-creation-retry-attempts = 0 domain.resources.jdbc-connection-pool.MySQL-Pool.connection-creation-retry-interval-in-seconds = 10 domain.resources.jdbc-connection-pool.MySQL-Pool.connection-leak-reclaim = false domain.resources.jdbc-connection-pool.MySQL-Pool.connection-leak-timeout-in-seconds = 0 domain.resources.jdbc-connection-pool.MySQL-Pool.connection-validation-method = auto-commit domain.resources.jdbc-connection-pool.MySQL-Pool.datasource-classname = com.mysql.jdbc.jdbc2.optional.MysqlDataSource domain.resources.jdbc-connection-pool.MySQL-Pool.description = domain.resources.jdbc-connection-pool.MySQL-Pool.fail-all-connections = false domain.resources.jdbc-connection-pool.MySQL-Pool.idle-timeout-in-seconds = 300 domain.resources.jdbc-connection-pool.MySQL-Pool.is-connection-validation-required = false domain.resources.jdbc-connection-pool.MySQL-Pool.is-isolation-level-guaranteed = false domain.resources.jdbc-connection-pool.MySQL-Pool.lazy-connection-association = false domain.resources.jdbc-connection-pool.MySQL-Pool.lazy-connection-enlistment = false domain.resources.jdbc-connection-pool.MySQL-Pool.match-connections = false domain.resources.jdbc-connection-pool.MySQL-Pool.max-connection-usage-count = 0 domain.resources.jdbc-connection-pool.MySQL-Pool.max-pool-size = 32 domain.resources.jdbc-connection-pool.MySQL-Pool.max-wait-time-in-millis = 60000 domain.resources.jdbc-connection-pool.MySQL-Pool.name = MySQL-Pool domain.resources.jdbc-connection-pool.MySQL-Pool.non-transactional-connections = false domain.resources.jdbc-connection-pool.MySQL-Pool.pool-resize-quantity = 2 domain.resources.jdbc-connection-pool.MySQL-Pool.property.AllowLoadLocalInfile = true domain.resources.jdbc-connection-pool.MySQL-Pool.property.AllowMultiQueries = false domain.resources.jdbc-connection-pool.MySQL-Pool.property.AllowNanAndInf = false domain.resources.jdbc-connection-pool.MySQL-Pool.property.AllowUrlInLocalInfile = false domain.resources.jdbc-connection-pool.MySQL-Pool.property.AlwaysSendSetIsolation = true domain.resources.jdbc-connection-pool.MySQL-Pool.property.AutoClosePStmtStreams = false domain.resources.jdbc-connection-pool.MySQL-Pool.property.AutoDeserialize = false domain.resources.jdbc-connection-pool.MySQL-Pool.property.AutoGenerateTestcaseScript = false domain.resources.jdbc-connection-pool.MySQL-Pool.property.AutoReconnectForPools = false domain.resources.jdbc-connection-pool.MySQL-Pool.property.AutoSlowLog = true domain.resources.jdbc-connection-pool.MySQL-Pool.property.BlobSendChunkSize = 1048576 domain.resources.jdbc-connection-pool.MySQL-Pool.property.BlobsAreStrings = false domain.resources.jdbc-connection-pool.MySQL-Pool.property.CacheCallableStatements = false domain.resources.jdbc-connection-pool.MySQL-Pool.property.CacheCallableStmts = false domain.resources.jdbc-connection-pool.MySQL-Pool.property.CachePrepStmts = false domain.resources.jdbc-connection-pool.MySQL-Pool.property.CachePreparedStatements = false domain.resources.jdbc-connection-pool.MySQL-Pool.property.CacheResultSetMetadata = false domain.resources.jdbc-connection-pool.MySQL-Pool.property.CacheServerConfiguration = false domain.resources.jdbc-connection-pool.MySQL-Pool.property.CallableStatementCacheSize = 100 domain.resources.jdbc-connection-pool.MySQL-Pool.property.CallableStmtCacheSize = 100 domain.resources.jdbc-connection-pool.MySQL-Pool.property.CapitalizeTypeNames = true domain.resources.jdbc-connection-pool.MySQL-Pool.property.ClientInfoProvider = com.mysql.jdbc.JDBC4CommentClientInfoProvider domain.resources.jdbc-connection-pool.MySQL-Pool.property.ClobberStreamingResults = false domain.resources.jdbc-connection-pool.MySQL-Pool.property.ConnectTimeout = 0 domain.resources.jdbc-connection-pool.MySQL-Pool.property.ContinueBatchOnError = true domain.resources.jdbc-connection-pool.MySQL-Pool.property.CreateDatabaseIfNotExist = false domain.resources.jdbc-connection-pool.MySQL-Pool.property.DatabaseName = MySQL domain.resources.jdbc-connection-pool.MySQL-Pool.property.DefaultFetchSize = 0 domain.resources.jdbc-connection-pool.MySQL-Pool.property.DontTrackOpenResources = false domain.resources.jdbc-connection-pool.MySQL-Pool.property.DumpMetadataOnColumnNotFound = false domain.resources.jdbc-connection-pool.MySQL-Pool.property.DumpQueriesOnException = false domain.resources.jdbc-connection-pool.MySQL-Pool.property.DynamicCalendars = false domain.resources.jdbc-connection-pool.MySQL-Pool.property.ElideSetAutoCommits = false domain.resources.jdbc-connection-pool.MySQL-Pool.property.EmptyStringsConvertToZero = true domain.resources.jdbc-connection-pool.MySQL-Pool.property.EmulateLocators = false domain.resources.jdbc-connection-pool.MySQL-Pool.property.EmulateUnsupportedPstmts = true domain.resources.jdbc-connection-pool.MySQL-Pool.property.EnablePacketDebug = false domain.resources.jdbc-connection-pool.MySQL-Pool.property.EnableQueryTimeouts = true domain.resources.jdbc-connection-pool.MySQL-Pool.property.ExplainSlowQueries = false domain.resources.jdbc-connection-pool.MySQL-Pool.property.FailOverReadOnly = true domain.resources.jdbc-connection-pool.MySQL-Pool.property.FunctionsNeverReturnBlobs = false domain.resources.jdbc-connection-pool.MySQL-Pool.property.GatherPerfMetrics = false domain.resources.jdbc-connection-pool.MySQL-Pool.property.GatherPerformanceMetrics = false domain.resources.jdbc-connection-pool.MySQL-Pool.property.GenerateSimpleParameterMetadata = false domain.resources.jdbc-connection-pool.MySQL-Pool.property.HoldResultsOpenOverStatementClose = false domain.resources.jdbc-connection-pool.MySQL-Pool.property.IgnoreNonTxTables = false domain.resources.jdbc-connection-pool.MySQL-Pool.property.IncludeInnodbStatusInDeadlockExceptions = false domain.resources.jdbc-connection-pool.MySQL-Pool.property.InitialTimeout = 2 domain.resources.jdbc-connection-pool.MySQL-Pool.property.InteractiveClient = false domain.resources.jdbc-connection-pool.MySQL-Pool.property.IsInteractiveClient = false domain.resources.jdbc-connection-pool.MySQL-Pool.property.JdbcCompliantTruncation = true domain.resources.jdbc-connection-pool.MySQL-Pool.property.JdbcCompliantTruncationForReads = true domain.resources.jdbc-connection-pool.MySQL-Pool.property.LoadBalanceStrategy = random domain.resources.jdbc-connection-pool.MySQL-Pool.property.LocatorFetchBufferSize = 1048576 domain.resources.jdbc-connection-pool.MySQL-Pool.property.LogSlowQueries = false domain.resources.jdbc-connection-pool.MySQL-Pool.property.LogXaCommands = false domain.resources.jdbc-connection-pool.MySQL-Pool.property.Logger = com.mysql.jdbc.log.StandardLogger domain.resources.jdbc-connection-pool.MySQL-Pool.property.LoggerClassName = com.mysql.jdbc.log.StandardLogger domain.resources.jdbc-connection-pool.MySQL-Pool.property.LoginTimeout = 0 domain.resources.jdbc-connection-pool.MySQL-Pool.property.MaintainTimeStats = true domain.resources.jdbc-connection-pool.MySQL-Pool.property.MaxQuerySizeToLog = 2048 domain.resources.jdbc-connection-pool.MySQL-Pool.property.MaxReconnects = 3 domain.resources.jdbc-connection-pool.MySQL-Pool.property.MaxRows = -1 domain.resources.jdbc-connection-pool.MySQL-Pool.property.MetadataCacheSize = 50 domain.resources.jdbc-connection-pool.MySQL-Pool.property.NetTimeoutForStreamingResults = 600 domain.resources.jdbc-connection-pool.MySQL-Pool.property.NoAccessToProcedureBodies = false domain.resources.jdbc-connection-pool.MySQL-Pool.property.NoDatetimeStringSync = false domain.resources.jdbc-connection-pool.MySQL-Pool.property.NoTimezoneConversionForTimeType = false domain.resources.jdbc-connection-pool.MySQL-Pool.property.NullCatalogMeansCurrent = true domain.resources.jdbc-connection-pool.MySQL-Pool.property.NullNamePatternMatchesAll = true domain.resources.jdbc-connection-pool.MySQL-Pool.property.OverrideSupportsIntegrityEnhancementFacility = false domain.resources.jdbc-connection-pool.MySQL-Pool.property.PacketDebugBufferSize = 20 domain.resources.jdbc-connection-pool.MySQL-Pool.property.PadCharsWithSpace = false domain.resources.jdbc-connection-pool.MySQL-Pool.property.Paranoid = false domain.resources.jdbc-connection-pool.MySQL-Pool.property.Password = password domain.resources.jdbc-connection-pool.MySQL-Pool.property.Pedantic = false domain.resources.jdbc-connection-pool.MySQL-Pool.property.PinGlobalTxToPhysicalConnection = false domain.resources.jdbc-connection-pool.MySQL-Pool.property.PopulateInsertRowWithDefaultValues = false domain.resources.jdbc-connection-pool.MySQL-Pool.property.Port = 3306 domain.resources.jdbc-connection-pool.MySQL-Pool.property.PortNumber = 3306 domain.resources.jdbc-connection-pool.MySQL-Pool.property.PrepStmtCacheSize = 25 domain.resources.jdbc-connection-pool.MySQL-Pool.property.PrepStmtCacheSqlLimit = 256 domain.resources.jdbc-connection-pool.MySQL-Pool.property.PreparedStatementCacheSize = 25 domain.resources.jdbc-connection-pool.MySQL-Pool.property.PreparedStatementCacheSqlLimit = 256 domain.resources.jdbc-connection-pool.MySQL-Pool.property.ProcessEscapeCodesForPrepStmts = true domain.resources.jdbc-connection-pool.MySQL-Pool.property.ProfileSQL = false domain.resources.jdbc-connection-pool.MySQL-Pool.property.ProfileSql = false domain.resources.jdbc-connection-pool.MySQL-Pool.property.QueriesBeforeRetryMaster = 50 domain.resources.jdbc-connection-pool.MySQL-Pool.property.ReconnectAtTxEnd = false domain.resources.jdbc-connection-pool.MySQL-Pool.property.RelaxAutoCommit = false domain.resources.jdbc-connection-pool.MySQL-Pool.property.ReportMetricsIntervalMillis = 30000 domain.resources.jdbc-connection-pool.MySQL-Pool.property.RequireSSL = false domain.resources.jdbc-connection-pool.MySQL-Pool.property.ResultSetSizeThreshold = 100 domain.resources.jdbc-connection-pool.MySQL-Pool.property.RewriteBatchedStatements = false domain.resources.jdbc-connection-pool.MySQL-Pool.property.RollbackOnPooledClose = true domain.resources.jdbc-connection-pool.MySQL-Pool.property.RoundRobinLoadBalance = false domain.resources.jdbc-connection-pool.MySQL-Pool.property.RunningCTS13 = false domain.resources.jdbc-connection-pool.MySQL-Pool.property.SecondsBeforeRetryMaster = 30 domain.resources.jdbc-connection-pool.MySQL-Pool.property.ServerName = localhost domain.resources.jdbc-connection-pool.MySQL-Pool.property.SlowQueryThresholdMillis = 2000 domain.resources.jdbc-connection-pool.MySQL-Pool.property.SlowQueryThresholdNanos = 0 domain.resources.jdbc-connection-pool.MySQL-Pool.property.SocketFactory = com.mysql.jdbc.StandardSocketFactory domain.resources.jdbc-connection-pool.MySQL-Pool.property.SocketFactoryClassName = com.mysql.jdbc.StandardSocketFactory domain.resources.jdbc-connection-pool.MySQL-Pool.property.SocketTimeout = 0 domain.resources.jdbc-connection-pool.MySQL-Pool.property.StrictFloatingPoint = false domain.resources.jdbc-connection-pool.MySQL-Pool.property.StrictUpdates = true domain.resources.jdbc-connection-pool.MySQL-Pool.property.TcpKeepAlive = true domain.resources.jdbc-connection-pool.MySQL-Pool.property.TcpNoDelay = true domain.resources.jdbc-connection-pool.MySQL-Pool.property.TcpRcvBuf = 0 domain.resources.jdbc-connection-pool.MySQL-Pool.property.TcpSndBuf = 0 domain.resources.jdbc-connection-pool.MySQL-Pool.property.TcpTrafficClass = 0 domain.resources.jdbc-connection-pool.MySQL-Pool.property.TinyInt1isBit = true domain.resources.jdbc-connection-pool.MySQL-Pool.property.TraceProtocol = false domain.resources.jdbc-connection-pool.MySQL-Pool.property.TransformedBitIsBoolean = false domain.resources.jdbc-connection-pool.MySQL-Pool.property.TreatUtilDateAsTimestamp = true domain.resources.jdbc-connection-pool.MySQL-Pool.property.URL = jdbc:mysql://:3306/ domain.resources.jdbc-connection-pool.MySQL-Pool.property.UltraDevHack = false domain.resources.jdbc-connection-pool.MySQL-Pool.property.Url = jdbc:mysql://localhost:3306/test domain.resources.jdbc-connection-pool.MySQL-Pool.property.UseBlobToStoreUTF8OutsideBMP = false domain.resources.jdbc-connection-pool.MySQL-Pool.property.UseCompression = false domain.resources.jdbc-connection-pool.MySQL-Pool.property.UseCursorFetch = false domain.resources.jdbc-connection-pool.MySQL-Pool.property.UseDirectRowUnpack = true domain.resources.jdbc-connection-pool.MySQL-Pool.property.UseDynamicCharsetInfo = true domain.resources.jdbc-connection-pool.MySQL-Pool.property.UseFastDateParsing = true domain.resources.jdbc-connection-pool.MySQL-Pool.property.UseFastIntParsing = true domain.resources.jdbc-connection-pool.MySQL-Pool.property.UseGmtMillisForDatetimes = false domain.resources.jdbc-connection-pool.MySQL-Pool.property.UseHostsInPrivileges = true domain.resources.jdbc-connection-pool.MySQL-Pool.property.UseInformationSchema = false domain.resources.jdbc-connection-pool.MySQL-Pool.property.UseJDBCCompliantTimezoneShift = false domain.resources.jdbc-connection-pool.MySQL-Pool.property.UseJvmCharsetConverters = false domain.resources.jdbc-connection-pool.MySQL-Pool.property.UseLocalSessionState = false domain.resources.jdbc-connection-pool.MySQL-Pool.property.UseNanosForElapsedTime = false domain.resources.jdbc-connection-pool.MySQL-Pool.property.UseOldAliasMetadataBehavior = false domain.resources.jdbc-connection-pool.MySQL-Pool.property.UseOldUTF8Behavior = false domain.resources.jdbc-connection-pool.MySQL-Pool.property.UseOnlyServerErrorMessages = true domain.resources.jdbc-connection-pool.MySQL-Pool.property.UseReadAheadInput = true domain.resources.jdbc-connection-pool.MySQL-Pool.property.UseSSL = false domain.resources.jdbc-connection-pool.MySQL-Pool.property.UseSSPSCompatibleTimezoneShift = false domain.resources.jdbc-connection-pool.MySQL-Pool.property.UseServerPrepStmts = false domain.resources.jdbc-connection-pool.MySQL-Pool.property.UseServerPreparedStmts = false domain.resources.jdbc-connection-pool.MySQL-Pool.property.UseSqlStateCodes = true domain.resources.jdbc-connection-pool.MySQL-Pool.property.UseStreamLengthsInPrepStmts = true domain.resources.jdbc-connection-pool.MySQL-Pool.property.UseTimezone = false domain.resources.jdbc-connection-pool.MySQL-Pool.property.UseUltraDevWorkAround = false domain.resources.jdbc-connection-pool.MySQL-Pool.property.UseUnbufferedInput = true domain.resources.jdbc-connection-pool.MySQL-Pool.property.UseUnicode = true domain.resources.jdbc-connection-pool.MySQL-Pool.property.UseUsageAdvisor = false domain.resources.jdbc-connection-pool.MySQL-Pool.property.User = root domain.resources.jdbc-connection-pool.MySQL-Pool.property.YearIsDateType = true domain.resources.jdbc-connection-pool.MySQL-Pool.property.ZeroDateTimeBehavior = exception domain.resources.jdbc-connection-pool.MySQL-Pool.res-type = javax.sql.DataSource domain.resources.jdbc-connection-pool.MySQL-Pool.statement-timeout-in-seconds = -1 domain.resources.jdbc-connection-pool.MySQL-Pool.steady-pool-size = 8 domain.resources.jdbc-connection-pool.MySQL-Pool.transaction-isolation-level = domain.resources.jdbc-connection-pool.MySQL-Pool.validate-atmost-once-period-in-seconds = 0 domain.resources.jdbc-connection-pool.MySQL-Pool.validation-table-name = domain.resources.jdbc-connection-pool.MySQL-Pool.wrap-jdbc-objects = false |
コネックションプールのモニタリング
最後に、JDBC の接続プールに対してモニタリングの設定を行う方法を紹介します.モニタリングを有効にするために下記の手順に従い設定を行い,確認してください.
dashost > asadmin list “*monitor*” server.monitoring-service server.monitoring-service.module-monitoring-levels dashost > asadmin set “server.monitoring-service.module-monitoring-levels.jdbc-connection-pool=HIGH” server.monitoring-service.module-monitoring-levels.jdbc-connection-pool = HIGH dashost > asadmin get “server.monitoring-service.module-monitoring-levels.*” server.monitoring-service.module-monitoring-levels.connector-connection-pool = OFF server.monitoring-service.module-monitoring-levels.connector-service = OFF server.monitoring-service.module-monitoring-levels.ejb-container = OFF server.monitoring-service.module-monitoring-levels.http-service = OFF server.monitoring-service.module-monitoring-levels.jdbc-connection-pool = HIGH server.monitoring-service.module-monitoring-levels.jms-service = OFF server.monitoring-service.module-monitoring-levels.jvm = OFF server.monitoring-service.module-monitoring-levels.orb = OFF server.monitoring-service.module-monitoring-levels.thread-pool = OFF server.monitoring-service.module-monitoring-levels.transaction-service = OFF server.monitoring-service.module-monitoring-levels.web-container = OFF dashost > asadmin list –monitor=true “*MySQL*” server.resources.MySQL-Pool dashost > asadmin get –monitor=true “server.resources.MySQL-Pool.*” |
GlassFish SSLの設定(クライアント認証)
GlassFish のドメイン管理サーバ上でHTTP リスナーの設定をクライアント認証対応に変更
dashost > asadmin set “cluster1-config.http-service.http-listener.http-listener-2.ssl.client-auth-enabled = true” |
クライアント証明書の秘密鍵を作成
ca-admin > openssl genrsa -des3 -out /tmp/client-private-key 2048 Generating RSA private key, 2048 bit long modulus ……….+++ ………………………………….+++ e is 65537 (0x10001) Enter pass phrase for /tmp/client-private-key: Verifying – Enter pass phrase for /tmp/client-private-key: |
クライアント証明書用のCSRを作成
下記の例では便宜上,認証局(CA)上で CSR を生成していますが,CSRの生成はどの環境で構築しても問題ありません.
ca-admin > openssl req -new -days 365 -key /tmp/client-private-key -out /tmp/clientcsr.pem Enter pass phrase for /tmp/client-private-key: You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter ‘.’, the field will be left blank. —– Country Name (2 letter code) [AU]:JP State or Province Name (full name) [Some-State]:Tokyo Locality Name (eg, city) []:Setagaya Organization Name (eg, company) [Internet Widgits Pty Ltd]:Sun Microsystems Organizational Unit Name (eg, section) []:Software Practice Common Name (eg, YOUR name) []:Tarou Yamada Email Address []:Tarou.Yamada@Sun.COM Please enter the following ‘extra’ attributes |
認証局(CA)でクライアント証明書を署名
クライアント証明書のCSRを認証局(CA)で署名します。
ca-admin > openssl ca -config ./openssl-client.cnf -in /tmp/clientcsr.pem -out /tmp/signed-clientcert.pem Using configuration from ./openssl-client.cnf Enter pass phrase for ./demoCA/private/cakey.pem: Check that the request matches the signatureSignature ok Certificate Details: Serial Number: cd:ea:db:f4:c8:e3:93:92 Validity Not Before: Dec 4 08:27:14 2009 GMT Not After : Dec 4 08:27:14 2010 GMT (省略) |
署名されたクライアント証明書をGlassFishのキーストアにインポートするため,X.509形式に変更
ca-admin > openssl x509 -in /tmp/signed-clientcert.pem -out /tmp/signed-clientcert.x509 |
GlassFishのキーストアに対してクライアント証明書をインポート
dashost > keytool -import -alias yamada -file /tmp/signed-clientcert.x509 キーストアのパスワードを入力してください:[changeit] 新規パスワードを再入力してください:[changeit] 所有者: EMAILADDRESS=Tarou.Yamada@Sun.COM, CN=Tarou Yamada, OU=Software Practice, O=Sun Microsystems, ST=Tokyo, C=JP 発行者: EMAILADDRESS=caadmin@Sun.COM, CN=ca-server.sun.com, OU=Software Practice, O=Sun Microsystems, ST=Tokyo, C=JP シリアル番号: cdeadbf4c8e39392 有効期間の開始日: Fri Dec 04 17:27:14 JST 2009 終了日: Sat Dec 04 17:27:14 JST 2010 証明書のフィンガープリント: MD5: 59:06:3C:95:79:5D:31:D7:A3:92:0E:AA:A2:23:73:6D SHA1: 26:00:30:F1:15:DB:20:D4:8E:AF:99:AB:96:13:CB:17:DA:E5:71:15 署名アルゴリズム名: SHA1withRSA バージョン: 3 (省略) この証明書を信頼しますか? [no]: yes 証明書がキーストアに追加されました。 |
クライアント証明書をブラウザにインポートするためPKCS12形式に変換
ca-admin > openssl pkcs12 -export -in /tmp/signed-clientcert.pem -inkey /tmp/client-private-key -certfile ./demoCA/cacert.pem -out /tmp/clientcert.p12 Enter pass phrase for /tmp/client-private-key: Enter Export Password: Verifying – Enter Export Password: ca-admin > ls -l /tmp/clientcert.p12 -rw-r–r– 1 root root 3525 12月 4日 17:29 /tmp/clientcert.p12 |
最後にブラウザにPKCS12形式のクライアント証明書をインポートします.
上記で設定は完了です,ブラウザからアクセスしてみてください.
GlassFish ドメイン管理サーバのバックアップとリストア
※ GlassFish のドメイン管理サーバのバックアップとリストアは
管理コンソールからは行えません.コマンドを使用してください.
ドメイン管理サーバが稼働するサーバが何らかの障害により起動できなくなった場合,ドメインの管理ができなくなります.ドメイン管理サーバが稼働していない状態でもサーバインスタンスを稼働させることはできますが,ドメイン管理サーバが壊れている状態ではアプリケーションの更新やリソースの設定変更等ができなくなります.このような場合、ドメイン管理サーバの設定をバックアップしておくことで,他のサーバをドメイン管理サーバの代替えとして利用することができます.バックアップはドメイン管理サーバ上で何らかの設定変更を行った際,その都度取得しておくことを推奨します.
バックアップを取得する前に,ドメイン管理サーバを停止してください.ドメイン管理サーバを停止しても提供しているサービスに影響は及びませんのでこの作業は本番稼働中に行っても問題ありません.
dashost > asadmin stop-domain clusterDomain ドメイン clusterDomain が停止しました。 |
次にドメイン管理サーバのバックアップを行います.–domaindirには対象のドメインが含まれるディレクトリを指定します.
dashost > asadmin backup-domain –domaindir /export/home/appserv/domains clusterDomain ドメインを正常にバックアップしました 説明: 1259776406949 バックアップファイル名: /export/home/appserv/domains/clusterDomain/backups/sjsas_backup_v00001.zip バックアップを実行した日付と時刻: Thu Dec 03 02:53:26 JST 2009 ドメインディレクトリ: /export/home/appserv/domains ドメインディレクトリ: /export/home/appserv/domains/clusterDomain ドメイン名: clusterDomain バックアップを実行したユーザーの名前: appserv |
バックアップコマンドを実行すると,sjsas_backup_vXXXXX.zipと名付けられたバックアップファイルが作成されます.このファイルをドメイン管理サーバのバックアップ用のサーバにFTP等を利用してコピーしておきます.ここではドメイン管理サーバのバックアップ用のサーバとしてnodeagent1を使用します.本番環境ではノードエージェントとは別のマシン上に構築することを推奨します.
nodeagent1 > asadmin restore-domain –filename ./sjsas_backup_v00001.zip clusterDomain ドメイン clusterDomain の /export/home/appserv/domains/clusterDomain への復元に成功しました 説明: 1259776406949 バックアップファイル名: /export/home/appserv/domains/clusterDomain/backups/sjsas_backup_v00001.zip バックアップを実行した日付と時刻: Thu Dec 03 02:53:26 JST 2009 ドメインディレクトリ: /export/home/appserv/domains ドメインディレクトリ: /export/home/appserv/domains/clusterDomain ドメイン名: clusterDomain バックアップを実行したユーザーの名前: appser |
展開したファイル中よりドメイン管理サーバ名が記載されている箇所を手動で編集します.domains/clusterDomain/config /domain.xml中より修正する必要のある該当箇所を表示し,dashostからnodeagent1に変更します.
nodeagent1 > grep dashost domain.xml <property name="client-hostname" value="dashost“/> <jms-host admin-password="admin" admin-user-name="admin" host="dashost” name=”default_JMS_host” port=”5076″/> <property name="client-hostname" value="dashost“/> <jms-host admin-password="admin" admin-user-name="admin" host="dashost” name=”default_JMS_host” port=”${JMS_PROVIDER_PORT}”/> <property name="client-hostname" value="dashost“/> <jms-host admin-password="admin" admin-user-name="admin" host="dashost” name=”default_JMS_host” port=”${JMS_PROVIDER_PORT}”/> |
新しい環境上で再度環境変数を設定した後,ドメインを起動します.
nodeagent1 > setenv AS_ADMIN_HOST nodeagent1.japan.sun.com nodeagent1 > env |grep AS AS_ADMIN_USER=clusterAdmin AS_ADMIN_PASSWORDFILE=/export/home/appserv/.passwordfile AS_ADMIN_HOST=nodeagent1.japan.sun.com AS_ADMIN_PORT=5048 nodeagent1 > asadmin start-domain clusterDomain ドメイン clusterDomain を起動しています。お待ちください。 デフォルトのログの場所は /export/home/appserv/domains/clusterDomain/logs/server.log です。 出力を /export/home/appserv/domains/clusterDomain/logs/server.log にリダイレクトしています ドメイン clusterDomain が起動しました。 ドメイン [clusterDomain] はその設定で [Sun GlassFish Enterprise Server v2.1.1 ((v2.1 Patch06)(9.1_02 Patch12)) (build b31g-fcs)] を実行しています。ログは [/export/home/appserv/domains] にあります。 管理コンソールは [http://localhost:5048] で使用できます。 “asadmin” コマンドにも同じポート [5048] を使用します。 ユーザーの Web アプリケーションは次の URL で使用できます: [http://localhost:5080 https://localhost:5081 ]。 次の web-contexts を使用できます: [/web1 /__wstx-services ]。 標準の JMX クライアント (JConsole など) はドメイン管理のために JMXServiceURL: [service:jmx:rmi:///jndi/rmi://nodeagent1.japan.sun.com:5086/jmxrmi] に接続できます。 ドメインは少なくとも次のポートで接続を待機しています: [5080 5081 5048 5037 5038 5039 5086 ]。 ドメインはアプリケーションサーバークラスタおよびその他のスタンドアロンインスタンスをサポートします。 |
上記で,ドメインのリストアは完了です.仮にドメイン管理サーバにアクセスするためにSSLを有効にしている場合にドメイン管理サーバのホスト名が変わる場合,サーバ証明書の更新も必要です.デフォルトでインストールされている自己署名サーバ証明書は変更前のドメイン管理サーバ名が記載されていますので更新の必要があります.
最後に,念のためノードエージェントが保持するドメイン管理サーバへの参照情報が更新されているか確認してください.全てのノードエージェントはagentディレクトリ中にconfigディレクトリが存在しています.このディレクトリ配下にdas.propertiesファイルが存在しており,ドメイン管理サーバへ接続するための接続情報などが記載されています.そこでファイルの内容を確認しdashostからnodeagent1に変更されていることを確認してください.仮に変更されていない場合は手動で変更してください.
nodeagent1 > pwd /export/home/appserv/nodeagents/nodeagent1/agent/config nodeagent1 > grep das.host das.properties agent.das.host=nodeagent1 nodeagent2 > pwd /export/home/appserv/nodeagents/nodeagent2/agent/config nodeagent2 > grep das.host das.properties agent.das.host=nodeagent1 |
GlassFish クラスタとクラスタインスタンス管理(作成、削除、起動、停止)
ここでは管理ツールを使用しクラスタの管理を行う方法について紹介します.
クラスタの作成
クラスタ構成を作成するためにはcreate-clusterコマンドを使用します.コマンド引数にクラスタ名を指定してクラスタを作成します.
asadmin create-cluster cluster1 コマンド create-cluster は正常に実行されました。 |
また,管理コンソールから左ペインの「クラスタ」を選択し右ペインの「新規…」ボタンを押すことによって作成することができます.

クラスタの作成
クラスタサーバインスタンスの作成
クラスタに所属するサーバインスタンスを作成するためには,create-instanceコマンドを実行します.コマンド引数にインスタンスを配置するノードエージェント名とクラスタ名を指定してインスタンスを作成します.
dashost > asadmin create-instance –nodeagent nodeagent1 –cluster cluster1 instance1 コマンド create-instance は正常に実行されました。 dashost > asadmin create-instance –nodeagent nodeagent2 –cluster cluster1 instance2 コマンド create-instance は正常に実行されました |
また,クラスタに所属するサーバインスタンスは「クラスタ」作成のウィザードから「作成するサーバインスタンス(2)」のテーブルから,「新規…」ボタンを押すことによって作成することができます.この時ノードエージェントの選択コンボボックスからサーバインスタンスが稼働するノードエージェントを選択します.

クラスタインスタンスの作成
クラスタの一覧表示
ドメイン内に存在するクラスタの一覧を表示するためにはlist-clustersコマンドを使用します.またコマンドを実行すると一覧表示の他クラスタの稼働状態も表示します.
dashost > asadmin list-clusters cluster2 実行していません cluster1 実行しています コマンド list-clusters は正常に実行されました。 |
また,管理コンソールから左ペインの「クラスタ」を選択して確認できます.

クラスタの一覧表示
クラスタの起動
クラスタの起動はstart-clusterコマンドを使用します.コマンド引数にクラスタ名を指定して起動します.
dashost > asadmin start-cluster cluster2 クラスタ化されたインスタンス instance3 の起動に成功しました。 クラスタ化されたインスタンス instance4 の起動に成功しました。 コマンド start-cluster は正常に実行されました。 |
また,管理コンソールから左ペインの「クラスタ」を選択し右ペイン中より対象のクラスタにチェックを付け「クラスタの起動」ボタンを押すことによって作成することができます.

クラスタの起動
クラスタの停止
クラスタの停止はstop-clusterコマンドを実行します.コマンド引数にクラスタ名を指定して停止します.
dashost > asadmin stop-cluster cluster1 クラスタ化されたインスタンス instance1 の停止に成功しました。 クラスタ化されたインスタンス instance2 の停止に成功しました。 コマンド は正常に実行されました。 |
また,管理コンソールから左ペインの「クラスタ」を選択し右ペイン中より対象のクラスタにチェックを付け「クラスタの停止」ボタンを押すことによってクラスタを停止することができます.

クラスタの停止
クラスタの削除
クラスタを削除するためには,クラスタに所属している全てのインスタンスを停止/削除した後に削除を行います.
まず,クラスタの一覧とクラスタに所属するインスタンスを表示します.
dashost > asadmin list-clusters cluster2 実行していません cluster1 実行していません コマンド list-clusters は正常に実行されました。 dashost > asadmin list-instances instance1 実行していません instance2 実行していません instance3 実行していません instance4 実行していません コマンド list-instances は正常に実行されました。 |
次に,cluster1に属するinstance1,instance2を削除します.
dashost > asadmin delete-instance instance1 コマンド delete-instance は正常に実行されました。 dashost > asadmin delete-instance instance2 コマンド delete-instance は正常に実行されました。 |
最後にcluster1を削除します.
dashost > asadmin delete-cluster cluster1 コマンド delete-cluster は正常に実行されました。 |
また,管理コンソールから左ペインの「クラスタ」を選択し右ペイン中より対象のクラスタにチェックを付け「削除」ボタンを押すことによってクラスタを削除することができます.管理コンソールから削除を実行すると,クラスタ内に属する全てのインスタンスも同時に削除する事ができます.

クラスタの削除
GlassFish スタンドアローンインスタンス管理(作成、削除、起動、停止)
スタンドアローンサーバインスタンスの作成
スタンドアローンサーバインスタンスを追加するためにはcreate-instanceコマンドを実行します.サーバインスタンスが稼働するノードエージェント名を指定して作成します.複数のインスタンスを作成する際は,必ずノードエージェントの指定が必要です.そこで,開発者プロファイルを利用している場合,もしくはノードエージェントを作成していない場合は,新たにサーバインスタンスを作成することができませんので,ご注意ください.
dashost > asadmin create-instance –nodeagent nodeagent1 instance1 コマンド create-instance は正常に実行されました |
上記のようにサーバインスタンスで使用する各種ポート番号を明示的に指定せずにサーバインスタンスを作成する場合は,極力既存の全てのサーバインスタンスを起動している状態で作成作業を行ってください.ポート番号を指定せずに実行した場合,コマンド内部で自動的に未使用のポート番号を探し出して新規インスタンス用に割り当てます.他のサーバインスタンスが停止している状態でコマンドを実行した場合,他で使用しているポート番号と競合する可能性があり,正常にサーバインスタンスが起動できない場合があります.作成するインスタンスで使用する各種ポート番号を指定したい場合は,下記のように–systempropertiesを付加して各種ポート番号を指定する事もできます.
dashost > asadmin create-instance –user clusterAdmin –host sw-103 –port 5048 –nodeagent nodeagent1 –systemproperties HTTP_LISTENER_PORT=5180:HTTP_SSL_LISTENER_PORT=51443:IIOP_LISTENER_PORT=5138:IIOP_SSL_LISTENER_PORT=5137:IIOP_SSL_MUTUALAUTH_PORT=5139:JMX_SYSTEM_CONNECTOR_PORT=5140 instance1 コマンド create-instance は正常に実行されました。 |
また,管理コンソールから左ペインの「スタンドアロンインスタンス」を選択し右ペインの「新規…」ボタンを押すことによって新規インスタンスを追加することができます.

新規スタンドアローンインスタンスの追加
サーバインスタンスの一覧表示
サーバインスタンスの一覧を確認するためにはlist-instancesコマンドを使用します.コマンドを実行すると一覧表示の他インスタンスの稼働状態も表示します.
dashost > asadmin list-instances instance1 実行しています instance2 実行していません コマンド list-instances は正常に実行されました。 |
また,管理コンソールから左ペインの「スタンドアロンインスタンス」を選択して確認できます.

インスタンスの一覧表示
サーバインスタンスの起動
サーバインスタンスの起動はstart-instanceコマンドを使用します.実行時にインスタンス名を指定して起動します.
dashost > asadmin start-instance instance2 コマンド start-instance は正常に実行されました。 |
また,管理コンソールから左ペインの「スタンドアロンインスタンス」を選択し右ペインの「起動」ボタンを押すことによってインスタンスを起動することができます.

サーバインスタンスの起動
もしくは,管理コンソールから左ペインから対象の「スタンドアロンインスタンス」を選択し右ペインの「インスタンスの起動」ボタンを押すことによってインスタンスを起動することができます.

サーバインスタンスの起動
サーバインスタンスの停止
サーバインスタンスの停止はstop-instanceコマンドを実行します.コマンド引数にインスタンス名を指定して停止します.
dashost > asadmin stop-instance instance1 コマンド stop-instance は正常に実行されました |
また,管理コンソールから左ペインの「スタンドアロンインスタンス」を選択し右ペインの「停止」ボタンを押すことによってインスタンスを停止することができます.

サーバインスタンスの停止
もしくは,直接左ペインから対象の「スタンドアロンインスタンス」を選択して右ペインの「インスタンスの停止」ボタンを押すことによってインスタンスを停止することができます.

サーバインスタンスの停止
サーバインスタンスの削除
インスタンスの削除はdelete-instanceコマンドを実行します.コマンド引数にインスタンス名を指定して削除します.
dashost > asadmin delete-instance –user clusterAdmin –host sw-103 –port 5048 instance1 コマンド delete-instance は正常に実行されました。 |
また,管理コンソールから左ペインの「スタンドアロンインスタンス」を選択し右ペインの「削除」ボタンを押すことによってインスタンスを削除することができます.

サーバインスタンスの削除
GlassFish ノードエージェント管理(作成、削除、起動、停止、ログ設定)
ノードエージェントの作成
ノードエージェントを作成するためには,ドメイン管理サーバ上で create-node-agent-config コマンドを実行しノードエージェント(参照情報のみ)を作成します.下記の例では2つのノードエージェントを作成しています.
dashost > asadmin create-node-agent-config nodeagent1 コマンド create-node-agent-config は正常に実行されました。 dashost > asadmin create-node-agent-config nodeagent2 コマンド create-node-agent-config は正常に実行されました |
次にノードエージェントを稼働させるマシン上でそれぞれ create-node-agent コマンドを実行します.この時ドメイン管理サーバ上で指定したノードエージェント名と同一のエージェント名を指定する必要があります.
nodeagent1 > asadmin create-node-agent –user clusterAdmin –host dashost –port 5048 –savemasterpassword=true nodeagent1 コマンド create-node-agent は正常に実行されました。 |
nodeagent2 > asadmin create-node-agent –user clusterAdmin –host dashost –port 5048 –savemasterpassword=true nodeagent2 コマンド create-node-agent は正常に実行されました。 |
便宜上ノードエージェントを稼働させるマシン上で create-node-agent コマンドを実行すると,「参照情報」と,「ノードエージェントの実体」の両方が同時に生成されます.しかし内部的には参照情報の設定とノードエージェントの実体は別々に作成されていることに注意してください.
このように,参照情報とノードエージェントの作成が別々に行われる理由は,ノードエージェントをオフラインで管理ができるようにするためです.例えば,実体であるノードエージェントが停止状態でも,ドメイン管理サーバ上で管理しているノードエージェントの参照情報に対してインスタンスを追加することができます.そしてノードエージェントの実体を起動した時にドメイン管理サーバで保持するノードエージェントの参照(設定)情報と同期をとりインスタンスの実体が生成されます.
管理コンソールからは,ドメイン管理サーバで管理する参照情報のみ作成することができます.参照情報を作成した後,別途ノードエージェントが稼働するマシン上でノードエージェントの実体を作成してください.
管理コンソールの左ペインから「ノードエージェント」を選択し、右ペインより「新規…」ボタンを押すことによってノードエージェントの参照情報を作成することができます.

ノードエージェントの参照情報の作成
ノードエージェントの一覧表示
ノードエージェントの一覧を確認するためにはlist-node-agentsコマンドを使用します.コマンドを実行すると一覧表示の他ノードエージェントの稼働状態も表示します.
dashost > asadmin list-node-agents nodeagent1 実行しています nodeagent2 実行していません コマンド list-node-agents は正常に実行されました。 |
また,管理コンソールからは,左ペインの「ノードエージェント」を選択して確認できます.

ノードエージェントの一覧表示
ノードエージェントの起動
ノードエージェントを起動するためには,ノードエージェントが稼働するマシン上で start-node-agent コマンドを実行します.
nodeagent1 > asadmin start-node-agent nodeagent1 出力を /export/home/appserv/nodeagents/nodeagent1/agent/logs/server.log にリダイレクトしていますアプリケーション出力を /export/home/appserv/nodeagents/nodeagent1/agent/logs/server.log にリダイレクトします コマンド start-node-agent は正常に実行されました。 |
ノードエージェントの停止
ノードエージェントを停止するためには,ノードエージェントが稼働するマシン上で stop-node-agent コマンドを実行します.
nodeagent1 > asadmin stop-node-agent nodeagent1 コマンド stop-node-agent は正常に実行されました |
ノードエージェントのログ設定
ノードエージェントのログに関する設定を行う前に,現在設定されているログの設定情報を get コマンドを実行して確認します.
dashost > asadmin get “domain.node-agent.nodeagent1.log-service.*” domain.node-agent.nodeagent1.log-service.alarms = false domain.node-agent.nodeagent1.log-service.file = ${com.sun.aas.instanceRoot}/logs/server.log domain.node-agent.nodeagent1.log-service.log-filter = domain.node-agent.nodeagent1.log-service.log-handler = domain.node-agent.nodeagent1.log-service.log-rotation-limit-in-bytes = 500000 domain.node-agent.nodeagent1.log-service.log-rotation-timelimit-in-minutes = 0 domain.node-agent.nodeagent1.log-service.log-to-console = false domain.node-agent.nodeagent1.log-service.retain-error-statistics-for-hours = 5 domain.node-agent.nodeagent1.log-service.use-system-logging = false |
ここで例えば、set コマンドを実行しログローテーションのファイルサイズを 500Kb から 1Mb に変更してみます。
下記を実行してください.
dashost > asadmin set domain.node-agent.nodeagent1.log-service.log-rotation-limit-in-bytes=1000000 domain.node-agent.nodeagent1.log-service.log-rotation-limit-in-bytes = 1000000 |
上記の設定内容を確認するため get コマンドを実行します.
dashost > asadmin get domain.node-agent.nodeagent1.log-service.log-rotation-limit-in-bytes domain.node-agent.nodeagent1.log-service.log-rotation-limit-in-bytes = 1000000 |
また,ノードエージェントに関する各種設定は,管理コンソールからも行えます.

ノードエージェントの各種設定
ノードエージェントの削除
ノードエージェントを削除する前に,ノードエージェント上で稼働している全てのインスタンス,全てのアプリケーションを停止していることを確認してください.ノードエージェント上にリソースが残っている場合,ノードエージェントの削除に失敗します.
全てのリソースを削除した後に,ノードエージェントが稼働するマシン上で delete-node-agent コマンドを実行し実体を削除します.下記のコマンドを実行するとファイルやディレクトリを全て削除します.
nodeagent1 > asadmin delete-node-agent nodeagent1 コマンド delete-node-agent は正常に実行されました。 |
次に、delete-node-agent-configコマンドを実行し,ドメイン管理サーバ上で保持するノードエージェントの参照情報を削除します.
dashost > asadmin delete-node-agent-config –user clusterAdmin –host dashost –port 5048 nodeagent1 コマンド delete-node-agent-config は正常に実行されました。 |
ノードエージェントの参照情報は管理コンソールからも削除できます.管理コンソールの左ペインから「ノードエージェント」を選択し,右ペインより削除対象のノードエージェントにチェックを付け,削除ボタンを押す事により削除できます.

ノードエージェントの参照情報の削除
GlassFish サーバインスタンス
サーバインスタンス
サーバインスタンスはエンドユーザ向けにサービスを提供するJava EE 5の 仕様に完全準拠したJava EEのプロセスです.1つのドメ イン内には複数のサーバインスタンスを作成する事ができます.また物理的にハードウェアが異なる環境上でインスタンスを作成する事もできます.ドメイン内 で複数のサーバインスタンスを作成する場合,それぞれのサーバインスタンスを識別するために,異なる名前を設定する必要があります.
サーバインスタンスは下記の2種類のいずれかの方法で作成できます.
- クラスタに所属しないインスタンス
- クラスタに所属しないインスタンス
クラスタについては別途,詳細に説明しますが,複数のサーバインスタンスを作成する環境では,クラスタへの所属の有無に応じて,アプリケーションの配備やリソース設定等の管理方法が大幅に異なってきます.具体的に はクラスタに属する全てのインスタンスは,クラスタに対する設定情報が各インスタンスに完全に引き継がれるため,たった1度のクラスタに対する操作で全て のインスタンスに対して反影されます.このようにクラスタに所属するインスタンスは,同じアプリケーションを負荷分散や高化用性を実現するために複数台の マシンで実行したいような場合に有効です.一方,クラスタに所属しないインスタンスは,各インスタンス間で設定情報を独立に設定するため,リソース設定を 個別に管理したい場合,単一のアプリケーションを別のJava VMプ ロセスで稼働させたい場合,もしくは異なるアプリケーションをそれぞれ別のJava VMの プロセスで稼働させたいような場合に有効です.
サーバインスタンスのアーキテクチャを「図5:サーバインスタンスのアーキテク チャ」に示します.のようにプロセス内にEJBコンテナやWebコンテナ等を含み,各種クライアントからの要求を受け 付けます.
図 5:サーバインスタンスのアー キテクチャ
サーバインスタンス単位,もしくはクラスタ構成単位に「図6: インスタンス毎の設定項目」に示す項目の設定が可能です.
図 6:インスタンス毎の設定項目
GlassFish ドメイン管理(作成、削除、起動、停止)
ドメインの作成
ドメインを作 成するためには create-domain コマンドを 実行して作成します.下記にプロファイルごとのドメイン作成方法を示します.
開発者 用プロファイルを使用したドメインの作成方法
デフォルトで 作成されるドメイン(domain1)以外に開発者用プロファイ ルを利用した新規ドメイン(devDomain)を作成する方法を下記 に示します.
dashost > asadmin create-domain –profile developer –adminport 14848 –instanceport 10080 –savemasterpassword=true –savelogin=true devDomain Admin のポート 14848 を使用しています。 HTTP Instance のポート 10080 を使用しています。 JMS のデフォルトポート 7676 を使用しています。 IIOP のデフォルトポート 3700 を使用しています。 HTTP_SSL のデフォルトポート 8181 を使用しています。 IIOP_SSL のデフォルトポート 3820 を使用しています。 IIOP_MUTUALAUTH のデフォルトポート 3920 を使用しています。 JMX_ADMIN のデフォルトポート 8686 を使用しています。 コマンド行または環境で の指定どおりにプロファイル developer を使用してドメインを作成しています。 指定されたロケール [ja_JP] のファイルが [/sun/glassfish-v2.1.1/lib/install/templates/locales/ja_JP/index.html] に見つかりませんでした。デフォルト (en_US) の index.html を使用します。 使用するセキュリティーストア: JKS ドメイン devDomain が作成されました。 このドメイン [devDomain] の管理ユーザー名 [devAdmin] に関連するログイン情報が [/export/home/appserv/.asadminpass] に正常に格納されました。 このファイルが保護されたままであることを確認します。このファイルに格納された情報 は、このドメインを管理するために asadmin コマンドによって使用されます dashost > cat .asadminpass # Do not edit this file by hand. Use “asadmin login” command instead. asadmin://devAdmin@localhost:14848 YWRtaW5hZG1pbg== |
クラスタプロファイルを使用したドメインの作成方法
クラスタプロファイルを使用したドメインの作成方法を下記に示します.下記の例では,ベースとなるポート番号(portbase)を指定して実行します.このオプションは 指定したポート番号を基に自動的に各種ポート番号を割り当てドメインを作成します.ポート番号の把握が容易になるため,複数ドメインを構築する場合などに 適しています.
dashost > asadmin create-domain –user clusterAdmin –profile cluster –portbase 5000 –savemasterpassword=true –savelogin=true clusterDomain (省略) ドメイン clusterDomain が作成されました。 |
上記はいずれも —savemasterpassword,–savelogin を有効にして設定を行いました.これらのオプションを指定してドメインを作成すると, 管理者のパスワード,管理者のパスワードがローカルファイルシステム(.asadminpass/master-password)に保存され,次回コマン ド実行時に管理者パスワードの入力を省略できます。一方 –savemasterpassword,–savelogin を指定せずに作成したドメインは asadmin コマンドの実行時に毎回管理者パスワードを問い合わせされます.
不正使用を防ぎたい場合は,毎回パスワードの入力を求めるように–savemasterpassword,–saveloginの 設定を無効にし,環境変数も設定しないようにしてください.
ドメインの一覧表示
作成されているドメインの一覧を表示するためにはlist-domainsコ マンドを実行します.コマンドを実行すると一覧表示以外にドメインの稼働状態も確認できます.
dashost > asadmin list-domains devDomain 実行していません clusterDomain 実行しています コマンド list-domains は正常に実行されました。 |
ドメインとドメイン管理サーバインスタンスの起動
ドメイン管理サーバを起動するためには,start-domainコマンドを実行します.
dashost > asadmin start-domain clusterDomain ドメイン clusterDomain を起動しています。お待ちください。 デフォルトのログの場所は /export/home/appserv/domains/clusterDomain/logs/server.log です。 出力を /export/home/appserv/domains/clusterDomain/logs/server.log にリダイレクトしています ドメイン clusterDomain が起動しました。 ドメイン [clusterDomain] はその設定で [Sun GlassFish Enterprise Server v2.1.1 ((v2.1 Patch06)(9.1_02 Patch12)) (build b31g-fcs)] を実行しています。ログは [/export/home/appserv/domains] にあります。 管理コンソールは [http://localhost:5048] で使用できます。 “asadmin” コマンドにも同じポート [5048] を使用します。 ユーザーの Web アプリケーションは次の URL で使用できます: [http://localhost:5080 https://localhost:5081 ]。 次の web-contexts を使用できます: [/web1 /__wstx-services ]。 標準の JMX クライアント (JConsole など) はドメイン管理のために JMXServiceURL: [service:jmx:rmi:///jndi/rmi://dashost:5086/jmxrmi] に接続できます。 ドメインは少なくとも次のポートで接続を待機しています: [5080 5081 5048 5037 5038 5039 5086 ]。 ドメインはアプリケーションサーバークラスタおよびその他のスタンドアロンインスタン スをサポートします。 |
ドメインとドメイン管理サーバインスタンスの停止
ドメイン管理サーバを停止するためには,stop-domainコマンドを実行します.
dashost > asadmin stop-domain clusterDomain ドメイン clusterDomain が停止しました |
開発者プロファイルを使用して作成したドメインの場合,管理コンソールの左ペインから「アプリケーションサーバ」を選択し右ペインの「一般」タブか ら「インスタンスの停止」ボタンを押すことによってドメイン管理サーバのインスタンスを停止する事ができます.
図 7:開発者プロファイルを利用 したドメイン管理サーバの停止方法
クラスタプロファイルを使用して作成したドメインの場合,管理コンソールから左ペインの「スタンドアロンインスタンス」を選択し右ペインの「一般」 タブから「インスタンスの停止」ボタンを押すことによってドメイン管理サーバのインスタンスを停止する事ができます.
図 8:クラスタプロファイルを利 用したドメイン管理サーバの停止方法
クラスタプロファイルへの変更方法
開発者プロファイルで作成したドメインをクラスタプロファイルに変更することができます.クラスタプロファイルへの変更は、asadminコマンドは利用できず,GUIの管理コンソールを使用した場合のみ可能です.
クラスタプロファイルへ変更するためには,管理コンソールの左ペインから「アプリケーションサーバ」を選択し右ペインの「一般」タブから「クラスタ サポートを追加…」ボタンを押すことによってクラスタ 構成を組むことのできるクラスタプロファイルへ変更できます.
図 9:クラスタプロファイルへの 変更方法
ドメインの削除
ドメインを削除する前に,ドメインが管理する全てのノードエージェント,全てのインスタンス,全てのアプリケーションが停止/削除されていることを確認して下さい.ドメイン上の各種リ ソースが残っている場合,削除に失敗します.
ドメインを削除するためには,delete-domainコマンドを実行します.
dashost > asadmin delete-domain devDomai |
GlassFish ドメインとドメイン管理サーバ
ドメインとは
「ドメイン」とは,アプリケーションサーバの管理を行う上で必要なプロセスや,設定情報等をグループ化した管理用の構成単位です. ドメインは「ドメイン管理サーバ」,「サーバインスタンス」,「ノードエージェント」,「各種リソース(JDBC, JMS, JNDI)」等のさまざまなコンポー ネントや設定情報から構成されています.GlassFishをインストールすると, デフォルトで一つのドメイン(domain1)を生成しますが,必要に応 じて複数のドメインを作成することができます.管理を行うためには,サーバ管理者は,管理者ユーザ名,管理者パスワード,証明書データベースの管理用パス ワードを入力したのち管理を行います.複数のドメインを作成する場合,それぞれのドメインに対して個別に管理者ユーザ名,管理者パスワード,認証用データ ベース管理用パスワードを設定する必要があります.
複数のドメインの作成は,ASP (Application Service Provide) サービスの提供や SaaS(Software as a Service), またクラウドといったサービスにおいて,サービス提供単位,組織単位毎に独立して管理を行いたい場合等に適しています.各ドメイン間を独立して管理でき各 種設定情報はドメイン間では共有されないためこのような環境で安全に利用できます。
図 1:複数ドメインの構成例
補足:GlassFish v2.1 では 単一ドメインにおいて,単一のサーバ管理者が必要でしたが,GlassFish v3で は単一ドメインに対して,複数の管理者を設定できるようになります.これにより各管理者に対してあらかじめ権限を設定しておく事で複数の管理者で安心して 管理ができるようになります. |
ドメイン管理サーバ
ドメイン管理サーバは,ドメインを管理するための管理機能アプリケーションを含んだ,Java EE 5仕 様完全準拠のサーバインスタンス(※1)です.このドメイン管理サーバは,GlassFishのインストール時に作成される唯一のサー バインスタンスで,Java EEアプリケーションを配備して 稼働させる事もできるため,デフォルトサーバと呼ぶこともあります.通常開発時はこのデフォルトサーバのインスタンスに対してアプリケーションを配備した り,デバッグ等を行います.また本番環境において,複数のサーバインスタンスでサービスを提供している場合,一度このデフォルトサーバに対してアプリケー ションを配備し,動作確認後問題がない場合に本番環境を有効にするといった運用にも使うことができます(※2).
このドメイン管理サーバは,サーバ管理者の認証を行った後,ドメイン内のすべての管理,たとえばアプリケーションの配備やリソース設定,サーバイン スタンスの起動/停止等といった管理機能を提供します.
また,物理的に異なるハードウェア上のリソースも管理できます.
各ドメインは必ず一つのドメイン管理サーバのインスタンスを持ち,各ドメイン管理サーバには任意のネットワークポート番号を設定します.基本的に(※3)全ての管理操作はドメイン管理サーバが稼働している状態で行 いますので,ドメイン管理サーバが稼働していない状態では各種設定変更を行うことはできません.
※1 サーバインスタンスの詳細は別途紹介します.
※2 配備済みのアプリケーション設定で「ターゲットの管理」から利用可能 対象のインスタンス/クラスタを設定できます.
※3 一部の管理操作(インスタンスの起動,停止等)はドメイン管理サーバ が起動していない状態でも実行できます.

開発者ドメイン
図 2:開発時におけるドメインと ドメイン管理サーバの構成
サーバ管理者がドメインの管理を行うために,GlassFishで はいくつかの管理ツールを容易しています。代表的な管理操作はコマンドラインツール,もしくはWebベー スのGUI管理コンソールを使用して行います. また,サーバ管理者が独自に管理機能を拡張したい場合,AMX (AppServer Management Extensions)(※4)と呼ぶJMX MBeansベー スの管理拡張用APIを提供していますので,AMX APIを実装した独自管理機能を通じて管理すること もできます.
※4 AMX (Appserver Management Extensions)
https://glassfish.dev.java.net/javaee5/amx/
#asadmin help #asadmin command_name [–help | ?] |
asadminで指定可能なコマンド一覧はhelpコマンドを実行することで確認できます.また、各種 コマンドの引数の詳細は,コマンド入力後 –help を付加して実行する事で確認で きます。
図 3:管理コンソールの表示例
ドメイン管理サーバ導入の利点は,セキュアな環境を構築したい場合に便利です.たとえば,ドメインを管理するための管理サービスとエンドユーザに対 して提供するサービスを独立して運用/管理ができるため,安心して管理を行うこ とができるようになります.
図 4:セキュアなサーバ管理が可 能なドメイン構成例
GlassFish プロファイル
今日は GlassFish 管理の基本概念について紹介します.まず,GlassFishを管理する上で,プロファイルと呼ばれる種類が存在する事を理解してください。また選択するプロファイルに応じて管理できる内容が異なることにも注意してください.GlassFish v2.x で提供される各プロファイルの差異を「表1:各プロファイルで使用できる機能」に記載します.種類としては「開発者プロファイル」,「クラスタプロファイル」,「エンタープライズプロファイル」の3種類が存在しています.この内で「エンタープライズプロファイル」は,オープンソースコミュニティ上のサイトでは提供されず,Sunから提供される製品「Sun GlassFish Enterprise Server v2.1.1 with HADB」を入手した場合のみ利用可能です.この製品以外は,「開発者プロファイル」もしくは「クラスタプロファイル」の何れかを利用する事ができます.たとえばインストール後も必要に応じて,「開発者プロファイル」から「クラスタプロファイル」へアップグレードすることも可能です.
製品名/機能差異 | 開発者プロファイル | クラスタプロファイル | エンタープライズプロファイル |
セキュリティストア | JKS(Java Key Store) 証明書データベース:keystore.jks,cacerts.jks 証明書データベースの管理にkeytoolを使用 |
JKS(Java Key Store) 証明書(鍵)データベース:keystore.jks,cacerts.jks 証明書データベースの管理にkeytoolを使用 |
NSS
(Network Security Services) |
高速起動 | 可能 | 不可 | 不可 |
クラスタ化 | 不可 | 可能 | 可能 |
セキュリティマネージャ | 無効 | 有効 | 有効 |
セッションレプリケーション | 不可 | インメモリレプリケーション | HADB |
負荷分散 | 不可 | 可能 | 可能 |
ノードエージェント | 不可 | 可能 | 可能 |
オープンソース 版の入手先 | https://glassfish.dev.java.net/
GlassFish v2.1.1 設定時setup.xmlを使用 |
https://glassfish.dev.java.net/
GlassFish v2.1.1 設定時setup-cluster.xmlを使用 |
入手不可(商用版のみ) |
製品版の入手先 | http://www.sun.com/appserver
Sun GlassFish Enterprise Server v2.1.1 |
http://www.sun.com/appserver
Sun GlassFish Enterprise Server v2.1.1 |
http://www.sun.com/appserver
Sun GlassFish Enterprise Server v2.1.1 with HADB |
表 1:各プロファイルで使用できる機能
システムを構築する環境で,どのプロファイルを選択すればよいかは下記の基準に従って選択して下さい.
- 開発者プロファイル:このプロファイルは開発環境に適しています.再起動等が頻繁に発生する開発環境においては高速起動が有効になっていますので統合開発環境との連携に有効です.
- クラスタプロファイル:このプロフィルは複数台のハードウェアでサービスを提供する,クラスタ環境の構築時に有効です.セッション高可用性の実現にはインメモリレプリケーションを使用するため,HADBの利用に比べパフォーマンスがよく,かんたんにクラスタ環境の構築,高可用性環境を構築できます.
- エンタープライズプロファイル:ミッションクリティカルな環境においては,HADBは最適です.HADBは99.999%の高可用性を実現するために専用のデータベース内にセッション情報を格納します.HADB内で冗長構成が取られているため,インメモリレプリケーションの構成に比べより安心して利用することができます.
GlassFish v3.x に関する補足:
GlassFIsh v3 からは上記のプロファイルの概念が若干変わってきます.GlassFish v3 では Java EE 6 で提供される Web Profile と Enterprise Platform 版のいずれかを入手することができます.GlassFish v2.1 でいう所のクラスタ機能は GlassFish v3.x の最初のリリースである GlassFish v3.0 では提供されず、GlassFish v3.1 以降で利用可能になる予定です.Web Profile, Enterprise Platform で提供される機能一覧を下記に示します.
Java EE Standard | Java Specification Request (JSR) | Sun GlassFish Enterprise Server v3 Full Platform Profile | Sun GlassFish Enterprise Server v3 Web Profile |
---|---|---|---|
Java Platform, Enterprise Edition 6 | JSR 316 | 可能 | 可能 |
Java Servlet Technology 3.0 | JSR 315 | 可能 | 可能 |
JavaServer Pages 2.2 | JSR 245 | 可能 | 可能 |
Expression Language 2.2 | JSR 245 | 可能 | 可能 |
Debugging Support for Other Languages 1.0 | JSR 45 | 可能 | 可能 |
Standard Tag Library for JavaServer Pages 1.2 | JSR 52 | 可能 | 可能 |
JavaServer Faces 2.0 | JSR 314 | 可能 | 可能 |
Common Annotations for the Java Platform 1.1 | JSR 250 | 可能 | 可能 |
Java Transaction API 1.1 | JSR 907 | 可能 | 可能 |
Java Persistence API 2.0 | JSR 317 | 可能 | 可能 |
Enterprise JavaBeans 3.1 Lite | JSR 318 | 可能 | 可能 |
Managed Beans 1.0 | JSR 316 | 可能 | 可能 |
Interceptors 1.1 | JSR 318 | 可能 | 可能 |
Dependency Injection for Java 1.0 | JSR 330 | 可能 | 可能 |
Enterprise JavaBeans 3.1 Full API | JSR 318 | 可能 | 可能 |
Contexts and Dependency Injection for Java EE 1.0 | JSR 299 | 可能 | 可能 |
Java API for RESTful Web Service (JAX-RS) 1.1 | JSR 311 | 可能 | 可能 |
Bean Validation 1.0 | JSR 303 | 可能 | 可能 |
Java EE Connector Architecture 1.6 | JSR 322 | 可能 | 不可 |
Java API for XML-Based Web Services (JAX-WS) 2.2 | JSR 224 | 可能 | 不可 |
Java Architecture for XML Binding (JAXB) 2.2 | JSR 222 | 可能 | 不可 |
Implementing Enterprise Web Services 1.3 | JSR 109 | 可能 | 不可 |
Web Services Metadata for the Java Platform 2.1 | JSR 181 | 可能 | 不可 |
Java Message Service API 1.1 | JSR 914 | 可能 | 不可 |
JavaMail 1.4 | JSR 919 | 可能 | 不可 |
Java Authorization Contract for Containers 1.4 | JSR 115 | 可能 | 不可 |
Java Authentication Service Provider Interface for Containers 1.1 | JSR 196 | 可能 | 不可 |
Java EE Application Deployment 1.2 | JSR 88 | 可能 | 不可 |
J2EE Management 1.1 | JSR 77 | 可能 | 不可 |
Java API for XML-Based Remote Procedure Calls (JAX-RPC) 1.1 | JSR 101 | 可能 | 不可 |
Java API for XML-Based Registries (JAXR) 1.0 | JSR 93 | 可能 | 不可 |