![]() ↑WebObjects5.2 NeXTのエッセンスが... | ▼WebObjectsに関する参考書籍▼
▼Javaが分からなくて苦労した私がお薦めする初心者向けの優良な書籍▼
|
■参考サイト
O/Rマッピングの役割とメリット
http://www.atmarkit.co.jp/fjava/rensai3/ormap01/ormap01.html
リレーションシップを張ることで、リレーショナルデータベースと同様に親子関係をつくれる。
リレーショナルデータベース上のリレーション設定とは関係なく動作させることができる。なので、Oracleのテーブルを親にして、MySQLのテーブルを子供にしてリレーションシップを張ることも可能。
赤いドーナツ型のアイコンをクリックして、親となるテーブル(エンティティ)を選択する。
Property > Add Relationship を選択する。
インスペクタウィンドウでの設定例(親:Company 子供:Staff の場合)
Property > Generate Java Files... を選択する。
既に、Javaファイルが存在するときは、アラートが表示されるので、Merge ボタンを押す。
「矢印で選んでいる側を選択して上書き保存する」という働きをしてくれる。
リレーションシップを張ったけど動作しないときは、Javaファイルのマージを忘れていないかチェックする。
EOModelerで一度作ったテーブルのリストに新たにDBのテーブルを追加したいことがよくある。
■EOModelerでテーブルを追加する
テーブル(エンティティ)を作って、カラム(アトリビュート)を何個か追加した後、SQLアイコンをクリックすればOK。
■Oracle等の既存テーブルを追加する
Model > New Updated Model を選択する。
追加したいテーブルをクリックする。
新しく表示された赤いドーナツのようなアイコン(エンティティ)をドラッグ&ドロップで、自分のEOModelerのリストの「一番上のドーナツアイコン」に重ねる。
一番上のドーナツアイコン: MyDB.eomodeld というファイル名の場合、MyDBと表示されている赤いドーナツ型のアイコンのこと。
その1
EOEditingContext ec = session().defaultEditingContext();
ec.revert();
その2
session().defaultEditingContext().revert();
WebObjectsのバグでしょうか?
それとも自分が悪いのか? ここに注意!
ふだん日付フィールドは、日付だけが入力されていればいいと思う。だけど、入力日や修正日を記録したいときは時間も記録したい。
しかしながら時間が表示されたり、表示されないときがあるのでOracleのTIMESTAMPなどを試してみたが、EOModelerのバグでOracleには対応していなかった。
しかし、もっと簡単な方法があった。
EOModelerでName, Column, Value Class, と並んでいるずっと先に Value というフィールドがある。そこに「T」と一文字だけ入れればOK。
Valueフィールドが表示されていなければ、Add Columnから選んでValueフィールドを表示させる。
昔のEOModelerは、自動的に「T」が入っていたけど、今は手動になったのかな。Stringの「S」も省略されているなぁ。
テキストボックスに400文字を越えたテキストを入力して保存しようとすると、エラーが発生する。
Error:
com.webobjects.eoaccess.EOGeneralAdaptorException:
EvaluateExpression failed: : Next exception:SQL State:72000 -- error
code: 1483 -- msg: ORA-01483: invalid length for DATE or NUMBER bindvariable
OracleでそのフィールドにVARCHAR2(4000)を指定しているのに、わずか400文字程度でORA-01483エラーが起きてしまう。
回避策:VARCHAR2じゃなくて、CLOBを使いましょう。
WebObjects builderで、フォームの中にラジオボタンをコピーペーストしたときのこと。
コンパイル、そして起動後にフォームの送信ボタンを押すと、エラーメッセージが「we expected a boolean but received a java.lang.String with a value of false.」と表示される。
原因は、ラジオボタンの false が "false" とダブルクォートで囲まれてStringになってしまっていた。ダブルクォートを削除して問題解決。
起動スクリプトを作って、キックしても起動しない。
MyAppli.woa/Myappli を直接起動しても、すぐに終了する。
原因は、/home のディレクトリが711だったため。
# chmod 755 /export/home
で解決。
WebObjects Builderで、作業をするときによくやるのが、コピーペースト。
例えば、これから新しくDealer.woを作るとき、
で、最終的にビルドして実行してみると、エラーが発生する。
エラーメッセージをよく見て、必要のないオブジェクトやWORepetition、WOConditionalなどが残っていたりするので、Dealer.html、Dealer.wodから削除する。
入力フィールドが、文字なのに、日付フォーマット"%Y/%m/%d"を指定したままだったり、数値フォーマットを指定したままだったりすることがよくある > オレ。
ひとつの入力画面で、同じ入力フィールドを2つ作ってしまうことがある。
Customer.name が画面の上の方。もう一つは、目立たなく画面の下の方にCustomer.name と。
上の方のフィールドに何度、「高橋」と入力しても「」と空白になってしまうのだ。
「何度、入力しても消えてしまうんです!」とユーザの声で気づいたのであった。
せっかく新しく追加した、UserPage.woがWebObjects Builderで開かなかったりします。
Open document
Failed to open component: /Users/..../UserPage.wo.
In setDocument:
WebObjects Builderを再起動するか、Macを再起動しましょう。
今まで、ビルドと実行が出来ていたのに、あるときから実行できなくなってしまうことがある。
あせっては、いけない。Mac自体を再起動するのだ。
それだけで、いつも通りに動いてくれる...はず。
いざというときのために、毎回プロジェクトのフォルダごと コマンド+D で、バックアップしてからプログラミング作業に入りましょう。
うーむ、FileMargeが起動してマージしてくれるはずがうんともすんとも言わない。
こんなときは、手動でマージする。EOModelerでEmployeeモデルを変更した場合、
プロジェクトのフォルダにEmployee.javaとEmployee.java.newがあるはず。これをFileMergeアプリケーションで、
File > Compare Files...
とファイルをドラッグしてCompareすればよし。FileMergeが調子悪ければ、テキストエディタでEmployee.java.newを開いて手動でコピーペーストする。
後で、Employee.java.newをゴミ箱に捨てる。
こんなエラーが表示された。
| Error: | com.webobjects.appserver._private.WODeclarationFormatException: no declaration for dynamic element (or component) named TextField1 |
| Reason: | <WOHTMLTemplateParser> no declaration for dynamic element (or component) named TextField1 |
原因は、入力欄TextField1をコメントアウトした後に、同じページ内に入力欄を追加した。それがTextField1と内部的に命名されていたのだ。その入力欄を消したため、wodファイルからTextField1が削除されたので、コメントアウト内のTextField1と対になる定義を見つけられなくなってしまったらしい。
コメントアウト内の入力欄は使わなかったら削除しましょう。
ログを見てみると、
[2006-12-05 20:24:10 JST] <WorkerThread9> <com.webobjects.appserver._private.
WOComponentRequestHandler>: Exception occurred while handling request:
java.lang.IllegalStateException: _obtainOpenChannel -- com.webobjects.eoaccess.
EODatabaseContext com.webobjects.eoaccess.EODatabaseContext@1e2ca7:
failed to open database channel. Check your connection dictionary,
and ensure your database is correctly configured.
メッセージによるとコネクション、データベースの設定をチェックしろ!と。
おっしゃる通り、サーバ名を間違えておりました。
社外のVPN先のデータベースサーバなので、ローカルからのIPアドレスと、そのサーバ自身のIPアドレスが違うのでした。
ローカルでは、動くんですよ。でもサーバにアップすると動かない。Safariがこのようなメッセージを表示する。
The requested application was not found on this server.
で、/usr/local/apache/conf/WebObjects.xmlを見ると、ちゃんと書いてある...つもりだったが、ここに落とし穴が!
<application name="HelloWorld"
retries="5" protocol="http" redir="http://hoge.jp/">
<instance id="1" port="5010" host="127.0.0.1" sendTimeout="300" recvTi
meout="300"/>
</application>
そう!ターミナル上で、この記述をコピーペーストしたもんだから、recvTimeoutが、recvTi と meout と離ればなれになっていたのであった。
vi 上で、shift + J で上下の行をつないで修復完了。
ついでに、1行めと2行めの<application ... jp/">もつないで1行にしておきましょう。
ムービーでWebObjectsの基本を学ぶ
「そういえば、どうやって書いたっけ?」など、すぐに思い出せるようにメモしたもの。
■スレッド
「こんちは!」 と 「ども!」 をランダムに無限に出力する。
class MyThread extends Thread{
String message;
MyThread( String s ) {
this.message = s;
}
public synchronized void run(){
for( ; ; ){
System.out.println( message );
}
}
}class ThreadTest{
public static void main( String[] args ){
new MyThread( "こんちは!" ).start();
new MyThread( "ども!" ).start();
}
}
WebObjectsで検索するときのサンプル。
// CustomerPage.java
import com.webobjects.foundation.*;
import com.webobjects.appserver.*;
import com.webobjects.eocontrol.*;
import com.webobjects.eoaccess.*;
public class CustomerPage extends WOComponent {
protected NSArray customerList;
private EOEditingContext ec;
private EOFetchSpecification fetchSpec;
// 顧客を全件取得
public CustomerPage( WOContext context ) {
super( context );
// 検索条件(顧客DB, 検索条件なし, ソート条件なし)
fetchSpec = new EOFetchSpecification( "Customer", null, null );
// エディティングコンテキスト様にアクセスするための下準備をする。
ec = session().defaultEditingContext();
// エディティングコンテキスト様に検索条件を伝えて、検索をお願いする。
customerList = new NSArray( ec.objectsWithFetchSpecification(fetchSpec) );
}
}
顧客を入れる配列は、NSArrayでもNSMutableArrayでもよし。
■最小割当メモリと最大割当メモリを指定する
アプリケーションが、HelloWorld.woaだとすると、
HelloWorld.woa/Contents/UNIX/UNIXClassPath.txt
このUNIXClassPath.txtを編集する。
(編集前)
# JVMOptions ==
(編集後)
# JVMOptions == -Xms256m -Xmx512m
-Xms で最小メモリを指定する。
-Xmx で最大メモリを指定する。
例えば、HelloWorld.woaの場合、run_Hello.sh という起動スクリプトを作る。
#! /bin/bash
export NEXT_ROOT=/opt/WebObjects5.2.4
export PATH=/usr/jdk/j2sdk1.4.2_08/bin:$PATH
cd HelloWorld.woa
./HelloWorld -WOPort 50010
ポート番号は、netstatで調べて開いているものを使う。今回は、50010番にした。
このスクリプトを作ったら、chmodして、起動する。
$ chmod 755 run_Hello.sh
$ ./run_Hello.sh &
&を付けて起動したら、ちゃんと、exitしてログオフすることを忘れずに。忘れてターミナルを閉じたり、スリープに入るとアプリが落ちてしまうぞな。
ブラウザから、接続してテストする。
http://192.168.1.123:50010/
上記に以下の機能を加える。
・ログを書き出す。
・ログに起動と停止の時間を書き込む。
・落ちた場合、6秒スリープした後、自動的に起動する。
#! /bin/bash
export NEXT_ROOT=/opt/WebObjects5.2.4
export PATH=/usr/jdk/j2sdk1.4.2_08/bin:$PATH
DIR=`pwd`
LOG=${DIR}/HelloWorld.log
cd ${DIR}/HelloWorld.woa
while true
do
echo STARTUP - `date +%Y/%m/%d-%T` >> ${LOG}
./HelloWorld -WOPort 50010 >> ${LOG} 2>&1
echo SHUTDOWN - `date +%Y/%m/%d-%T` >> ${LOG}
sleep 6
done
while と sleepの組み合わせがミソですな。sleepをゼロにすると、やばいアプリの場合手がつけられなくなるので、数秒スリープ時間を入れませう。
大先輩のスクリプトを自分が分かるように書き直しているうちにこういう書き方に落ち着きました。
ここで、WOPort以外の引数、たとえばメモリの量とかも指定できるのでもっともっと長いスクリプトに育てていくのもいいかと思われます。
この記事を読んで、WebObjectsで変数へのアクセス方法を思い出した。
http://www.cmagazine.jp/src/kinjite/c/variable.html#index11
Webページ(WOコンポーネント)
↓
セッション(Session.java)
↓
アプリケーション(Application.java)
というようにアクセスしていけば良いと、WebObjectsのトレーニングで言われたな...。
WebObjects運用環境のインストールについてのメモ。
/etc/profileのお尻に追加。
JavaとGNUのソフトウェアを使えるようにする。
# PATH=/usr/jdk/j2sdk1.4.2_06/bin:$PATH
# PATH=/usr/local/bin:$PATH
# PATH=$PATH:/usr/ucb:/usr/ccs/bin:/usr/sfw/bin
# export PATH
Javaが起動するかを確認しておく。
# java -version
WebObjectsアプリケーションの場所を指定する。
# NEXT_ROOT=/opt/WebObjects5.2.4
# export NEXT_ROOT
基本的に、Solarisが用意するコマンドがGNUよりも先に読み込まれるようにする(コンパイルのときにGNUが先だとうまくいかなかったことがある)。一度、ログアウト、ログインして設定を確認しておく。
# echo $PATH
/usr/local/bin:/usr/jdk/j2sdk1.4.2_06/bin:/usr/sbin:/usr/bin:/usr/ucb:/usr/ccs/bin:/usr/sfw/bin
# echo $NEXT_ROOT
/opt/WebObjects5.2.4
古いバージョンのJavaの入手はこちらから。
http://java.sun.com/products/archive/index.html
gtar, gnutarへのパスが通るようにする。
# cd /usr/sfw/bin/
# ln -s gtar gnutar
最初にWebObjects5.2のインストールCD-ROMをTARで固めてサーバへ転送しておく。 /usr/local/srcで作業すると仮定する。
# cd /usr/local/src/WO52WINSOLS/Deployment/SOLARIS
# sh install.sh -gnutar /usr/sfw/bin/gtar
ミソは、SolarisのtarではなくGNUのgtarを確実に指定すること!
Deployライセンスキー: B-323-XXX-170-XXX-349-XXX-138-XXX-340
CGI-BINディレクトリ: /usr/local/apache/cgi-bin
Documentディレクトリ: /usr/local/apache/htdocs
WOFディレクトリ: /opt/WebObjects5.2.4 (後で、5.2から5.2.4へバージョンアップするため。)
ライセンスキーなどの入力を間違えた場合、Deleteキーやバックスペースで削除して入力を訂正しても、インストールに失敗することがある。テキストエディタにライセンスキー等を用意して、コピーペーストするのが一番よい。
# sh install.sh -gnutar /usr/sfw/bin/gtar
--------------------------------------------------------------
Welcome to the WebObjects 5.2 Deployment installation program!
LICENSE AGREEMENT:
This Apple software is licensed under the terms of a Software License
Agreement ('License') which you can read by pressing `r'. Please read
the License carefully before using the Apple Software. By pressing `a'
for agree, you are agreeing to be bound by the terms of the License. If
you do not agree to the terms of the License, press `q' for quit and
(if applicable) return the Apple Software to the place where you obtained
it for a refund.
Please make your selection ([R]/a/q): a
ADAPTORS-ONLY INSTALL:
Do you want to perform a WebObjects Adaptors-only install? (y/[N]/q):
MINIMAL INSTALL:
Would you like to perform a minimal install for deploying WebObjects
Applcations in a JSP/Servlet container? (y/[N]/q):
JAVA VIRTUAL MACHINE JRE SUPPORT:
WebObjects 5.2 requires a java virtual machine (JVM) that supports
JRE 1.3.1 or greater. However, installation of WebObjects 5.2
requires minimal JRE support, so it is possible to perform this
installation on an older JVM and to upgrade to one with at least
JRE 1.3.1 support at a later time.
What follows is the information from your JVM, which describes its
JRE support. Please verify that your JVM is up-to-date before using
WebObjects 5.2.
java version "1.4.2_16"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_16-b05)
Java HotSpot(TM) Client VM (build 1.4.2_16-b05, mixed mode)
LICENSE KEY:
The license key for WebObjects 5.2 Deployment is now needed.
Enter license key: B-000-WWB-000-QGC-000-DRW-000-FXA-000
CGI-BIN DIRECTORY:
The cgi-bin (script) directory that your HTTP server uses is needed.
If your HTTP server is on another machine or you want to configure
this yourself at a later time, you do not need to specify this now
(just leave the response field blank).
Please enter your cgi-bin directory
[press ENTER to configure later]: /export/home/towns/cgi-bin
DOCUMENT ROOT DIRECTORY:
The document root directory that your HTTPD server uses is needed.
If your HTTPD server is on another machine or you want to configure
this yourself at a later time, you do not need to specify this now
(just leave the response field blank).
Please enter your document root directory
[press ENTER to configure later]: /export/home/towns/public_html
The directory `/export/home/towns/public_html' does not exist.
Do you want the installer to create it for you? ([Y]/n/q): n
Please enter your document root directory
[press ENTER to configure later]: /export/home/towns/public_html
WEBOBJECTS INSTALLATION DIRECTORY:
The WebObjects installation directory is needed. The default
install location is into `/opt/Apple'.
Please enter the WebObjects directory [/opt/Apple]: /opt/WebObjects5.2.4
WebObjects 5.2 will be installed:
From: `/usr/local/src/WOF/WO52WINSOLS/Deployment/SOLARIS'
To: `/opt/WebObjects5.2.4'
Is the above destination correct? ([Y]/n/q):
WO SERVICES:
Most WebObjects applications require some support services to be
running. You can start them manually by executing:
`/opt/WebObjects5.2.4/Library/WebObjects/Executables/WOServices start'.
You can choose to have the installer create some startup scripts
so that these services will always be running after every reboot.
Do you wish WOServices to be started each time this machine is rebooted?
(y/[N]/q):
Do you wish WOServices to be started immediately after this install?
(y/[N]/q):
--------------------------------------------------------------
PRE-INSTALLATION REVIEW:
You are about to install:
. WebObjects 5.2 Deployment, Full Install
Your specified installation location(s):
. CGI-BIN : `/export/home/towns/cgi-bin'
. DOCROOT : `/export/home/towns/public_html'
. WEBOBJECTS: `/opt/WebObjects5.2.4'
Do you want to continue? ([Y]/n/q):
--------------------------------------------------------------
INSTALLATION:
Beginning WebObjects 5.2 full installation:
. Creating WebObjects installation directory ...
. Creating WebObjects' Applications and Frameworks directories ...
. Installing WebObjects Adaptor source ...
. Installing WebObjects Adaptor ...
. Installing files into webserver cgi-bin ...
. Installing WebObjects Deployment ...
. Installing WODocumentRoot frameworks into document root ...
. Creating startup scripts ...
. ... Done.
APACHE WEBSERVER NOTE:
If you are using the Apache Webserver, you will need the WebObjects
`apache.conf'. This installation's `apache.conf' file can be found at:
/opt/WebObjects5.2.4/Library/WebObjects/Adaptors/Apache/apache.conf
The Apache Webserver `httpd.conf' file (found in the Apache `httpd' directory)
needs to be made aware of this file. Add the following line to `httpd.conf':
Include /opt/WebObjects5.2.4/Library/WebObjects/Adaptors/Apache/apache.conf
WEBOBJECTS SERVICES:
To enable WebObjects services to start automatically every time the
machine is rebooted, type the following at the command line:
/opt/WebObjects5.2.4/Library/WebObjects/Executables/WOServices enable
NEXT_ROOT ENVIRONMENT VARIABLE:
In order for WebObjects services to function, you should define the
environment variable NEXT_ROOT in your shell startup script. It should
be set to '/opt/WebObjects5.2.4' (without the apostrophes).
WebObjects 5.2 Deployment, Full Install is now installed.
/opt/WebObjects5.2.4/Library/WebObjects/Executables/WOServices start で、起動できる。今回の運用では使わない。
http://docs.info.apple.com/article.html?artnum=301410
http://docs.info.apple.com/article.html?artnum=70037-ja
WO524Solaris.tar.gzipとpatcher.shを英語サイトからダウンロードする。
ページの中段あたりの「Installing WebObjects 5.2.4 on Solaris」という項目のところにダウンロードするためのリンクがある。
(Safariでダウンロードするとなぜか拡張子が変わってしまうので.tar.gzipに直しておく)
また、gzipのままにしておく。解凍しないこと。
# chmod 511 patcher.sh
# ./patcher.sh -help インストールオプションを確認。
# sh patcher.sh -install WO524Solaris.tar.gzip -next_root /opt/WebObjects5.2.4
インストール後、WODocumentルートをコピーする。
# cp -r /opt/WebObjects5.2.4/Library/WebObjects/WODocumentRoot/WebObjects /usr/local/apache/htdocs/
次の作業...
cgi-binの下のWebObjectsはSPARC用のアダプタなので、x86(x64)用を用意する。
CGIアダプタ(cgi-bin/WebObjects)を通してWebObjectsアプリケーションにアクセスする方法と、Apacheのモ ジュールとしてmod_webobjects.soを使う方法を選ぶ。(ここでは、わかりやすい表現としてHTTPアダプタとは言わず、モジュールと言っ てます)
コンパイルすればどちらも作れるのだが、ちょっとばかり仕込みをしておく必要がある。「コンパイラはgcc」「作るものはCGIアダプタだけ」「メイクはgmake」など。その設定をこれから行う。
コンパイル作業を行うため、アダプタ制作のための部屋へ入って作業をしなくてはいけない。各自のWebObjectsインストール場所に置き換えて読み進めていただきたい。
# cd /opt/WebObjects5.2.4/Developer/Examples/WebObjects/Source/Adaptors
# ls -F
APPLE_LICENSE IIS/ build/ woadaptor.dtd
Adaptor/ Makefile example.xml woadaptor.xml
Apache/ Makefile.ORG make.config
CGI/ NSAPI/ make.config.ORG
これからさわるmake.config、Makefileは、 バックアップをとっておく。
こ の部屋にいるmake.config、こいつがコンパイル するときの元締めとなっている。Apacheディレクトリには、Apacheモジュール(mod_webobjects.so)を作るための道具がそろっ ている。CGIアダプタを作るための道具は、CGIディレクトリの中にそろっているのだ。
何を作るか?APXSはどこにあるか?CCは何を使うか? を教えてあげる。
make.config 32行目付近
ifeq "SOLARIS" "$(OS)"
ADAPTORS = CGI Apache (NSAPIを削除して、CGIアダプタとApacheモジュールだけを作ると指定)
# Default path for apxs on Solaris 8.
APXS = /usr/local/apache/bin/apxs (自分で用意したApacheのbinのapxsを使うぞ、と)
CC = gcc (gccを/usr/sfw/bin/gccのように絶対指定するのもよし)
endif
Apacheモジュールを作ることに失敗するときは、CGIアダプタのみを作ればOK。
makeをgmakeに変更する。
clean:
touch ${COMMON_TARGETS}
for adaptor in $(ADAPTORS) Adaptor ; do \
echo Cleaning $$adaptor ; \
( cd $${adaptor} ; gmake clean ) ; \ (gmakeを指定する)
done
OS_NOT_DEFINED:
@echo OS \"${OS}\" unknown. Check the Makefile.
exit 1
${COMMON_TARGETS}: Adaptor
cd Adaptor ; gmake (gmakeを指定する)
CGI::
cd CGI ; gmake (gmakeを指定する)
Apache::
cd Apache ; gmake (gmakeを指定する)
# gmake
こんな感じでメッセージが出力される。
現在地が、 /opt/WebObjects5.2.4/Developer/Examples/WebObjects/Source/Adaptors/だとして、
CGI/WebObjects CGIアダプタ
Apache/mod_WebObjects.so Apacheモジュール
Apache/apache.conf Apacheモジュールの説明書
WebObjectsアダプタをcgi-binに配置する。
# cp CGI/WebObjects /path/to/cgi-bin/
WebObjectsアダプタの動作を設定するXMLファイルを配置する。
# cp example.xml /user/local/apache/conf/WebObjects.xml
# cp woadaptor.xml /usr/local/apacheconf/WebObjectsHelp.xml
woadaptor.xmlは、設定方法を調べたいときにすぐに見られるので、WebObjects.xmlのそばに置いておくと便利。
WebObjects.xml の場所をapacheに教えてあげる。 apacheのhttpd.confを編集する。(WebObjects.xmlがWebObjectsアプリを指定するリモコンの役割をする)
# vi /usr/local/apache/conf/httpd.conf
(次の一行を一番おしりに追加)
SetEnv WO_CONFIG_URL file:///usr/local/apache/conf/WebObjects.xml
# /usr/local/apache/bin/httpd configtest
エラーが出なければOKなはずだが、SetEnvのパスが間違っていていもエラーが出ないので、もう一度、確認すること。
# /usr/local/apache/bin/apachectl restart
http://192.168.0.123/cgi-bin/WebObjects/ というようにアクセスしたときに
Invalid application name
と表示されればCGIアダプタは正常に動作している。
現在地が、 /opt/WebObjects5.2.4/Developer/Examples/WebObjects/Source/Adaptors/だとして、
WebObjects.xmlを配置する。
# cp example.xml /user/local/apache/conf/WebObjects.xml
# cp woadaptor.xml /usr/local/apache.conf/WebObjectsHelp.xml (設定方法を調べたいときにすぐに見られるので、置いておくと便利)
/usr/local/apache/conf/httpd.conf に一行追加する。
Include /opt/WebObjects5.2.4/Developer/Examples/WebObjects/Source/Adaptors/Apache/apache.conf
WebObjectsインストール時に上記のように追加されている場合は、修正する。パスがSolaris SPARK版のアダプタを指しているので、今回ビルドしたものを指すようにするため。
上記で指定したapache.confを修正する。
LoadModule WebObjects_module /opt/WebObjects5.2.4/Developer/Examples/WebObjects/Source/Adaptors/Apache/mod_WebObjects.so
AddModule mod_WebObjects.c (下記参照)
WebObjectsDocumentRoot /usr/local/apache/htdocs
WebObjectsAlias /cgi-bin/WebObjects
# WebObjectsConfig http://localhost:1085 10 (コメントアウトする)
# WebObjectsConfig webobjects://239.128.14.2:1085 10 (コメントアウト)
# WebObjectsConfig file://<path-to-a-xml-config-file> 10 (コメントアウト)
WebObjectsConfig file:///usr/local/apache/conf/WebObjects.xml 10 (追加する)
# /usr/local/apache/bin/httpd configtest
[Tue Mar 7 14:06:58 2006] [warn] module mod_WebObjects.c is already added, skipping
上記のようにmod_WebObjects.cは、すでに追加されているというメッセージが出たら、コメントアウトしておく。
# AddModule mod_WebObjects.c
# /usr/local/apache/bin/apachectl restart
http://192.168.0.123/cgi-bin/WebObjects/ というようにアクセスしたときに
Invalid application name
と表示されればHTTPアダプタは正常に動作している。
Windows XPで、WebObjects5.2.3へアップグレードしたときのメモ(Tさんからの情報。ありがとう!)
Javaバージョン1.3.1.08
5.2.3はJava1.4サポートなので、Javaを1.4.2.08にアップグレード(1.3は残したまま)
コンパイルは成功するのに実行画面で以下のエラーが出た
> Running 'test4.woa'...
Configuring launch environment for test4 ...
Launching test4.
java -Xrs -DWORootDirectory=C:/Apple -DWORootDirectory="C:/Apple" -DWOLocalRootDirectory="C:/Apple/Local" -DWOUserDirectory="C:/WO/test4" -DWOEnvClassPath="C:/Apple/Library/Frameworks" -DWOApplicationClass=Application -DWOPlatform=Windows -classpath WOBootstrap.jar com.webobjects._bootstrap.WOBootstrap -DWORootDirectory=C:/Apple
appRoot is C:\WO\test4\test4.woa/Contents
Loading C:\WO\test4\test4.woa/Contents/Windows/CLSSPATH.TXT
Generated classpath:
C:\WO\test4\test4.woa/Contents\Resources\Java\test4.jar
C:/Apple\Library\Frameworks\JavaJDBCAdaptor.framework\Resources\Java\javajdbcadaptor.jar
C:/Apple\Library\Frameworks\JavaFoundation.framework\Resources\Java\javafoundation.jar
C:/Apple\Library\Frameworks\JavaXML.framework\Resources\Java\javaxml.jar
C:/Apple\Library\Frameworks\JavaEOControl.framework\Resources\Java\javaeocontrol.jar
C:/Apple\Library\Frameworks\JavaEOAccess.framework\Resources\Java\javaeoaccess.jar
C:/Apple\Library\Frameworks\JavaWOExtensions.framework\Resources\Java\JavaWOExtensions.jar
C:/Apple\Library\Frameworks\JavaWebObjects.framework\Resources\Java\javawebobjects.jar
C:\Apple\Local\Library\WebObjects\Extensions\avalon-framework-4.1.2.jar
C:\Apple\Local\Library\WebObjects\Extensions\axis-ant.jar
C:\Apple\Local\Library\WebObjects\Extensions\axis.jar
C:\Apple\Local\Library\WebObjects\Extensions\commons-discovery.jar
C:\Apple\Local\Library\WebObjects\Extensions\commons-logging.jar
C:\Apple\Local\Library\WebObjects\Extensions\jaxrpc.jar
C:\Apple\Local\Library\WebObjects\Extensions\log4j-1.2.4.jar
C:\Apple\Local\Library\WebObjects\Extensions\logkit-1.0.1.jar
C:\Apple\Local\Library\WebObjects\Extensions\saaj.jar
C:\Apple\Local\Library\WebObjects\Extensions\servlet.jar
C:\Apple\Local\Library\WebObjects\Extensions\wsdl4j.jar
C:\Apple\Local\Library\WebObjects\Extensions\
C:\Apple\Library\Frameworks\
java.lang.NoClassDefFoundError
at com.webobjects.foundation.NSLog$PrintStreamLogger.<clinit>(NSLog.java:1606)
at com.webobjects.foundation.NSLog.<clinit>(NSLog.java:455)
at com.webobjects.foundation._NSUtilities.<clinit>(_NSUtilities.java:154)
at com.webobjects.appserver.WOApplication.<clinit>(WOApplication.java:165)
at java.lang.reflect.Method.invoke(Native Method)
at com.webobjects._bootstrap.WOBootstrap.main(WOBootstrap.java:71)
続行するには何かキーを押してください . . .
Path
%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;C:\java\j2sdk1.4.2_08\bin;%NEXT_ROOT%\Library\Executables;%NEXT_ROOT%\bin;%NEXT_ROOT%\Library\JDK\bin;
WEBOBJECTS_JAVA_HOME
C:/java1_0/JDK13~1.
↓
C:/java/j2sdk1.4.2_08
WEBOBJECTS_JAVA_EXTENSIONS
C:/PROGRA~1/JavaSoft/JRE/138DB1~1.1_0/lib/ext
↓
C:/java/j2sdk1.4.2_08/lib/ext
コマンドプロンプトで java -versionを入力すると、1.3~のままの場合は
%SystemRoot%\system32(\windows\system32)
の中にあるjava.exeを読みにいっているらしい
system32の中のjava.exeを削除
いちおう再起動
java -version が1.4になったところで
Webobjectsを実行するとめでたく実行成功
以前に書いたWebObjectsインストールのメモ。
WebObjects 5.1 インストール
日本語の取り扱いなど。
WebObjects5.2.xで日本語を扱う。
public Application() {
super();
System.out.println("Welcome to " + this.name() + "!");
/* ** Put your application initialization code here ** */
WOMessage.setDefaultEncoding("SJIS");
}
WebObjectsを使う上で、知っておくと便利なTips。
どんなSQLが、どのタイミングで投げられているかを確認できる。
開発時は、このJDBCのデバッグ機能を有効にしておくとよい。
WebObjects5.2.xの場合
EOAdaptorDebugEnabled=true
コメントアウトで有効になる。
WebObjectsの情報を公開しているサイト
WebObjectsでJFreeを用いてグラフを描きたい衝動に駆られた。
使うのは、この2つ
jfreechart/lib/jcommon-1.0.0.jar
jfreechart/lib/jfreechart-1.0.1.jar
/Library/Java/Home/lib/ext/jcommon-1.0.0.jar
/Library/Java/Home/lib/ext/jfreechart-1.0.1.jar