标签: jndi

什么是JNDI?它的基本用途是什么?什么时候使用?

什么是JNDI?它的基本用途是什么?什么时候使用?

jndi

258
推荐指数
8
解决办法
20万
查看次数

将现有JNDI HornetQ服务作为HA的步骤?

TL; DR

使用HornetQ设置配置HA-JNDI服务的步骤是什么?我相信文档有点分散.我在这里阅读了文档,但似乎没有详细说明.

更长的版本:

所以我们有一个HornetQ JMS设置和JNDI.我们已经说了5台服务器,每台服务器运行带有JNDI服务的HornetQ JMS主实例.在这5台服务器中的每台服务器上,我们还有一台运行其他HornetQ主机的从机.

为了显示:

Server A - HornetQa_master, JNDI, HornetQb_slave
Server B - HornetQb_master, JNDI, HornetQc_slave
Server C - HornetQc_master, JNDI, HornetQd_slave
Server D - HornetQd_master, JNDI, HornetQe_slave
Server E - HornetQe_master, JNDI, HornetQa_slave
Run Code Online (Sandbox Code Playgroud)

这些HornetQ服务器中的每一个都充当我们各种后端需求的中间件,因此这意味着5个服务器,5个HornetQ主实例,5个HornetQ从属实例和5个JNDI服务器.然而,这个设置的问题是,如果服务器主机(不仅仅是进程,主机本身),说A发生故障,理想情况下服务应该回退到运行在服务器E上的HornetQ,后者托管A的HornetQ从站.但是,要继续作为HornetQ master,HornetQa_slave需要与在服务器A上运行的JNDI进程通信(我假设要复制消息).由于主机A本身已关闭,因此在E上运行的HornetQa_slave无法与A上的JNDI通信,因此无法作为主进程恢复.

如果JNDI服务高度可用,则从属HornetQ进程可以按预期恢复为主服务器.任何人都可以指向文档或简单说明我们如何将现有设置转换为HA-JNDI?对于它的价值,我已经阅读了多个来源,但它似乎没有详细说明如何配置HA-JNDI.如果您需要有关我们当前设置的更多信息,请与我们联系.

谢谢

java jboss jndi hornetq

177
推荐指数
1
解决办法
2977
查看次数

如何在Spring中使用Tomcat提供的JNDI DataSource?

据说在关于DriverManagerDataSource类的Spring javadoc文章中,这个类非常简单并且推荐使用

使用容器提供的JNDI DataSource.这样的一个DataSource可以DataSource在Spring ApplicationContext via中作为bean 公开JndiObjectFactoryBean

问题是:我该如何做到这一点?

例如,如果我希望有DataSourcebean来访问我的自定义MySQL数据库,那么我需要什么呢?我应该在上下文配置等中写什么?

java spring tomcat jndi datasource

155
推荐指数
6
解决办法
25万
查看次数

java:comp/env /做什么?

我花了太多时间在连接一些JNDI工厂bean时试图找出一些错误.结果问题是,而不是......

<bean id="someId" class="org.springframework.jndi.JndiObjectFactoryBean">
  <property name="jndiName" value="java:comp/env/jdbc/loc"/>
</bean>
Run Code Online (Sandbox Code Playgroud)

我其实写了这个......

<bean id="someId" class="org.springframework.jndi.JndiObjectFactoryBean">
  <property name="jndiName" value="jdbc/loc"/>
</bean>
Run Code Online (Sandbox Code Playgroud)

我推断java:comp/env /可能引用了一些环境变量,并最终使我的上下文文件被查看.唯一的区别是java:comp/env /.从专家的口中,这是做什么的?

如果没有值中的java:comp/env前缀,我将收到一条错误,指出"Name jdbc未绑定在此Context中".

spring factory jndi jdbc

114
推荐指数
2
解决办法
11万
查看次数

JNDI的目的是什么?

如果可能的话,如何通过一个例子来实现JNDI的使用?

java jndi

87
推荐指数
3
解决办法
6万
查看次数

您应该在server.xml或context.xml中设置数据库连接属性

我正在尝试使用JNDI为Spring Web应用程序设置数据库连接属性.

我正在考虑以下两种方法:

方法1:

在Spring配置中,您可能会遇到以下情况:

<jee:jndi-lookup id="dataSource" jndi-name="java:comp/env/jdbc/facs"/>
Run Code Online (Sandbox Code Playgroud)

然后在你的webapp /META-INF/context.xml文件中你也应该有类似的东西:

<?xml version='1.0' encoding='utf-8'?>

