sqlite - Tomcat 无法启动并生成 java.util.concurrent.ExecutionException,如下所示,一旦我用 listener-class 初始化了 web.xml

标签 sqlite tomcat ormlite servletcontextlistener

给定错误:

INFO: Starting service Catalina Feb 15, 2016 2:23:09 PM org.apache.catalina.core.StandardEngine startInternal INFO: Starting Servlet Engine: Apache Tomcat/8.0.23 Feb 15, 2016 2:23:09 PM org.apache.catalina.util.SessionIdGeneratorBase createSecureRandom INFO: Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [116] milliseconds. Feb 15, 2016 2:23:09 PM org.apache.catalina.core.ContainerBase startInternal SEVERE: A child container failed during start java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/storyboard]] at java.util.concurrent.FutureTask.report(FutureTask.java:122) at java.util.concurrent.FutureTask.get(FutureTask.java:192) at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:917) at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:871) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1409) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1399) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745) Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/storyboard]] at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154) ... 6 more Caused by: java.lang.NoClassDefFoundError: com/j256/ormlite/support/ConnectionSource at java.lang.Class.getDeclaredFields0(Native Method) at java.lang.Class.privateGetDeclaredFields(Class.java:2575) at java.lang.Class.getDeclaredFields(Class.java:1908) at org.apache.catalina.util.Introspection.getDeclaredFields(Introspection.java:106) at org.apache.catalina.startup.WebAnnotationSet.loadFieldsAnnotation(WebAnnotationSet.java:256) at org.apache.catalina.startup.WebAnnotationSet.loadApplicationListenerAnnotations(WebAnnotationSet.java:86) at org.apache.catalina.startup.WebAnnotationSet.loadApplicationAnnotations(WebAnnotationSet.java:63) at org.apache.catalina.startup.ContextConfig.applicationAnnotationsConfig(ContextConfig.java:334) at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:774) at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:305) at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117) at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90) at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5066) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) ... 6 more Caused by: java.lang.ClassNotFoundException: com.j256.ormlite.support.ConnectionSource at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1305) at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1157) ... 20 more

Web.xml

<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee 
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1">
<servlet>
<servlet-name>UploadImage</servlet-name>
<servlet-class>com.home.storyboard.UploadServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>UploadCanvas</servlet-name>
<servlet-class>com.home.storyboard.UploadCanvas</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>UploadImage</servlet-name>
<url-pattern>/uploadimage</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>UploadCanvas</servlet-name>
<url-pattern>/uploadcanvas</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>StoryServlet</servlet-name>
<servlet-class>com.home.storyboard.StoryServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>StoryServlet</servlet-name>
<url-pattern>/StoryServlet</url-pattern>
</servlet-mapping>
<listener>
   <description>ServletContextListener</description>
   <listener-class>com.home.storyboard.StartupListener</listener-class>
</listener>
<welcome-file-list> 
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>

启动监听器

package com.home.storyboard;
import com.j256.ormlite.support.ConnectionSource;
import com.j256.ormlite.jdbc.JdbcConnectionSource;
import java.sql.SQLException;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import com.home.storyboard.DAOdb;


public class StartupListener implements ServletContextListener{
private final static String DATABASE_URL = "jdbc:sqlite:testdb.db"; 

ConnectionSource connectionSource = null;

@Override
public void contextInitialized(ServletContextEvent sce) {
    try {
        // create our data-source for the database
        connectionSource = new JdbcConnectionSource(DATABASE_URL);
        DAOdb db = new DAOdb(connectionSource);
        sce.getServletContext().setAttribute("db", db);

        }catch(SQLException e){
            System.out.println(e.getMessage());
        }
 }

@Override
public void contextDestroyed(ServletContextEvent sce) {
    // destroy the data source which should close underlying connections

    DAOdb db = (DAOdb)sce.getServletContext().getAttribute("db");
    db.close();
 }
 }

DAOdb 类

