2009年7月24日 (金)

JBoss5.xでのHibernate deploy設定について

一つ前の記事で JBoss5.x系でHibernateのdeployの扱い・設定が変わったことにふれました。
参考:http://www.jboss.org/community/wiki/JBossHibernate3

で肝心の設定どうやるの??
というときにドキュメントが見つからない!!
JBossHibernate3 か JBossAS5のドキュメントのどこかにはありそうな気もします。
が見つからないものはしょうがないので感でやってみました。

こんな感じ?

<hibernate-configuration xmlns="urn:jboss:hibernate-deployer:1.0">
    <session-factory
        name="java:/hibernate/adminuser"
        bean="jboss.test.har:service=Hibernate">
        <property name="datasourceName">java:/jdbc/adminuser</property>
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>

       <!--↓ココがかんでたしたとこ-->
   <property name="show_sql">false</property>

      <depends>jboss:service=Naming</depends>
      <depends>jboss:service=TransactionManager</depends>
    </session-factory>
</hibernate-configuration>

デプロイ結果

java.lang.RuntimeException: Error configuring property: show_sql for jboss.test.har:service=Hibernate
    at org.jboss.kernel.plugins.dependency.ConfigureAction.dispatchSetProperty(ConfigureAction.java:112)
    at org.jboss.kernel.plugins.dependency.ConfigureAction.setAttributes(ConfigureAction.java:85)
    at org.jboss.kernel.plugins.dependency.ConfigureAction.installActionInternal(ConfigureAction.java:44)
    at org.jboss.kernel.plugins.dependency.InstallsAwareAction.installAction(InstallsAwareAction.java:54)
    at org.jboss.kernel.plugins.dependency.InstallsAwareAction.installAction(InstallsAwareAction.java:42)
    at org.jboss.dependency.plugins.action.SimpleControllerContextAction.simpleInstallAction(SimpleControllerContextAction.java:62)
    at org.jboss.dependency.plugins.action.AccessControllerContextAction.install(AccessControllerContextAction.java:71)
    at org.jboss.dependency.plugins.AbstractControllerContextActions.install(AbstractControllerContextActions.java:51)
    at org.jboss.dependency.plugins.AbstractControllerContext.install(AbstractControllerContext.java:348)
    at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:1631)
    at org.jboss.dependency.plugins.AbstractController.incrementState(AbstractController.java:934)
    at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:1082)
    at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:984)
    at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:774)
    at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:540)
    at org.jboss.deployers.vfs.deployer.kernel.BeanMetaDataDeployer.deploy(BeanMetaDataDeployer.java:121)
    at org.jboss.deployers.vfs.deployer.kernel.BeanMetaDataDeployer.deploy(BeanMetaDataDeployer.java:51)
    at org.jboss.deployers.spi.deployer.helpers.AbstractSimpleRealDeployer.internalDeploy(AbstractSimpleRealDeployer.java:62)
    at org.jboss.deployers.spi.deployer.helpers.AbstractRealDeployer.deploy(AbstractRealDeployer.java:50)
    at org.jboss.deployers.plugins.deployers.DeployerWrapper.deploy(DeployerWrapper.java:171)
    at org.jboss.deployers.plugins.deployers.DeployersImpl.doDeploy(DeployersImpl.java:1439)
    at org.jboss.deployers.plugins.deployers.DeployersImpl.doInstallParentFirst(DeployersImpl.java:1157)
    at org.jboss.deployers.plugins.deployers.DeployersImpl.doInstallParentFirst(DeployersImpl.java:1178)
    at org.jboss.deployers.plugins.deployers.DeployersImpl.doInstallParentFirst(DeployersImpl.java:1210)
    at org.jboss.deployers.plugins.deployers.DeployersImpl.install(DeployersImpl.java:1098)
    at org.jboss.dependency.plugins.AbstractControllerContext.install(AbstractControllerContext.java:348)
    at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:1631)
    at org.jboss.dependency.plugins.AbstractController.incrementState(AbstractController.java:934)
    at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:1082)
    at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:984)
    at org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:822)
    at org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:553)
    at org.jboss.deployers.plugins.deployers.DeployersImpl.process(DeployersImpl.java:781)
    at org.jboss.deployers.plugins.main.MainDeployerImpl.process(MainDeployerImpl.java:702)
    at org.jboss.system.server.profileservice.repository.MainDeployerAdapter.process(MainDeployerAdapter.java:117)
    at org.jboss.system.server.profileservice.hotdeploy.HDScanner.scan(HDScanner.java:362)
    at org.jboss.system.server.profileservice.hotdeploy.HDScanner.run(HDScanner.java:255)
    at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
    at java.util.concurrent.FutureTask$Sync.innerRunAndReset(Unknown Source)
    at java.util.concurrent.FutureTask.runAndReset(Unknown Source)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$101(Unknown Source)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.runPeriodic(Unknown Source)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.IllegalArgumentException: No such property hibernate for bean org.jboss.hibernate.jmx.Hibernate available
[statisticsServiceName, beanName, defaultSchema, defaultCatalog, sessionFactoryName, querySubstitutions, secondLevelCacheEnabled, password, version, statGenerationEnabled, maxFetchDepth, username, useStructuredCacheEntriesEnabled, datasourceName, dirty, streamsForBinaryEnabled, getGeneratedKeysEnabled, hbm2ddlAuto, minimalPutsEnabled, instance, jdbcBatchSize, jdbcScrollableResultSetEnabled, cacheRegionFactoryClass, dialect, scanForMappingsEnabled, runningSince, cacheRegionPrefix, class, cacheProviderClass, sessionFactoryRunning, batchVersionedDataEnabled, harUrl, queryCacheEnabled, sessionFactoryInterceptor, deployedCacheManagerJndiName, showSqlEnabled, reflectionOptimizationEnabled, jdbcFetchSize, listenerInjector, sqlCommentsEnabled, deployedCacheJndiName, controller]
    at org.jboss.beans.info.plugins.AbstractBeanInfo.getProperty(AbstractBeanInfo.java:147)
    at org.jboss.beans.info.plugins.BeanInfoUtil.getNestedPropertyInfo(BeanInfoUtil.java:111)
    at org.jboss.beans.info.plugins.BeanInfoUtil.getPropertyInfo(BeanInfoUtil.java:197)
    at org.jboss.kernel.plugins.dependency.PropertyDispatchWrapper.execute(PropertyDispatchWrapper.java:77)
    at org.jboss.kernel.plugins.dependency.ExecutionWrapper.execute(ExecutionWrapper.java:47)
    at org.jboss.kernel.plugins.dependency.KernelControllerContextAction.dispatchExecutionWrapper(KernelControllerContextAction.java:109)
    at org.jboss.kernel.plugins.dependency.ConfigureAction.dispatchSetProperty(ConfigureAction.java:107)
    ... 45 more

