3

我在将应用程序部署到我的 tomcat 服务器时遇到问题。每次部署它时,我都会得到以下跟踪:

27-Oct-2013 17:02:34 org.apache.catalina.startup.HostConfig deployWAR
INFO: Deploying web application archive /var/lib/tomcat7/webapps/JsonTest.war
Handler error
java.io.IOException: Couldn't get lock for %h/java%u.log
at java.util.logging.FileHandler.openFiles(FileHandler.java:389)
at java.util.logging.FileHandler.<init>(FileHandler.java:225)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:532)
at java.lang.Class.newInstance0(Class.java:374)
at java.lang.Class.newInstance(Class.java:327)
at org.apache.juli.ClassLoaderLogManager.readConfiguration(ClassLoaderLogManager.java:521)
at org.apache.juli.ClassLoaderLogManager.readConfiguration(ClassLoaderLogManager.java:464)
at org.apache.juli.ClassLoaderLogManager$2.run(ClassLoaderLogManager.java:377)
at org.apache.juli.ClassLoaderLogManager$2.run(ClassLoaderLogManager.java:373)
at java.security.AccessController.doPrivileged(Native Method)
at org.apache.juli.ClassLoaderLogManager.getClassLoaderInfo(ClassLoaderLogManager.java:373)
at org.apache.juli.ClassLoaderLogManager.getLogger(ClassLoaderLogManager.java:223)
at java.util.logging.LogManager.demandLogger(LogManager.java:381)
at java.util.logging.Logger.demandLogger(Logger.java:310)
at java.util.logging.Logger.getLogger(Logger.java:341)
at org.apache.juli.logging.DirectJDKLog.<init>(DirectJDKLog.java:71)
at org.apache.juli.logging.DirectJDKLog.getInstance(DirectJDKLog.java:196)
at org.apache.juli.logging.LogFactory.getInstance(LogFactory.java:170)
at org.apache.juli.logging.LogFactory.getLog(LogFactory.java:311)
at org.apache.catalina.core.ContainerBase.getLogger(ContainerBase.java:446)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5150)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:895)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:871)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:615)
at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:958)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:536)
at org.apache.catalina.startup.HostConfig.check(HostConfig.java:1467)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

服务器上下文:

  • Ubuntu 12.04.3 LTS 32 位(稍后我会升级到 64..)
  • Tomcat 7(从库存安装修改的唯一内容是为管理器添加用户[-gui])
  • 爪哇

    $ java -version
    java version "1.6.0_27"
    OpenJDK Runtime Environment (IcedTea6 1.12.6) (6b27-1.12.6-1ubuntu0.12.04.2)
    OpenJDK Client VM (build 20.0-b12, mixed mode, sharing)
    

应用上下文:

我正在尝试将此处概述的简单“书籍 REST 应用程序”转换为使用 Mongo 连接。我觉得 Mongo 部分在这里无关紧要。我还使用 Maven 和 Eclipse 来部署/构建项目。

一些文件:

pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <!-- Project detailes -->
    <modelVersion>4.0.0</modelVersion>
    <groupId>net.navatwo</groupId>
    <artifactId>jsontest</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>Test JSON Marshalling</name>
    <build>
        <finalName>JsonTest</finalName>
         <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <configuration>
                    <additionalClasspathElements>
                        <additionalClasspathElement>${basedir}/src/main/webapp/WEB-INF</additionalClasspathElement>
                    </additionalClasspathElements>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.0</version>
                <configuration>
                    <url>http://localhost:8080/manager/text</url>
                    <server>tomcat-server</server>
                    <path>/${project.build.finalName}</path>
                </configuration>
            </plugin>
        </plugins>
    </build>
    <!-- Dependency on Wink SDK library -->
    <dependencies>
       <dependency>
            <groupId>org.apache.wink</groupId>
            <artifactId>wink-component-test-support</artifactId>
            <version>1.4</version>
        </dependency>
        <dependency>
            <groupId>org.apache.wink</groupId>
            <artifactId>wink-server</artifactId>
            <version>1.4</version>
            <exclusions>
                <exclusion>
                    <artifactId>slf4j-api</artifactId>
                    <groupId>org.slf4j</groupId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.apache.wink</groupId>
            <artifactId>wink-server</artifactId>
            <version>1.4</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <scope>test</scope>
            <version>4.0</version>
        </dependency>
        <dependency>
            <groupId>woodstox</groupId>
            <artifactId>wstx-asl</artifactId>
            <version>3.2.1</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.google.inject</groupId>
            <artifactId>guice</artifactId>
            <version>4.0-beta</version>
        </dependency>
        <dependency>
            <groupId>org.apache.wink</groupId>
            <artifactId>wink-jackson-provider</artifactId>
            <version>1.4</version>
        </dependency>
        <dependency>
            <groupId>org.mongodb</groupId>
            <artifactId>mongo-java-driver</artifactId>
            <version>2.10.1</version>
        </dependency>
        <dependency>
            <groupId>org.mongojack</groupId>
            <artifactId>mongojack</artifactId>
            <version>2.0.0-RC5</version>
        </dependency>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.0.13</version>
        </dependency>
    </dependencies>
    <packaging>war</packaging>
</project>

BookWebApp.java

/**
 * 
 */
package org.navatwo.jsontest;

import java.net.UnknownHostException;
import java.util.HashSet;
import java.util.Set;

import javax.ws.rs.core.Application;

import org.codehaus.jackson.jaxrs.JacksonJaxbJsonProvider;
import org.codehaus.jackson.jaxrs.JacksonJsonProvider;
import org.codehaus.jackson.map.AnnotationIntrospector;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.map.introspect.JacksonAnnotationIntrospector;
import org.codehaus.jackson.xc.JaxbAnnotationIntrospector;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.google.inject.AbstractModule;
import com.google.inject.Guice;
import com.google.inject.Injector;
import com.mongodb.DB;
import com.mongodb.MongoClient;

public class BookWebApp extends Application {

    private Logger log;

    private static class AppModule extends AbstractModule {

        /* (non-Javadoc)
         * @see com.google.inject.AbstractModule#configure()
         */
        @Override
        protected void configure() {
            bind(BookService.class).to(BookServiceImpl.class);

            // MONGO
            try {
                MongoClient mongoClient = new MongoClient("localhost");

                bind(MongoClient.class).toInstance(mongoClient);
                bind(DB.class).toInstance(mongoClient.getDB("db"));
            } catch (UnknownHostException e) {
                throw new RuntimeException("AppModule#configure threw UnknownHostException", e);
            }

            // LOGGING
            bind(Logger.class).toInstance(LoggerFactory.getLogger(BookWebApp.class));
        }

    }

    private Injector injector = Guice.createInjector(new AppModule());

    private Set<Object> svc_singletons = new HashSet<Object>(); 
    private Set<Class<?>> svc_classes  = new HashSet<Class<?>>();

    public BookWebApp() {
        svc_singletons.add(injector.getInstance(BookService.class));
//      svc_singletons.add(injector.getInstance(JacksonJsonProvider.class));
        svc_singletons.add(injector.getInstance(Logger.class));

        log.info("Started?");

        log = injector.getInstance(Logger.class);
    }

    @Override
    public Set<Object> getSingletons() {
        return svc_singletons;
    }

    @Override
    public Set<Class<?>> getClasses() {
        return svc_classes;
    }

}

我不想用代码污染帖子,所以如果您认为其他人有用,请告诉我。

我很感激任何帮助。

4

1 回答 1

1

java.io.IOException: 无法获得 %h/java%u.log 的锁定

It looks like Tomcat does not have filesystem permissions to write to the log file. The %h variable is the value of the user.home system property, which is usually the home directory of the system user running the Tomcat process. Make sure that Tomcat has write permissions to that directory.

The location of that directoy can vary, but you can find it programmatically with:

System.getProperty("user.home")

You can also modify the default value by providing the argument -Duser.home=/your/path to the Tomcat startup script.

于 2013-10-27T22:04:02.617 回答