Issue con error NoClassDefFoundError en un entorno web Spring / Wicket / Derby / Jetty

Estoy tratando de construir una aplicación JDBC Spring Template simple, el marco web que estoy usando es wicket y bajo el servidor web jetty 6 (a través del complemento Jetty Maven). Además, estoy creando la aplicación con Eclipse.

Por alguna razón, obtengo un NoClassDefFoundError con la clase Derby jdbc. Supongo que obtendría una clase no encontrada, no se encontró la excepción, así que supongo que algo más está sucediendo. La clase derby es parte de classpath, el directorio WEB-INF / lib. ¿Cuál crees que es el problema?

Mis pensamientos sobre el problema: No es un error "jar no encontrado en el classpath" sino más bien un problema con Java o Spring cargando dinámicamente esa clase y cuando se carga.

Estoy usando Eclipse como herramienta de desarrollo, pero probablemente no sea parte del problema. Todavía estoy usando Maven en la línea de comando y obtengo el mismo problema.

Aquí está el error:

WicketMessage: No se puede crear una instancia de la página con el constructor public wicketspring.easy.HomePage ()

Causa principal

java.lang.NoClassDefFoundError: Could not initialize class org.apache.derby.jdbc.EmbeddedDriver
     at java.lang.Class.forName0(Native Method)
     at java.lang.Class.forName(Class.java:169)
     at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1130)
     at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:880)
     at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:113)
     at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:79)
     at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:577)
     at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:619)
     at wicketspring.easy.jdbc.JdbcWicketSpringHandler.data(JdbcWicketSpringHandler.java:39)
     at WICKET_wicketspring.easy.jdbc.JdbcWicketSpringHandler$FastClassByCGLIB$f1187cb6.invoke(<generated>)
     at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:191)
     at org.apache.wicket.proxy.LazyInitProxyFactory$CGLibInterceptor.intercept(LazyInitProxyFactory.java:319)
     at WICKET_wicketspring.easy.jdbc.JdbcWicketSpringHandler$EnhancerByCGLIB$e8f0e174.data(<generated>)
     at wicketspring.easy.HomePage.<init>(HomePage.java:91)
     at wicketspring.easy.HomePage.<init>(HomePage.java:47)

Aquí está el applicationContext.xml para Spring:

<beans>
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
        <property name="driverClassName" value="org.apache.derby.jdbc.EmbeddedDriver" />
        <property name="url"><value>jdbc:derby:wicketspringdb</value></property>
        <property name="username"><value></value></property>
        <property name="password"><value></value></property>
    </bean> 
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource" ref="dataSource" />
    </bean> 
</beans>
<beans> 
    <import resource="classpath:common.xml"/>
    <bean id="jdbcHandler" class=wicketspring.easy.jdbc.JdbcWicketSpringHandler">
        <property name="jdbcTemplate" ref="jdbcTemplate" />
    </bean>

</beans>


...
Another stack trace system out.

Page.java:74) - At [2b] -- java.lang.NoClassDefFoundError: Could not initialize class org.apache.derby.jdbc.EmbeddedDriver
java.lang.NoClassDefFoundError: Could not initialize class org.apache.derby.jdbc.EmbeddedDriver
        at wicketspring.easy.HomePage.<init>(HomePage.java:72)
        at wicketspring.easy.HomePage.<init>(HomePage.java:47)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:
39)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorIm
pl.java:27)

...

Aquí está el código de Java, el código se compila y puedo imprimir la clase pero no puedo crear una instancia. ¿Extraño

Código de Java:

package wicketspring.easy;

import java.util.List;

import org.apache.wicket.Application;
import org.apache.wicket.PageParameters;
import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.list.ListView;
import org.apache.wicket.model.CompoundPropertyModel;
import org.apache.wicket.proxy.IProxyTargetLocator;
import org.apache.wicket.proxy.LazyInitProxyFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import model.LoadableDetachableList;
import model.SelectionOptionBean;
import wicketspring.easy.jdbc.JdbcWicketSpringHandler;
import wicketspring.easy.service.IStateListService;
import wicketspring.easy.service.StateListServiceImpl;

import org.apache.derby.jdbc.EmbeddedDriver;

public class HomePage extends WebPage {

    private final JdbcWicketSpringHandler jdbcWicketSpringHandler;

    public HomePage(final PageParameters parameters) {

        super(parameters);        
        jdbcWicketSpringHandler = (JdbcWicketSpringHandler) LazyInitProxyFactory.createProxy(JdbcWicketSpringHandler.class,
                new IProxyTargetLocator() {
                    private static final long serialVersionUID = 1L;
                    public Object locateProxyTarget() {
                        return ((WicketApplication) Application.get()).context().getBean("jdbcHandler");
                    }
                });    

        /// WEIRD BECAUSE IT REACHES THIS POINT!!!
        LOGGER.debug("At [1] -- " + EmbeddedDriver.class);
        try {
            LOGGER.debug("At [2] -- " + new org.apache.derby.jdbc.EmbeddedDriver());
        } catch (NoClassDefFoundError ne) {
                // STACK TRACE ERROR HERE!!!!
            LOGGER.debug("At [2b] -- " + ne);
            ne.printStackTrace();
        } catch (Exception e) {
            LOGGER.debug("At [2] -- " + e);
            e.printStackTrace();
        }
        try {

            LOGGER.debug("At -- " + Class.forName("org.apache.derby.jdbc.EmbeddedDriver"));     
        } catch (NoClassDefFoundError ne) {
            LOGGER.debug("At [3b] -- " + ne);
            ne.printStackTrace();
        } catch (Exception e) {
            LOGGER.debug("At [3] -- " + e);
            e.printStackTrace();
        }

        /// ERROR FOR STACKOVERFLOW IS GENERATED FROM THIS LINE!!!!
        LOGGER.debug("At HomePage - jdbcHandler [3]: " + jdbcWicketSpringHandler.toStringJdbcTemplate());
        LOGGER.debug("At HomePage - jdbcHandler [3]: " + jdbcWicketSpringHandler.data());        

        ...

} // End of Class //

Edit: es posible que me falte un archivo jar que depende de Spring Jdbc o dbcp.

Aquí está mi listado WEB-INF / lib:

antlr-2.7.6.jar
aopalliance-1.0.jar
avalon-framework-4.1.3.jar
axis-1.4.jar
axis-jaxrpc-1.4.jar
cglib-nodep-2.2.jar
commons-collections-3.1.jar
commons-dbcp-1.2.2.jar
commons-logging-1.1.jar
commons-pool-1.3.jar
derby-10.6.1.0.jar
dom4j-1.6.1.jar
hibernate-core-3.5.1-Final.jar
jetty-6.1.4.jar
jetty-management-6.1.4.jar
jetty-util-6.1.4.jar
jta-1.1.jar
log4j-1.2.14.jar
logkit-1.0.1.jar
mx4j-3.0.1.jar
mx4j-tools-3.0.1.jar
servlet-api-2.5-6.1.4.jar
servlet-api-2.5.jar
slf4j-api-1.5.8.jar
slf4j-log4j12-1.4.2.jar
spring-2.5.6.jar
spring-aop-2.5.6.jar
spring-beans-2.5.6.jar
spring-context-2.5.6.jar
spring-core-2.5.6.jar
spring-jdbc-2.5.6.jar
spring-test-2.5.6.jar
spring-tx-2.5.6.jar
testRunWrapper-1.0.0.jar
wicket-1.4.13.jar
wicket-ioc-1.4.13.jar
wicket-spring-1.4.13.jar
xml-apis-1.0.b2.jar

Respuestas a la pregunta(4)

Su respuesta a la pregunta