• 关于 ejb在java 的搜索结果

回答

Java Bean 是可复用的组件,对Java Bean并没有严格的规范,理论上讲,任何一个Java类都可以是一个Bean。但通常情况下,由于Java Bean是被容器所创建(如Tomcat)的,所以Java Bean应具有一个无参的构造器,另外,通常Java Bean还要实现Serializable接口用于实现Bean的持久性。Java Bean实际上相当于微软COM模型中的本地进程内COM组件,它是不能被跨进程访问的。Enterprise Java Bean 相当于DCOM,即分布式组件。它是基于Java的远程方法调用(RMI)技术的,所以EJB可以被远程访问(跨进程、跨计算机)。但EJB必须被布署在诸如Webspere、WebLogic这样的容器中,EJB客户从不直接访问真正的EJB组件,而是通过其容器访问。EJB容器是EJB组件的代理, EJB组件由容器所创建和管理。客户通过容器来访问真正的EJB组件。

YDYK 2020-04-25 19:54:21 0 浏览量 回答数 0

问题

Java:在线程内运行时,JNDI查找失败

montos 2020-03-22 11:37:25 0 浏览量 回答数 1

回答

1、Tomcat是第一大web 服务器,支持Servlet规范,可以托管Java网站,免费、开源2、Apache是免费开源的第一大http服务器,apache基金会的由来3、JBOSS 是一个基于J2EE的开放源代码的应用服务器。 JBoss代码遵循LGPL许可,可以在任何商业应用中免费使用。JBoss是一个管理EJB的容器和服务器,支持EJB 1.1、EJB 2.0和EJB3的规范。但JBoss核心服务不包括支持servlet/JSP的WEB容器,一般与Tomcat或Jetty绑定使用。4、WebLogic是美国Oracle公司并购BEA得到的一个application server,收费

徐雷frank 2019-12-02 01:50:36 0 浏览量 回答数 0

新手开公司,教你化繁为简

开公司到底有没有那么难,传统的手续繁琐,线下跑断腿,场地搞不定等问题,通过阿里云”云上公司注册“解决你的烦恼。

回答

ReJava应用云上中间件如何选择     平时我们做系统常用tomcat服务器,所以也比较熟悉。对于需要用到ejb等分布式的技术的系统,通常会用到weblogic服务器和jboss服务器,那么这些服务器之间到底有什么差别,我们的系统最好部署在什么服务器上呢?下面来详细分析一下。 tomcat服务器:     tomcat服务器占用资源少,稳定且免费。是一个轻量级的服务器,主要是应用于中小型项目 ,当并发访问的用户比较少时,可以选用tomcat服务器。tomcat服务器是运行jsp和servlet的很好的容器,但是它不支持EJB等。项目在tomcat中的部署很方便。 weblogic服务器:     而相比之下,weblogic服务器则功能更强大了一些,它属于应用级服务器,它不尽支持jsp和servlet,而且还支持更多的java的规范。 他用于开发,集成,部署和管理大型的分布式web应用,网络应用和数据库应用。这种大型的服务器有着自己独特的优势,即标准领先(它的标准包括ejb,jsb,jms,jdbc,xml和wml),扩展性无限(它的体系架构具有高扩展性,主要包括哭户籍连接的共享,资源pooling以及动态网页和ejb组件集群),快速开发(凭借对ejb和jsp的支持,以及其对servlet组件的架构体系,可加速部署应用),部署灵活,可靠等。但是一般的系统部署基本不会用到它,因为一般非基于ejb等的分布式开发项目,仅仅用tomcat即可满足我们的需求,所以无需动用重量级的weblogic。 jboss服务器:     jboss是一个基于j2ee的开放源码应用服务器,它也是免费的。它是一个管理ejb的容器,jboss核心服务仅支持ejb服务器,所以是不包括jsp和servlet的web容器。当然了,它可以和tomcat等进行绑定使用来同时支持jsp,servlet以及ejb的规范。jboss有一个典型的特点:当有servlet的系统调用到jboss里面的ejb时不经过网络,因为jboss和web服务器在同一个java虚拟机中运行,这可以大大提高运行效率和安全性。      站在技术支持的角度一句话来概括这三个服务器的话:即weblogic相当于tomcat和jboss结合在一起使用(因为weblogic支持servlet和jsp以及ejb,而tomcat仅支持servlet和jsp,jboss仅支持ejb)

