web-dev-qa-db-ja.com

APRベースのApache TomcatネイティブライブラリがJava.library.pathに見つかりませんでした

私は新しくサーバー開発に携わり、Lars Vogelによる簡単なチュートリアルから始めました。 Eclipse WTPを使用したサーブレットおよびJSP開発 .

ステップバイステップこのチュートリアルに従ってください:

  • eclipseのインストールJava EE Kepler;
  • ubuntu 12.04にTomcat 7をインストールしました-http://localhost:8080/は正しいTomcatページを表示します。
  • Tomcatランタイム環境をEclipseにセットアップします。
  • tomcatサーバーをEclipseに追加。
  • create DAO;
  • サーブレットを作成しました。
  • 実行=>

そして、ここで次のプロンプトをキャッチしました:

Sep 15, 2013 3:40:39 PM org.Apache.catalina.core.AprLifecycleListener init
INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the Java.library.path: /usr/Java/packages/lib/AMD64:/usr/lib64:/lib64:/lib:/usr/lib
Sep 15, 2013 3:40:42 PM org.Apache.Tomcat.util.digester.SetPropertiesRule begin
WARNING: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.Eclipse.jst.jee.server:com.filecounter' did not find a matching property.
Sep 15, 2013 3:40:43 PM org.Apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["http-bio-8080"]
Sep 15, 2013 3:40:43 PM org.Apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["ajp-bio-8009"]
Sep 15, 2013 3:40:43 PM org.Apache.catalina.startup.Catalina load
INFO: Initialization processed in 5203 ms
Sep 15, 2013 3:40:43 PM org.Apache.catalina.core.StandardService startInternal
INFO: Starting service Catalina
Sep 15, 2013 3:40:43 PM org.Apache.catalina.core.StandardEngine startInternal
INFO: Starting Servlet Engine: Apache Tomcat/7.0.42
Sep 15, 2013 3:40:45 PM org.Apache.catalina.util.SessionIdGenerator createSecureRandom
INFO: Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [171] milliseconds.
Sep 15, 2013 3:40:46 PM org.Apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["http-bio-8080"]
Sep 15, 2013 3:40:46 PM org.Apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["ajp-bio-8009"]
Sep 15, 2013 3:40:46 PM org.Apache.catalina.startup.Catalina start
INFO: Server startup in 2882 ms

Tomcat/libフォルダのコンテンツは次のとおりです。

nazar_art@nazar-desctop:/usr/local/Tomcat/Apache-Tomcat-7.0.42/lib$ ls -lg
total 6132
-rwxrwxrwx 1 nazar_art   15264 Jul  2 10:59 annotations-api.jar
-rwxrwxrwx 1 nazar_art   54142 Jul  2 10:59 catalina-ant.jar
-rwxrwxrwx 1 nazar_art  134215 Jul  2 10:59 catalina-ha.jar
-rwxrwxrwx 1 nazar_art 1581311 Jul  2 10:59 catalina.jar
-rwxrwxrwx 1 nazar_art  257520 Jul  2 10:59 catalina-tribes.jar
-rwxrwxrwx 1 nazar_art 1801636 Jul  2 10:59 ecj-4.2.2.jar
-rwxrwxrwx 1 nazar_art   46085 Jul  2 10:59 el-api.jar
-rwxrwxrwx 1 nazar_art  123241 Jul  2 10:59 jasper-el.jar
-rwxrwxrwx 1 nazar_art  599428 Jul  2 10:59 jasper.jar
-rwxrwxrwx 1 nazar_art   88690 Jul  2 10:59 jsp-api.jar
-rwxrwxrwx 1 nazar_art  177598 Jul  2 10:59 servlet-api.jar
-rwxrwxrwx 1 nazar_art    6873 Jul  2 10:59 Tomcat-api.jar
-rwxrwxrwx 1 nazar_art  796527 Jul  2 10:59 Tomcat-coyote.jar
-rwxrwxrwx 1 nazar_art  235411 Jul  2 10:59 Tomcat-dbcp.jar
-rwxrwxrwx 1 nazar_art   77364 Jul  2 10:59 Tomcat-i18n-es.jar
-rwxrwxrwx 1 nazar_art   48693 Jul  2 10:59 Tomcat-i18n-fr.jar
-rwxrwxrwx 1 nazar_art   51678 Jul  2 10:59 Tomcat-i18n-ja.jar
-rwxrwxrwx 1 nazar_art  124006 Jul  2 10:59 Tomcat-jdbc.jar
-rwxrwxrwx 1 nazar_art   23201 Jul  2 10:59 Tomcat-util.jar

catalina.2013-09-15.logの内容

更新:

チュートリアルは次のとおりです。
Linux Ubuntu 12.04へのApache Tomcat Nativeのインストール

Update2:

データアクセスオブジェクトの内容は次のとおりです。

public class FileDao {