まあでもヒントをエラーメッセージ中から発見しました。
オレンジの部分見てください!!
この中に該当しないと指摘されています。
逆にこの中に該当すればよいわけです。

抜き出してみました

statisticsServiceName,
beanName,
defaultSchema,
defaultCatalog,
sessionFactoryName,
querySubstitutions,
secondLevelCacheEnabled,
password,
version,
statGenerationEnabled,
maxFetchDepth,
username,
useStructuredCacheEntriesEnabled,
datasourceName,
dirty,
streamsForBinaryEnabled,
getGeneratedKeysEnabled,
hbm2ddlAuto,
minimalPutsEnabled,
instance,
jdbcBatchSize,
jdbcScrollableResultSetEnabled,
cacheRegionFactoryClass,
dialect,
scanForMappingsEnabled,
runningSince,
cacheRegionPrefix,
class,
cacheProviderClass,
sessionFactoryRunning,
batchVersionedDataEnabled,
harUrl,
queryCacheEnabled,
sessionFactoryInterceptor,
deployedCacheManagerJndiName,
showSqlEnabled,
reflectionOptimizationEnabled,
jdbcFetchSize,
listenerInjector,
sqlCommentsEnabled,
deployedCacheJndiName,
controller

あとはHibernateの設定項目と照らし合わせて設定すればよい感じですね
参考:http://www.redhat.com/docs/manuals/jboss/jboss-eap-4.2/ja_JP/html/Hibernate_Reference_Guide/Configuration-Optional_configuration_properties.html

<hibernate-configuration xmlns="urn:jboss:hibernate-deployer:1.0">

    <!-- a SessionFactory instance listed as /jndi/name -->
    <session-factory
        name="java:/hibernate/adminuser"
        bean="jboss.test.har:service=Hibernate">

        <!-- properties -->
        <property name="datasourceName">java:/jdbc/adminuser</property>
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
        <property name="showSqlEnabled">false</property>
        <property name="queryCacheEnabled">true</property>
        <property name="jdbcBatchSize">50</property>
       
      <depends>jboss:service=Naming</depends>
      <depends>jboss:service=TransactionManager</depends>

    </session-factory>

</hibernate-configuration>

