我正在使用带有标准MySQL连接器API的Jetty 9.2(嵌入式),并且对应该如何设置它感到非常困惑。目前,我的 web.xml
文件中包含以下内容:
<webapp ...
<resource-ref>
<description>JDBC Data Source</description>
<res-ref-name>jdbc/DataSource</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
</webapp>
…这在我的jetty-env.xml中:
<Configure class="org.eclipse.jetty.webapp.WebAppContext">
<New id="DatabaseConnector" class="org.eclipse.jetty.plus.jndi.Resource">
<Arg></Arg>
<Arg>jdbc/DataSource</Arg>
<Arg>
<New class="com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource">
<Set name="Url">jdbc:mysql://localhost:3306/DBName</Set>
<Set name="User">user</Set>
<Set name="Password">pass</Set>
</New>
</Arg>
</New>
</Configure>
…然后执行以下代码初始化:
Context envCtx = (Context) new InitialContext().lookup("java:comp/env");
DataSource datasource = (DataSource) envCtx.lookup("jdbc/DataSource");
当我尝试启动服务器时,出现错误javax.naming.NameNotFoundException; remaining name 'jdbc/DataSource'
。我已经在代码初始化中尝试了许多不同的字符串变体,例如删除了lookup
对InitialContext
对象的调用,但是我只是不断地获得相同错误的变体,只是name
值不同。
这两个xml文件都位于我的/WAR/WEB-INF
目录中。我查看了以前的问题和教程,博客等的大量内容,但是却一无所获。
这是嵌入式Jetty特有的问题的组合。
首先,在我实际启动Web服务器之前(即在调用之前),正在配置和启动Web服务器的启动器代码正在执行JNDI查找server.start()
,因此在该阶段未初始化JNDI配置。
但是,即使进行此更改也不起作用,因为envCtx.lookup("jdbc/DataSource")
需要从与WebApp关联的线程中进行调用。因此,我将该代码移到了静态块,该静态块在Web服务器请求首次请求数据库连接时被调用。
最后,我在 启动器代码中得到了以下内容 :
public static void main(String[] args) {
Server server = new Server();
//Enable parsing of jndi-related parts of web.xml and jetty-env.xml
ClassList classlist = ClassList.setServerDefault(server);
classlist.addAfter(
"org.eclipse.jetty.webapp.FragmentConfiguration",
"org.eclipse.jetty.plus.webapp.EnvConfiguration",
"org.eclipse.jetty.plus.webapp.PlusConfiguration");
...
...
server.start();
无法通过该主线程进行JNDI查找,因此将其放置在类似于init
servlet请求的方法的地方,或者像我一样,将其放置在servlet使用的静态数据库访问器类的同步方法中,例如
public class DatabaseUtils {
private static DataSource datasource;
private static synchronized Connection getDBConnection() throws SQLException {
if (datasource == null) {
initDataSource();
}
return datasource.getConnection();
}
public static void initDataSource() {
try {
datasource = (DataSource) new InitialContext().lookup("java:comp/env/jdbc/DataSource");
LOG.info("Database connection pool initalized successfully");
} catch (Exception e) {
LOG.error("Error while initialising the database connection pool", e);
}
}
我需要知道我对上面的理解是否正确。 在连接池中,可以使用java.sql.DataSource设置多个连接。 在jdbc中,我们直接指定连接url和oracle.jdbc.driver.OracleDriver并且它总是一个连接,另一个请求必须等待到连接完成处理。 使用JNDI与直接jdbc类似,我们通过名称引用jdbc设置,这样我们就可以在应用服务器中指定连接url和其他设置,而不是将它们绑定到
我已经搜索了很长一段时间,但我找不到任何关于这个问题的好教程或答案。 在这个项目中,只有一个XML文件pom。该服务器是一个嵌入式Jetty 8,带有一个编程定义的ServletContextHandler,用于处理所有传入请求。我的观点是,没有WebAppContext或WAR文件(因为似乎所有教程都需要WEB-INF、WebAppContext、WEB.xml、jetty-env.xml或WA
我正在使用嵌入式Jetty 9.2,并试图设置一个需要通过JNDI访问的Oracle数据源。我相信我已经正确地设置了这个,但是它不起作用,尽管花了一天的大部分时间在网上搜索。有人能帮忙吗? 以下是我的启动代码: 这是我的jetty-env.xml(在我的战争的WEB-INF目录中): 这是我的web.xml参考资料: 我得到两个错误。当我启动服务器时,我得到 JAVAlang.IllegalSta
我将在应用程序中使用tomcat-jdbc连接池。有两种方法可以添加它: 谢了。
问题内容: 只是从github交叉发布。 我将xorm 0.4.3与go-mysql一起使用。我们使用Golang 1.4。 我们在和中指定了以下内容: 而且我们使用相同的单个实例来查询Mysql。 但是我们仍然看到很多连接的状态,这是远远超过这些数字我已经配置和 我们国家的时候- 我们还观察到,即使我们停止MySQL,连接号仍保持固定但处于状态。如果我们关闭应用程序,则所有连接都会消失。 但是在
我们使用spring数据中的Oracle AQ支持在同一数据源上同时使用JMS和JDBC,使用本地事务而不是XA。我们的设置基本上是参考手册中所描述的:在orcl上:aq jms连接工厂:使用本地数据源事务=“true”和本机jdbc提取器=“oracleNativeJdbcExtractor”HibernateTransactionManager(我现在正尝试对aq和Hibernate使用单一数