为什么Wildfly中的com / sun / rowset / CachedRowSetImpl为NoClassDefFoundError?

时间:2015-09-03 17:51:27

标签: java jboss wildfly cachedrowset

我的操作系统是Windows 7 64位。我正在使用Eclipse Luna。我正在探索从JBoss 4.2.3迁移到Wildfly 8.2.1。

我创建了一个简单的Web应用程序来测试com.sun.rowset.CachedRowSetImpl,我认为它是JDK的一部分。

我创建了一个类RowSetAdaptor作为CachedRowSetImpl类的包装器:

package com.srh.util;

import java.io.Serializable;
import java.sql.SQLException;
import com.sun.rowset.CachedRowSetImpl;

public class RowSetAdaptor implements Serializable {
   private CachedRowSetImpl rowset;
   public RowSetAdaptor() {
      try {
         rowset = new CachedRowSetImpl();
      } catch (SQLException sqle) {
         System.out.println("RowSetAdaptor: constructor: SQLException=" + sqle);            
      }     
   }
}

然后我创建了一个监听器类AppContextListener

package com.srh.listener;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import com.srh.util.RowSetAdaptor;

public class AppContextListener implements ServletContextListener {
    public AppContextListener() {
    }

    public void contextInitialized(ServletContextEvent arg0) {
        RowSetAdaptor rsa = null;
        rsa = new RowSetAdaptor();
        System.out.println("AppContextListener: after create: rsa=" + rsa);
    }

    public void contextDestroyed(ServletContextEvent arg0) {
    }
}

将应用程序部署到Jboss 4.2.3并在server.log中获取正确的输出:

  

AppContextListener:创建后:   rsa=com.srh.util.RowSetAdaptor@2a9073ef

将相同的应用程序部署到Wildfly 8.2.1并在server.log中为CachedRowSetImpl获取NoClassDefFoundError:

  

引起:java.lang.NoClassDefFoundError:   COM /太阳/行集/对CachedRowSetImpl

由于com.sun.rowset.CachedRowSetImpl是JD​​K的一部分,为什么Wildfly会出现此错误?我很迷惑。如何解决这个问题?

由于

1 个答案:

答案 0 :(得分:2)

我按照以下步骤解决了这个问题:

打开module.xml目录中的JDK的modules/system/layers/base/sun/jdk/main

在路径元素下包含以下3行:

<path name="com/sun/rowset"/>
<path name="com/sun/rowset/internal"/>
<path name="com/sun/rowset/providers"/>

保存module.xml

重新启动Wildfly

不知道为什么Wildfly JDK模块已经没有这3行了。