programmer 2019-12-02 00:33:50 0 浏览量 回答数 0

回答

一、Spring Spring是一个解决了许多在J2EE开发中常见的问题的强大框架。 Spring提供了管理业务对象的一致方法并且鼓励了注入对接口编程而不是对类编程的良好习惯。Spring的架构基础是基于使用JavaBean属性的Inversion of Control容器。然而,这仅仅是完整图景中的一部分:Spring在使用IoC容器作为构建完关注所有架构层的完整解决方案方面是独一无二的。 Spring提供了唯一的数据访问抽象,包括简单和有效率的JDBC框架,极大的改进了效率并且减少了可能的错误。Spring的数据访问架构还集成了Hibernate和其他O/R mapping解决方案。Spring还提供了唯一的事务管理抽象,它能够在各种底层事务管理技术,例如JTA或者JDBC事务提供一个一致的编程模型。Spring提供了一个用标准Java语言编写的AOP框架,它给POJOs提供了声明式的事务管理和其他企业事务--如果你需要--还能实现你自己的aspects。这个框架足够强大,使得应用程序能够抛开EJB的复杂性,同时享受着和传统EJB相关的关键服务。Spring还提供了可以和IoC容器集成的强大而灵活的MVC Web框架。 二、STRUCTS Struts是一个基于Sun J2EE平台的MVC框架,主要是采用Servlet和JSP技术来实现的。由于Struts能充分满足应用开发的需求,简单易用,敏捷迅速,在过去的一年中颇受关注。Struts把Servlet、JSP、自定义标签和信息资源(message resources)整合到一个统一的框架中,开发人员利用其进行开发时不用再自己编码实现全套MVC模式,极大的节省了时间,所以说Struts是一个非常不错的应用框架。 三、Hibernate Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序实用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。 答案来源网络,供参考,希望对您有帮助

问问小秘 2019-12-02 03:02:33 0 浏览量 回答数 0

问题

The type [null] is not the expected [EntityType] for the key class [class doom.vsan.entity.role.Role].

a123456678 2019-12-01 20:22:46 866 浏览量 回答数 1

回答

似乎使用“ global”而不是“ app”可以使其工作: ICalculadoraLocal calculadora = (ICalculadoraLocal)context.lookup("java:global/ear-0.0.0.0.0.1/ejb-0.0.0.0.0.1/CalculadoraBean!com.getronics.ejb.ICalculadoraLocal"); 原因似乎是“ Napp查找”“ app”,“ module”和“ comp”在规范中不适用于那些线程。 您可以检查以下链接以获取更多信息: https://developer.jboss.org/thread/173179 https://lists.jboss.org/pipermail/jboss-as7-dev/2011-June/002292.html 回答来源:Stack Overflow

montos 2020-03-22 11:38:16 0 浏览量 回答数 0

问题

koala4.0使用sqlserver数据源:配置报错

kun坤 2020-06-04 10:25:13 3 浏览量 回答数 1

回答

SessionBean: Stateless Session Bean 的生命周期是由容器决定的,当客户机发出请求要建立一个Bean的实例时,EJB容器不一定要创建一个新的Bean的实例供客户机调用,而是随便找一个现有的实例提供给客户机。当客户机第一次调用一个Stateful Session Bean 时,容器必须立即在服务器中创建一个新的Bean实例,并关联到客户机上,以后此客户机调用Stateful Session Bean 的方法时容器会把调用分派到与此客户机相关联的Bean实例。 EntityBean:Entity Beans能存活相对较长的时间,并且状态是持续的。只要数据库中的数据存在,Entity beans就一直存活。而不是按照应用程序或者服务进程来说的。即使EJB容器崩溃了,Entity beans也是存活的。Entity Beans生命周期能够被容器或者 Beans自己管理。 EJB通过以下技术管理实务:对象管理组织(OMG)的对象实务服务(OTS),Sun Microsystems的Transaction Service(JTS)、Java Transaction API(JTA),开发组(X/Open)的XA接口。

