- - PR -
Servletを裏で定時起動する方法
| 投稿者 | 投稿内容 | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2003-12-14 12:22
こんにちは。 もしかしたらとても初歩的な内容かもしれないのですが、教えて下さい。 現在スケジューラソフトから定時起動(例えば毎日朝7時起動など)したい Servletがあります。スケジューラソフトにはServletを起動する仕組みは備 わっていません。 環境は以下です。 ・OS: Windows2000 ・web-server: jboss3.2+tomcat4 Servletを裏で定時起動する方法で色々検討してみたのですが ・DOSコマンドなどでできないか? ・IEなどで引数指定でServletの呼び出しだけをできないか? (画面は出したくありません・・) ・Servlet呼び出し用のクラスを作成する必要があるか? google等で色々と調べてみましたがベストな方法が浮かびません。 ご経験などがあれば教えていただきたいのですが、 1、定時起動のバッチ処理などは皆さんはどの様に実現していますか? 2、Servletの呼び出しだけを行う方法はあるのでしょうか? 何か情報がございましたらよろしくお願いいたします。 | ||||||||||||
|
投稿日時: 2003-12-14 14:56
そのservletはどのような処理を行うものなのでしょうか。
sub mainで処理を行うという方法では駄目なのでしょうか? (その処理はservletである必要はあるのでしょうか?) >もしかしたらとても初歩的な内容かもしれないのですが、教えて下さい。 何故初歩的だと思ったのでしょうか。 また、あなたはどのようなものを初歩的と考えますか? | ||||||||||||
|
投稿日時: 2003-12-14 18:58
こんにちは。
j2eeに対する知識不足と指摘されそうですが・・ 1、処理はサブシステム単位にearファイルにarchiveにしており、jbossの クラスローダにより読み出されています。この場合、jboss以外の環境 から、つまりスケジューリングソフト等からコールする場合はclasspath などが必要かと考えearファイルにpathを通してみたのですが、実行でき ませんでした。 2、スケジューラソフトはライセンスの関係で別サーバに存在しているため、 例えばNetBIOS経由のクラスファイルの取得や、もしくはearとは別管理 にしてバッチ処理クラスを管理するのはなるべく避けたいと考えました。 以上の様な状況でした。またservletにすれば障害時のrerun等もweb画面 から提供できる為、運用的にもベストかと考えました。
直感的に思ったので・・ servletをブラウザ以外のclientから起動するのは最近では一般的な方法 なのでそう思ったのだと思います。appletやjwsだけではなくunixのconsole やDOSのpromptから実行する方法もあるかもしれないと考えました。 unixであればtelnetやrshでできるかな?・・と書いているときに思った のですがWindowsのtelnetでポート指定をしてできるかもしれませんね? やってみます・・ | ||||||||||||
|
投稿日時: 2003-12-14 22:18
matuさん、こんにちは。
ブラウザの代わりをする Webクライアントを作って、それを 定時起動すればできないことはありません。 しかし、私から見るとかなりスマートでない…。というより 少しだけナンセンスに近いです。 JBoss + Tomcat を使ってるような環境で classpath設定して チョチョイとやってしまうのもできるとは思いますが、 それなりに理解してないと危ない気がします。 せっかくEJB使われてるなら、EJBのクライアントを定時起動して そこから必要な処理を呼び出すようにしてはいかがでしょうか? EJBクライアントは必ずしも JBossと同じホストから起動する必要 ないですし、後々融通は利くと思われます。 | ||||||||||||
|
投稿日時: 2003-12-14 23:28
Kissingerさんこんばんは。
Sessionのタイムアウトで2度目の書き込みです・・1度目は消えてしまいました。
確かに私も違和感を感じていました。代替案が出なかったのですが・・
ご存知であれば教えていただきたいのですが、earファイルの中のjar ファイルにclasspathなどを利用してアクセスする方法はあるのでしょ うか?実際に試してみたのですが、パスは通っていないようでした。
なるほど!?思いつきませんでした・・私はまだまだj2eeを活用できて いないですね。 間違って解釈していたら申し訳ないのですが、これはグローバルなJNDI を使用してSessionEJBなどにアクセスするという意味ですよね?確かに これは違和感を感じません。この場合はクライアント側にはjdk(naming package) とjndi.propertiesが必要でしょうか? earファイル以外に管理しなければならないクラスやjarファイルが出て くるのが少し残念なのですが、今回はバッチコントロールというサーバ的 な処理なので、現状ではEJBで行うのがベストに感じます。 この点について何か良いアドバイスがあればご教授頂けると幸いです。 思いつかなかったので感激です。ありがとうございます。 [ メッセージ編集済み 編集者: matu 編集日時 2003-12-14 23:39 ] | ||||||||||||
|
投稿日時: 2003-12-14 23:55
通常では earの中までは無理だと思います。 でもEJBコンテナを介さずにアプリケーションとして立ち上げ可能な コンポーネントだけを起動するだけという条件付なら、クラスパスを 読んで earファイルの中の jarからクラスをローディングするプログラム まで書けば可能です。 実験レベルでやったことありますが、 後々登場する様々な仕組みを利用できなくなる可能性があるので お勧めはしません。
それは私にはわかりません。 オブジェクトやサービスを見つけ出す方法が他になければ、必要な のでしょうね。 でも、余程古い JDKでなければ、namingパッケージインストール されているのではないでしょうか? # 歯切れが悪くて申しわけありません。 | ||||||||||||
|
投稿日時: 2003-12-15 02:18
どうもです。とても参考になります。 今回は色々考えた末でコンテナを介さずにearファイルを利用するという発想 をしてしまいましたが、基本に戻って「JNDI」「Servlet」「webサービス」など の様々なクライアント向けインターフェースがあるんですよね もっと基本的なインターフェースを最大に活用する発想をしないと・・反省。 jdkは1.4.2を使用しているので問題ありません。 ところでKissingerさんはEJBコンテナは何をお使いなのでしょうか?Schedule 機能の実装はありますか? | ||||||||||||
|
投稿日時: 2003-12-15 02:41
ちょっと横槍ですが、どうも色々とキーワードをごっちゃにされている ようですのでひと言。 今回の問題を整理すると「EJBのロジックをリモートのスケジューラから 起動したい」ということに尽きますよね? で、今回の場合はJNDIはEJBを検索する際に使うディレクトリサービス ですから、これはクライアント向けインタフェースではありませんよね? 問題は、EJBの機能を利用するクライアントを、Servletで実装するのか、 コマンドラインアプリケーションとするのか、その違いだと思います。 もうちょっと、ちゃんとServlet/JSP & EJBの基本について勉強された 方が宜しいのではないでしょうか? 何事も最初が肝心ですから [ メッセージ編集済み 編集者: おばけ 編集日時 2003-12-15 02:44 ] | ||||||||||||
