S-JIS[2008-09-09/2008-12-01] 変更履歴

WebLogic→JBoss

WebLogic ServerからJBoss4へ設定を移行するメモ。


環境変数

プログラム(ウェブアプリ)内で取得できそうな環境変数[2008-10-14]

WebLogic JBoss
BEA_HOME C:\bea    
WL_HOME C:\bea\WLSERV~1.0 JBOSS_HOME C:\jboss\jboss-4.2.3.GA
WLS_HOME C:\bea\WLSERV~1.0\server    
DOMAIN_HOME C:\bea\USER_P~1\
domains\BASE_D~1
   
LONG_DOMAIN_HOME C:\bea\user_projects\
domains\base_domain
   
WEBLOGIC_CLASSPATH (クラスパス) JBOSS_CLASSPATH (クラスパス)
JAVA_OPTIONS (起動時のjavaオプション) JAVA_OPTS (起動時のjavaオプション)
SERVER_NAME AdminServer    

システムプロパティー

デフォルトでセットされているシステムプロパティー[2008-10-14]

WebLogic JBoss 備考
platform.home C:\bea\WLSERV~1.0 jboss.home.dir C:\jboss\jboss-4.2.3.GA  
weblogic.home C:\bea\WLSERV~1.0\server jboss.server.base.dir C:\jboss\jboss-4.2.3.GA\server  
wls.home C:\bea\WLSERV~1.0\server
weblogic.Name AdminServer jboss.server.name default run.bat -c
    jboss.server.home.dir C:\jboss\jboss-4.2.3.GA\server\default  
    jboss.server.log.dir C:\jboss\jboss-4.2.3.GA\server\default\log  
    jboss.server.data.dir C:\jboss\jboss-4.2.3.GA\server\default\data  
    jboss.server.temp.dir C:\jboss\jboss-4.2.3.GA\server\default\tmp  
    jboss.home.url file:/C:/jboss/jboss-4.2.3.GA/  
    jboss.lib.url file:/C:/jboss/jboss-4.2.3.GA/lib/  
    jboss.server.base.url file:/C:/jboss/jboss-4.2.3.GA/server/  
    jboss.server.home.url file:/C:/jboss/jboss-4.2.3.GA/server/default/  
    jboss.server.lib.url file:/C:/jboss/jboss-4.2.3.GA/server/default/lib/  
    jboss.server.config.url file:/C:/jboss/jboss-4.2.3.GA/server/default/conf/  
    jboss.bind.address 127.0.0.1 run.bat -b
    jboss.remoting.domain JBOSS  
    catalina.base C:\jboss\jboss-4.2.3.GA\server\default  
    catalina.home C:\jboss\jboss-4.2.3.GA\server\default  
    program.name run.bat 改名run.bat
user.dir C:\bea\user_projects\
domains\base_domain
user.dir C:\jboss\jboss-4.2.3.GA\bin
(run.batを起動した際のディレクトリー)
 
    java.naming.factory.initial org.jnp.interfaces.NamingContextFactory conf/jndi.properties
    java.naming.factory.url.pkgs org.jboss.naming:org.jnp.interfaces

JBossのurlで終わっているプロパティーは、Fileインスタンスに変換することが出来る。→URL


データソースとJNDI名

WebLogicおよびJBossでJDBCのデータソースを設定すると、以下のような感じになる。

WebLogic JBoss
コンソールのサービス→JDBC→データソース oracle-ds.xml
JNDI名 SampleDS <jndi-name> SampleDS
データベースの種類 Oracle <type-mapping> Oracle9i
データベース名 ora92    
ホスト名 localhost    
ポート 1521    
データベースユーザ名 scott <user-name> scott
パスワード tiger <password> tiger
ドライバクラス名 oracle.jdbc.OracleDriver <driver-class> oracle.jdbc.driver.OracleDriver
URL jdbc:oracle:thin:@localhost:1521:ora92 <connection-url> jdbc:oracle:thin:@localhost:1521:ora92
プロパティ user=scott
weblogic.codeset=Windows-31J
<connection-property
 name="char.encoding">
Windows-31J
テスト対象のテーブル名 SQL SELECT 1 FROM DUAL    
サーバ AdminServer    

ちなみに、WebLogic8.1では/bea/user_projects/domains/mydomain/config.xml、WebLogic10では/bea/user_projects/base_domain/config/jdbc/JDBC_〜-jdbc.xmlに設定内容が書かれる。

