当前位置: 首页 > 面试题库 >

java:comp / env /做什么?

宁欣怿
2023-03-14
问题内容

我一天中花了太多时间试图找出一些连接JNDI工厂bean的错误。问题原来是,而不是这个…

<bean id="someId" class="org.springframework.jndi.JndiObjectFactoryBean">
  <property name="jndiName" value="java:comp/env/jdbc/loc"/>
</bean>

我实际上已经写过了…

<bean id="someId" class="org.springframework.jndi.JndiObjectFactoryBean">
  <property name="jndiName" value="jdbc/loc"/>
</bean>

我推断java:comp/env/也许引用了一些环境变量并使之生效,以便最终查看我的上下文文件。唯一的区别是java:comp/env/。从专家的口中,这是做什么的?

java:comp/env/在值中没有前缀的情况下,我将收到一条错误消息,指出“名称jdbc在此上下文中未绑定”。


问题答案:

在名称空间的根上下文中是名称为“ comp”的绑定,该绑定绑定到为与组件相关的绑定保留的子树。名称“ comp”是组件的缩写。在根上下文中没有其他绑定。但是,根上下文保留用于策略的将来扩展,特别是用于命名不与组件本身绑定但与其他类型的实体(例如用户或部门)绑定的资源。例如,将来的策略可能允许你使用“ java:user / alice”和“ java:org / engineering”之类的名称来命名用户和组织/部门。

在“ comp”上下文中,有两个绑定:“ env”和“ UserTransaction”。名称“ env”绑定到一个子树,该子树保留给组件的环境相关绑定(由其部署描述符定义)。“ env”是环境的缩写。J2EE建议(但不需要)“ env”名称空间的以下结构。

因此,你从spring或例如tomcat上下文描述符进行的绑定默认情况下位于java:comp / env /

例如,如果你的配置是:

<bean id="someId" class="org.springframework.jndi.JndiObjectFactoryBean">
  <property name="jndiName" value="foo"/>
</bean>

然后,你可以使用以下命令直接访问它:

Context ctx = new InitialContext();
DataSource ds = (DataSource)ctx.lookup("java:comp/env/foo");

或者你可以采取一个中间步骤,这样就不必为检索到的每个资源都指定“ java:comp / env”:

Context ctx = new InitialContext();
Context envCtx = (Context)ctx.lookup("java:comp/env");
DataSource ds = (DataSource)envCtx.lookup("foo");


 类似资料:
  • 问题内容: 什么意思? 看起来像什么: 怎么办? 我了解查询如下: 在或中查找名称,以获取数据库的URL。 _是这样吗 ?!! _但是,前者看起来如何? 问题答案: 是JNDI树中的节点,您可以在其中找到当前Java EE组件(Web应用程序或EJB)的属性。 允许定义直接指向此节点的变量。它允许做 而不是 相对路径而不是绝对路径。这就是它的用途。

  • 我正在开发一个Java Web应用程序,并将其部署在Websphere Application Server中,

  • 问题内容: 我正在阅读一本有关html开发的书(我还比较陌生),尽管该书一个月前(2011年11月)才刚刚出版,但作者是一位经验丰富的编码人员,也许可以用于行动形式是老派? 因为我试图获得示例代码的要点,但是尽管进行了搜索,却找不到解释。 在Google,SO和www.w3schools.com上。 有人知道该动作对表格意味着什么吗? 问题答案: 动作通常指定提交表单的文件/页面(使用方法参数中所

  • 问题内容: 在一些示例的开头,我已经看到了这一行,而我在Google上搜索时没有找到任何可以回答该行原因的主题。 单词的性质使搜索变得不那么容易。 我读了一些和书籍最近,我不记得看到它在任何人。 如果您想要一个示例,则可以查看官方教程,他们几乎在所有示例中都有它,这里是其中之一: 有人可以解释一下这行是什么意思吗? 如果放置或删除此行有什么区别?在什么情况下需要? 问题答案: 是 shebang行

  • 问题内容: 为什么我们需要特定于数据库的功能,例如mysql_real_escape_string()?addlashes()不能做什么? 暂时忽略了参数化查询的高级替代方案,是一个仅使用addlashes()的web应用仍然容易受到SQL注入的攻击,如果是,怎么办? 问题答案: 当处理多字节编码的字符串时,加号通常不够好。

  • 问题内容: 在Kubernetes minikube教程中,有以下命令可以使用Minikube Docker守护进程: 该命令的确切作用是什么? 问题答案: 该命令返回一组Bash环境变量导出,以配置您的本地环境以重新使用Minikube实例中的Docker守护程序。 通过此输出会导致bash评估这些出口并使它们生效。 您可以通过省略评估步骤并直接运行来查看将在您的Shell中执行的特定命令。但是