JETTY에서 HSF를 제대로 사용할 수 없는 문제 해결
4599 단어 jetty
public static void main(String[] arg) throws Exception {
HSFContainerDelegator.start("D:\\j2ee_solution\\hsf-plugin");
System.out.println(Thread.currentThread().getContextClassLoader());
Class<?> clazz = Class
.forName("com.taobao.hsf.app.spring.util.HSFSpringConsumerBean");
System.out.println(clazz);
}
현재classpath에서 osgi 용기를 통해 불러오지 않습니다. 이것은main 함수에서 정상적으로 사용할 수 있습니다. 그러나 jetty를 용기로 하는 웹 서비스가 시작될 때 Spring을 통해 불러오면 이상이 발생합니다. 아래와 같습니다.
public class HsfBootup implements InitializingBean {
@Override
public void afterPropertiesSet() throws Exception {
HSFContainerDelegator.start("D:\\j2ee_solution\\hsf-plugin");
Class<?> clazz = Class
.forName("com.taobao.hsf.app.spring.util.HSFSpringConsumerBean");
System.out.println("======================" + clazz);
}}
같은 코드는 앞은main 함수를 통해 시작하고, 뒤는jetty를 통해spring을 간접적으로 사용하지만 후자는 이상을 던진다.
왜 이러지?
그럼 먼저 두 장면에서classloader가 어떻게 다른지 봅시다.
응, 보아하니 두 장면에서의classloader는 다른 것 같아. classloader가 다르기 때문에class가 불러오지 않는 것 같아.
두 번째 장면에서class가 불러오지 않아서 던진 이상 정보를 보십시오.
java.lang.ClassNotFoundException: com.taobao.hsf.app.spring.util.HSFSpringConsumerBean
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at org.codehaus.classworlds.RealmClassLoader.loadClassDirect(RealmClassLoader.java:195)
at org.codehaus.classworlds.DefaultClassRealm.loadClass(DefaultClassRealm.java:255)
at org.codehaus.classworlds.DefaultClassRealm.loadClass(DefaultClassRealm.java:274)
at org.codehaus.classworlds.RealmClassLoader.loadClass(RealmClassLoader.java:214)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
at org.mortbay.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:401)
at org.mortbay.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:363)
at org.springframework.util.ClassUtils.forName(ClassUtils.java:211)
at org.springframework.beans.factory.support.AbstractBeanDefinition.resolveBeanClass(AbstractBeanDefinition.java:385)
at org.springframework.beans.factory.support.AbstractBeanFactory.resolveBeanClass(AbstractBeanFactory.java:1138)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.predictBeanType(AbstractAutowireCapableBeanFactory.j
ava:524)
at org.springframework.beans.factory.support.AbstractBeanFactory.isFactoryBean(AbstractBeanFactory.java:1177)
at org.springframework.beans.factory.support.AbstractBeanFactory.isFactoryBean(AbstractBeanFactory.java:758)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:422
)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:72
8)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:380)
at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:255)
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:199)
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:45)
at org.mortbay.jetty.handler.ContextHandler.startContext(ContextHandler.java:548)
at org.mortbay.jetty.servlet.Context.startContext(Context.java:136)
인터넷에서 제티의classloader 불러오는 메커니즘http://docs.codehaus.org/display/JETTY/Classloading을 찾았는데 그 중에서 org를 언급했다.mortbay.jetty.webapp.WebAppClassLoader는 jetty의 기본적인classloader입니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Java 초보자라도 할 수 있는 JSP+Eclipse+Jetty 개발 환경 구축직장에서 조금 필요하게 박해져 Java에서의 Web 개발을 다루었습니다. 초보자는, 단어의 이해로부터 개시로 엄격했습니다만, 어떻게든 할 수 있었습니다. 초보자가 하고 있는 순서이므로, 미비한 점 등 많을지도 모릅니...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.