2014-09-04 91 views
4

我在IntelliJ中部署我的第一个WAR文件时出现以下错误。据说这是一个本地问题,因为这只是我们部署的一个WAR文件来测试我们的设置。通过IntelliJ IDEA 13部署的Tomcat战争正在返回错误

全部80个Maven的测试都通过,但是当我浏览到Web应用程序,我得到这个错误:

java.lang.IllegalArgumentException: javax.naming.NameNotFoundException: Name [jdbc/ipam] is not bound in this Context. Unable to find [jdbc]. 
    com.myapp1.ipam.rest.JaxRsApplication.<init>(JaxRsApplication.java:26) 
    sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) 
    sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
    java.lang.reflect.Constructor.newInstance(Constructor.java:526) 
    org.glassfish.hk2.utilities.reflection.ReflectionHelper.makeMe(ReflectionHelper.java:1104) 
    org.jvnet.hk2.internal.Utilities.justCreate(Utilities.java:902) 
    org.jvnet.hk2.internal.ServiceLocatorImpl.create(ServiceLocatorImpl.java:872) 
    org.jvnet.hk2.internal.ServiceLocatorImpl.createAndInitialize(ServiceLocatorImpl.java:964) 
    org.jvnet.hk2.internal.ServiceLocatorImpl.createAndInitialize(ServiceLocatorImpl.java:956) 
    org.glassfish.jersey.server.ApplicationHandler.createApplication(ApplicationHandler.java:336) 
    org.glassfish.jersey.server.ApplicationHandler.<init>(ApplicationHandler.java:315) 
    org.glassfish.jersey.server.ApplicationHandler.<init>(ApplicationHandler.java:285) 
    org.glassfish.jersey.servlet.WebComponent.<init>(WebComponent.java:310) 
    org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:170) 
    org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:358) 
    javax.servlet.GenericServlet.init(GenericServlet.java:158) 
    org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501) 
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) 
    org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950) 
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408) 
    org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1070) 
    org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611) 
    org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:314) 
    java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
    java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
    org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
    java.lang.Thread.run(Thread.java:745) 

这似乎是问题所在:

public JaxRsApplication() { 
    DataSource datasource; 
    try { 
     Context initCtx = new InitialContext(); 
     Context envCtx = (Context) initCtx.lookup("java:comp/env"); 
     datasource = (DataSource) envCtx.lookup("jdbc/ipam"); 
    } catch (NamingException e) { 
     throw new IllegalArgumentException(e); 
    } 
    this.init(new SystemConfiguration(datasource)); 
} 

这我第一次使用IntelliJ,而且我是Java新手,所以我不确定这里要做什么。

这里是上下文fragment.xml之

<?xml version='1.0' encoding='utf-8'?> 
<Context> 
    <Resource name="jdbc/ipam" 
       factory="org.apache.tomcat.jdbc.pool.DataSourceFactory" 
       auth="Container" 
       type="javax.sql.DataSource" 
       initialSize="2" 
       maxActive="5" 
       maxIdle="5" 
       minIdle="1" 
       maxWait="10000" 
       removeAbandoned="true" 
       removeAbandonedTimeout="60" 
       logAbandoned="true" 
       defaultReadOnly="false" 
       username="**********" 
       password="**********" 
       driverClassName="org.postgresql.Driver" 
       validationQuery="select 1" 
       validationQueryTimeout="5" 
       logValidationErrors="true" 
       testOnBorrow="true" 
       testWhileIdle="true" 
       url="jdbc:postgresql://db1host/ipam_dev_table_here"/> 
</Context> 
+0

你真的应该检查你的context.xml文件。你确定资源已定义吗? – Makoto 2014-09-04 20:42:16

+0

谢谢,我编辑了我的帖子以显示context-fragment.xml。我没有看到问题。 – taco 2014-09-04 20:46:05

+0

确保context-fragment.xml正确加载 – 2014-09-04 20:54:17

回答

22

确保你已经设置的IntelliJ当它开始部署到Tomcat context.xml文件。您可以通过从文件菜单

    1. 选择“项目结构”从那里做到这一点,选择“构面”选项。确保您已经配置了Web部件。如果不是,请添加一个。

    2. 一旦网络方面添加,选择“添加应用程序服务器特定的描述符......”

    3. 选择Tomcat上下文从选项描述符,然后单击确定。

    默认情况下,IntelliJ将指向META-INF/context.xml。如果这不是您的上下文文件的位置,则需要编辑该文件的路径。

  • +0

    感谢您发布此信息。花了七个小时试图找到这些信息。 – canadiancreed 2017-02-02 21:40:48