写了一个main函数
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作为容器的web服务启动的时候,通过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有啥不同:
- main函数中的classloader是 sun.misc.Launcher$AppClassLoader@19821f
- jetty容器来加载的classloader是 class org.mortbay.jetty.webapp.WebAppClassLoader
恩,看来两个场景下的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)
在网上找到了jetty的classloader加载机制http://docs.codehaus.org/display/JETTY/Classloading ,这其中说到了org.mortbay.jetty.webapp.WebAppClassLoader是jetty的默认的classloader。
分享到:
相关推荐
淘宝的HSF框架,用户手册,有兴趣的人欢迎下载~内部文档哦~
EDAS中HSF方式启动服务入门文档,详细描述了EDAS中HSF方式的启动过程
HSF 官网Demo、IDEA 与 eclipse 开发环境说明;HSF,包结构等等
taobao-hsf安装包
HSF 框架的原理讲解,主要包含了知识点:rpc,动态代理,HSF可以作为微服务的基础框架进行二次开发
hsf框架所需工具包 taobao-hsf.sar 直接放入tomcat根目录tomcate/deploy/下即可
自己公司用的HSF架构培训手册,当时还有阿里的人来培训我们,希望帮助到需要用的HSF技术的人
内部分享的hsf使用介绍文档(无涉密信息),有兴趣的同学可以看看
Springboot+HSF分布式服务框架+EDAS注册中心,实现发布订阅模式
旨在为淘宝应用提供一个分布式的服务框架,HSF从分布式应用层面以及统一的发布/调用方式层面为大家提供支持,从而可以很容易的开发分布式的应用以及提供戒使用公用功能模块,而丌用考虑分布式领域中的各种细节技术,...
HSF物料风险等级评估及抽样检验规范.docx
3.12 有害物质不合格品:产品中限制使用有害物质的含量超过法律法规规定、客户要求,或 限制使用有害物质含量不明确(未提供不使用RoHS有害物质保证书或材料中RoHS有害物 质检测报告不达标)之不合格品。...
在组织内及其分包方和供应商处文件化所有元件或产品的制造,供应和维修控制过程 在采购所有的元件和/或使用的产品时,文件化供应商批准过程及HSF符合性控制过程 文件化所有元件或产品的生产过程的评审和批准的顺序,...
NULL 博文链接:https://arlenye.iteye.com/blog/2294835
阿里云HSF用户开发指导手册 阿里云HSF用户开发指导手册
https://www.nist.gov/srd/nist-special-database-19 里面的by_field 搬运(图片格式) 注意仅仅是 其中的一部分 hsf_0 hsf_1 (原文件中有hsf_0 --hsf_7) 每个hsf中有数字 字母 小写字母, 大写字母 ,每个数字和...
EDAS 生产者 消费者 api 齐全 环境配好既可以使用................................................................
HSF-1抑制HMGB1引起的炎症反应的机制,李杉珊,尹朝奇,目的 探讨热休克转录因子1抑制高迁移率族蛋白1引起炎症反应的机制。方法 HSF1质粒转染RAW264.7细胞,1μg/ml HMGB1刺激空白细胞,转染空质�
下载目录和服务器源目录都可在config.txt中配置。 运行环境:windows、psftp(含在下载的压缩包中) 说明:如果安装了psftp,就不用再安装 工具用途说明: 适应于要从linux上下载多个不同目录下的不同文件到...