web-dev-qa-db-fra.com

La bibliothèque native Apache Tomcat basée sur APR est introuvable sur le fichier Java.library.path.

Je suis nouvellement en développement de serveur et ai été démarré à partir d'un tutoriel facile par Lars Vogel. développement de servlets et de JSP avec Eclipse WTP .

Pas à pas accordez ce tutoriel:

  • eclipse installé Java EE Kepler;
  • tomcat 7 installé sur Ubuntu 12.04 - http://localhost:8080/ affiche la page Tomcat correcte;
  • Configuration des environnements d’exécution Tomcat dans Eclipse;
  • ajouté le serveur Tomcat à Eclipse;
  • créer DAO;
  • créé le servlet;
  • courir =>

Et ici, j'ai attrapé la prochaine invite:

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

Voici le contenu du dossier 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

Voici le contenu de catalina.2013-09-15.log .

Mise à jour:

Voici le tutoriel:
Installation d'Apache Tomcat Native sur Linux Ubuntu 12.04

Update2:

Voici le contenu de Data Access Object:

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();
    }
  }

} 

Et voici le code Servlet:

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();
    }
  }

} 

Je n'ai pas encore eu web.xml.

Comment résoudre ce problème?

30
nazar_art

introuvable sur Java.library.path:/usr/Java/packages/lib/AMD64:/usr/lib64:/lib64:/lib:/usr/lib

La bibliothèque native est attendue dans l'un des emplacements suivants

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

et pas dans

Tomcat/lib

Les fichiers dans Tomcat/lib sont tous des fichiers jar et sont ajoutés par Tomcat au fichier classpath afin qu’ils soient disponibles pour votre application.

Tomcat a besoin de la bibliothèque native pour fonctionner plus efficacement sur la plate-forme sur laquelle elle est installée et ne peut donc pas être un jar. Pour Linux, cela pourrait être un .so fichier, pour Windows cela pourrait être un .dll fichier.

Il suffit de téléchargez la bibliothèque native de votre plate-forme et placez-la dans l'un des emplacements attendus par Tomcat.

Notez que vous n'êtes pas obligé d'avoir cette lib à des fins de développement/test. Tomcat fonctionne très bien sans ça.

org.Apache.catalina.startup.Catalina start INFO: Démarrage du serveur en 2882 ms

[~ # ~] éditer [~ # ~]

La sortie que vous obtenez est très normale, c’est juste quelques-unes des sorties de journalisation de Tomcat, la ligne ci-dessus indique que le serveur a correctement démarré et qu’il est prêt à fonctionner.

Si vous ne parvenez pas à exécuter votre servlet, après la run on sever commande Eclipse ouvre une fenêtre de navigateur (intégrée (par défaut) ou externe, selon votre configuration). Si rien ne s'affiche sur le navigateur, consultez la barre d'adresse du navigateur pour voir si votre servlet a été demandé ou non.

Ça devrait être quelque chose comme ça

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

EDIT 2

Essayez d'appeler votre servlet en utilisant l'URL suivante

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

De plus, chaque projet Web a un fichier web.xml que vous pouvez trouver dans votre projet sous WebContent\WEB-INF.

Il vaut mieux y configurer vos servlets en utilisant servlet-nameservlet-class et url-mapping. Cela pourrait ressembler à ça:

  <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>

Dans le projet Web dynamique Eclipse, le nom de contexte par défaut est identique à celui de votre projet.

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

va travailler aussi.

19
A4L

En ce qui concerne la question initiale posée dans le titre ...

  • Sudo apt-get install libtcnative-1

  • ou si vous êtes sur RHEL Linux yum install Tomcat-native

La documentation indique que vous avez besoin http://Tomcat.Apache.org/native-doc/

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