- 浏览: 98590 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (48)
- ruby (7)
- scala (1)
- java (11)
- jython (1)
- python (1)
- life (0)
- jruby (1)
- javascript (1)
- 翻译 (0)
- lua (2)
- SUSE (1)
- scheme (6)
- amb (1)
- 编译器 (0)
- javaee (1)
- 分布式 (0)
- 并发 (1)
- 杂感 (1)
- IO (0)
- POJO (0)
- EJB (0)
- concurrent (0)
- 算法 (1)
- ibm (0)
- JNI (0)
- AOP (0)
- asm (0)
- Groovy (1)
- agent (0)
- instrument (0)
- manifest (1)
- classloader (0)
- jboss (0)
- code (0)
- OSGI (0)
- 庄子 (0)
- JTA (0)
- SA (1)
- clojure (0)
- collections (0)
- hotswap (0)
- 序列化 (0)
- CORS (0)
- 停机 (0)
- JVM (0)
- parallel (0)
- NIO (0)
- weblogic (0)
- transaction (1)
- 反思 (1)
- 事务 (1)
- 海量数据 (0)
- JDO (0)
- JPA (0)
- storm (0)
- log4j (0)
- java2d (0)
- btrace (0)
- hadoop (1)
- cygwin (1)
- sshd (1)
- wanlu (0)
- mysql (0)
- debug (0)
- autotest (0)
- Error (0)
- 数据结构 (0)
- descriptor (0)
- jdb (0)
- hsdb (0)
- wiki (0)
- maven (0)
- spring (0)
- eclipse (0)
- mvc (0)
- 代理 (0)
- oracle (0)
- hibernate (1)
- Hash (0)
- blockingqueue (0)
- remember (0)
- graphviz (0)
- http (0)
- post (0)
- jdbc (0)
- websocket (0)
- inter (0)
- got error: The Network Adapter could not establish the connection when creating a data source in Weblogic pointing to a Oracle database (1)
- bug (0)
- xml (0)
- mail (0)
- db (0)
- JAXB (0)
- StAX (0)
- google (0)
- haskell (1)
- rpc (0)
- read-code (0)
- spring-cloud (0)
- service-registry-discovery (0)
最新评论
-
IamSungod:
很有探索精神,学过多种编程语言呀
clojure parse xml -
messi_18:
是的。不知道别的平台是否也有类似问题。
scalatest 尝试(一) -
llh110220:
lz在windows下编写的吧
scalatest 尝试(一)
今天决定研究一下JAR中的MAINFEST的作用。于是,看到这个文档:
http://docs.oracle.com/javase/tutorial/ext/basics/index.html
真心不错。仔细研读,写一篇总结。
Java中应用扩展有两种途径:
第一种:install extension。就是把jar包放到JRE\lib\ext目录下。这个影响是全局性的,所有被这个JRE启动的Java虚拟机进程共享这个目录。没有这么做过。jdk6增加了一种更加全局的支持:可以把jar放到一个指定的文件夹,这样就能在本地机器上所有的JRE之间共享jar包。具体设置如下:
Solaris™ Operating System: /usr/jdk/packages/lib/ext
Linux: /usr/java/packages/lib/ext
Microsoft Windows: %SystemRoot%\Sun\Java\lib\ext
第二种:download extension。就是通过MANIFEST.MF文件来指定应用需要的扩展。这里又分为两种方式:
by a Class-Path header
by an Extension-List header
每个MANIFEST文件中只能出现二者之一。有什么不同呢?第一种,只在应用的生命周期下载用到的jar;第二种会把jar放到JRE\lib\ext里,有点install extension的味道。
看完了这些资料总结成一句话:MANIFEST.MF就是为了不把所有的被依赖的jar包都放到CLASSPATH里。当然还有其他的因素,比如便于类的加载为类加载器控制,形成层次化。举个例子,A.jar中的MANIFEST.MF文件的class-path中有对B.jar的引用。如果A.jar的类是被ClassLoader1所加载,那么当需要加载B.jar中的类时,也会用ClassLoader1加载。当然,这里指的是A中的类对B中的类的直接引用,而且B还没有被ClassLoader1的parent所加载。
具体一些:如果位于A.jar中的A.class时应用程序入口,且引用了B.jar中的B.class。其中,A.jar中的MANIFEEST.MF中的Class-Path有对B.jar的引用。
启动程序java -cp A.jar A
sun.misc.Launcher$AppClassLoader的实例试图加载A.class,它把这个请求委托给了它的父加载器sun.misc.Launcher$ExtClassLoader,而ExtClassloader又把请求委托给了BootStrapClassLoader。这就达到了委托链的尽头,BootStrapClassLoader只能自己试图加载A.class,它去哪里找呢?BootStrapClassLoader去rt.jar等JRE的运行时的jar中去找。这显然是找不到的。所以它告诉它的委托人(就是sun.misc.Launcher$ExtClassLoader):我已经尽力了,没找到啊!接下来sun.misc.Launcher$ExtClassLoader只好自己动手去找,它去哪里找呢?前面提过JRE\lib\ext。这个还是找不到,于是它就只好告诉委托人(sun.misc.Launcher$AppClassLoade):我找不着!接下来,sun.misc.Launcher$AppClassLoade只好自己找,怎么着?属性java.class.path,它的默认值是.就是当前目录。这个值可以通过-cp 或者-classpath或者CLASSPATH环境变量来修改。sun.misc.Launcher$AppClassLoade回去java.class.path中的每个class,每个jar去遍历寻找。如果是class直接看是不是A.class,如果是jar就进入jar中寻找。如果还没找到,就去jar的MANIFEST.MF中Class-Path中列的jar中继续寻找。最终,在A.jar的MANIFEST.MF中定位到了B.jar,在B.jar中找到了B.class。分析到这里,我们知道了,MANIFEST.MF中的Class-Path中指定的jar起到了扩展当前ClassLoader的class path的作用。
这里举的是很简单的例子,如果在应用服务器中会更复杂一些。有时间我会尝试剖析一下JBoss、Weblogic、Websphere的类加载机制。
接下来还想搞清classloader是如何解析MANIFEST的,这个需要另开一篇。
http://docs.oracle.com/javase/tutorial/ext/basics/index.html
真心不错。仔细研读,写一篇总结。
Java中应用扩展有两种途径:
第一种:install extension。就是把jar包放到JRE\lib\ext目录下。这个影响是全局性的,所有被这个JRE启动的Java虚拟机进程共享这个目录。没有这么做过。jdk6增加了一种更加全局的支持:可以把jar放到一个指定的文件夹,这样就能在本地机器上所有的JRE之间共享jar包。具体设置如下:
Solaris™ Operating System: /usr/jdk/packages/lib/ext
Linux: /usr/java/packages/lib/ext
Microsoft Windows: %SystemRoot%\Sun\Java\lib\ext
第二种:download extension。就是通过MANIFEST.MF文件来指定应用需要的扩展。这里又分为两种方式:
by a Class-Path header
by an Extension-List header
每个MANIFEST文件中只能出现二者之一。有什么不同呢?第一种,只在应用的生命周期下载用到的jar;第二种会把jar放到JRE\lib\ext里,有点install extension的味道。
看完了这些资料总结成一句话:MANIFEST.MF就是为了不把所有的被依赖的jar包都放到CLASSPATH里。当然还有其他的因素,比如便于类的加载为类加载器控制,形成层次化。举个例子,A.jar中的MANIFEST.MF文件的class-path中有对B.jar的引用。如果A.jar的类是被ClassLoader1所加载,那么当需要加载B.jar中的类时,也会用ClassLoader1加载。当然,这里指的是A中的类对B中的类的直接引用,而且B还没有被ClassLoader1的parent所加载。
具体一些:如果位于A.jar中的A.class时应用程序入口,且引用了B.jar中的B.class。其中,A.jar中的MANIFEEST.MF中的Class-Path有对B.jar的引用。
启动程序java -cp A.jar A
sun.misc.Launcher$AppClassLoader的实例试图加载A.class,它把这个请求委托给了它的父加载器sun.misc.Launcher$ExtClassLoader,而ExtClassloader又把请求委托给了BootStrapClassLoader。这就达到了委托链的尽头,BootStrapClassLoader只能自己试图加载A.class,它去哪里找呢?BootStrapClassLoader去rt.jar等JRE的运行时的jar中去找。这显然是找不到的。所以它告诉它的委托人(就是sun.misc.Launcher$ExtClassLoader):我已经尽力了,没找到啊!接下来sun.misc.Launcher$ExtClassLoader只好自己动手去找,它去哪里找呢?前面提过JRE\lib\ext。这个还是找不到,于是它就只好告诉委托人(sun.misc.Launcher$AppClassLoade):我找不着!接下来,sun.misc.Launcher$AppClassLoade只好自己找,怎么着?属性java.class.path,它的默认值是.就是当前目录。这个值可以通过-cp 或者-classpath或者CLASSPATH环境变量来修改。sun.misc.Launcher$AppClassLoade回去java.class.path中的每个class,每个jar去遍历寻找。如果是class直接看是不是A.class,如果是jar就进入jar中寻找。如果还没找到,就去jar的MANIFEST.MF中Class-Path中列的jar中继续寻找。最终,在A.jar的MANIFEST.MF中定位到了B.jar,在B.jar中找到了B.class。分析到这里,我们知道了,MANIFEST.MF中的Class-Path中指定的jar起到了扩展当前ClassLoader的class path的作用。
这里举的是很简单的例子,如果在应用服务器中会更复杂一些。有时间我会尝试剖析一下JBoss、Weblogic、Websphere的类加载机制。
接下来还想搞清classloader是如何解析MANIFEST的,这个需要另开一篇。
发表评论
-
Atomic reference vs volatile reference
2015-12-21 00:05 452volatile reference和atomic refer ... -
java.lang.ClassNotFoundException: javax.mail.internet.MimeMessage
2013-06-27 16:27 0Today when I try to send mail b ... -
java exchanger
2013-06-19 15:54 0Today focus on: multi-thread in ... -
java blocking queue performance issue when large concurrency
2013-05-16 15:35 0I recalled someone ask me a que ... -
发现了几篇关于java虚拟机的好文章,要好好消化一下
2013-04-19 15:49 0好久没有关注jvm了,今天翻到了几篇好文章。先记下,有时间消化 ... -
Java Endorsed Standards Override Mechanism
2013-04-18 17:56 0Today I read an article named & ... -
java.lang.LinkageError
2012-12-11 14:13 0今天遇到了一个问题java.lang.IllegalAcces ... -
管理log插入。比如编译时插入。
2012-11-20 20:51 0管理log插入。比如编译时插入。 萌发这个想法是因为每次,调试 ... -
java解惑44题没重现
2012-11-09 02:18 0java解惑第44题我没有重现。 jdk1.6.0_35 ... -
java2d学习
2012-11-07 00:37 0想要系统的学习一下java2d 第一步学习画阿基米德螺旋曲线。 ... -
ASM初探
2012-11-02 00:38 0今天遇到了一个问题。Log4J的config and watc ... -
String.split
2012-10-31 21:02 835String.split(String reg)这个方法一点不 ... -
mina,hbase,zookeeper
2012-10-26 22:49 0我要学习探索新知识的有效手段。从这两个开始吧。 -
log4j那些事儿
2012-10-25 19:31 0都知道Log4j是用来输出日志的框架。不怕笑话,我一直都知道它 ... -
storm是什么
2012-09-28 16:49 0storm是什么?需要研究一下。 https://github ... -
你知道吗,-Long.MIN_VALUE == Long.MIN_VALUE
2012-09-20 22:58 3265相信吗,-Long.MIN_VALUE == Long.MIN ... -
transaction in JAVAEE and Spring
2012-09-14 19:16 0XA transaction and local transa ... -
weblogic 数据源的事务管理
2012-09-14 01:50 0有这样一个case,在weblogic下配置了两个数据源,其中 ... -
java NIO
2012-09-13 16:52 0由这篇文章想到了NIO。 然后又提到了这篇文章。 -
java 并发与并行(Java concurrent and parallel)
2012-09-13 16:19 0起因是想知道BlockedQueque是干嘛的,接着想到了这篇 ...
相关推荐
a 802.11n BSS operating in 20/40 MHz mode and a legacy BSS operating in 20 MHz mode, where the overlapping channel is the extension channel of the 20/40 MHz BSS. Our results show that if clear ...
a new extension for ns2, which add the tdma-dama mechanism to the ns2
These extensions have been defined using the experimental extension mechanism supported in OpenFlow-Switch to add messages and attributes to the base protocol specification. The extensions are ...
MTP incorporates a mechanism to enable Microsoft and other vendors to extend the core commands, events, properties, and object formats that are defined in the MTP specification. An MTP extension is a ...
ISO 10303-21 defines the encoding mechanism on how to represent data according to a given EXPRESS schema, but not the EXPRESS schema itself. A STEP-File is also called p21-File and STEP Physical File....
adapting existing applications to your needs through a clever extension mechanism and a very modular design. The latest versions have brought a wealth of new possibilities with the addition of a full-...
The JavaMail API is an optional package (standard extension) for reading, composing, and sending electronic messages. You use the package to create Mail User Agent (MUA) type programs, similar to ...
In this paper, we present a new bio-inspired vision ...developed extension module and the inspired vision system are feasible to employ as a vision module for obstacle avoidance and motion control.
enhanced band-gap expansion of semiconductor nanocrystals,欧阳钢,孙长庆,We have investigated the band-gap variation of semiconductor nanocrystals based on the extension of the bond order–length-...
it invokes the mechanism that will dynamically serialize the control method to possible prevent future errors. (BZ 440) Integrated a fix for a problem with PCI Express HID detection in the PCI Config...
- **Constraint Inductive Logic Programming (CILP)**: CILP is an extension of Inductive Logic Programming (ILP) that incorporates constraints into the learning process. This technique can be ...
5. Extension of the EM Algorithm. 5.1 Introduction. 5.2 ECM Algorithm. 5.3 Multicycle ECM Algorithm. 5.4 Example 5.2: Normal Mixtures with Equal Correlations. 5.5 Example 5.3: Mixture Models for ...
* The Shell Extension components does not support C++ Builder 4. For some strange reason the components causes a link error. * There appear to be sporadic problems compiling with C++ Builder 5. ...
Note that the Java ...The Java Communications API is a Java extension that provides access to a variety of communication protocols and interfaces for communication between applications and devices.
SysML uses the UML 2.5 extension mechanisms as further elaborated in Clause 17 as the primary mechanism to specify the extensions to UML 2.5. This revision of SysML relies on several new features ...
• Cross-family portable set of APIs covering the common peripheral features as well as extension APIs in case of specific peripheral features. • Three API programming models: polling, interrupt and ...
Networking Override Mechanism Security Serialization Extension Mechanism XML JAXP lang and util Base Libraries lang and util Collections Concurrency Utilities JAR Logging Management Preferences ...
SafariDriver extension into their Safari installation in order to drive the browser. This is due to Apple's changes in architecture for Safari extensions. * Added initial implementation of .NET ...
- **URL Routing:** The book delves into the routing mechanism of ASP.NET MVC, which maps URLs to actions in controllers. It explains how to configure custom routes and how to handle URL parameters ...