在这种默认的类装载器结构下,有一点需要提出的是:
a. 我们的应用必须打包成一个EAR文件,才会允许我们应用中的jsp和servlet文件直接访问ejb;如果将WAR与JAR文件分别打包。Weblogic server会为他们分别生成一个类装载器,作为兄弟节点,这时如果需要在jsp或者servlet中使用ejb,就必须将EJB的Home接口与remote接口打包到WAR中才可以。后面这种情况,适合用在将EJB的客户端和EJB部署在不同的JVM中;
b. web application classloader中,不会装载jsp文件,jsp文件由web application classloader的子装载器Jsp classloader负责装载,因为jsp文件经常的变动,通过为jsp设立一个单独的classloader可以避免对jsp的装载影响到其他的java class或者ejb;
默认装载器的优点:
a. 调用ejb的时候可以采用call-by-referrence的方式;
b. 允许web module独立的装载,不影响其它的web module;
c. 通过在将整个应用打包成一个EAR文件,可以方便的不用再web module中包含EJB的home和remote接口,就可以方便的通过call-by-referrence来调用ejb;
自定义的类装载器有如下得限制:
a. 不能够装载servlet;
b. 嵌套的深度最大为3,也就是说,最多只能够嵌套三层;
c. 自定义装载器的module类型仅限于 Web和 EJB这两种;
d. Jsp Classloader不受此自定义类装载器的影响,它永远都是web module的子类装载器;
e. 相同的类可能导致部署异常;
f. 在自定义的类装载器中,如果要使用EJB,就必须将EJB的home和remote接口打包到相应的web module中去;