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
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 |
name="char.encoding"> |
|
テスト対象のテーブル名 | 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)を使うのが便利。
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内で使うカスタムタグ(タグハンドラー)の挙動がWebLogicとJBossでは異なる。[2008-11-01]
jspファイルはサーブレットに変換されてJavaのコードとして動作する。
タグハンドラーもその中でインスタンス化されてメソッドの呼び出しという形で動作する。
そのインスタンス化の方法(従って、release()が呼ばれるタイミングも)がWebLogicとJBossでは異なる。
WebLogicではタグハンドラーはカスタムタグが現れる度に新しいインスタンスが作られる。
JBossでは同一の属性を持つカスタムタグは同じインスタンスが使い回される(必須でない属性の有無の違いによって、同じカスタムタグでも別インスタンスとなるようだが)。
したがって、属性が毎回初期化される前提で作られているカスタムタグは、JBossではバグの原因となる。
WebLogicでは、Antのwlappcタスクを使ってjspファイルの事前コンパイルが出来た。[2008-09-12]
JBossではjasper(jspc)タスクを使って事前コンパイルできる。
WebLogicではJSPClassServletというサーブレットが用意されていて、事前コンパイルしたクラスを使って実行することが出来る(実行時にjspファイルが不要となる)。
JBossにはそういったクラスは用意されていないようなので、ちょっと作ってみた。[2008-09-22]
JBossASはたぶんRMIの仕様に素直だが、WebLogicは独自拡張(?)されている。[2008-12-01]
WebLogicのRMI | JBoss4.2.3のRMI | |
---|---|---|
インターフェース | 各メソッドにRemoteExceptionを付ける必要は無い。 | 各メソッドにRemoteExceptionを付ける必要がある。 |
実装クラス | Serializableを実装する必要は無い。 | Serializableを実装する必要がある。 |
バインド | 実装クラスのインスタンスをそのままバインドしても、 同一のインスタンスへアクセスできる。 |
実装クラスのインスタンスをそのままバインドすると、 毎回別インスタンスへのアクセスとなる。 |