YDYK 2020-04-25 19:57:52 0 浏览量 回答数 0

回答

Tomcat:应用也算非常广泛的web服务器,支持部分j2ee,免费,出自apache基金组织,支持Servlet、jsp。       JBoss:开源的应用服务器,比较受人喜爱,免费(文档要收费) JBoss还具有如下六大优点: 1、JBoss是免费的,开放源代码J2EE的实现,它通过LGPL许可证进行发布。 2、JBoss需要的内存和硬盘空间比较小。 3、安装非常简单。先解压缩JBoss打包文件再配置一些环境变量就可以了。 4、JBoss能够"热部署",部署BEAN只是简单拷贝BEAN的JAR文件到部署路径下就可以了。如果没有加载就加载它;如果已经加载了就卸载掉,然后LOAD这个新的。 5、JBoss与Web服务器在同一个Java虚拟机中运行,Servlet调用EJB不经过网络,从而大大提高运行效率,提升安全性能。 6、用户可以直接实施J2EE-EAR,而不是以前分别实施EJB-JAR和Web-WAR,非常方便

huanhuanming 2019-12-02 01:50:04 0 浏览量 回答数 0

回答

什么是Spring Spring是一个开源框架,它由Rod Johnson创建。它是为了解决企业应用开发的复杂性而创建的。 Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。 然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。 目的:解决企业应用开发的复杂性功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能 范围:任何Java应用 它是一个容器框架,用来装javabean(java对象),中间层框架(万能胶)可以起一个连接作用,比如说把Struts和hibernate粘合在一起运用。简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。 SpringMVC流程 1、 用户发送请求至前端控制器DispatcherServlet。 2、 DispatcherServlet收到请求调用HandlerMapping处理器映射器。 3、 处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。 4、 DispatcherServlet调用HandlerAdapter处理器适配器。 5、 HandlerAdapter经过适配调用具体的处理器(Controller,也叫后端控制器)。 6、 Controller执行完成返回ModelAndView。 7、 HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet。 8、 DispatcherServlet将ModelAndView传给ViewReslover视图解析器。 9、 ViewReslover解析后返回具体View。 10、DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)。 11、 DispatcherServlet响应用户。

剑曼红尘 2020-04-01 15:02:16 0 浏览量 回答数 0

回答

为此,我在瑞士的一家大型私人银行工作,在J2EE堆栈上编写Enterprise应用程序。 Python中有许多“生产就绪” Web框架。并且有很多大型的基于Python的网站。 就是说,我认为Python对于Enterprisy应用程序来说不是一个好的选择。它可以用作粘合语言或脚本语言(我们的部署脚本是Python)。对我而言,showstopper是向后兼容的(Python 3.x与Python 2.x并不向后兼容)。Python的理念似乎更具创新性,可以使语言更好,更流畅,并且不一定要支持10年前编写的程序。 在Web框架方面,我喜欢Django,但它肯定还太年轻,并且发展太快而无法在企业中使用。我对其他基于Python的框架没有太多经验。 如果要使用面向企业的框架,则必须使用企业堆栈(Java / .Net)。 另一方面,即使在Java世界中,也存在使用不那么精巧的框架的趋势。认为Spring vs EJB2或EJB3的权重比EJB2轻得多。或认为Flex(在我看来与企业框架相去甚远)在企业中越来越多地被使用。因此,如果您的企业具有足够的开放思想,可以使用Django,RoR或其他现代Web 2.0,进入社区,开放源代码,下一代,基于活动记录的框架,准备迈向未来……可能就没有那么长的时间了。 .. 最后,直接回答您的几点意见: 支持ORM /缓存/ ...:是的,但是大多数解决方案都基于活动记录,可以满足您可能要执行的90%的操作,但是绝对不如JPA / Hibernate完整/复杂 面向控件的UI:否,您将找不到标准,因此也将找不到第三方组件。您可能获得的最接近的是与jQuery或其他JS UI框架的集成 依赖注入:Spring到Python都有一个端口,由SpringSource维护。但是DI不在Python哲学中。相同的问题将通过函数,默认参数和闭包来解决。我们可能会认为Pythonic解决方案比Java方法更干净... 单元/集成测试:很好的支持,多种测试框架。但是,支持仍然不如Java,因为我们拥有大量围绕测试的工具。 良好的IDE支持:您可以为动态语言提供的支持数量存在技术限制,但至少Eclipse和Netbeans都对Python提供了强大的支持。 群集/模块化:群集将通过“不共享基础结构”和/或分布式缓存来解决。据我所知,还没有模块化的解决方案(就OSGI而言)。但是我会挑战说OSGI通常是解决我们企业中没有的问题的解决方案...

