修改:我重新提问,以包含最新发现并删除已修复的问题。
我正在开发之前由同事创建的servlet应用程序myapp
。
我在Debian下开发和运行它,我使用的Tomcat服务器是版本6.
在此应用程序中,使用了三个文件:
myapp-database.db - sqlite file, if is is not present application creates it
myapp-log.xml - log file, it is opened/created by the application
myapp-config.xml - configuration files, included in /usr/main/resources
如果我在我的主目录中安装的Eclipse-inner-Tomcat上运行它,
文件:myapp-database.db
和myapp-log.xml
直接在我的主目录中创建。
如果我将应用程序部署到与aptitude一起安装的系统Tomcat,则此文件存在问题。
它显示在catalina.out
:
Error while initialising logger: mylog.xml
java.io.IOException: Couldn't get lock for mylog.xml
...
SEVERE: couldn't initialize database:
opening db: 'mydb.db': Permission denied
java.sql.SQLException: opening db: 'mydb.db': Permission denied
...
我像这样部署应用程序:
sudo cp myapp.war /var/lib/tomcat6/webapps/
然后我无法打开系统Tomcat。如果我从webapps
删除该应用,则表示没问题。
我在光盘上的某个地方创建了目录,并将所有者更改为tomcat。 我将代码中的文件名更改为绝对路径,以便在目录中创建它们。 Tomcat打开并且没有崩溃,文件是在那里创建的。
这是处理这个问题的正常方法吗? 完全在tomcat之外创建应用程序文件? 我认为这会降低应用程序的可移植性/安装难度。
也许我应该将文件放在/usr/main/resources
中,就像myapp-config.xml
一样正常?
但我真的不确定如何让路径指向他们呢?
我也不喜欢这个解决方案,因为应用程序应该创建文件,如果它们不存在。