我正在使用gwt和jetty,但是想使用jndi作为数据源,所以请按照eclipse gwt jetty jndi的文档进行操作,并在下面运行我的gwt app
在eclipse中使用以下选项运行我的gwt应用程序
-noserver
-remoteUI "${gwt_remote_ui_server_port}:${unique_id}"
-startupUrl myapp.html
-logLevel INFO
-codeServerPort 9997
-war war\location
-server com.myproject.MyCustomJettyLauncher
com.my.apps.app
WEB-INF配置下的我的jetty-env.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" "
http://jetty.mortbay.org/configure.dtd">
<Configure class="org.mortbay.jetty.webapp.WebAppContext">
<New id="MSSQLDS" class="org.mortbay.jetty.plus.jndi.Resource">
<Arg></Arg>
<Arg>jdbc/MSSQLDS</Arg>
<Arg>
<New class="net.sourceforge.jtds.jdbcx.JtdsDataSource">
<Set name="User">dbuser</Set>
<Set name="Password">pwd</Set>
<Set name="DatabaseName">mydatabase</Set>
<Set name="ServerName">localhost</Set>
<Set name="PortNumber">1433</Set>
</New>
</Arg>
</New>
</Configure>
当我运行我的应用时,我得到以下错误
Starting Jetty on port 8888
[WARN] Failed startup of context com.healthfortis.MyCustomJettyLauncher$WebAppContextWithReload@2ed7c530{/,C:\workspace\hf-src\src\main\webapp}
javax.naming.NameNotFoundException;
剩余名称'java:comp'
at org.mortbay.naming.NamingContext.lookup(NamingContext.java:578)
at org.mortbay.naming.NamingContext.lookup(NamingContext.java:680)
at org.mortbay.naming.local.localContextRoot.lookup(localContextRoot.java:164)
at javax.naming.InitialContext.lookup(InitialContext.java:392)
at org.mortbay.jetty.plus.webapp.EnvConfiguration.createEnvContext(EnvConfiguration.java:51)
at org.mortbay.jetty.plus.webapp.EnvConfiguration.configureWebApp(EnvConfiguration.java:103)
at org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1217)
at org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:513)
at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:448)
at com.healthfortis.MyCustomJettyLauncher$WebAppContextWithReload.doStart(MyCustomJettyLauncher.java:459)
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:39)
at org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:130)
at org.mortbay.jetty.Server.doStart(Server.java:222)
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:39)
at com.healthfortis.MyCustomJettyLauncher.start(MyCustomJettyLauncher.java:660)
at com.google.gwt.dev.DevMode.doStartUpServer(DevMode.java:494)
at com.google.gwt.dev.DevModeBase.startUp(DevModeBase.java:1058)
at com.google.gwt.dev.DevModeBase.run(DevModeBase.java:800)
at com.google.gwt.dev.DevMode.main(DevMode.java:304)
看起来像eclipsse / jetty无法找到jndi数据源......有什么建议吗?
答案 0 :(得分:4)
上述配置中存在两个问题
设置JNDI数据源以在GWT开发模式下在嵌入式Jetty服务器上运行的步骤如下。 (我使用了mysql数据源作为示例,但其他数据源的步骤相同)
将带有以下内容的jetty-web.xml添加到WEB-INF目录
<Arg>java:/comp/env/jdbc/dev</Arg>
<Arg>
<New class="com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource">
<Set name="Url">jdbc:mysql://localhost:3306/dev?autoReconnect=true
</Set>
<Set name="User">dev</Set>
<Set name="Password">dev</Set>
</New>
</Arg>
将GWT项目作为Web应用程序运行。你会得到 javax.naming.NoInitialContextException
要解决此问题,请转到“运行配置”并打开应用程序的运行配置。选择Arguments选项卡并将以下行添加到VM Arguments
-Djava.naming.factory.initial = org.mortbay.naming.InitialContextFactory
运行配置的屏幕截图
保存设置并在开发模式下启动webapp。