祖安文状元 2020-02-23 16:43:50 0 浏览量 回答数 0

回答

作者:find goo链接:https://www.zhihu.com/question/20491745/answer/100741761来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 一、python虚拟机没有java强,java虚拟机是java的核心,python的核心是可以很方便地使用c语言函数或c++库。二、python是全动态性的,可以在运行时自己修改自己的代码,java只能通过变通方法实现。python的变量是动态的,而java的变量是静态的,需要事先声明,所以java ide的代码提示功能优于python ide。三,python的产生几十年了,几十年前面向过程是主流,所以用python有好多程序用的是面向过程设计方法,很多概念从c语言过来的,class在python中是后加入的,而java是为了实现没有指针的c++(当年com组件用的引用记数,java用的虚拟机),主要采用面向对象的设计方法,很多概念是oop的概念。面向过程,相对简洁直观,但容易设计出面条程序,面向对象,相对抽象优雅,但容易过度抽象。四,在实际使用的python入门简单,但要学会用python干活,需要再学习python各种库,pyhton的强大在于库,为什么python的库强大,原因是python的库可以用python,c语言,c++等设计,再提供给python使用,所以无论gpu运行,神经网络,智能算法,数据分析,图像处理,科学计算,各式各样的库在等着你用。而java没有python那么多的开源库,很多库是商业公司内部使用,或发布出来只是一个jar包,看不到原始代码。python虚拟机因为编译性没有java的支持的好(或者说故意这么设计的),一般直接使用源码(linux),或源码简单打个包(如pyexe)。五、python有很多虚拟机实现,如cython,Pyston,pypy,jython, IronPython等等,适合用于业务语言,或插件语言,或面向领域语言,而java因为虚拟机巨大,很少用于插件语言,发布也不方便。六、java主要用于商业逻辑强的领域,如商城系统,erp,oa,金融,保险等传统数据库事务领域,通过类似ssh框架事务代码,对商业数据库,如oralce,db2,sql server等支持较好,软件工程理念较强,适合软件工程式的多人开发模式。python主要用于web数据分析,科学计算,金融分析,信号分析,图像算法,数学计算,统计分析,算法建模,服务器运维,自动化操作,快速开发理念强,适合快速开发团队或个人敏捷模式。七、java的商业化公司支持多,如sap,oracle,ibm等,有商业化的容器,中间件,企业框架ejb。python的开源组织支持多,如qt,linux,google,很多开源程序都支持python, 如pyqt,redis,spark等。八、python用途最多的是脚本,java用途最多的是web,pyhotn是胶水,可以把各类不相关的东西粘在一起用,java是基佬,可以通过软件工程组成几百个人的团队和你pk,商业化气息重。不过我认为还是python强大,因为可以方便调用c或c++的库,但软件工程和商业化运作没有java好,适合快捷开发。九,关于钱。如果你想写程序卖软件用java,可用上ibm服务器,上oracle数据库,上EMC存储,价格高,商业采购公司喜欢这种高大上。如果你要直接用程序生成金钱用python,python可以实现宽客金融,数据回测,炒股,炒期权,炒黄金,炒比特币,对冲套利,统计套利,有很多开源库,数据分析库,机器学习库可以参考。十、java和python,都可以运行于linux操作系统,但很多linux可以原生支持python,java需要自行安装。java和python强于c#的原因大于支持linux,支持osx,支持unix,支持arm。java和python比c++受欢迎的原因在于不需要指针。十一、对于移动互联网,python只能通过运行库运行于安卓或ios,java原生支持安卓开发,但不能用ios中。十二、对于大数据,hadoop用java开的, spark用Scala开发,用python调用spark再分析更方便。 作者:find goo链接:https://www.zhihu.com/question/20491745/answer/100741761来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 区别一、python虚拟机没有java强,java虚拟机是java的核心,python的核心是可以很方便地使用c语言函数或c++库。二、python是全动态性的,可以在运行时自己修改自己的代码,java只能通过变通方法实现。python的变量是动态的,而java的变量是静态的,需要事先声明,所以java ide的代码提示功能优于python ide。三,python的产生几十年了,几十年前面向过程是主流,所以用python有好多程序用的是面向过程设计方法,很多概念从c语言过来的,class在python中是后加入的,而java是为了实现没有指针的c++(当年com组件用的引用记数,java用的虚拟机),主要采用面向对象的设计方法,很多概念是oop的概念。面向过程,相对简洁直观,但容易设计出面条程序,面向对象,相对抽象优雅,但容易过度抽象。四,在实际使用的python入门简单,但要学会用python干活,需要再学习python各种库,pyhton的强大在于库,为什么python的库强大,原因是python的库可以用python,c语言,c++等设计,再提供给python使用,所以无论gpu运行,神经网络,智能算法,数据分析,图像处理,科学计算,各式各样的库在等着你用。而java没有python那么多的开源库,很多库是商业公司内部使用,或发布出来只是一个jar包,看不到原始代码。python虚拟机因为编译性没有java的支持的好(或者说故意这么设计的),一般直接使用源码(linux),或源码简单打个包(如pyexe)。五、python有很多虚拟机实现,如cython,Pyston,pypy,jython, IronPython等等,适合用于业务语言,或插件语言,或面向领域语言,而java因为虚拟机巨大,很少用于插件语言,发布也不方便。六、java主要用于商业逻辑强的领域,如商城系统,erp,oa,金融,保险等传统数据库事务领域,通过类似ssh框架事务代码,对商业数据库,如oralce,db2,sql server等支持较好,软件工程理念较强,适合软件工程式的多人开发模式。python主要用于web数据分析,科学计算,金融分析,信号分析,图像算法,数学计算,统计分析,算法建模,服务器运维,自动化操作,快速开发理念强,适合快速开发团队或个人敏捷模式。七、java的商业化公司支持多,如sap,oracle,ibm等,有商业化的容器,中间件,企业框架ejb。python的开源组织支持多,如qt,linux,google,很多开源程序都支持python, 如pyqt,redis,spark等。八、python用途最多的是脚本,java用途最多的是web,pyhotn是胶水,可以把各类不相关的东西粘在一起用,java是基佬,可以通过软件工程组成几百个人的团队和你pk,商业化气息重。不过我认为还是python强大,因为可以方便调用c或c++的库,但软件工程和商业化运作没有java好,适合快捷开发。九,关于钱。如果你想写程序卖软件用java,可用上ibm服务器,上oracle数据库,上EMC存储,价格高,商业采购公司喜欢这种高大上。如果你要直接用程序生成金钱用python,python可以实现宽客金融,数据回测,炒股,炒期权,炒黄金,炒比特币,对冲套利,统计套利,有很多开源库,数据分析库,机器学习库可以参考。十、java和python,都可以运行于linux操作系统,但很多linux可以原生支持python,java需要自行安装。java和python强于c#的原因大于支持linux,支持osx,支持unix,支持arm。java和python比c++受欢迎的原因在于不需要指针。十一、对于移动互联网,python只能通过运行库运行于安卓或ios,java原生支持安卓开发,但不能用ios中。十二、对于大数据,hadoop用java开的, spark用Scala开发,用python调用spark再分析更方便。

