JSPからJNIを実行しabortするとtomcatが落ちる

このQ&Aのポイント
  • JSPからJNIを使用してCのライブラリをロードしていますが、Cのライブラリの中で異常終了すると、tomcatのプロセス自体が落ちてしまいます。これはJSPが1つのプロセスを使い実行している為、どうしようもないのでしょうか?
  • 通常、JAVAで異常が起きても、Exceptionを出してくれるので、プロセスが落ちる事はないと思いますが、Cの場合、メモリを確保していない領域以外へアクセスした時など、プロセス自体が終了してしまいます。Cの中できちんとエラーチェックをしなければいけないのは当たり前ですが、予期せぬエラーが発生した場合はもう少し影響範囲を小さくする事は出来ないのでしょうか?
  • JSPからJNIを実行しabortするとtomcatが落ちるという問題が発生しています。この問題はJSPが1つのプロセスを使い実行しているため、tomcatのプロセス自体がクラッシュしてしまうためです。また、Cの場合はメモリを確保していない領域へのアクセスなど、予期せぬエラーが発生した場合にプロセス自体が終了してしまうこともあります。そのため、Cの中でエラーチェックをしっかり行う必要がありますが、影響範囲を小さくする方法は限られているようです。
回答を見る
  • ベストアンサー

JSPからJNIを実行しabortするとtomcatが落ちる

自分の考え方があっているか教えてください。 tomcatを起動するとプロセスが1つ立ち上がりますが、 WEBからJSPを起動するとそのプロセスの中で動くのでしょうか? WEB画面のJSPを10枚立ち上げても1つのプロセスの中で処理される。 今回JSPからJNIを使用してCのライブラリをロードしていますが、 Cのライブラリの中で異常終了すると、tomcatのプロセス自体が落ちてしまいます。 WEBの1枚だけ異常終了するのはいいのですが、tomcat自体が落ちてしまうと影響範囲が大きいのですが、これはJSPが1つのプロセスを使い実行している為、どうしようもないのでしょうか? 通常、JAVAで異常が起きても、Exceptionを出してくれるので、プロセスが 落ちる事はないと思いますが、Cの場合、メモリを確保していない領域以外へアクセスした時など、プロセス自体が終了してしまいます。 Cの中できちんとエラーチェックをしなければいけないのは当たり前ですが、予期せぬエラーが発生した場合はもう少し影響範囲を小さくする事は 出来ないのでしょうか? 長々と申し訳ありません、なにかいい方法ありましたらアドバイスをお願いします。

  • Java
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • unibon
  • ベストアンサー率47% (160/340)
回答No.1

> WEBの1枚だけ異常終了するのはいいのですが、tomcat自体が落ちてしまうと影響範囲が大きいのですが、これはJSPが1つのプロセスを使い実行している為、どうしようもないのでしょうか? 基本的には、お考えのとおりです。どうしようもないです。 > Cの中できちんとエラーチェックをしなければいけないのは当たり前ですが、予期せぬエラーが発生した場合はもう少し影響範囲を小さくする事は > 出来ないのでしょうか? Windows/Linux などの OS だと、保護の単位がプロセスよりも細かいスレッド単位にできることもあるかもしれませんが、それとて万能ではないです。Java の側から Windows/Linux のスレッドを細かく制御できるわけでもないので、やはり Java で JNI を使う限りは、基本的に無理だと思います。 安直には JNI からそのライブラリーを使うプロセスを生成して呼ぶとかすれば、できますが、それだったら JNI を使わずに Java からプロセスを直接生成すればそれで済みます。プロセス生成のコストが高いですが、そこそこ現実的なソリューションでしょう。 あるいは、JNI の中で Windows/Linux のスレッドを細かく制御するなどすればもしかしたらできるのかもしれませんが、現実的ではないことが多いでしょう。それだったらライブラリーのバグを直すほうが現実的でしょう。

take_july
質問者

お礼