<!-- antiResourceLocking="true" -->
<Context path="/podd-apn"
         reloadable="true"
         cachingAllowed="false"
         antiResourceLocking="true"
         >

  <Resource name="jdbc/facs"              
            type="javax.sql.DataSource" username="${database.username}" password="${database.password}"
            driverClassName="org.postgresql.Driver" 
            url="${database.url}"
            maxActive="8" maxIdle="4"
            global="jdbc/facs" 
            />


</Context>
Run Code Online (Sandbox Code Playgroud)

在你的web.xml中,你应该这样:

<!-- JNDI -->
  <resource-ref>
    <description>FACs Datasource</description>
    <res-ref-name>jdbc/facs</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
  </resource-ref> 
Run Code Online (Sandbox Code Playgroud)


方法2:

在Spring上下文中设置如下:

<jee:jndi-lookup id="dbDataSource"
   jndi-name="jdbc/DatabaseName"
   expected-type="javax.sql.DataSource" />
Run Code Online (Sandbox Code Playgroud)

您可以使用以下内容在Tomcat的server.xml中声明JNDI资源:

<GlobalNamingResources>
  <Resource name="jdbc/DatabaseName" auth="Container" type="javax.sql.DataSource"
              username="dbUsername" password="dbPasswd"
              url="jdbc:postgresql://localhost/dbname"
              driverClassName="org.postgresql.Driver"
              initialSize="5" maxWait="5000"
              maxActive="120" maxIdle="5"
              validationQuery="select 1"
              poolPreparedStatements="true"/>
</GlobalNamingResources/>
Run Code Online (Sandbox Code Playgroud)

并从Tomcat的web context.xml引用JNDI资源,如下所示:

<ResourceLink name="jdbc/DatabaseName"
   global="jdbc/DatabaseName"
   type="javax.sql.DataSource"/>
Run Code Online (Sandbox Code Playgroud)


我的问题是保留数据库属性的最佳位置在哪里?它们应该放在server.xml还是context.xml中 …

java spring jndi datasource

78
推荐指数
3
解决办法
8万
查看次数

什么是java:comp/env?

是什么意思java:comp/env

看起来像什么:

Context envContext = (Context)initContext.lookup("java:comp/env");
Run Code Online (Sandbox Code Playgroud)

做什么?

我明白这样的查找:

(DataSource)envContext.lookup("jdbc/MyDatasource")
Run Code Online (Sandbox Code Playgroud)

MyDatasourcecontext.xml或中查找名称web.xml以获取数据库的URL.是这样吗 ?!但是前者看起来做了什么?

java jndi java-ee

77
推荐指数
3
解决办法
8万
查看次数

NoInitialContextException错误

我正在为EJB编写客户端,在尝试执行它时,我得到以下异常:

javax.naming.NoInitialContextException:需要在环境或系统属性中指定类名,或在applet参数中指定类名,或在应用程序资源文件中指定.

我只是无法理解问题所在.

java jndi java-ee

61
推荐指数
6
解决办法
17万
查看次数

无法为连接URL'null'创建类''的JDBC驱动程序:我不明白这个异常

为什么它说 URL并在我提供数据库URL时在异常中给出一个空的''类?

我尝试context.xml在使用时通过servlet 连接到数据库web.xml.当servlet运行时,我得到以下异常:

org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null'

at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createConnectionFactory(BasicDataSource.java:1452)
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1371)
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044)

at servlets.servlet_1.doGet(servlet_1.java:23) // ---> Marked the statement in servlet

at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:405)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:964)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:515)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
at java.lang.Thread.run(Thread.java:619)
Caused by: …
Run Code Online (Sandbox Code Playgroud)

java tomcat jndi derby java-ee

50
推荐指数
4
解决办法
13万
查看次数

为什么将JNDI用于数据源

任何人都可以帮助解释为什么JNDI应该是公开数据库/ jms等服务的首选方式吗?

我遇到的帖子都谈到了不必加载特定驱动程序管理器的优势,从连接池等方面受益,但通过在属性文件中指定驱动程序管理器并使用反射可以轻松实现.

连接池也可以通过弹簧或其他方式将正确的实现连接到应用程序bean中来实现.

那么为什么使用JNDI会更好呢?

java jndi

46
推荐指数
5
解决办法
3万
查看次数

标签 统计

jndi ×10

java ×8

java-ee ×3

spring ×3

datasource ×2

tomcat ×2

derby ×1

factory ×1

hornetq ×1

jboss ×1

jdbc ×1