我正在使用MySQL在GWT应用程序中建立数据库连接。我希望数据库读取一组'init'参数,因此我不需要'手动编码'DB URL和用户名和密码。 我搜索了一段时间以寻找可能的解决方案,但可能的解决方案让我有点不知所措。他们中的一些人谈到JNDI作为解决方案,但没有人明白如何做到这一点。
此外,在开发/调试模式(在Jetty中)运行Eclipse应用程序并最终在Tomcat中部署应用程序的差异使我更加困惑。
是否可以在web.xml中指定一组Init参数?我怎么读它们?
如果要使用JNDI?我是否可以逐步简明地总结如何完成这项任务?
答案 0 :(得分:1)
您正在寻找的是网络应用上下文设置 -
在Web应用程序上下文中添加数据库信息
要配置jetty,您还必须使用jetty-web.xml配置 -
要在您的应用中建立连接,请在服务器端使用以下内容 -
Context ctx = new InitialContext();
DataSource ds = (DataSource) ctx.lookup("java:comp/env/{Res Name in context.xml}");
Connection conn = ds.getConnection();
注意 - 要让您的应用程序同时使用jetty和tomcat运行,请同时拥有这两个文件,并确保您的资源名称为 -
context.xml : {resourceName}
jetty-web.xml: java:comp/env/{resourceName}
不确定jetty-web.xml是否也适用于{resourcename}
编辑 - 示例context.xml代码 -
<Resource name="jdbc/myDatabaseServer" auth="Container" type="javax.sql.DataSource"
maxActive="100" maxIdle="30" maxWait="10000" username="USER"
password="PWD" driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://myUrl:3306/myDB?autoReconnect=true" removeAbandoned="true"
removeAbandonedTimeout="60" logAbandoned="true" autoReconnect="true" validationQuery="select 1" testOnBorrow="true"
testOnReturn="true" testWhileIdle="true" timeBetweenEvictionRunsMillis="1800000"
numTestsPerEvictionRun="3" minEvictableIdleTimeMillis="1800000"/>
相同的示例jetty-web.xml代码 -
<New id="someid" class="org.mortbay.jetty.plus.naming.Resource">
<Arg>java:comp/env/jdbc/myDatabaseServer</Arg>
<Arg>
<New class="org.apache.commons.dbcp.BasicDataSource">
<Set name="driverClassName">com.mysql.jdbc.Driver</Set>
<Set name="url">jdbc:mysql://myUrl:3306/myDB?autoReconnect=true</Set>
<Set name="username">USER</Set>
<Set name="password">PWD</Set>
<Set name="maxActive">100</Set>
<Set name="maxIdle">30</Set>
<Set name="minIdle">0</Set>
<Set name="maxWait">10000</Set>
<Set name="minEvictableIdleTimeMillis">1800000</Set>
<Set name="timeBetweenEvictionRunsMillis">1800000</Set>
<Set name="numTestsPerEvictionRun">3</Set>
<Set name="testOnBorrow">true</Set>
<Set name="testWhileIdle">true</Set>
<Set name="testOnReturn">true</Set>
<Set name="validationQuery">SELECT 1</Set>
</New>
</Arg>
</New>
您可以阅读每个部分的含义。