Java servlet中的Jetty和SQLite连接
我正在用Java和Maven在Netbeans中制作一个小的servlet应用程序。我正在使用SQLite数据库和最新的Jetty服务器。我在创建用于servlet的连接池时遇到问题。工作原理(在servlet中): 这在jetty.xml/web.xml/pom.xml中不需要特定设置即可工作 我有一些库可以使用SQLite和连接池(org.xerial.SQLite-jdbc、commons-pool、commons-dbcp) 什么不起作用: web.xml:Java servlet中的Jetty和SQLite连接,java,sqlite,servlets,jetty,database-connection,Java,Sqlite,Servlets,Jetty,Database Connection,我正在用Java和Maven在Netbeans中制作一个小的servlet应用程序。我正在使用SQLite数据库和最新的Jetty服务器。我在创建用于servlet的连接池时遇到问题。工作原理(在servlet中): 这在jetty.xml/web.xml/pom.xml中不需要特定设置即可工作 我有一些库可以使用SQLite和连接池(org.xerial.SQLite-jdbc、commons-pool、commons-dbcp) 什么不起作用: web.xml: <resour
<resource-ref>
<description>DB Connection Pool</description>
<res-ref-name>jdbc/DSTestPool</res-ref-name>
<res-type>javax.sql.ConnectionPoolDataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
数据库连接池
jdbc/DSTestPool
javax.sql.ConnectionPoolDataSource
容器
jetty.xml
<New id="DSTestPool" class="org.eclipse.jetty.plus.jndi.Resource">
<Arg>jdbc/DSTestPool</Arg>
<Arg>
<New class="org.sqlite.SQLiteConnectionPoolDataSource">
<Set name="driverClassName">org.sqlite.JDBC</Set>
<Set name="url">jdbc:sqlite:c:\\db\\base</Set>
</New>
</Arg>
</New>
jdbc/DSTestPool
org.sqlite.JDBC
jdbc:sqlite:c:\\db\\base
xml-依赖项
此配置,即使没有代码更改(更改为使用池),也会在jetty控制台中创建错误:
java.lang.reflect.InvocationTargetException
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
位于sun.reflect.NativeMethodAccessorImpl.invoke(未知源)
....
原因:
java.lang.IllegalStateException:在org.eclipse.jetty.plus.webapp.PlusDescriptorProcessor.bindEntry(PlusDescriptorProcessor.java:895)中没有要绑定的名称jdbc/DSTestPool
…
在Jetty中打开应用程序:错误503
我认为我在jetty.xml中声明的jdbc/DSTestPool有问题,我尝试了不同的参数,但结果是一样的。jetty.xml中缺少一个参数,您可以声明以下任何类型:
- org.eclipse.jetty.plus.jndi.EnvEntry:用于环境条目类型的条目
- org.eclipse.jetty.plus.jndi.Resource:用于所有其他类型的资源
- org.eclipse.jetty.plus.jndi.Transaction:对于JTA经理
- org.eclipse.jetty.plus.jndi.Link:用于web.xml资源名称和命名条目之间的链接
<New class="org.eclipse.jetty.plus.jndi.xxxx">
<Arg><!-- scope --></Arg>
<Arg><!-- name --></Arg>
<Arg><!-- value --></Arg>
</New>
详细信息。一种方法可以是使用HikariCp(或任何其他pooler…)。
在jetty-env.xml中:
<Configure class="org.eclipse.jetty.webapp.WebAppContext">
<New id="DSTest" class="org.eclipse.jetty.plus.jndi.Resource">
<Arg></Arg>
<Arg>jdbc/ds</Arg>
<Arg>
<New class="com.zaxxer.hikari.HikariDataSource">
<Arg>
<New class="com.zaxxer.hikari.HikariConfig">
<Set name="dataSourceClassName">org.sqlite.SQLiteDataSource</Set>
<Call name="addDataSourceProperty">
<Arg>url</Arg>
<Arg>jdbc:sqlite:path/to/test.db</Arg>
</Call>
</New>
</Arg>
</New>
</Arg>
<New id="DSTestPool" class="org.eclipse.jetty.plus.jndi.Resource">
<Arg></Arg><!-- empty arg -->
<Arg>jdbc/DSTestPool</Arg>
<Arg>
<New class="org.sqlite.SQLiteConnectionPoolDataSource">
<Set name="driverClassName">org.sqlite.JDBC</Set>
<Set name="url">jdbc:sqlite:c:\\db\\base</Set>
</New>
</Arg>
</New>
<Configure id='wac' class="org.eclipse.jetty.webapp.WebAppContext">
<New id="DSTestPool" class="org.eclipse.jetty.plus.jndi.Resource">
<Arg><Ref refid='wac'/></Arg><!-- reference to WebAppContext -->
<Arg>jdbc/DSTestPool</Arg>
<Arg>
<New class="org.sqlite.SQLiteConnectionPoolDataSource">
<Set name="driverClassName">org.sqlite.JDBC</Set>
<Set name="url">jdbc:sqlite:c:\\db\\base</Set>
</New>
</Arg>
</New>
</Configure>
<Configure class="org.eclipse.jetty.webapp.WebAppContext">
<New id="DSTest" class="org.eclipse.jetty.plus.jndi.Resource">
<Arg></Arg>
<Arg>jdbc/ds</Arg>
<Arg>
<New class="com.zaxxer.hikari.HikariDataSource">
<Arg>
<New class="com.zaxxer.hikari.HikariConfig">
<Set name="dataSourceClassName">org.sqlite.SQLiteDataSource</Set>
<Call name="addDataSourceProperty">
<Arg>url</Arg>
<Arg>jdbc:sqlite:path/to/test.db</Arg>
</Call>
</New>
</Arg>
</New>
</Arg>
<resource-ref id="ds">
<res-ref-name>jdbc/ds</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
(DataSource)new InitialContext().lookup("java:/comp/env/jdbc/ds");
...