2014-10-12 3 views
2

웹 컨텍스트로 Jetty 서버를 시작하려고합니다. 전달중인 web.xml에는 아래 코드를 실행하는 코드의 클래스 경로에서 (다른 이유로) 사용자 지정 클래스가 포함되어 있습니다. 방파제가 web.xml에 지정된 수업을 찾을 수 없기를 기대하지만, 그렇지 않습니다.WebAppContext를 별도로 시작하는 중

new ServerWebAppContext과 같이 구성하면 이 아닌로드 컨텍스트의 현재 컨텍스트가 어떻게됩니까?

아래 코드는 Scala이지만, 내가 시도한 것을 알려줄 것입니다. 완벽하게 괜찮은 자바로 대답한다면.

// A reference to the root class loader, this one should not know 
// about any of my custom classes 
val rootLoader = { 
    // Recursive method to find the loader without parent 
    def parent(loader:ClassLoader):ClassLoader = { 
    val p = loader.getParent 
    if (p == null) loader else parent(p) 
    } 
    parent(getClass.getClassLoader) 
} 

// Check if the custom ClassFile is available from the rootLoader 
val className = classOf[my.custom.servlet.ClassFile].getName 
val classAvailable = 
    try { 
    rootLoader.loadClass(className) 
    true 
    } catch { 
    case e:ClassNotFoundException => false 
    } 
// If I'm not insane no error is thrown 
if (classAvailable) sys.error("Class should not be available") 

// Create a WebAppContext using an empty WebAppClassLoader 
// based on that rootLoader 
val context = new WebAppContext() 
context.setParentLoaderPriority(false) 
//context.setClassLoader(new WebAppClassLoader(rootLoader, context)) 
context.setClassLoader(rootLoader) 
context.setContextPath("/") 
context.setDescriptor(webXmlFile) 
context.setResourceBase(resourceBase) 

// Create an start the server with the context 
val server = new Server(port) 
server.setHandler(context) 
server.start() 

나는 문제의 클래스를 찾을 수있는 컨텍스트를하지 을 기대했다.

+0

질문이 명확하지 않습니다. 당신이 웹 클래스를 오버라이드하는 서버 클래스를 갖고 싶어하는 것처럼 보입니까? 그게 맞습니까? –

+0

@JoakimErdfelt 결과적으로'webAppContext'가 클래스 로더를 사용하여'web.xml'에서 (문자열로) 클래스를로드하기를 원합니다. 그러나 클래스 (다른 버전)는 서버를 만드는 코드에도 있습니다.위의 코드는'WebAppContext'가 클래스 로더를 존중하지 않는 것처럼 보입니다 : 클래스를 찾습니다. 이것은 'WebAppContext'가 클래스를 찾으려고하는 다른 클래스 로더에 도달하고 있다는 것을 보여주는 간단한 예제입니다. 내가 뭘 잘못하고 있는지 궁금해. 그 수업을 찾을 수 없길 기대해. – EECOLOR

+0

예제가 너무 많아서 클래스 로더 조작을 시도하고 있지만 더 나은 방법이 될 수 있지만 처음에는 목표에 도달했는지 이해해야합니다. 따라서 webapp의 web.xml에 정의 된 클래스이며 webapp 클래스 로더가 아닌 서버 클래스 로더 (특정 클래스가 필요함)에서 클래스를로드하려고합니다. 클래스는 이름이 같지만 기능이 없습니다.). 그 질문에 대한 올바른 진술입니까? –

답변