【问题标题】:Tomcat uses project directory for relative pathsTomcat 使用项目目录作为相对路径
【发布时间】:2012-06-06 09:47:25
【问题描述】:

我有一个 GWT Web 应用程序,它在磁盘上的相对目录“cache”下创建一个缓存。在我在 Eclipse 中的 JUnit 测试中它可以工作,但是当我在 Tomcat 中部署它时,程序 仍然 尝试在 /home/username/projects/myproject/cache(重命名的真实路径)而不是 /var/lib/tomcat7/webapps/myproject/cache 中创建文件,因为它没有那里没有文件写访问权限,它崩溃了。创建缓存的代码是一个外部库,所以它甚至不能被硬编码。

可以是符号链接吗?或者Tomcat和Eclipse可以共享一个JVM吗? 这个错误快把我逼疯了。

错误信息

org.h2.jdbc.JdbcSQLException: Fehler beim Erzeugen der Datei "/home/username/projects/myproject/cache"
Error while creating file "/home/username/projects/myproject/cache" [90062-143]
    at org.h2.message.DbException.getJdbcSQLException(DbException.java:327)
    at org.h2.message.DbException.get(DbException.java:167)
    at org.h2.message.DbException.get(DbException.java:144)
    at org.h2.store.fs.FileSystemDisk.createDirs(FileSystemDisk.java:368)
    at org.h2.store.FileLock.lockFile(FileLock.java:328)
    at org.h2.store.FileLock.lock(FileLock.java:134)
    at org.h2.engine.Database.open(Database.java:525)
    at org.h2.engine.Database.openDatabase(Database.java:208)
    at org.h2.engine.Database.<init>(Database.java:203)
    at org.h2.engine.Engine.openSession(Engine.java:53)
    at org.h2.engine.Engine.openSession(Engine.java:147)
    at org.h2.engine.Engine.createSessionAndValidate(Engine.java:126)
    at org.h2.engine.Engine.createSession(Engine.java:109)
    at org.h2.engine.Engine.createSession(Engine.java:27)
    at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:289)
    at org.h2.engine.SessionRemote.createSession(SessionRemote.java:265)
    at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:110)
    at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:94)
    at org.h2.Driver.connect(Driver.java:73)
    at java.sql.DriverManager.getConnection(DriverManager.java:579)
    at java.sql.DriverManager.getConnection(DriverManager.java:221)

[...]

【问题讨论】:

    标签: tomcat path jvm


    【解决方案1】:

    请尝试

    String path = new File(servletContext.getRealPath("/cache")).getAbsolutePath()
    

    【讨论】:

    • 谢谢,这是规避问题的好方法,但为什么会首先出现?
    • 啊,非常感谢!我将http://www.h2database.com/html/cheatSheet.html 上的“jdbc:h2:test in the current(!) working directory”解释为 jvm 的根目录。
    • P.S.:我现在得到了异常 java.sql.SQLException: No suitable driver found for jdbc:h2:/usr/share/tomcat7/webapps/myapplication/cache/httplivedbpediaorgsparql_httpdbpediaorg;CACHE_SIZE=100000 。当我在 Junit 中使用这条路径测试 jdbc 时,它可以正常工作。您是否也知道该怎么做? :-)
    猜你喜欢
    • 1970-01-01
    • 2013-08-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-28
    • 2017-09-07
    • 2021-08-31
    • 2018-02-01
    • 1970-01-01
    相关资源
    最近更新 更多