xuning715 2019-12-02 01:10:32 0 浏览量 回答数 0

回答

myeclipse要钱,eclipse不要钱。原来myeclipse只是一给eclipse做插件的,后来感觉用myeclipse插件的人多了,就把myeclipse插件和eclipse打包做成myeclipse产品 myeclipse是在eclipse上把java EE的一些插件封装起来了如hibernate,spring,ejb…… 同时也有服务器插件如tomcat/weblogic/jboss等,如果做web开发是不错的选择。 eclipse有几种不同的版本如classes标准版 ,这是eclipse的基础,如今eclipse也有对应ee版,可以与myeclipse抗衡,如果在添加jboss tools插件足够强大。 如今如svn,hibernate tools JD……都插件是基于eclipse开发,但myeclipse都可以安装,应为它的核心就是eclipse。 本人建议用eclipse,如果做Java EE (web)的开发可以下eclipse for EE 版,他集成了一些web服务器插件,你可以自己按照需求增加插件,足以超过myeclipse。

爵霸 2019-12-02 02:43:56 0 浏览量 回答数 0

问题

jpa 中的CascadeType.Merge

爵霸 2019-12-01 20:05:45 1132 浏览量 回答数 1

问题

【转载】:云计算时代,停止学习,开始创造

wangleheng 2019-12-01 20:22:13 10494 浏览量 回答数 2