package com.home.storyboard;
import java.sql.SQLException;
import java.util.List;
import com.j256.ormlite.dao.Dao;
import com.j256.ormlite.dao.DaoManager;
import com.j256.ormlite.dao.GenericRawResults;
import com.j256.ormlite.table.TableUtils;
import com.j256.ormlite.support.ConnectionSource;

 public class DAOdb {

// we are using the in-memory H2 database
private final ConnectionSource connectionSource;
private Dao<User, Integer> userDAO;
private Dao<Profile,Integer> profileDAO;
private Dao<Story, Integer> storyDAO;
private String lastError;

public DAOdb(ConnectionSource connectionSource){
    this.connectionSource=connectionSource;
    try{
    userDAO = DaoManager.createDao(connectionSource, User.class);
    TableUtils.createTable(connectionSource, User.class);
    profileDAO = DaoManager.createDao(connectionSource, Profile.class);
    TableUtils.createTable(connectionSource, Profile.class);
    storyDAO = DaoManager.createDao(connectionSource, Story.class);
    TableUtils.createTable(connectionSource, Story.class);
    }catch(SQLException e){
        lastError = e.getMessage().toString();
    }
}

/**
 * DAO Functions to fetch data
 */

 public void addStory(Story S) {
     try{
         storyDAO.create(S);
         lastError = null;
        } catch (Exception e) {
            lastError = e.getMessage().toString();
        }
    }

 public List<Story> getStoriesbyUsername(String username) {
     String uname =username;
     List<Story> storyList = null;
     User user = getUserbyUsername(uname);
     Integer uid =user.getId();
     try{
        GenericRawResults<String[]> stories = storyDAO.queryRaw(
                "select count(*) from stories where userid = uid");
            // there should be 1 result
            List<String[]> results = stories.getResults();
            // the results array should have 1 value
            Integer usercount = results.size();
            // this should print the number of orders that have this account-id
            if(usercount<=0){
                lastError="'No story exists by username'+' '+ username";
              }else{
                 storyList = storyDAO.queryBuilder()
                             .where()
                             .eq(Story.USERID_FIELD_NAME, uid)
                             .query();
              }
            }catch(SQLException e){
                lastError = e.getMessage().toString();
            }

      return storyList;
    }
 }

最佳答案

您的问题太长且涉及面太广。它的重要部分是由异常引起的:

java.lang.ClassNotFoundException: com.j256.ormlite.support.ConnectionSource at ...

由于某些原因,您的应用程序没有 ConnectionSource 类。也许您不包括 ORMLite JDBC 和核心 jar?确保遵循 getting started documentation谈到这个:

Users that are connecting to SQL databases via JDBC connections will need to download the ormlite-jdbc-4.48.jar and ormlite-core-4.48.jar files. For use with Android applications, you should download the ormlite-android-4.48.jar and ormlite-core-4.48.jar files instead. For either JDBC or Android you will also need the ormlite-core release which has the ORMLite backend implementations.

如果您正在使用 war,请找到 jar 位置并确保两个 ORMLite jar 都在那里。如果您的应用程序中已经有了核心,那么我不确定出了什么问题。

希望这对您有所帮助。

关于sqlite - Tomcat 无法启动并生成 java.util.concurrent.ExecutionException,如下所示,一旦我用 listener-class 初始化了 web.xml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35419072/

相关文章:

android - SQLite:.db 文件扩展名转换为 .sqlite 文件扩展名

C - SQLite 绑定(bind)不工作

Android samsung s6 SM-G920F marshmallow 卸载应用程序时无法删除数据

eclipse - 错误 404 - 请求的资源不可用 - Eclipse Tomcat7

android - SQLite 异常 : unknown error (code 0): Native could not create new byte[]

c - Sqlite 给出相同的输出并且不考虑 where 子句顺序

java - Tomcat session cookie 不会过期

java - Maven - JAVA_HOME 位置和编译失败执行 javac

android - Gradle 构建错误 - 在应用程序期间抛出 NullPointerException :compileDebugJava gradle task

Android 在 ORMLite 中使用 OrderBy