こんな感じ?
…ココまで書いて気がついた(--;
JBoss4.x系の設定項目の頭を小文字にしただけだ!!
まぁよしとしましょう

2009-07-24 13:27:50,931 INFO  [org.jboss.web.tomcat.service.deployers.TomcatDeployment] (HDScanner) undeploy, ctxPath=/admin
2009-07-24 13:27:51,134 INFO  [org.jboss.hibernate.deployers.HibernateDeployer] (HDScanner) Created Hibernate bean: AbstractBeanMetaData@f185b0{name=jboss.test.har:service=Hibernate bean=org.jboss.hibernate.jmx.Hibernate properties=[dialect, jdbcBatchSize, datasourceName, showSqlEnabled, queryCacheEnabled, sessionFactoryName] constructor=AbstractConstructorMetaData@80188f{parameters=[org.jboss.virtual.VirtualFile]} autowireCandidate=true depends=[jboss:service=Naming, jboss:service=TransactionManager]}
2009-07-24 13:27:51,165 INFO  [org.hibernate.cfg.HbmBinder] (HDScanner) Mapping class: neoplus.admin.data.RoleData -> role_data
2009-07-24 13:27:51,165 INFO  [org.hibernate.cfg.HbmBinder] (HDScanner) Mapping class: neoplus.admin.data.UserData -> user_data
2009-07-24 13:27:51,165 INFO  [org.hibernate.cfg.HbmBinder] (HDScanner) Mapping class: neoplus.admin.data.RoleMap -> role_map
2009-07-24 13:27:51,165 INFO  [org.hibernate.cfg.HbmBinder] (HDScanner) Mapping collection: neoplus.admin.data.UserData.roleMaps -> role_map
2009-07-24 13:27:51,165 INFO  [org.hibernate.util.NamingHelper] (HDScanner) JNDI InitialContext properties:{}
2009-07-24 13:27:51,180 INFO  [org.hibernate.connection.DatasourceConnectionProvider] (HDScanner) Using datasource: java:/jdbc/adminuser
2009-07-24 13:27:51,180 INFO  [org.hibernate.cfg.SettingsFactory] (HDScanner) RDBMS: MySQL, version: 5.1.34-community
2009-07-24 13:27:51,180 INFO  [org.hibernate.cfg.SettingsFactory] (HDScanner) JDBC driver: MySQL-AB JDBC Driver, version: mysql-connector-java-5.0.0-beta ( $Date: 2005-11-17 16:14:47 +0100 (Thu, 17 Nov 2005) $, $Revision$ )
2009-07-24 13:27:51,180 INFO  [org.hibernate.dialect.Dialect] (HDScanner) Using dialect: org.hibernate.dialect.MySQLDialect
2009-07-24 13:27:51,180 INFO  [org.hibernate.transaction.TransactionFactoryFactory] (HDScanner) Transaction strategy: org.hibernate.transaction.JTATransactionFactory
2009-07-24 13:27:51,180 INFO  [org.hibernate.util.NamingHelper] (HDScanner) JNDI InitialContext properties:{}
2009-07-24 13:27:51,180 INFO  [org.hibernate.transaction.TransactionManagerLookupFactory] (HDScanner) instantiating TransactionManagerLookup: org.hibernate.transaction.JBossTransactionManagerLookup
2009-07-24 13:27:51,180 INFO  [org.hibernate.transaction.TransactionManagerLookupFactory] (HDScanner) instantiated TransactionManagerLookup
2009-07-24 13:27:51,180 INFO  [org.hibernate.transaction.TransactionManagerLookupFactory] (HDScanner) instantiating TransactionManagerLookup: org.hibernate.transaction.JBossTransactionManagerLookup
2009-07-24 13:27:51,180 INFO  [org.hibernate.transaction.TransactionManagerLookupFactory] (HDScanner) instantiated TransactionManagerLookup
2009-07-24 13:27:51,180 INFO  [org.hibernate.cfg.SettingsFactory] (HDScanner) Automatic flush during beforeCompletion(): enabled
2009-07-24 13:27:51,180 INFO  [org.hibernate.cfg.SettingsFactory] (HDScanner) Automatic session close at end of transaction: enabled
2009-07-24 13:27:51,180 INFO  [org.hibernate.cfg.SettingsFactory] (HDScanner) JDBC batch size: 50
2009-07-24 13:27:51,180 INFO  [org.hibernate.cfg.SettingsFactory] (HDScanner) JDBC batch updates for versioned data: disabled
2009-07-24 13:27:51,180 INFO  [org.hibernate.cfg.SettingsFactory] (HDScanner) Scrollable result sets: enabled
2009-07-24 13:27:51,180 INFO  [org.hibernate.cfg.SettingsFactory] (HDScanner) JDBC3 getGeneratedKeys(): enabled
2009-07-24 13:27:51,180 INFO  [org.hibernate.cfg.SettingsFactory] (HDScanner) Connection release mode: after_statement
2009-07-24 13:27:51,180 INFO  [org.hibernate.cfg.SettingsFactory] (HDScanner) Maximum outer join fetch depth: 2
2009-07-24 13:27:51,180 INFO  [org.hibernate.cfg.SettingsFactory] (HDScanner) Default batch fetch size: 1
2009-07-24 13:27:51,180 INFO  [org.hibernate.cfg.SettingsFactory] (HDScanner) Generate SQL with comments: disabled
2009-07-24 13:27:51,180 INFO  [org.hibernate.cfg.SettingsFactory] (HDScanner) Order SQL updates by primary key: disabled
2009-07-24 13:27:51,180 INFO  [org.hibernate.cfg.SettingsFactory] (HDScanner) Order SQL inserts for batching: disabled
2009-07-24 13:27:51,180 INFO  [org.hibernate.cfg.SettingsFactory] (HDScanner) Query translator: org.hibernate.hql.ast.ASTQueryTranslatorFactory
2009-07-24 13:27:51,180 INFO  [org.hibernate.hql.ast.ASTQueryTranslatorFactory] (HDScanner) Using ASTQueryTranslatorFactory
2009-07-24 13:27:51,180 INFO  [org.hibernate.cfg.SettingsFactory] (HDScanner) Query language substitutions: {}
2009-07-24 13:27:51,180 INFO  [org.hibernate.cfg.SettingsFactory] (HDScanner) JPA-QL strict compliance: disabled
2009-07-24 13:27:51,180 INFO  [org.hibernate.cfg.SettingsFactory] (HDScanner) Second-level cache: enabled
2009-07-24 13:27:51,180 INFO  [org.hibernate.cfg.SettingsFactory] (HDScanner) Query cache: enabled
2009-07-24 13:27:51,180 INFO  [org.hibernate.cfg.SettingsFactory] (HDScanner) Cache region factory : org.hibernate.cache.impl.bridge.RegionFactoryCacheProviderBridge
2009-07-24 13:27:51,180 INFO  [org.hibernate.cache.impl.bridge.RegionFactoryCacheProviderBridge] (HDScanner) Cache provider: org.hibernate.cache.HashtableCacheProvider
2009-07-24 13:27:51,196 INFO  [org.hibernate.cfg.SettingsFactory] (HDScanner) Optimize cache for minimal puts: disabled
2009-07-24 13:27:51,196 INFO  [org.hibernate.cfg.SettingsFactory] (HDScanner) Structured second-level cache entries: disabled
2009-07-24 13:27:51,196 INFO  [org.hibernate.cfg.SettingsFactory] (HDScanner) Query cache factory: org.hibernate.cache.StandardQueryCacheFactory
2009-07-24 13:27:51,196 INFO  [org.hibernate.cfg.SettingsFactory] (HDScanner) Statistics: disabled
2009-07-24 13:27:51,196 INFO  [org.hibernate.cfg.SettingsFactory] (HDScanner) Deleted entity synthetic identifier rollback: disabled
2009-07-24 13:27:51,196 INFO  [org.hibernate.cfg.SettingsFactory] (HDScanner) Default entity-mode: pojo
2009-07-24 13:27:51,196 INFO  [org.hibernate.cfg.SettingsFactory] (HDScanner) Named query checking : enabled
2009-07-24 13:27:51,196 INFO  [org.hibernate.impl.SessionFactoryImpl] (HDScanner) building session factory
2009-07-24 13:27:51,227 INFO  [org.hibernate.impl.SessionFactoryObjectFactory] (HDScanner) Not binding factory to JNDI, no JNDI name configured
2009-07-24 13:27:51,227 INFO  [org.hibernate.util.NamingHelper] (HDScanner) JNDI InitialContext properties:{}
2009-07-24 13:27:51,227 INFO  [org.hibernate.cache.UpdateTimestampsCache] (HDScanner) starting update timestamps cache at region: org.hibernate.cache.UpdateTimestampsCache
2009-07-24 13:27:51,227 INFO  [org.hibernate.cache.StandardQueryCache] (HDScanner) starting query cache at region: org.hibernate.cache.StandardQueryCache
2009-07-24 13:27:51,227 INFO  [org.jboss.hibernate.jmx.Hibernate] (HDScanner) SessionFactory successfully built and bound into JNDI [java:/hibernate/adminuser]
2009-07-24 13:27:51,305 INFO  [org.jboss.web.tomcat.service.deployers.TomcatDeployment] (HDScanner) deploy, ctxPath=/admin
2009-07-24 13:27:51,368 WARN  [org.jboss.web.tomcat.service.deployers.TomcatDeployment] (HDScanner) Failed to setup clustering, clustering disabled. NoClassDefFoundError: org/jboss/cache/pojo/jmx/PojoCacheJmxWrapperMBean

ぶじデプロイできました

| | コメント (0) | トラックバック (0)

2009年7月22日 (水)

JBoss5でhar設定が大幅に変わった件

以前この記事は「JBossでharがサポートされていないもよう」としていたのですが
完全に誤報だったので修正。

JBoss 5.x でharの扱いが変わりました。
以前までHibernate Arcaive (HAR)というあつかいでしたが
JBoss5.xからは Hibernate deployとなり
Hibernateの特殊なアーカイブではなくHibernateをJMX(JBossXB?)で
リソースとしてdeployできるというような扱いになったようです。
deployerもHARDeployerからhibernate deployer jboss beansとなっています。

設定ファイルも
[hibernate-service.xml]→[xxxxxxxxx-hibernate.xml](xxは任意)とかわり
フォーマットも変わっています。

詳しくはコチラをご覧ください
http://www.jboss.org/community/wiki/JBossHibernate3

JBoss5でharがさぽーとされていないもよう

JBoss5にharがサポートされていない様子です。
ドキュメントからharの記述が消えてしまいました。
…EJB3を使えて言うことでしょうか?

自分はどうも

呼び出しクラス → ステートレスBean  → エンティティBean

の構造になじめません。
少人数の開発では分業メリットはでないしめんどくさいんですよね。
どうしようか??
フレームワークの利用を検討中です。

| | コメント (0) | トラックバック (0)

2007年10月 2日 (火)

JBossのログ(searver.log)肥大を止める

HibernateのHARアーカイブをJBossで使用しているとともかくログの肥大化に悩まされます。
単純に標準出力に出ているのかとあきらめていましたが実はこれがlog4jで
制御されていることに気がついたのでこれを利用していろんなログを黙らせて見ました。

/jboss/searver/default/conf/log4j.xml
/jboss/searver/default/conf/jboss-log4j.xml (4.2.X系)

Hibernateが五月蝿いと感じているあなたは
上記ログ制御ファイルに以下の文をぶち込みます。
   <category name="org.hibernate">
      <priority value="INFO"/>
   </category>

これでもうるさいと思う人はWARNでもいいんじゃないでしょうか?
他にもJakarta系はログが五月蝿い…もとい丁寧なログが出力されています。

HttpClientを使っていればこれも有効でしょう
   <category name="httpclient.wire">
      <priority value="INFO"/>
   </category>

EHCacheをHibernateで使っている方はこれも有効
   <category name="net.sf.ehcache">
      <priority value="INFO"/>
   </category>

自分はこんなもんでだいぶスッキリしました。
アクセスログは別に取っているんでついでにwwwのカテゴリーの出力を
黙らせたりもしましたが…

詳しくこのあたりを理解したい人はLOG4Jのドキュメントを読んでください。
LOG4Jの解説は既に優秀な先人がいくつもレポートしているのでココで取り上げる
予定はありません。

| | コメント (0) | トラックバック (0)

2007年8月29日 (水)

JBoss 有料化へチャクチャク進行中!?

久しぶりにJBoss Application Server(以下JBoss)のセットアップをしようと
最新版のJBossを取得(DL)するためJBossサイトを訪れましたが
RedHat的有料化への地ならしが随所に見えました
JBoss有料化が既定路線化の記事を幾度か見ましたが…
時代の流れとはいえとうとう来たか(?)といった感じがします。

私が見た【地ならし】ポイント
・JBossをDLできるサイトが jboss.com ⇒ jboss.org へ
―jboss.comはサポート(ライセンス)を受けている顧客のプロダクトDLのみ
http://www.jboss.com/downloads/index
http://labs.jboss.com/projects/download/

・jboss.org がコミュニティーの名前を冠する
―コミュニティーエディション、プロダクトバージョン分離の複線か??

| | コメント (0) | トラックバック (0)

2007年8月21日 (火)

mod_jkを無視して[.cgi]を処理したがるApache

cgiを処理するservletがtomcatシリーズにはおまけでついてきている
(tomcatを内包しているJBossも)

これを利用しようとして http://hogehoge/tomcat/cgi/test.cgi
といったURLでWEBアプリケーションのCGIを設置し
Apache-mod_jk-JBoss(Tomcat)連携で
    JkMount /tomcat/cgi/* work   
と設定して http://hogehoge/tomcat/cgi/test.cgi にアクセスすると400エラーになる。
mod_jkの設定が無視されてApacheのパス内にファイルがみあたらないから400(not found)というわけだ。

Apacheがmod_jkの設定を無視するのは
AddHandler cgi-script .cgi
↑この設定がmod_jkを打ち消しているから、cgi拡張子をcgi(コモンゲートウェイ…)として扱おうとする。
このぎょうをコメントアウトするなり、Tomcat WEBアプリケーション側のcgi実行の
拡張子を変更するなりしてこの衝突は回避することができる。

| | コメント (0) | トラックバック (0)

2007年8月20日 (月)

Hibernateアーカイブ(sar)とHot deployでうまくいかなかったこと

雑記メモです以下のようなことがありました。

JBossのHibernateアーカイブ(har)を使用するとデータベースコネクションが
JBoss管理のTransactionに入ります。
同コネクションを使用してINSERTやUTDATEのSQLを直に実行しようとすると
Transactionがでしゃばってきてエラーを返します。

そこでHot deployを利用してHibernateアーカイブを削除してみました。
ところがデータベースコネクションはJBoss管理下のTransactionから抜けることがなく
SQLの更新命令はエラーのままです。

JBossを再起動すると(当然ですが)データベースコネクションはTransactionから抜けて
SQLは受け入れられるようになりました。

総括ではないですが、あるデータベースに対してJDBC(SQL)直制御+Hibernate制御
を行う場合JBossのHibernateアーカイブは不適当なようです。
(SQLでリードのみを行う場合干渉は無い、Write系で問題発生)
ちなみにアーカイブにせずにwarアーカイブ内にHibernateの制御ファイルを
埋め込むパターンではこのような干渉行為は起きませんでした。

*注 この記事の内容は各バージョンでの動作の違いなど細かい検証をしていません。
         ご自分の環境で試すことを推奨します。

| | コメント (0) | トラックバック (0)

2007年6月14日 (木)

JBoss AS 4.0.x ⇒ 4.2.0 で変ったことマトメ

JBoss AS 4.2.0をセットアップして4.0.x系と変ったなと思うところをまとめます。
公式リリースはJBoss ASをDLして解凍
/jboss(解凍ディレクトリ)/readme.html を参照してください。
ココでまとめるのはあとで迷った時のメモなので私の主観での必要最低限です。

◆起動/シャットダウン
/jboss/bin/run.sh
/jboss/bin/shutdown.sh
のスクリプトを使用して起動、シャットダウンを行っている場合通常
/jboss/bin/run.conf
にJREのパスなど設定を書き込むがこれを
shutdown.sh が読み込んでくれないバクがある(仕様変更かもしれない)
shutdown.sh の適当な位置に以下の読み込み処理を追加する。

if [ "x$RUN_CONF" = "x" ]; then
    RUN_CONF="$DIRNAME/run.conf"
fi
if [ -r "$RUN_CONF" ]; then
    . "$RUN_CONF"
fi

別の記事でも書いているがセキュリティーの観点でバインドアドレスが
127.0.0.1 になっている4.0.x系と同じにする場合起動スクリプトにオプションを入れる

/jboss/bin/run.sh -b 0.0.0.0

◆内蔵WEBサーバーの名称が変った
4.0.x系ではTomcatが用いられていたが4.2.0系では JBoss WS (Web Server)が
用いられるようになっている。
だが実際は4.0.x系もJBoss用にTomcatを改造し派生させたものであったようだから
名称が変っただけのことに思える、実際設定などもTomcatのドキュメントを参考にすると良い
名称変更にともないWEBサーバーの設定ファイルのディレクトリ名も変った。

/jboss/server/default/jbossweb-tomcat55.sar
                  
/jboss/server/default/jboss-web.deployer

| | コメント (0) | トラックバック (0)

2007年6月 8日 (金)

JBoss 4.2に外部からアクセスできない!?

いつもどおりJBossをセットアップしていたらローカル環境からは
アクセスできるけど他のPCからアクセスできない!?

も~あわてんぼうですねぇ
ちゃんと付属のreadme.html読んでますか??
JBoss4.2からセキュリティー上の観点からバインド(監視)するアドレスの
デフォルト(初期設定)が127.0.0.1(稼動PC自身)になったのです。
いままで(4.0.x系)は全てのIPアドレスをバインドしていました(設定0.0.0.0)

◆公式文書(readme.htmlより)
JBossAS now binds its services to localhost (127.0.0.1) *by default*, instead of binding to all available interfaces (0.0.0.0). This was primarily done for security reasons because of concerns of users going to production without having secured their servers properly. To enable remote access by binding JBoss services to a particular interface, simply run jboss with the -b option, but be aware you still need to secure you server properly.

となっています。
セキュリティ的にはこの状態も望ましいかもしれません。
とりあえず今までと同じように動作させたい場合 -b オプションを使って

/usr/local/jboss/bin/run.sh -b 0.0.0.0

のようにバインドするIPを通知してあげればOKです。
JBossが直接クラアントと通信しない場合(AJP[mod_jk]等を経由しApacheと連携など)
デフォルトの設定はセキュリティー的にたいへん強固です。
そのばあい8009ポートなど通信に使用するポートだけをグローバルIPで監視するように
個別に設定します。

ちなみにAJP13-mod_jkでWEBサーバーと連携している場合は
/jboss/server/default/deploy/jboss-web.deployer/server.xml

    <Connector port="8009" address="${jboss.bind.address}" protocol="AJP/1.3"
         emptySessionPath="true" enableLookups="false" redirectPort="8443" />
                             ↓    ↓    ↓
    <Connector port="8009" address="123.456.789.123" protocol="AJP/1.3"
         emptySessionPath="true" enableLookups="false" redirectPort="8443" />

上記のように設定します。
*注:JBossが稼動しているサーバーのアドレスが(123.456.789.123)のとき

ちゃんとreadmeにかいてあるのにこんなのに4時間近く使うなんてまったく(=_=;
反省します。

| | コメント (1) | トラックバック (1)

2007年4月10日 (火)

JBoss セットアップ(最低限のセキュリティ対策付き)

JBossは最初導入する時ハードルが高いなぁと思う。
あまりにも多くの機能があるからだ。
理解していない機能はセキュリティーホールになる可能性が高いので
アクティブな状態にしておきたくない。
しかし用意されている最小セット【minimal】から実用的なレベルまで
サービスを追加していくのはたいへん困難だ。

ということで私は標準的なセット【default】からセキュリティーホールになりそうなところ
をふさぐ方向でセットアップする方法をとっている。

その方法のメモ、一応実用に耐えられるレベルまでのメモに仕上げているつもり。
突っ込みや指摘大歓迎ですのでもっとセキュリティをあげた方が良いと感じた方は指摘してください。

2007/06/17追記
この記事はJBoss AS 4.0.x 系を基準にかかれています。
JBoss AS 4.2.x 系では設定ファイルが一部異なる場合があります。
4.2.x系の設定ファイル画違う場合緑色で併記します。

 


◆①jmx-consoleをベーシック認証によるパスワードアクセスにする
/jboss/server/default/deploy/jmx-console.war/WEB-INF/jboss-web.xml
security-domain のコメントアウトをはずす

<jboss-web>
   <!-- Uncomment the security-domain to enable security. You will
      need to edit the htmladaptor login configuration to setup the
      login modules used to authentication users.-->
      <security-domain>java:/jaas/jmx-console</security-domain>
</jboss-web>

/jboss/server/default/deploy/jmx-console.war/WEB-INF/web.xml
security-constraintのコメントアウトをはずす

   <!-- A security constraint that restricts access to the HTML JMX console
   to users with the role JBossAdmin. Edit the roles to what you want and
   uncomment the WEB-INF/jboss-web.xml/security-domain element to enable
   secured access to the HTML JMX console.-->
   <security-constraint>
     <web-resource-collection>
       <web-resource-name>HtmlAdaptor</web-resource-name>
       <description>An example security config that only allows users with the
         role JBossAdmin to access the HTML JMX console web application
       </description>
       <url-pattern>/*</url-pattern>
       <http-method>GET</http-method>
       <http-method>POST</http-method>
     </web-resource-collection>
     <auth-constraint>
       <role-name>JBossAdmin</role-name>
     </auth-constraint>
   </security-constraint>

◆②jmx-consoleのパスワードを変更する
4.0.x系 /jboss/server/default/conf/props/jmx-console-roles.properties
アクセスするユーザー名を登録(デフォルトは削除が望ましい)

adminuser=JBossAdmin,HttpInvoker

/jboss/server/default/conf/props/jmx-console-users.properties
パスワードを設定

adminuser=1234567890

これで http://hogehoge:8080/jmx-console/ にアクセスするためには
ベーシック認証でユーザー名adminuser パスワード1234567890でアクセスすることが必要になりました。
もちろんユーザー名とパスワードは予測不能なものに変更しましょう。

◆③ web-consoleにもパスワードを掛ける

/jboss/server/default/conf/login-config.xml
application-policy のコメントアウトをはずしてセキュリティードメインを登録する(例は横着してjmx-consoleの設定を使うように指定している)

    <!-- A template configuration for the web-console web application. This
      defaults to the UsersRolesLoginModule the same as other and should be
      changed to a stronger authentication mechanism as required.
    -->
    <application-policy name = "web-console">
       <authentication>
          <login-module code="org.jboss.security.auth.spi.UsersRolesLoginModule"
             flag = "required">
             <module-option name="usersProperties">props/jmx-console-users.properties</module-option>
             <module-option name="rolesProperties">props/jmx-console-roles.properties</module-option>
          </login-module>
       </authentication>
    </application-policy>

/jboss/server/default/deploy/management/console-mgr.sar/web-console.war/WEB-INF/jboss-web.xml
security-domainのコメントアウトをはずす

   <!-- Uncomment the security-domain to enable security. You will
   need to edit the htmladaptor login configuration to setup the
   login modules used to authentication users.-->
   <security-domain>java:/jaas/web-console</security-domain>

/jboss/server/default/deploy/management/console-mgr.sar/web-console.war/WEB-INF/web.xml
security-constraintのコメントアウトをはずす

   <!-- A security constraint that restricts access to the HTML JMX console
   to users with the role JBossAdmin. Edit the roles to what you want and
   uncomment the WEB-INF/jboss-web.xml/security-domain element to enable
   secured access to the HTML JMX console.-->

   <security-constraint>
   <web-resource-collection>
   <web-resource-name>HtmlAdaptor</web-resource-name>
   <description>An example security config that only allows users with the
   role JBossAdmin to access the HTML JMX console web application
   </description>
   <url-pattern>/*</url-pattern>
   <http-method>GET</http-method>
   <http-method>POST</http-method>
   </web-resource-collection>
   <auth-constraint>
   <role-name>JBossAdmin</role-name>
   </auth-constraint>
   </security-constraint>

これでhttp://hogehoge:8080/web-console/ にもパスワードアクセス制限がかかりました。

◆④8080ポートのスタンドアロンサービスを止める
Apache経由(mod_jk,ajp13経由)でアクセスさせるようにします。
厳密にはこのことでセキュリティレベルは上がりませんが、
設定をしない限りApache-JBossの中継は行われないため
意図しないサービスにユーザーがアクセスするのを防ぐことができます。

4.0.x系 /jboss/server/default/deploy/jbossweb-tomcat55.sar/server.xml
4.2.x系 /jboss/server/default/deploy/jboss-web.deployer/server.xml
Connectorをコメントアウト

      <!-- A HTTP/1.1 Connector on port 8080 -->
      <!--
      <Connector port="8080" address="${jboss.bind.address}"
         maxThreads="250" strategy="ms" maxHttpHeaderSize="8192"
         emptySessionPath="true"
         enableLookups="false" redirectPort="8443" acceptCount="100"
         connectionTimeout="20000" disableUploadTimeout="true"/>
      -->

◆⑤jmx-console web-consoleをSSL経由でのみアクセスを許可する
さらにSSLクライアント認証なんてしちゃうと効果が上がります。
もちろん他の一般ユーザーにアクセスさせたくないページを指定しても効果は大きいです

◇apache2.0(rpmインストール) mod_jkの場合

/etc/httpd/conf.d/ssl.conf
JkMountをVirtualHost内に追加

JkMount /jmx-console/* work
JkMount /web-console/* work

◆⑥JBossのデフォルトバーチャルホストをlocalhost以外にする
jmx-console web-consoleなどのJBossの挙動を制御できる危険な(管理するのには便利な)アプリケーションはlocalhostに登録されています。
特定のバーチャルホストでのみアクセスできたほうがセキュリティーは上がるといってよいでしょう。
<alias>でバーチャルホストの別名は登録できます。

...とりあえずこんなところでどうでしょう?
またなにか思いついたら加筆しますがとりあえずこんなところで
最低限のセキュリティ対策といえると思います。

◆(おまけ)起動方法
セットアップが終わったら起動しますね、おまけで起動方法をメモしておきます。

①、起動時の設定を /jboss/bin/run.conf に記述する
JAVA_HOMEだけ設定すればよいかな、自分の場合はHibernateを使用するので
起動オプションでPermSize関連を拡充しておきます。

JAVA_HOME="/usr/local/java/jdk5"

if [ "x$JAVA_OPTS" = "x" ]; then
   JAVA_OPTS="-Xms128m -Xmx512m  -XX:PermSize=128m -XX:MaxPermSize=256m  -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000"
fi

②、(JBoss 4.2.0 系のみ) シャットダウンスクリプトを修正
なぜか 4.2.x 系で上記設定ファイルを読み込んでくれないので
シャットダウンスクリプト /jboss/bin/shutdown.sh を修正します
適当な位置に以下の処理を追加

if [ "x$RUN_CONF" = "x" ]; then
    RUN_CONF="$DIRNAME/run.conf"
fi
if [ -r "$RUN_CONF" ]; then
    . "$RUN_CONF"
fi

③、起動コマンドを打つ

/jboss/bin/run.sh

④、シャットダウンコマンドを打つ

/jboss/bin/shutdown.sh

| | コメント (0) | トラックバック (0)

2007年1月18日 (木)

JBoss 4.0.4GAでHibernateのバージョンが上がった件

JBossをアプリケーションサーバーとしていつもどおりセットアップしていたら
Hibernateが何故か動作しない

エラーメッセージは

Exception happened while executing page: tried to access method net.sf.ehcache.CacheManager.

()V from class org.hibernate.cache.EhCacheProvider  

なかんじ

検索した結果

http://www.jboss.com/index.html?module=bb&op=viewtopic&p=3962394

JBossに同胞されているHibernateのバージョンが上がったようす(3.2)です。
それに伴い必要なjarが ehcache-1.1.jar ⇒ ehcache-1.2.3.jar となりました。
Hibernate をDLするともれなくついてきます。

http://ehcache.sourceforge.net/

http://www.hibernate.org/6.html

| | コメント (0) | トラックバック (0)

JBoss Scheduler (cronみたいな定期処理) を sar パッケージにして ear に組み込む

Cron のように定期処理が行える JBossのScheduler はたいへん便利です。
簡単に稼動中のアプリケーションと同じ環境で定期処理ができるうえに
HARアーカイブしたHibernateやEJB、Datasourceをはじめとしたリソースを
利用できます。

Cronで直接Javaプログラムを呼び出した場合、稼動中のアプリケーションの
設定が変るたびに設定の変更を迫られるかもしれませんが
Scheduler でJBoss上で定期処理を実行すれば
同じリーソースを利用できるのでそういった作業は必要なく
システムの柔軟性が高まります。

…TimerTaskは使ったことがないのでそれとの違いはわかりません

◆公式関連ドキュメント
http://docs.jboss.com/jbossas/guides/j2eeguide/r2/en/html_single/#ch10.sched
http://docs.jboss.com/jbossas/guides/j2eeguide/r2/en/html_single/#ch10.timer

今回はこのSchedulerをSARアーカイブにしてEARアーカイブにまとめる方法を紹介

SARファイルの構成

/test.sar/
/test.sar/test/
/test.sar/test/TestScheduler.class --スケジュール実行Class
/test.sar/META-INF/
/test.sar/META-INF/MANIFEST.MF      
/test.sar/META-INF/jboss-service.xml   --JBoss設定ファイル

SAR作成手順
・スケジュールClass作成
・MANIFEST.MFに必要なクラスパスを記述
・jboss-service.xml記述

スケジュールClass例

package test;

import java.util.Calendar;
import java.util.Date;

import org.jboss.varia.scheduler.Schedulable;

public class TestScheduler  implements Schedulable{
    private String message;
    public TestScheduler(String message){
        this.message = message;       
    }

    public void perform(Date arg0, long arg1) {
        //定期処理を記述
        System.out.printLn(message);
    }
}

org.jboss.varia.scheduler.Schedulableを実装していればOKです。
コンストラクタは自由に設定できますが因数を多くすると後の設定が面倒になります

MANIFEST.MF例

Manifest-Version: 1.0
Ant-Version: Apache Ant 1.6.5
Created-By: 1.5.0_06-b05 (Sun Microsystems Inc.)
Class-Path: test.har

sar上でear内のアーカイブにあるClassを利用するにはココの記述が必要です。
なおココに記述しなくても /server/xxxx/lib のjarは利用可能です。

jboss-service.xml 例

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE server>
<!-- $Id: jboss-service.xml,v 1.1 2006/10/12 10:58:40 kms Exp $ -->

<server>
  <mbean code="org.jboss.varia.scheduler.Scheduler"
     name=":service=SchedulerTestSchedule001">
    <attribute name="StartAtStartup">true</attribute>
    <attribute name="SchedulableClass">test.TestScheduler</attribute>
    <attribute name="SchedulableArguments">Schedulabe Test</attribute>
    <attribute name="SchedulableArgumentTypes">java.lang.String</attribute>
    <attribute name="InitialStartDate">NOW</attribute>
    <attribute name="SchedulePeriod">3600000</attribute>
    <attribute name="InitialRepetitions">-1</attribute>
  </mbean>

</server>

詳しい設定項目は
http://docs.jboss.com/jbossas/guides/j2eeguide/r2/en/html_single/#ch10.sched
コチラを確認してください。
上例は SchedulerTestSchedule001 という名前でmbeanを登録
test.TestScheduler を1時間間隔で実行
実行の開始は登録後すぐ
実行回数は無制限
コンストラクタはString型で『Schedulabe Test』という因数を一つだけ渡す
という感じです。
注意するのは名前は他のMBeanと衝突できないということです。
2つ3つ登録するときは毎回登録名を変更する必要があります

EARファイルの構成

/test.ear/
/test.ear/test.sar
/test.ear/test.war
/test.ear/test.har
/test.ear/META-INF/
/test.ear/META-INF/application.xml
/test.ear/META-INF/jboss-app.xml
/test.ear/META-INF/MANIFEST.MF

通常の(sarの無い)EARと違うのはjboss-app.xmlだけです。
jboss-app.xmlにsarの記述をすればOK

jboss-app.xml 例

<!DOCTYPE jboss-app PUBLIC "-//JBoss//DTD J2EE Application 1.4//EN"
         "http://www.jboss.org/j2ee/dtd/jboss-app_4_0.dtd">
<jboss-app>
   <module>
      <har>test.har</har>
   </module>
   <module>
      <service>test.sar</service>
   </module>
</jboss-app>

こんな感じで完了です。
ん~実用メモとしては内容にかけますね…。
いずれ時間があるときにEclipseで実際にどう作成するか追っかけて書くかもしれません。
予定は未定(=_=;

| | コメント (0) | トラックバック (0)

2006年12月28日 (木)

JBossのHibernateContextが便利そうだ

◆元ネタ◆

http://docs.jboss.org/jbossas/jboss4guide/r2/html/ch13.html#ch13.caveat-har.fig

JBoss provides the                 org.jboss.hibernate.session.HibernateContext             class as the integration piece that does this. The                 getSession method returns a Hibernate session             that is linked to the current JTA transaction. Naturally this             requires that a JTA transaction exist prior to the call. The             following code illustrates the use of getSession.

Session hsession = HibernateContext.getSession("java:/hibernate/CaveatEmptorSessionFactory");

When you get the Hibernate session in this manner, you don't need             close the Hibernate session or manage a hibernate transaction. You             can be sure that all access to the Hibernate session from the             current transaction will see the same state, and you can know that             your Hibernate access will be committed to the database or rolled             back along with the larger JTA transaction.

↑は登録ユーザーのみ閲覧できるスペースなのでひょっとすると
閲覧できないかもしれません。
閲覧できない人はJBOSSをDLして付属ドキュメントの該当ページを参照してください。

Hibernate のアーカイブ(HAR)は多少汚いコードでHibernateを扱っても
安定して動作してくれるので(←根拠無し経験則)愛用していますが
HibernateContextと併用するとSessionを閉じなくてもトランザクションを
管理しなくても
OKなんてステキなドキュメントを発見してしまいました。
Session閉じ忘れてメモリーあふれさせた経験は私だけのものでしょうか??
しかもこの感じですとパフォーマンスも良さげです。

自分はcreateSQLQueryも使うので明示的に適切なタイミングでcommitしないと
結果が変わってきてたいへん困るのですがそのあたりどうなのかな??
いずれレビューしてみます。

なおこのHibernateContextは
${jboss_dir}/server/default/lib/jboss-hibernate.jar にあります。
JBoss4.0.4 で確認しました。
古いバージョンではどこにあるのか良く分かりませんでした(=_=;

| | コメント (0) | トラックバック (0)

2006年2月 4日 (土)

JBossでHibernateを動かすとき最低限追加設置が必要なJar

『TomcatでHibernateを動かすとき最低限追加設置が必要なJar』
↑↑のJBoss版記事

単純な機能のみを使う場合

ehcache-1.1.jar

2007/01/18 追記 JBoss 4.0.4 GA 以降 ehcache-1.2.3.jar

だけでよい
TreeCacheを使用する場合追加して

jboss-system.jar
jboss-common.jar
jboss-jmx.jar
concurrent-1.3.2.jar

が必要

| | コメント (0) | トラックバック (0)

JBoss対応WEBアプリケーションをEclipse(Lomboz IDE)で開発Tips

いろいろと試してみたが、開発環境構築時(2005-09前後)では
Eclipse大本を使うよりLomboz IDEのほうが優れていた。
理由はJBoss4がすぐに使えたというのと(ランタイムはLomboz拡張)
WTPのバージョンで本体でサーバーからインストールすると0.7になってしまう点など
Lomboz IDEはほぼデフォルトインストールで使用可能だったのでこれを利用することとした。

http://www.objectlearn.com/index.jsp

細かい設定基本運用はWTPのページで

http://www.eclipse.org/webtools/

あくまでも自分がWEBアプリケーションを開発するさいの作業を中心にまとめる
Tomcatの基礎運用、設定ができてJBossの運用を勉強中くらいの人なら読んで分かるかも
1から10まで説明する内容にはなっていないので注意

◆準備
◇JBossを開発環境にインストールしておく
◇window>preferences>server>installed runtime にインストールしたJBossを認識させる

◆Javaコードビルド時にxdocletを起動するようにする
◇window>preferencesの以下の部分で忘れずにチェック
最新版のxdocletをインストールして選択しておけばなおよい
Jboss_xdoclet_enable

◆xdocletでjboss-web.xmlを作成する

◇window>preferencesの以下の部分で忘れずにJBossにチェック
Jboss2

◆VirtualHost

◇JBoss側の設定

/server/******/deploy/jbossweb-tomcat55.sar/server.xml
を編集、内容はTOMCATに順ずる。

◇Eclipse側の設定

XDocletでは特定のファイルを用意するとその内容をjboss-web.xmlにを挿入できる、
VirtualHost用のファイルは用意されていないようなので
リソース用のファイルを今回は利用

/WEB-INF/jbossweb-resource-ref.xml

このファイルを作成し
<virtual-host>vhost.hoge.com</virtual-host>
の行を書き込む

このファイルはxmlではなく内容がそのままjboss-web.xmlに挿入されるので注意する。
文頭でXML宣言をしてはダメ

◆DataSource

◇JBoss側の設定

『/jboss/docs/examples/jca』を参考にdeployファイルを作成
『deploy』フォルダに設置

◇Eclipse側の設定
『web.xml』『jboss-web.xml』の両方に設定を書き込まないと設置できないのに注意する。
『web.xml』に設定を入れる

上記(VirtualHost)と同じ理屈で『/WEB-INF/servlets.xml』を用意
内容は以下のとおり

  <resource-ref>
    <description>The HOGE DS</description>
            <res-ref-name>jdbc/hoge</res-ref-name>
            <res-type>javax.sql.DataSource</res-type>
            <res-auth>Container</res-auth>
  </resource-ref>

『jboss-web.xml』に設定を入れる
位置はVirtualHostで用意した『/WEB-INF/jbossweb-resource-ref.xml』
内容は以下のとおり
<resource-ref>
    <res-ref-name>jdbc/hoge</res-ref-name>
      <res-type>javax.sql.DataSource</res-type>
      <jndi-name>java:/jdbc/hoge</jndi-name>
</resource-ref>

◆BASIC 認証
認証をかけたいときの設定、DB連動は自分はめったに使わないのでTEXTで静的設定例

◇JBoss側設定
『/server/****/conf/login-config.xml』に認証のセルを作成
    <application-policy name = "basic">
    <authentication>
                  <login-module code="org.jboss.security.auth.spi.UsersRolesLoginModule" flag = "required">
                       <module-option name="usersProperties">props/basic-users.properties</module-option>
                       <module-option name="rolesProperties">props/basic-roles.properties</module-option>
                  </login-module>
           </authentication>
    </application-policy>

usersPropertiesでパスワードとユーザー名を設定するファイルを指定
rolesPropertiesでユーザーと認証ロールをマッピング
上の例に従い
『/server/****/conf/props/basic-users.properties』
Admin=hogepass
『/server/****/conf/props/basic-roles.properties』
Admin=AdminRole

◇Eclipse側の設定

どのセキュリティードメインをこのアプリケーションで参照するかを
指定する設定を『jboss-web.xml』に入れる。
位置はVirtualHostで用意した『/WEB-INF/jbossweb-resource-ref.xml』
内容は以下のとおり

<security-domain>java:/jaas/basic</security-domain>

『web.xml』に認証をかける範囲や認証するロールの設定を行う
位置は『/WEB-INF/web-security.xml』
内容は以下のとおり

  <security-constraint>
    <display-name>SecurityConstraint</display-name>
        <web-resource-collection>
              <web-resource-name>WebResourceCollection</web-resource-name>
              <url-pattern>/secure_dir/*</url-pattern>
              <http-method>GET</http-method>
              <http-method>POST</http-method>
        </web-resource-collection>
    <auth-constraint>
              <role-name>AdminRole</role-name>
        </auth-constraint>
  </security-constraint>
  <login-config>
    <auth-method>BASIC</auth-method>
  </login-config>
  <security-role>
        <role-name>AdminRole</role-name>
  </security-role>

◆ContextRootの変更
基本的にはDynamic Web Project作成時に入力可能
しかし変更はGUIの設定項目に見当たらない。
プロジェクトのルートフォルダの『.wtpmodules』が
WTPの変数を保持しているようなのでこれを編集して変更する

<property name="context-root" value="/"/>
↑Value値を変更する

| | コメント (0) | トラックバック (0)