gwt jetty jndi查找失败

时间:2011-03-28 03:40:01

标签: gwt jetty jndi

我正在使用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数据源......有什么建议吗?

1 个答案:

答案 0 :(得分:4)

上述配置中存在两个问题

  • -noserver in run选项是禁用jetty运行。它用于在外部服务器上运行Web应用程序,如tomcat等。要在GWT开发模式下在嵌入式jetty服务器上运行webapp,不需要此选项。
  • 在jetty-web.xml&lt; Arg&gt; jdbc / MSSQLDS&lt; / Arg&gt;应更改为&lt; Arg&gt; java:/ comp / env / jdbc / MSSQLDS&lt; / Arg&gt;

设置JNDI数据源以在GWT开发模式下在嵌入式Jetty服务器上运行的步骤如下。 (我使用了mysql数据源作为示例,但其他数据源的步骤相同)

  • 添加jetty-naming - * .jar,jetty-plus - * .jar到项目构建路径,如下面的屏幕截图所示。可以使用/ usr / share / jetty / lib中可用的Jetty库。可以在生产中使用其他Web服务器,如tomcat,它们不会添加到WEB-INF / lib目录中。如果jetty用于生产env,那么它们可以添加到WEB-INF / lib目录。

Build Path


  • 将带有以下内容的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

运行配置的屏幕截图


enter image description here


保存设置并在开发模式下启动webapp。