问题

bootstrap的Tab切换不了标签页

小旋风柴进 2019-12-01 20:19:32 1837 浏览量 回答数 1

回答

Java类加载器的作用就是在运行时加载类。Java类加载器基于三个机制:委托、可见性和单一性。委托机制是指将加载一个类的请求交给父类加载器,如果这个父类加载器不能够找到或者加载这个类,那么再加载它。可见性的原理是子类的加载器可以看见所有的父类加载器加载的类,而父类加载器看不到子类加载器加载的类。单一性原理是指仅加载一个类一次,这是由委托机制确保子类加载器不会再次加载父类加载器加载过的类。正确理解类加载器能够帮你解决NoClassDefFoundError和java.lang.ClassNotFoundException,因为它们和类的加载相关。类加载器通常也是比较高级的Java面试中的重要考题,Java类加载器和工作原理以及classpath如何运作的经常被问到。Java面试题中也经常出现“一个类是否能被两个不同类加载器加载”这样的问题。这篇教程中,我们将学到类加载器是什么,它的工作原理以及一些关于类加载器的知识点。 什么是类加载器类加载器是一个用来加载类文件的类。Java源代码通过javac编译器编译成类文件。然后JVM来执行类文件中的字节码来执行程序。类加载器负责加载文件系统、网络或其他来源的类文件。有三种默认使用的类加载器:Bootstrap类加载器、Extension类加载器和System类加载器(或者叫作Application类加载器)。每种类加载器都有设定好从哪里加载类。 Bootstrap类加载器负责加载rt.jar中的JDK类文件,它是所有类加载器的父加载器。Bootstrap类加载器没有任何父类加载器,如果你调用String.class.getClassLoader(),会返回null,任何基于此的代码会抛出NUllPointerException异常。Bootstrap加载器被称为初始类加载器。而Extension将加载类的请求先委托给它的父加载器,也就是Bootstrap,如果没有成功加载的话,再从jre/lib/ext目录下或者java.ext.dirs系统属性定义的目录下加载类。Extension加载器由sun.misc.Launcher$ExtClassLoader实现。第三种默认的加载器就是System类加载器(又叫作Application类加载器)了。它负责从classpath环境变量中加载某些应用相关的类,classpath环境变量通常由-classpath或-cp命令行选项来定义,或者是JAR中的Manifest的classpath属性。Application类加载器是Extension类加载器的子加载器。通过sun.misc.Launcher$AppClassLoader实现。除了Bootstrap类加载器是大部分由C来写的,其他的类加载器都是通过java.lang.ClassLoader来实现的。 总结一下,下面是三种类加载器加载类文件的地方: 1) Bootstrap类加载器 – JRE/lib/rt.jar 2) Extension类加载器 – JRE/lib/ext或者java.ext.dirs指向的目录 3) Application类加载器 – CLASSPATH环境变量, 由-classpath或-cp选项定义,或者是JAR中的Manifest的classpath属性定义. 类加载器的工作原理我之前已经提到过了,类加载器的工作原理基于三个机制:委托、可见性和单一性。这一节,我们来详细看看这些规则,并用一个实例来理解工作原理。下面显示的是类加载器使用委托机制的工作原理。 委托机制当一个类加载和初始化的时候,类仅在有需要加载的时候被加载。假设你有一个应用需要的类叫作Abc.class,首先加载这个类的请求由Application类加载器委托给它的父类加载器Extension类加载器,然后再委托给Bootstrap类加载器。Bootstrap类加载器会先看看rt.jar中有没有这个类,因为并没有这个类,所以这个请求由回到Extension类加载器,它会查看jre/lib/ext目录下有没有这个类,如果这个类被Extension类加载器找到了,那么它将被加载,而Application类加载器不会加载这个类;而如果这个类没有被Extension类加载器找到,那么再由Application类加载器从classpath中寻找。记住classpath定义的是类文件的加载目录,而PATH是定义的是可执行程序如javac,java等的执行路径。 可见性机制根据可见性机制,子类加载器可以看到父类加载器加载的类,而反之则不行。所以下面的例子中,当Abc.class已经被Application类加载器加载过了,然后如果想要使用Extension类加载器加载这个类,将会抛出java.lang.ClassNotFoundException异常。 1234567891011121314151617181920212223242526272829package test; import java.util.logging.Level; import java.util.logging.Logger; /** * Java program to demonstrate How ClassLoader works in Java, * in particular about visibility principle of ClassLoader. * * @author Javin Paul */ public class ClassLoaderTest { public static void main(String args[]) { try { //printing ClassLoader of this class System.out.println("ClassLoaderTest.getClass().getClassLoader() : " + ClassLoaderTest.class.getClassLoader()); //trying to explicitly load this class again using Extension class loader Class.forName("test.ClassLoaderTest", true , ClassLoaderTest.class.getClassLoader().getParent()); } catch (ClassNotFoundException ex) { Logger.getLogger(ClassLoaderTest.class.getName()).log(Level.SEVERE, null, ex); } } } 输出: 12345678910111213ClassLoaderTest.getClass().getClassLoader() : sun.misc.Launcher$AppClassLoader@601bb116/08/2012 2:43:48 AM test.ClassLoaderTest mainSEVERE: nulljava.lang.ClassNotFoundException: test.ClassLoaderTest 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 sun.misc.Launcher$ExtClassLoader.findClass(Launcher.java:229) at java.lang.ClassLoader.loadClass(ClassLoader.java:306) at java.lang.ClassLoader.loadClass(ClassLoader.java:247) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:247) at test.ClassLoaderTest.main(ClassLoaderTest.java:29) 单一性机制根据这个机制,父加载器加载过的类不能被子加载器加载第二次。虽然重写违反委托和单一性机制的类加载器是可能的,但这样做并不可取。你写自己的类加载器的时候应该严格遵守这三条机制。 如何显式的加载类Java提供了显式加载类的API:Class.forName(classname)和Class.forName(classname, initialized, classloader)。就像上面的例子中,你可以指定类加载器的名称以及要加载的类的名称。类的加载是通过调用java.lang.ClassLoader的loadClass()方法,而loadClass()方法则调用了findClass()方法来定位相应类的字节码。在这个例子中Extension类加载器使用了java.net.URLClassLoader,它从JAR和目录中进行查找类文件,所有以”/”结尾的查找路径被认为是目录。如果findClass()没有找到那么它会抛出java.lang.ClassNotFoundException异常,而如果找到的话则会调用defineClass()将字节码转化成类实例,然后返回。 什么地方使用类加载器类加载器是个很强大的概念,很多地方被运用。最经典的例子就是AppletClassLoader,它被用来加载Applet使用的类,而Applets大部分是在网上使用,而非本地的操作系统使用。使用不同的类加载器,你可以从不同的源地址加载同一个类,它们被视为不同的类。J2EE使用多个类加载器加载不同地方的类,例如WAR文件由Web-app类加载器加载,而EJB-JAR中的类由另外的类加载器加载。有些服务器也支持热部署,这也由类加载器实现。你也可以使用类加载器来加载数据库或者其他持久层的数据。

auto_answer 2019-12-02 01:50:41 0 浏览量 回答数 0

问题

Spring hibernate jpa 加ehcache缓存问题?报错

爱吃鱼的程序员 2020-06-14 16:28:31 0 浏览量 回答数 1

问题

关于JEE6和JSF2.0开发平台的问题

a123456678 2019-12-01 20:20:13 1086 浏览量 回答数 1

问题

求教:Java 7 和 Java 8 启动 JBoss 6 服务器时出错? 400 报错

爱吃鱼的程序员 2020-06-03 11:39:45 0 浏览量 回答数 1

问题

求教:Java 7 和 Java 8 启动 JBoss 6 服务器时出错?报错

爱吃鱼的程序员 2020-06-14 17:32:13 0 浏览量 回答数 1

问题

使用KUBE_PING缩小后,Wildfly中重复出现警告消息

k8s小能手 2019-12-01 19:34:10 446 浏览量 回答数 1

回答

王勇的ssh不错~ ######很简单 看官方文档 如果你像看spring给你建议看 spring in action这本书不错的######java真的不是很难,如果你有php基础、如果你用过php的框架(yii、ci...),java的play框架就很适合你。全注释的,干嘛非得搞那些xml配置######现在play没有什么名气,只有spring,hibernate比较忽悠人,所以只能学spring######直接看spring就可以了,看来你对配置文件很痛恨,直接学spring3######对你这种程度的人来说,我觉的只要整体上了解下,然后在具体项目上找找感觉,千万别一猛子扎进去######国外早就不流行SSH了,只有国内自始至终都在用######Java的前端框架很多,而且特点鲜明。像JSF,Wicket, Play现在用的都很多,要根据技术要求选择。逻辑层Spring MVC和EJB肯定还是主流,但是DI/IoC的标准也越来越多了。而且根据你的前端你可能想要选择Facelet或者Play基于RoR式的MVC。持久层JPA实现,选择也很多。######同问。######那国外流行什么呢?请问。######spring跟hibernate最重要的是思想(IOC,AOP,ORM),php也有类似的框架,使用的细节对着文档来搞久了就熟了, 至于深入就看个人钻研程度了###### 用SpringMVC和MyBatis 一样可以做到零配置(当然不是绝对的,基础的配置还是要有的)######你们说的太难了,找一个完整的入门的例子。把代码看一遍就会了######推荐1个!###### xml配置文件非常恶心,啰嗦到不得了,,有同感。

kun坤 2020-06-08 11:21:50 0 浏览量 回答数 0

问题

在 Intellij IDEA 使用 Maven:配置报错 

kun坤 2020-06-02 15:57:06 0 浏览量 回答数 1

问题

高阳科技(上海)招聘JAVA软件工程师? 400 报错

爱吃鱼的程序员 2020-05-31 13:00:48 0 浏览量 回答数 0

问题

springmvc spring hibernate 怎么配置连接两个数据库

云栖技术 2019-12-01 19:40:30 1161 浏览量 回答数 1

问题

springmvc spring hibernate 怎么配置连接两个数据库?

小旋风柴进 2019-12-01 20:06:31 1687 浏览量 回答数 1

问题

如何在 JBoss 里配置 IBM MQ:报错

kun坤 2020-06-06 22:15:10 0 浏览量 回答数 1

问题

如何在 JBoss 里配置 IBM MQ - JBoss报错

montos 2020-05-31 09:02:07 0 浏览量 回答数 1
阿里云大学 云服务器ECS com域名 网站域名whois查询 开发者平台 小程序定制 小程序开发 国内短信套餐包 开发者技术与产品 云数据库 图像识别 开发者问答 阿里云建站 阿里云备案 云市场 万网 阿里云帮助文档 免费套餐 开发者工具 云栖号物联网 小程序开发制作 视频内容分析 企业网站制作 视频集锦 代理记账服务 2020阿里巴巴研发效能峰会 企业建站模板 云效成长地图 高端建站 云栖号弹性计算 阿里云云栖号 云栖号案例 云栖号直播