纯web项目,项目中用到了cglib中的部分功能,代码如下:
private Object getInstrumentedClass(Class clz)
{
enhancer = new Enhancer();
enhancer.setSuperclass(clz);
enhancer.setCallback(this);
return enhancer.create();
}奇怪的事情出现了,相同的包,当发布到sges-2_1-windows.exe上时,系统运行正常,当发布到sges_ee-2_1-windows.exe上时,程序走到enhancer = new Enhancer();报错,提示信息如下:
[#|2009-07-05T15:12:19.773+0800|SEVERE|sun-appserver2.1|javax.enterprise.system.container.web|_ThreadID=15;_ThreadName=h
ttpSSLWorkerThread-8080-1;_RequestID=a3458278-b2de-4e8e-9616-e3516430293d;|StandardWrapperValve[OBDispatcherServlet]: PW
C1406: Servlet.service() for servlet OBDispatcherServlet threw exception
java.lang.NoClassDefFoundError: Could not initialize class com.iss.cglib.proxy.Enhancer
        at com.iss.sysframe.base.aop.BizAopInstrumenter.<init>(BizAopInstrumenter.java:26)
        at com.iss.draftoperation.draftebank.systemManage.openbanksetting.action.OpenBankSettingAction.<init>(OpenBankSe
ttingAction.java:13)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
        at java.lang.Class.newInstance0(Class.java:355)
        at java.lang.Class.newInstance(Class.java:308)
        at com.iss.sysframe.servlet.OBDispatcherServlet.executeClassMethods(OBDispatcherServlet.java:187)
        at com.iss.sysframe.servlet.OBDispatcherServlet.doPost(OBDispatcherServlet.java:123)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:754)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:847)
        at sun.reflect.GeneratedMethodAccessor163.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:292)
        at java.security.AccessController.doPrivileged(Native Method)
        at javax.security.auth.Subject.doAsPrivileged(Subject.java:517)
        at org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:325)
        at org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:208)
        at org.apache.catalina.core.ApplicationFilterChain.servletService(ApplicationFilterChain.java:420)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:333)
        at org.apache.catalina.core.ApplicationFilterChain.access$000(ApplicationFilterChain.java:91)
        at org.apache.catalina.core.ApplicationFilterChain$1.run(ApplicationFilterChain.java:197)
        at java.security.AccessController.doPrivileged(Native Method)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
        at com.iss.sysframe.filter.EncodingFilter.doFilter(EncodingFilter.java:26)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:246)
        at org.apache.catalina.core.ApplicationFilterChain.access$000(ApplicationFilterChain.java:91)
        at org.apache.catalina.core.ApplicationFilterChain$1.run(ApplicationFilterChain.java:197)
        at java.security.AccessController.doPrivileged(Native Method)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:313)
        at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:287)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:218)
        at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:648)
        at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:593)
        at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:94)
        at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:98)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:222)
        at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:648)
        at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:593)
        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:587)
        at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1096)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:166)
        at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:648)
        at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:593)
        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:587)
        at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1096)
        at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:288)
        at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.invokeAdapter(DefaultProcessorTask.java:647)
        at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.doProcess(DefaultProcessorTask.java:579)
        at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.process(DefaultProcessorTask.java:831)
        at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.executeProcessorTask(DefaultReadTask.java:341)
        at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:263)
        at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:214)
        at com.sun.enterprise.web.connector.grizzly.TaskBase.run(TaskBase.java:265)
        at com.sun.enterprise.web.connector.grizzly.ssl.SSLWorkerThread.run(SSLWorkerThread.java:106)
|#]查了好多资料,甚至将cglib的源码考到项目中,修改了包名都解决不了,请各位帮忙看一下这个问题该怎么解决?多谢多谢!

解决方案 »

  1.   

    原因已经有了,红色部分。
    是不是系统中已经有一个老版本的Class,没有相应的Constructor? 楼主检查一下看看。
      

  2.   

    多谢楼上的回复
    可我把整个cglib包的源码考到项目中,将对应路径全部修改,仍然是glassfish非企业版没有问题,企业版报错,错误和上面一样。感觉是不是ges企业版和非企业版在部署cglib时有些不同?
      

  3.   

    上面是我把源代码考到项目里面后运行的结果,大家可以看到路径已经改成com.iss.cglib.proxy.Enhancer 了,cglib的原路径是net.sf.cglib.proxy.Enhancer