2012-05-01 11 views
1

でページを保存することはできません、私は私の桟橋ログに次のエラーを見ることができます:ウィケット:私は桟橋サーバー上の私のApache Wicketのアプリケーションを展開し、毎回私はWicketのページを開くID

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の権利は正しく設定されています。

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) {} 
} 

そして、これがneccesary 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> 
+1

わかりませんが、DiskDataStoreの一時ディレクトリを変更しようとする可能性があります。これはサーブレットコンテキスト内の "javax.servlet.context.tempdir"属性を変更することで達成されます(例えば、サーブレットが起動する前、例えばServletContextListener内で)。 – polypiel

+0

DiskDataStoreの変更例がありますか?私は何をすべきか分かりません。 – lazydaemon

+0

jvmに-Djavax.servlet.context.tempdir =/your/dirというプロパティを指定してエクスポートしようとしていますか?Webアプリケーション名に特殊文字が含まれていますか? –

答えて

0

てみましたWicket APIの方法です:org.apache.wicket.settings.IStoreSettings#setFileStoreFolder()

0

私も、あなたはのServletContextListenerを使用することができますDiskDataStoreディレクトリを変更するには777が、ノー成功:(

0

私はマーティンの答えを精確に説明しましたが、それはすぐには分かりませんでしたIStoreSettingsにアクセスする方法を教えてください。あなたはこのようにWicketのAPIを使用してデータストアディレクトリを更新することができます、私はそれは非常に良いアイデアであることを考えていない

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

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

が。 Wicketのデフォルトの値はjavax.servlet.context.tempdirであるため、からの方がJavaの値をハードコードするよりも良いでしょう。そうすれば、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ファイルにパッケージ化し、展開されませんコードで桟橋サーバを起動している場合を、あなたは桟橋を設定し、起動するコードでプロパティを設定できます

System.setProperty("javax.servlet.context.tempdir", "/path/to/directory/"); 
1

また、これは、桟橋の実行中にデータストアディレクトリを削除したときに起こります。桟橋が新しい桟橋を作ることが許されていても、それはまだ不平を言う。

私にとっては、この問題の修正はJettyを再起動することでした。

関連する問題