2012-11-12 1 views
0

Filter/Handler의 자체 버전을 OpenIG에 구현하려고합니다.서버 컨테이너의 플러그인 구현에 대한 클래스로드 문제 해결

나는 이클립스에서 자신의 메이븐 프로젝트를 만들고, 샘플을 컴파일하고, 병에 포장했다.

내가 만든 항아리가 $ JETTY_HOME/lib 디렉토리/내선 아래에있는 동안 나는, 부두 openig 전쟁은 $ JETTY_HOME/웹 어플리케이션에 배포되는 8

에 OpenIG 2.1.0을 실행하고 있습니다.

내가 직면 한 예외는 NoClassDefFound 내 필터가 확장하는 GenericFilter 클래스입니다. GenericFilter는 openig 전쟁에서 "인라인 (inlined)"항아리로 존재합니다.

이 문제는 클래스 로딩 문제입니다. Plugin Jar와 OpenIG 전쟁은 같은 클래스 로더를 공유하지 않습니다.

제 질문은 : 어떤 형태의 포장이 그런 시나리오에 적합한가요?

내 새로운 클래스 전쟁 재 구축 할 수 있습니다
    1. - 논리적 보이지 않는 전쟁 그리고 전쟁으로 플러그인을 래핑 할 수
    2. 플러그인의이 감 결합되어야한다 - 아직도 이해가되지 않습니다를 . 방법 과잉이에 대한, 그리고 openIG은 OSGI 번들

    어떤 아이디어가 아니다 -

  • OSGI를 사용하십니까?

    java.lang.NoClassDefFoundError: org/forgerock/openig/filter/GenericFilter 
    at java.lang.ClassLoader.defineClass1(Native Method) 
    at java.lang.ClassLoader.defineClass(ClassLoader.java:791) 
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) 
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:449) 
    at java.net.URLClassLoader.access$100(URLClassLoader.java:71) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:423) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:356) 
    at org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:424) 
    at org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:377) 
    at java.lang.Class.forName0(Native Method) 
    at java.lang.Class.forName(Class.java:264) 
    at org.forgerock.openig.util.JsonValueUtil.classForName(JsonValueUtil.java:80) 
    at org.forgerock.openig.util.JsonValueUtil.asClass(JsonValueUtil.java:94) 
    at org.forgerock.openig.heap.HeapImpl.init(HeapImpl.java:64) 
    at org.forgerock.openig.federation.FederationGatewayServlet.init(FederationGatewayServlet.java:67) 
    at javax.servlet.GenericServlet.init(GenericServlet.java:244) 
    at org.eclipse.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:456) 
    at org.eclipse.jetty.servlet.ServletHolder.getServlet(ServletHolder.java:347) 
    at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:535) 
    at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:489) 
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:119) 
    at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:483) 
    at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:233) 
    at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:972) 
    at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:417) 
    at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:192) 
    at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:906) 
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:117) 
    at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:250) 
    at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:149) 
    at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:110) 
    at org.eclipse.jetty.server.Server.handle(Server.java:350) 
    at org.eclipse.jetty.server.HttpConnection.handleRequest(HttpConnection.java:442) 
    at org.eclipse.jetty.server.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:910) 
    at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:565) 
    at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:217) 
    at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:46) 
    at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:545) 
    at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:43) 
    at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:598) 
    at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:533) 
    at java.lang.Thread.run(Thread.java:722) 
    Caused by: 
    java.lang.ClassNotFoundException: org.forgerock.openig.filter.GenericFilter 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:423) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:356) 
    at java.lang.ClassLoader.defineClass1(Native Method) 
    at java.lang.ClassLoader.defineClass(ClassLoader.java:791) 
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) 
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:449) 
    at java.net.URLClassLoader.access$100(URLClassLoader.java:71) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:423) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:356) 
    at org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:424) 
    at org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:377) 
    at java.lang.Class.forName0(Native Method) 
    at java.lang.Class.forName(Class.java:264) 
    at org.forgerock.openig.util.JsonValueUtil.classForName(JsonValueUtil.java:80) 
    at org.forgerock.openig.util.JsonValueUtil.asClass(JsonValueUtil.java:94) 
    at org.forgerock.openig.heap.HeapImpl.init(HeapImpl.java:64) 
    at org.forgerock.openig.federation.FederationGatewayServlet.init(FederationGatewayServlet.java:67) 
    at javax.servlet.GenericServlet.init(GenericServlet.java:244) 
    at org.eclipse.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:456) 
    at org.eclipse.jetty.servlet.ServletHolder.getServlet(ServletHolder.java:347) 
    at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:535) 
    at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:489) 
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:119) 
    at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:483) 
    at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:233) 
    at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:972) 
    at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:417) 
    at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:192) 
    at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:906) 
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:117) 
    at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:250) 
    at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:149) 
    at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:110) 
    at org.eclipse.jetty.server.Server.handle(Server.java:350) 
    at org.eclipse.jetty.server.HttpConnection.handleRequest(HttpConnection.java:442) 
    at org.eclipse.jetty.server.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:910) 
    at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:565) 
    at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:217) 
    at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:46) 
    at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:545) 
    at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:43) 
    at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:598) 
    at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:533) 
    at java.lang.Thread.run(Thread.java:722)C 
    
  • 답변

    0

    로드 된 클래스는 lib 디렉토리의 클래스에서 사용할 수 없습니다. OpenIG를 실행하고 WAR에 일부 사용자 정의 부분을 포함하고자하는 것 같습니다. Maven을 사용하는 경우 Maven WAR Plugin and Overlays으로이 작업을 수행 할 수 있습니다. 오버레이를 사용하면 기존 WAR에 코드를 추가하여 새로운 전쟁을 만들 수 있습니다.