2013-06-19 1 views
0

은 내가 Jetty-GWT 서버 측 코드에서 서블릿 속성에 액세스하는 방법은 무엇입니까?

내장에서 실행하고 WAR 파일로 내 GWT 응용 프로그램을 조립 한 내가 GWT의 서버 측에 내 "설정"개체에 액세스하려고
String confFile = System.getProperty("configFilename"); 
config = new XMLConfiguration(configFilename); 
Server server = new Server(8080); 
WebAppContext webapp = new WebAppContext(); 
webapp.setAttribute("config", config);  
webapp.setContextPath("/"); 
webapp.setWar("file.war"); 
server.setHandler(webapp); 
server.start(); 
server.join(); 

public class MyServiceImpl extends RemoteServiceServlet implements 
     MyService { 

    config = (XMLConfiguration) this.getThreadLocalRequest().getAttribute("config"); 

} 

을 코드 - 여기서 config는 항상 null입니다.

내가 뭘 잘못하고 있니? 나는 config =(XMLConfiguration) this.getServletContext().getAttribute("config"); 시도했지만 그 역시 작동하지 않습니다 - 내가 얻을 오류 -

org.apache.commons.configuration.XMLConfiguration cannot be cast to org.apache.commons.configuration.XMLConfiguration 
+0

이 오류는 XMLConfiguration 클래스가 2 개의 개별 항아리에 있어야 함을 나타냅니다. 하나는 아마도 Jetty의 일부로 배포되고 다른 하나는 앱의 일부로 배포됩니다. –

+0

@LavieTobey - 맞습니다 – user375868

+0

종속성 관리에 maven을 사용하고 있습니까? –

답변

1

XMLConfiguration 클래스가 들어있는 jar를 명시 적으로 포함하고 제공된대로 표시하도록 maven 종속성을 조정 해보십시오. 그러면 클래스 경로에서 중복 된 내용이 제거되고 문제가 해결됩니다.

1

당신은 당신의 RPC 방법 안에이 작업을 시도해보십시오 ServletContext에서 대신 HttpServletRequest

에서 속성 얻을 수 있습니다

public class MyServiceImpl extends RemoteServiceServlet implements MyService { 

    @Override 
    public void MyMethod() { 
    this.getThreadLocalRequest() 
     .getSession().getServletContext() 
     .getAttribute("config"); 
    } 

} 
+0

나는'org.apache.commons.configuration.XMLConfiguration을 org.apache.commons.configuration.XMLConfiguration'으로 캐스팅 할 수 없다는 오류가 발생했습니다. – user375868

+0

동일한 클래스가 자체적으로 Casteable이 될 수 없다는 것은 매우 이상합니다. jetty를 시작할 때 다른 버전의 XMLConfiguration 클래스를 사용하고 있고 .war 파일에 다음과 같은 내용이있는 것 같습니다. –

+0

종속성 트리를 확인하고 commons-config를 찾으십시오.이 라이브러리는 두 가지 버전이 있습니다. 'mvn dependency : tree' –

관련 문제