unibonさん、ありがとうございました。 色々検討した結果、やはりライブラリーのバグを徹底的に潰す 事にしました。

関連するQ&A

  • Apache2+JK2でjniを使用するとサーバーエラー(500)

    Tomcat4.1.24+Apache2+JK2を使ってPort 80でも JSP/Servletにアクセス出来るようにはなったのです が、JNIを使った通信がなかなかうまくいきません。例 えば、http://localhost/roller/にアクセスすると、 500 Internal Server Errorが返ってきます。どのよう にしたら解決できるのでしょうか?お願いします。 #workers2.properties [channel.jni:jni] [config:] TOMCAT_HOME=C:/Program Files/Apache Group/Tomcat 4.1 # Java バーチャルマシンのパラメータの定義 [vm:] info=Parameters used to load a JVM in the server process OPT=-Djava.class.path=${TOMCAT_HOME}/lib/tomcat-jni.jar;${TOMCAT_HOME}/lib/tomcat.jar OPT=-Dtomcat.home=${TOMCAT_HOME} OPT=-Dcatalina.home=${TOMCAT_HOME} OPT=-Xmx128M # JNI ワーカの起動時ハンドラ [worker.jni:onStartup] info=Command to be executed by the VM on startup. This one will start tomcat. class=org/apache/jk/apr/TomcatStarter ARG=start stdout=${serverRoot}/logs/stdout.log stderr=${serverRoot}/logs/stderr.log # JNI ワーカの終了時ハンドラ [worker.jni:onShutdown] info=Command to be executed by the VM on shutdown. This one will stop tomcat. class=org/apache/jk/apr/TomcatStarter ARG=stop # Tomcat の examples Web アプリケーションを Web サーバ URI 空間にマップ(関連付け) [uri:/examples/*] [uri:/roller/*] ====Apacheのerror.log========== [[Tue Jul 22 16:02:32 2003] [error] mod_jk.handler() Error connecting to tomcat 120000

  • TomcatのJSP Examplesのページを開けません

    これからJSP・サーブレットを勉強しようと思っている初心者です。 Tomcatを起動しhttp://locaohost:8080でページは表示されるのですが、JSP ExamplesとServlet Examplesを開こうとすると、 The requested resource (/jsp-examples/) is not available. というメッセージがでて開く事が出来ません。 WindowsXP J2SE 環境変数は path C:\Program Files\Java\jdk1.5.0\bin;C:\Program Files\MySQL Server4.1\bin CATALINA_HOME C:\Program Files\Apache Software Foundation\Tomcat5.5 JAVA_HOME C:\Program Files\Java\jdk1.5.0 CLASSPATH C:\Program Files\Apache Software Foundation\Tomcat5.5\common\lib\servlet_api.jar; C:\Program Files\Apache Software Foundation\Tomcat5.5\common\lib\jsp_api.jar; C:\Program Files\Apache Software Foundation\Tomcat5.5\webapps\jsp 10\WEB-INF\classes に設定してあります。 初歩的な質問で申し訳ありませんが、よろしくお願いします。

  • eclipseとtomcatで404エラー

    ----------------------------------- Windows7 Ultimate eclipse Indigo tomcat 5.5 ----------------------------------- eclipseとtomcatを使用して、JSPを動かそうとしています。 eclipseとtomcatとJDKはC:\pleiadesの下に配置しています。そしてワークスペースは C:\workspace\Testとして登録しています。(ちなみに動的Webプロジェクトで作成しています) 既存のJSPファイルをeclipse上で右クリックして、サーバーで実行とすると、eclipseの画面上にきちんと表示されるのですが、その後、そこで動いていたtomcatを終了させて、eclipseの上部にあるtomcatのアイコンをクリックし、その後、通常のブラウザで表示させようとすると404エラーが出てしまいます。(http://localhost:8080/Test/test.jsp) そもそも右クリック→実行の際に起動するtomcatとeclipse上部にアイコンで存在するtomcatはどう違うのでしょうか? そしてどうすれば、上部のtomcat起動からブラウザで直接JSPを呼び出すことが出来るのでしょうか? 申し訳ありませんが、ご教授お願い致します。

    • ベストアンサー
    • Java
  • tomcatについて

    tomcatを用いてJSPが出来るようにしたいのですが、 HTTPステータス 404 - /myApp/mathexp.jsp The requested resource (/myApp/mathexp.jsp) is not available. というエラーが出てしまい、全くの手詰まり状態です。 お約束のHelloWorldさえ表示できません。 servletのみは動くのですが・・・ web.xmlは <?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> <web-app> <display-name>myApp</display-name> <description> deply examples </description> </web-app> です。 OS:windowsXP tomcat:Tomcat 6.0.14 環境変数 JAVA_HOME:C:\Program Files\Java\jdk1.5.0_13 JRE_HOME:C:\Program Files\Java\jdk1.5.0_13\jre CATALINA_HOME:C:\tomcat\tomcat-6 ファイル C |tomcat ||tomcat-6 |||webapps ||||myApp ....HelloWorld.jsp |||||WEB-INF .....web.xml 原因はおそらくmyAppフォルダ内にあるHelloWorldが.jspで保存してもなぜかテキストファイルとなってしまう事にあるとおもうのですが、なぜこのようになるのかが分かりません。 詳しい方、ご回答よろしくお願いいたします。

    • ベストアンサー
    • Java
  • JNIについて

    JNI入門者なのですが、 少しJNIをやってみて、自分の中で発生した疑問について聞きたいです。 知りたいのが、 JNIはC/C++の利用で、FieldID、MethodID等で、ポインタ的なアプローチをしていますが、 高速である事意外に、javaのリフレクションと何が違うのか?という事です。 結局FindClassも、インスタンス化されていなければ、*env->NewObject(env,~とやって、 インスタンス化してあげないと、もし呼び出し元で参照されないところでnewされていたとしても、 そのクラスのインスタンスのインスタンスメソッドは呼べない、という事でいいのか? というところです。 WEB上で調べていると、情報が少なく、中にはあたかも、パッケージ名がわかれば、自由にVM内のインスタンスにアクセスできるような記載もあるので、よくわかりません。

  • Tomcatの設定について、404エラー

    本日の質問は、Tomcatのエラー404になります。 PCの環境OS:Windows7 JSPを始めるつもりで、下記のものをインストールしました。 javaのJDKをインストール済で、 Tomcat/7.0.32をインストールしました。 C:\Tomcat7\webapps\Sample_JSP\Sample_01.jsp C:\Tomcat7\webapps\Sample_JSP\WEB-INF\Sample_01.xml 環境変数   変数名:CATALINA_HOME   変数値:C:\Tomcat7 という感じで、Webページを参考にファイルを作り、 http://localhost:8080/は、表示させることができ、 http://localhost:8080/Sample_JSP\Sample_01.jspについても 表示出来ましたが、 http://localhost:8080/のページの HTTPステータス 404 - /manager/status HTTPステータス 404 - /manager/html HTTPステータス 404 - /host-manager/html どのページも、説明 The requested resource is not available. と出て、 Webページがが表示しません。 少し調べた所によると、tomcat-users.xml このファイルを なんか設定するように有り、admin の設定が入ってなかったので、 付け加えてみたり、削除してみたり、再起動もしました。 初心者なので、どこがおかしいのか良く解りません。 参考になるページでもありましたら、 どうか、よろしくお願いします。

  • eclipse + tomcatの連携に関して

    はじめましてwindows上でjavaを動かしている初心者です。 環境設定について悩んでいます。 質問内容 eclipse2.1.3とtomcat5.0.28を連携させて正常に起動していたのですが、手違いでtomcatをアンインストールしてしまいtomcatのみ再インストール(同じ5.0.28)しました。ブラウザ上で動作確認すると 入力 http://localhost:8080/プロジェクト名(test)/ファイル名.拡張子(index.jsp) 結果 HTTPステータス404-/test/index.jsp …となってしまいます。 再インストールの際二箇所変更点があり、以前は C:\Program Files\Apache Software Foundation\Tomcat 5.0 に格納していたtomcatを C:\Tomcat 5.0 に変更し、それに伴いeclipse上の TomcatホームをC:\Tomcat 5.0 Tomcat baseをC:\Tomcat 5.0 設定ファイルをC:\Tomcat 5.0\conf\server.xml に変更。環境変数も 変数名:CATALINA_HOME 変数値:C:\Tomcat 5.0 に変更後、動作確認すると404エラーが返ってしまいます。因みに http://localhost:8080 のみではApacheの画面が正常に表示されます。 tomcat再起動、windows再起動等調べた範囲で試してみましたが、解決できませんでした。 C:\Tomcat 5.0\conf\server.xmlと\conf\web.xml の設定は正常に起動していた時と全く同じ設定にしましたが、他に設定を変える必要があるのでしょうか?またはeclipse再インストールの必要があるのでしょうか?初歩的質問ですがよろしくお願いします。

  • Tomcatの接続について

    プログラミングは初心者のものです。 現在、Webアプリを構築しています。 Eclipseで JSPファイルを作成し、EclipseからTOMCATを起動して、 ブラウザでURLを入力すると作成したホームページには行けるのですが、 そこからリンク先に飛ぼうとしても以下のようなエラーメッセージがでてしまいます。 localhost:8080/JSP/×××.jps のサーバへの接続を確立できませんでした。 しかし、ホームページの場所で、TOMCATを再起動してみるとリンク先に飛ぶことができます。 どうやら、JSPファイルでのリンクの表記についてのエラーではなく、 TOMCATの接続が1回要求をかけると切れてしまう事が原因だと思うのですが、 どのような問題が考えられるでしょうか? また、解決策があれば説明の方をよろしくお願いします。

  • Tomcatでプログラムが動きません

    開発環境: Windows Vista SP2 Home java 2 SDK 1.6.0_24 Tomcat 6.0 です。 現在javaのservletとJSPをtomcatで勉強している者です。 http://journal.mycom.co.jp/special/2007/struts2/menu.html http://codezine.jp/article/detail/2296 を参考にしてTomcatを使い自分で作成したservletやJSPを動作させようとしたのですが 404エラー(存在しないファイル)が排出されるだけで実行できません。 上記のページが提供しているプログラムやweb.xml及びservlet.xml(javaroad.xml)を 配備しましたが404エラーが排出されるだけで動作しません。(編集するたびにTomcatを再起動させています) http://localhost:8080/のトップページは表示されますのでtomcatは動作していると思いますが、残念ながらどこが間違っているのか検討がつきません。 Tomcat Webアプリケーションマネージャで表示はされ、起動しようとするとアプリケーションが起動できませんと表示されます どのようにすれば宜しいのでしょうか、どうかご教授願います。

  • JSPファイルがコンパイルできない!

    雑誌に付いていたtomcat3.2.3用のServlet/JSPを tomcat4.1.10で動かそうとしたら、JSPファイルが コンパイルできないというエラーが出ました。 エラーの内容は、 ------------------------ org.apache.jasper.JasperException: JSPのクラスをコンパイルできません JSPファイル: /*****.jsp の中の行: 1でエラーが発生しました 生成されたサーブレットのエラーです: [javac] Compiling 1 source file C:\Program Files\Apache Group\Tomcat 4.1\work\Standalone\localhost\*****\*****_jsp.java:43: シンボルを解決できません。 シンボル: クラス ○○ 場所 : org.apache.jsp.*****_jsp の クラス ***** ***** = (*****)request.getAttribute("*****"); ^ -------------------------- といった感じです。 tomcat3.2.3ではちゃんと動いたのですが、 4.1.10では他に何かしなければいけないのでしょうか。 よろしくお願いします。

専門家に質問してみよう