  public int getCount() {
    int count = 0;
    // Load the file with the counter
    FileReader fileReader = null;
    BufferedReader bufferedReader = null;
    PrintWriter writer = null ; 
    try {
      File f = new File("FileCounter.initial");
      if (!f.exists()) {
        f.createNewFile();
        writer = new PrintWriter(new FileWriter(f));
        writer.println(0);
      }
      if (writer !=null){
        writer.close();
      }

      fileReader = new FileReader(f);
      bufferedReader = new BufferedReader(fileReader);
      String initial = bufferedReader.readLine();
      count = Integer.parseInt(initial);
    } catch (Exception ex) {
      if (writer !=null){
        writer.close();
      }
    }
    if (bufferedReader != null) {
      try {
        bufferedReader.close();
      } catch (IOException e) {
        e.printStackTrace();
      }
    }
    return count;
  }

  public void save(int count) throws Exception {
    FileWriter fileWriter = null;
    PrintWriter printWriter = null;
    fileWriter = new FileWriter("FileCounter.initial");
    printWriter = new PrintWriter(fileWriter);
    printWriter.println(count);

    // Make sure to close the file
    if (printWriter != null) {
      printWriter.close();
    }
  }

} 

そして、ここでサーブレットコード:

public class FileCounter extends HttpServlet {
  private static final long serialVersionUID = 1L;

  int count;
  private FileDao dao;

  public void init() throws ServletException {
    dao = new FileDao();
    try {
      count = dao.getCount();
    } catch (Exception e) {
      getServletContext().log("An exception occurred in FileCounter", e);
      throw new ServletException("An exception occurred in FileCounter"
          + e.getMessage());
    }
  }

  protected void doGet(HttpServletRequest request,
      HttpServletResponse response) throws ServletException, IOException {
    // Set a cookie for the user, so that the counter does not increate
    // every time the user press refresh
    HttpSession session = request.getSession(true);
    // Set the session valid for 5 secs
    session.setMaxInactiveInterval(5);
    response.setContentType("text/plain");
    PrintWriter out = response.getWriter();
    if (session.isNew()) {
      count++;
    }
    out.println("This site has been accessed " + count + " times.");
  }

  public void destroy() {
    super.destroy();
    try {
      dao.save(count);
    } catch (Exception e) {
      e.printStackTrace();
    }
  }

} 

まだweb.xmlを持っていません。

このトラブルを解決する方法は?

30
nazar_art

java.library.pathに見つかりません:/ usr/Java/packages/lib/AMD64:/ usr/lib64:/ lib64:/ lib:/ usr/lib

ネイティブライブラリは、次のいずれかの場所にあることが期待されています

/usr/Java/packages/lib/AMD64
/usr/lib64
/lib64
/lib
/usr/lib

ではなく

Tomcat/lib

Tomcat/libのファイルはすべてjarファイルであり、Tomcatによってclasspathに追加され、アプリケーションで使用できるようになります。

Tomcatは、インストール先のプラットフォームでパフォーマンスを向上させるためにネイティブライブラリが必要であるため、jarにはできません。Linuxの場合は.soファイル、Windowsの場合は.dllファイル。

プラットフォームのネイティブライブラリをダウンロードする だけで、Tomcatが想定している場所の1つに配置します。

開発/テストの目的でこのライブラリを用意する必要はありません。 Tomcatは、それなしでも正常に動作します。

org.Apache.catalina.startup.Catalina start INFO:2882ミリ秒でのサーバーの起動

編集

取得する出力は非常に正常で、Tomcatからのログ出力の一部に過ぎません。上記の行は、サーバーが正常に起動し、動作準備ができていることを示しています。

サーブレットの実行に問題がある場合、run on severコマンドの後、Eclipseはブラウザーウィンドウを開きます(埋め込み(デフォルト)または外部、構成によって異なります)。ブラウザに何も表示されない場合は、ブラウザのURLバーをチェックして、サーブレットが要求されたかどうかを確認してください。

それはそのようなものでなければなりません

http://localhost:8080/<your-context-name>/<your-servlet-name>

EDIT 2

次のURLを使用してサーブレットを呼び出してみてください

http://localhost:8080/com.filecounter/FileCounter

また、各Webプロジェクトにはweb.xmlがあり、プロジェクトのWebContent\WEB-INFの下にあります。

servlet-nameservlet-classおよびurl-mappingを使用して、そこにサーブレットを構成することをお勧めします。次のようになります。

  <servlet>
    <description></description>
    <display-name>File counter - My first servlet</display-name>
    <servlet-name>file_counter</servlet-name>
    <servlet-class>com.filecounter.FileCounter</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>file_counter</servlet-name>
    <url-pattern>/FileFounter</url-pattern>
  </servlet-mapping>

Eclipse動的Webプロジェクトでは、デフォルトのコンテキスト名はプロジェクト名と同じです。

http://localhost:8080/<your-context-name>/FileCounter

も動作します。

19
A4L

タイトルで尋ねられた元の質問について...

  • Sudo apt-get install libtcnative-1

  • または、RHEL Linux yum install Tomcat-nativeを使用している場合

必要なドキュメントの状態 http://Tomcat.Apache.org/native-doc/

  • Sudo apt-get install libapr1.0-dev libssl-dev
  • またはRHEL yum install apr-devel openssl-devel
12
KCD