JNDI名のlookup()は以下のようになる。(設定上のJNDI名は同じでも、lookup()に指定する名称は異なる)

WebLogic DataSourcce ds = (DataSource) ctx.lookup("SampleDS");
JBoss DataSourcce ds = (DataSource) ctx.lookup("java:SampleDS");

リクエスト・レスポンスの文字コード

WebLogicでは、HTTPリクエスト(GET・POSTメソッド)のエンコードを指定できる 。

weblogic.xml:

<weblogic-web-app>
	<charset-params>
		<input-charset>
			<resource-path>/*</resource-path>
			<java-charset-name>Windows-31J</java-charset-name>
		</input-charset>
		<charset-mapping>
			<iana-charset-name>Shift_JIS</iana-charset-name>
			<java-charset-name>Windows-31J</java-charset-name>
		</charset-mapping>
	</charset-params>
</weblogic-web-app>

JBossでは、少なくともjboss-web.xmlにはそのような設定は無い。
サーブレットの先頭でエンコーディングをセットする。(HttpServletのdoPost()やdoGet()、あるいはservice())

SampleServlet.java:

public class SampleServlet extends HttpServlet {

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
		res.setContentType("text/html; charset=Shift_JIS");
		req.setCharacterEncoding("Windows-31J");
		res.setCharacterEncoding("Windows-31J");
		〜
	}

ちなみにsetContentType()でShift_JISをセットしてからsetCharacterEncodingでWindows-31Jをセットすると、getContentType()は「text/html;charset=Windows-31J」になる…。


サーブレットが複数有る場合は、フィルターjavax.servlet.Filter)を使うのが便利。


JSPのエンコーディング

WebLogicでは、JSPのデフォルトのエンコーディングを指定できる。

weblogic.xml:

<weblogic-web-app>
	<jsp-descriptor>
〜
		<jsp-param>
			<param-name>encoding</param-name>
			<param-value>Windows-31J</param-value>
		</jsp-param>
〜
	</jsp-descriptor>
</weblogic-web-app>

要するに「<%@ page contentType="text/html; charset=Windows-31J"%>」のこと。

JBossではそういった設定がとりあえず見当たらないので、各JSPにおいてエンコードを指定する必要がある。
特にincludeされるタイプのJSPでは「<%@ page pageEncoding="Windows-31J" %>」を指定する。


タグハンドラーの初期化

JSP内で使うカスタムタグ(タグハンドラー)の挙動WebLogicJBossでは異なる。[2008-11-01]

jspファイルはサーブレットに変換されてJavaのコードとして動作する。
タグハンドラーもその中でインスタンス化されてメソッドの呼び出しという形で動作する。
そのインスタンス化の方法(従って、release()が呼ばれるタイミングも)がWebLogicとJBossでは異なる。

WebLogicではタグハンドラーはカスタムタグが現れる度に新しいインスタンスが作られる。
JBossでは同一の属性を持つカスタムタグは同じインスタンスが使い回される(必須でない属性の有無の違いによって、同じカスタムタグでも別インスタンスとなるようだが)。
したがって、属性が毎回初期化される前提で作られているカスタムタグは、JBossではバグの原因となる。


事前コンパイル

WebLogicでは、Antwlappcタスクを使ってjspファイルの事前コンパイルが出来た。[2008-09-12]

JBossではjasper(jspc)タスクを使って事前コンパイルできる。

WebLogicではJSPClassServletというサーブレットが用意されていて、事前コンパイルしたクラスを使って実行することが出来る(実行時にjspファイルが不要となる)。
JBossにはそういったクラスは用意されていないようなので、ちょっと作ってみた[2008-09-22]


RMIの違い

JBossASはたぶんRMIの仕様に素直だが、WebLogicは独自拡張(?)されている。[2008-12-01]

  WebLogicのRMI JBoss4.2.3のRMI
インターフェース 各メソッドにRemoteExceptionを付ける必要は無い。 各メソッドにRemoteExceptionを付ける必要がある。
実装クラス Serializableを実装する必要は無い。 Serializableを実装する必要がある。
バインド 実装クラスのインスタンスをそのままバインドしても、
同一のインスタンスへアクセスできる。
実装クラスのインスタンスをそのままバインドすると、
毎回別インスタンスへのアクセスとなる。

JBossASへ戻る / Java目次へ行く
メールの送信先:ひしだま