- PR -

Servletを裏で定時起動する方法

投稿者投稿内容
matu
ベテラン
会議室デビュー日: 2002/09/01
投稿数: 95
お住まい・勤務地: 東京
投稿日時: 2003-12-14 12:22

 こんにちは。
 もしかしたらとても初歩的な内容かもしれないのですが、教えて下さい。
 
 現在スケジューラソフトから定時起動(例えば毎日朝7時起動など)したい
Servletがあります。スケジューラソフトにはServletを起動する仕組みは備
わっていません。

 環境は以下です。
・OS: Windows2000
・web-server: jboss3.2+tomcat4


 Servletを裏で定時起動する方法で色々検討してみたのですが
・DOSコマンドなどでできないか?
・IEなどで引数指定でServletの呼び出しだけをできないか?
 (画面は出したくありません・・)
・Servlet呼び出し用のクラスを作成する必要があるか?


 google等で色々と調べてみましたがベストな方法が浮かびません。
ご経験などがあれば教えていただきたいのですが、
1、定時起動のバッチ処理などは皆さんはどの様に実現していますか?
2、Servletの呼び出しだけを行う方法はあるのでしょうか?

 何か情報がございましたらよろしくお願いいたします。
TomScissors
ベテラン
会議室デビュー日: 2003/06/05
投稿数: 79
投稿日時: 2003-12-14 14:56
そのservletはどのような処理を行うものなのでしょうか。
sub mainで処理を行うという方法では駄目なのでしょうか?

(その処理はservletである必要はあるのでしょうか?)


>もしかしたらとても初歩的な内容かもしれないのですが、教えて下さい。
何故初歩的だと思ったのでしょうか。
また、あなたはどのようなものを初歩的と考えますか?
matu
ベテラン
会議室デビュー日: 2002/09/01
投稿数: 95
お住まい・勤務地: 東京
投稿日時: 2003-12-14 18:58

 こんにちは。

引用:

そのservletはどのような処理を行うものなのでしょうか。
sub mainで処理を行うという方法では駄目なのでしょうか?
(その処理はservletである必要はあるのでしょうか?)



 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でポート指定をしてできるかもしれませんね?
やってみます・・
Kissinger
ぬし
会議室デビュー日: 2002/04/30
投稿数: 428
お住まい・勤務地: 愛知県
投稿日時: 2003-12-14 22:18
matuさん、こんにちは。

ブラウザの代わりをする Webクライアントを作って、それを
定時起動すればできないことはありません。
しかし、私から見るとかなりスマートでない…。というより
少しだけナンセンスに近いです。

JBoss + Tomcat を使ってるような環境で classpath設定して
チョチョイとやってしまうのもできるとは思いますが、
それなりに理解してないと危ない気がします。

せっかくEJB使われてるなら、EJBのクライアントを定時起動して
そこから必要な処理を呼び出すようにしてはいかがでしょうか?
EJBクライアントは必ずしも JBossと同じホストから起動する必要
ないですし、後々融通は利くと思われます。
matu
ベテラン
会議室デビュー日: 2002/09/01
投稿数: 95
お住まい・勤務地: 東京
投稿日時: 2003-12-14 23:28
 Kissingerさんこんばんは。
 Sessionのタイムアウトで2度目の書き込みです・・1度目は消えてしまいました。


引用:

ブラウザの代わりをする Webクライアントを作って、それを
定時起動すればできないことはありません。
しかし、私から見るとかなりスマートでない…。というより
少しだけナンセンスに近いです。


 確かに私も違和感を感じていました。代替案が出なかったのですが・・


引用:

JBoss + Tomcat を使ってるような環境で classpath設定して
チョチョイとやってしまうのもできるとは思いますが、
それなりに理解してないと危ない気がします。


 ご存知であれば教えていただきたいのですが、earファイルの中のjar
ファイルにclasspathなどを利用してアクセスする方法はあるのでしょ
うか?実際に試してみたのですが、パスは通っていないようでした。


引用:

せっかくEJB使われてるなら、EJBのクライアントを定時起動して
そこから必要な処理を呼び出すようにしてはいかがでしょうか?
EJBクライアントは必ずしも JBossと同じホストから起動する必要
ないですし、後々融通は利くと思われます。


 なるほど!?思いつきませんでした・・私はまだまだj2eeを活用できて
いないですね。
 間違って解釈していたら申し訳ないのですが、これはグローバルなJNDI
を使用してSessionEJBなどにアクセスするという意味ですよね?確かに
これは違和感を感じません。この場合はクライアント側にはjdk(naming package)
とjndi.propertiesが必要でしょうか?

 earファイル以外に管理しなければならないクラスやjarファイルが出て
くるのが少し残念なのですが、今回はバッチコントロールというサーバ的
な処理なので、現状ではEJBで行うのがベストに感じます。
 この点について何か良いアドバイスがあればご教授頂けると幸いです。


 思いつかなかったので感激です。ありがとうございます。


[ メッセージ編集済み 編集者: matu 編集日時 2003-12-14 23:39 ]
Kissinger
ぬし
会議室デビュー日: 2002/04/30
投稿数: 428
お住まい・勤務地: 愛知県
投稿日時: 2003-12-14 23:55
引用:
 ご存知であれば教えていただきたいのですが、earファイルの中のjar
ファイルにclasspathなどを利用してアクセスする方法はあるのでしょ
うか?


通常では earの中までは無理だと思います。
でもEJBコンテナを介さずにアプリケーションとして立ち上げ可能な
コンポーネントだけを起動するだけという条件付なら、クラスパスを
読んで earファイルの中の jarからクラスをローディングするプログラム
まで書けば可能です。 実験レベルでやったことありますが、
後々登場する様々な仕組みを利用できなくなる可能性があるので
お勧めはしません。

引用:
この場合はクライアント側にはjdk(naming package)
とjndi.propertiesが必要でしょうか?


それは私にはわかりません。
オブジェクトやサービスを見つけ出す方法が他になければ、必要な
のでしょうね。
でも、余程古い JDKでなければ、namingパッケージインストール
されているのではないでしょうか?

# 歯切れが悪くて申しわけありません。
matu
ベテラン
会議室デビュー日: 2002/09/01
投稿数: 95
お住まい・勤務地: 東京
投稿日時: 2003-12-15 02:18

 どうもです。とても参考になります。
 今回は色々考えた末でコンテナを介さずにearファイルを利用するという発想
をしてしまいましたが、基本に戻って「JNDI」「Servlet」「webサービス」など
の様々なクライアント向けインターフェースがあるんですよね


 もっと基本的なインターフェースを最大に活用する発想をしないと・・反省。

 jdkは1.4.2を使用しているので問題ありません。
 ところでKissingerさんはEJBコンテナは何をお使いなのでしょうか?Schedule
機能の実装はありますか?
おばけ
ぬし
会議室デビュー日: 2002/11/14
投稿数: 609
お住まい・勤務地: 東京都江東区
投稿日時: 2003-12-15 02:41
引用:

 今回は色々考えた末でコンテナを介さずにearファイルを利用するという発想
をしてしまいましたが、基本に戻って「JNDI」「Servlet」「webサービス」など
の様々なクライアント向けインターフェースがあるんですよね


ちょっと横槍ですが、どうも色々とキーワードをごっちゃにされている
ようですのでひと言。

今回の問題を整理すると「EJBのロジックをリモートのスケジューラから
起動したい」ということに尽きますよね?

で、今回の場合はJNDIはEJBを検索する際に使うディレクトリサービス
ですから、これはクライアント向けインタフェースではありませんよね?

問題は、EJBの機能を利用するクライアントを、Servletで実装するのか、
コマンドラインアプリケーションとするのか、その違いだと思います。

もうちょっと、ちゃんとServlet/JSP & EJBの基本について勉強された
方が宜しいのではないでしょうか?
何事も最初が肝心ですから


[ メッセージ編集済み 編集者: おばけ 編集日時 2003-12-15 02:44 ]

スキルアップ/キャリアアップ(JOB@IT)