当前位置: 首页 > 知识库问答 >
问题:

Jetty JNDI配置与Spring查找

钱朝明
2023-03-14

我在Jetty服务器上的JNDI配置有问题。我无论如何都不能配置它,使Spring(3.0.5)之后可以检索JNDI变量。

我有一些凭证,我不想存储在属性中,这样它就不会存在于git repo中。我的web应用程序正在Jetty(最新版本9.2.3)上运行,因此我想到了在Jetty web应用程序上下文中存储这些凭证的想法。Jetty通过Jetty env提供此类解决方案。xml。所以我创建了jetty env。我的WEB-INF/中的xml文件如下:

<?xml version="1.0"?>
<!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" "http://jetty.mortbay.org/configure.dtd">

<Configure id="webappCtx" class="org.eclipse.jetty.webapp.WebAppContext">

  <New id="username"  class="org.eclipse.jetty.plus.jndi.Resource">
    <Arg><Ref refid="webappCtx"/></Arg> <!-- scope -->
    <Arg>server/username</Arg> <!-- name -->
    <Arg type="java.lang.String">myUsername</Arg> <!-- value -->

  </New>

  <New id="password"  class="org.eclipse.jetty.plus.jndi.Resource">
    <Arg><Ref refid="webappCtx"/></Arg> <!-- scope -->
    <Arg>server/password</Arg> <!-- name -->
    <Arg type="java.lang.String">qwerty</Arg> <!-- value -->
  </New>

</Configure>

之后,我在web中定义了绑定。xml如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="MyWebApp" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

<display-name>My Web App</display-name>

<!-- INITIALIZE SPRING -->
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:/spring-context.xml</param-value>
</context-param>
<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<!-- JETTY-ENV JNDI -->
<resource-ref>
    <res-ref-name>server/username</res-ref-name>
    <res-type>java.lang.String</res-type>
</resource-ref>
<resource-ref>
    <res-ref-name>server/password</res-ref-name>
    <res-type>java.lang.String</res-type>
</resource-ref>

</web-app>

并以以下方式配置了我的Spring上下文:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:context="http://www.springframework.org/schema/context"
   xmlns:aop="http://www.springframework.org/schema/aop"
   xmlns:amq="http://activemq.apache.org/schema/core"
   xmlns:tx="http://www.springframework.org/schema/tx"
   xmlns:ehcache="http://www.springmodules.org/schema/ehcache"
   xmlns:jee="http://www.springframework.org/schema/jee"
   xsi:schemaLocation="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
        http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core-5.2.0.xsd
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
        http://www.springmodules.org/schema/ehcache http://www.springmodules.org/schema/cache/springmodules-ehcache.xsd
        http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.0.xsd">

    <jee:jndi-lookup id="serverUsername" jndi-name="server/username" expected-type="java.lang.String" resource-ref="true" />
    <jee:jndi-lookup id="serverPassword" jndi-name="server/password" expected-type="java.lang.String" resource-ref="true"/>

    <bean name="abstractServerConnectionFactory" class="my.package.ServerConnectionFactory" abstract="true">
        <constructor-arg value="${server.host}"/>
        <constructor-arg value="${server.port}"/>
        <constructor-arg ref="serverUsername"/>
        <constructor-arg ref="serverPassword"/>
    </bean>
</beans>

在那之后,我开始使用启用了--add to startd=jndi的Jetty,我总是得到javax。命名。创建serverUsernameserverPassword时,NameNotFoundException。我尝试过很多修改,但似乎没有效果。我试过:

  • 改变org。日食码头。加jndi。资源组织。日食码头。加jndi。EnvEntry然后通过web中的资源env ref引用它。xml
  • 将资源范围设置为JVM而不是webapp,以便更改
<Call name="bindToENC">
    <Arg>server/username</Arg>  <!-- binds server/username to java:comp/env/server/username for this webapp -->
</Call>

还有很多其他的,但它就是不起作用。请给我一个工作的例子,我如何才能让它工作。非常感谢。


共有1个答案

赵智
2023-03-14

好的,所以我设法让这个工作。问题是配置。我正在使用Jetty 9,所以根据官方留档(http://www.eclipse.org/jetty/documentation/current/jndi.html#jndi-quick-setup),在Jetty中使用JNDI之前唯一需要做的事情是通过执行--add-将jndi模块添加到start. dto-stard=jndi。嗯,这并不完全正确,因为这将启用JNDI,但不包括jetty-env.xml内容(Jetty甚至不碰它)。我一直在阅读容器生命周期,并注意到为了使用JNDI,需要在Web应用程序上下文配置类集中包括以下类:

  • 组织。日食码头。加网络应用。环境配置

默认情况下,这在$JETTY_HOME/etc/JETTY plus中完成。xml,它是plus模块的配置文件。因此,为了将这些类添加到Jetty容器生命周期中,并由此包含和解析Jetty env。xml,除了jndi模块,还需要启用plus模块(jndi不依赖plus)!因此我改变了我的开始。通过调用--add to startd=jndi,再加上(模块之间没有空格)进行配置,一切都开始正常工作。

 类似资料:
  • 我正试图根据这里提到的博客演示RabbitMQ信用流机制的用法:https://www.rabbitmq.com/blog/2015/10/06/new-credit-flow-settings-on-rabbitmq-3-5-5/ 作为演示的一部分,我想展示如果消费者无法处理消息,RabbitMQ将阻止发布者进一步发布消息。 在消费者方面,我将消息持久保存在数据库中。我已将RabbitMQ确认模

  • 我正在spring boot中处理一个项目,我需要添加spring integration poller来从某个位置轮询文件,并在该文件上运行spring batch来处理它。 我为此使用了spring批处理集成(文档参考如下) 在spring boot中,我在@configuration文件中成功地配置了我的轮询器,如下所示 这个轮询器是在java配置中定义的,而通道是在xml中定义的,如下所示

  • 我的Spring Boot应用程序JPA配置有一个问题。我有两个配置文件-dev(H2 db)和prod(PostgreSQL)。我想在没有Spring Boot“Magic”的情况下手动设置JPA,所以我创建了如下所示的配置类 我发现这可能是的问题,因为当我在PersistenceContext类中通过属性映射设置该属性时,它可以正常工作。我不知道如何通过属性文件正确设置它。事先谢谢你的帮助。

  • 我有一个Spring Boot Web应用程序,它尝试使用Hibernate访问我的数据库。我还有一个不同的、没有spring boot应用程序,它尝试访问相同的数据库。 我正在使用一个带注释的类配置无Spring Boot应用程序。 由于某些原因,Spring Boots自动配置的作用与注释类配置不同。 如果第一次连接到数据库并使用hibernate ddl创建模式,然后使用另一种配置方式重新连

  • 问题内容: 我正在使用spring3.1.1和hibernate 4.1设置新项目。当我运行项目时,出现以下错误 我的applicationContext.xml MyDAOImpl 我添加了我的依赖罐,请建议我 请帮助我完成项目设置。请提出一些建议,在建立新项目结构时需要集中精力,在新项目结构中,为以后的升级而需要进行的更改较少。 抱歉,我是stackoverflow的新手,我不知道如何重播命令