2012-05-01 5 views
1

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) 

하나를 무슨 일 있었 니? 유닉스 권한이 올바르게 설정되었습니다. 난 777에 시도하지만 성공 :(

+1

모르겠지만 DiskDataStore 임시 디렉터리를 변경하려고 할 수 있습니다. 서블릿 컨텍스트의 "javax.servlet.context.tempdir"속성 (예 : ServletContextListener에서 개찰이 시작되기 전에)을 변경하면됩니다. – polypiel

+0

DiskDataStore를 변경하는 예제가 있습니까? 나는 무엇을해야할지 모른다. – lazydaemon

+0

jvm에게 -Djavax.servlet.context.tempdir =/your/dir "속성을 내보내려고합니다. 웹 응용 프로그램 이름에 특수 문자가 포함되어 있습니까? –

답변

0

당신이 ServletContextListener 사용할 수있는 DiskDataStore 디렉토리를 변경하지 않으려면 :

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> 
0

Wicket API 방법입니다 : org.apache.wicket.settings.IStoreSettings # setFileStoreFolder()

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) 논리가 필요하지 않습니다. 당신이 포장하고 war 파일로 배포되지 않는 코드에서 부두 서버를 시작하는 경우,

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

또는 :

그래서 당신은 당신의 서버가 시작할 때의 인수로 속성을 설정할 수 있습니다 중 , 당신은 부두를 구성하고 시작하는 코드에서 속성을 설정할 수 있습니다 : 부두가 실행되는 동안 데이터 저장소 디렉토리를 삭제하면

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

이도 발생합니다. 부두가 새로운 부두를 만들 수 있다고하더라도 여전히 불평하고 있습니다.

제게는 제티를 다시 시작해야했습니다.