1

Apache Wicket アプリを Jetty サーバーにデプロイしましたが、Wicket ページを開くたびに、jetty ログに次のエラーが表示されます。

WARN  - DiskDataStore              - Cannot save page with id '2' because the data file    cannot be opened.
ERROR - DiskDataStore              - /tmp/jetty-0.0.0.0-80-tourney.war-_tourney-any- /wicket.Tourneys-filestore/2gs9iqj4zdjtkerejipyu0co/data (No such file or directory)
java.io.FileNotFoundException: /tmp/jetty-0.0.0.0-80-tourney.war-_tourney-any-/wicket.Tourneys-filestore/2gs9iqj4zdjtkerejipyu0co/data (No such file or directory)
at java.io.RandomAccessFile.open(Native Method)
at java.io.RandomAccessFile.<init>(RandomAccessFile.java:233)
at org.apache.wicket.pageStore.DiskDataStore$SessionEntry.getFileChannel(DiskDataStore.java:410)
at org.apache.wicket.pageStore.DiskDataStore$SessionEntry.savePage(DiskDataStore.java:328)
at org.apache.wicket.pageStore.DiskDataStore.storeData(DiskDataStore.java:176)
at org.apache.wicket.pageStore.AsynchronousDataStore$PageSavingRunnable.run(AsynchronousDataStore.java:348)
at java.lang.Thread.run(Thread.java:636)

何がうまくいかなかったのですか?UNIX 権限が正しく設定されている。私も777で試しましたが、成功しませんでした:(

4

4 に答える 4

0

IStoreSettings にアクセスする方法がすぐにはわからなかったので、Martin の回答について詳しく説明することにしました。次のように、Wicket の API を使用してデータ ストア ディレクトリを更新できます。

public class MyApplication extends WebApplication {
    protected void init() {
        super.init();

        getStoreSettings().setFileStoreFolder(new File("/path/to/directory/"));
    }
}

とはいえ、それはあまり良い考えではないと思います。Wicket のデフォルト値は のように聞こえるため、Java で値をハードコーディングするよりも、そのプロパティを設定する方javax.servlet.context.tempdirはるかに優れています。そうすれば、Windows 開発者は のような独自の値を設定C:\Users\lazydaemon\tempでき、Linux 開発者は のような値を設定でき/home/lazydaemon/tmp/、サーバー管理者はコードの変更や脆弱なロジック/var/cache/tomcat-VERSION/Catalina/whateverを必要とせずに のような値を選択できます。if(configuration==RuntimeConfigurationType.DEVELOPMENT)

したがって、サーバーの起動時の引数としてプロパティを設定できます。

-Djavax.servlet.context.tempdir=/path/to/directory/

または、war ファイルにパッケージ化およびデプロイされないコードで Jetty サーバーを起動する場合は、Jetty を構成および起動するコードでプロパティを設定できます。

System.setProperty("javax.servlet.context.tempdir", "/path/to/directory/");
于 2013-03-31T00:07:45.030 に答える
0

Wicket API の方法は次のとおりです: org.apache.wicket.settings.IStoreSettings#setFileStoreFolder()

于 2012-05-13T17:51:50.023 に答える
0

DiskDataStore ディレクトリを変更するには、ServletContextListener を使用できます。

public class InitListener implements ServletContextListener {
  @Override
  public void contextInitialized(ServletContextEvent sce) {
    final String workDir = sce.getServletContext().getInitParameter("workDirectory"); // Context param with the temp dir path
    sce.getServletContext().setAttribute("javax.servlet.context.tempdir", file); // sets the temp dir (Wicket will read it from here)
  }

  @Override
  public void contextDestroyed(ServletContextEvent sce) {}
}

そして、これは必要な web.xml エントリです:

<context-param>
  <param-name>workDirectory</param-name>
  <param-value>E:\wicket</param-value>
</context-param>
<listener>
  <listener-class>es.cyum.cruekti.wicket.InitListener</listener-class>
</listener>
于 2012-05-09T07:02:21.070 に答える