<script type="text/javascript"></script>
在开始使用JNDI之前,需要正确配置它,这样才能保证需要使用命名服务的客户机能正确的定位命名服务并用它查找资源。在使用EJB服务器的时候服务器一般已经配置好JNDI,而且JNDI在EJB服务器启动的时候也会启动,现在需要设置的是客户机如何查找并连接到组件接口的实现。客户机通过环境属性建立与JNDI环境的连接,从而使用JNDI提供的服务。在不同厂商提供的JNDI服务中有一些通用的环境属性,其中最重要的两个属性是java.naming.factory.initial和java.naming.provider.url,客户机需要设置这两个属性才能定位命名服务。java.naming.factory.initial表示初始语境工厂,通过这个语境工厂创建新的InitialContext引用(命名服务跟级别的引用),该属性值应该是所使用得工厂类的完整限制类名称,比如对于weblogicJNDI工厂,该属性设置为java.naming.factory.initial=weblogic.jndi.WLInitialContextFactory。java.naming.provider.url表示环境值的名称,它告诉SPI在何处可以找到JNDI命名服务,它的格式通常为prorocol://host:port,比如对于weblogic,该属性设置为:java.naming.provider.url=t3://localhost:7001。
要设置JDNI环境属性,可以通过以下几种方法实现:在InitialContext构造函数中设置,使用系统属性和使用资源文件。
方法一在InitialContext构造函数中传入一个hashtable,代码为:
Hashtable env= new Hashtable ();
env.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
env.put(Context.PROVIDER_URL, "t3://localhost:7001");
Context ctx=new InitialContext(env);
方法二在启动Java应用程序的时候通过系统属性提供JNDI环境属性值,比如使用如下命令来设置JNDI环境属性:java -Djava.naming.factory.initial=weblogic.jndi.WLInitialContextFactory -Djava.naming.provider.url=t3://localhost:7001
方法三使用资源文件使得设置于应用程序完全分离,便于维护。服务提供者和JNDI类库可以自动定位并使用这些资源文件,因此这种方法最灵活。我们可以编辑一个jndi.properties文件,内容为(对于weblogic):
java.naming.factory.initial=weblogic.jndi.WLInitialContextFactory java.naming.provider.url=t3://localhost:7001
然后保证其路径包含在环境变量中(比如放在编译后的classes文件夹下)以保证能够被正确定位。这样不用再在构造函数中提供环境属性就可以创建InitialContext对象,例如Context ctx=new InitialContext()。但是对于一些比较敏感的信息比如用户名密码等,则不易包含在这种资源文件中。这种自己编写的资源文件称为应用程序资源文件,另外还有一种资源文件由JNDI服务提供者提供,成为提供者资源文件,在这种资源文件中放置本身服务的特定属性,对于这类资源文件中设置的某个java.naming.factory属性将覆盖其他已经设置的对应的属性。客户机在连接某个JNDI命名服务时,首先如果所有环境属性都使用InitialContext构造函数传递,这些属性就用来初始化语境,其次JNDI环境会添加系统属性,最后添加被包含的资源文件中的环境属性。
分享到:
相关推荐
在部署MDB时,可能会遇到一些问题,其中一种常见的异常是`javax.naming.NameNotFoundException`。该异常说明在查找JNDI命名上下文中找不到指定的名称。 在本文中,将详细讲解当部署EJB3.0的消息驱动Bean时,可能会...
import javax.naming.InitialContext; import javax.sql.DataSource; import java.sql.Connection; // 获取初始上下文 Context ctx = new InitialContext(); // 查找环境上下文 Context envContext = (Context) ctx...
1. **javax.naming.NameNotFoundException**:如果出现“Name not bound in this context”错误,确保`context.xml`中的`name`属性与`web.xml`中的`res-ref-name`属性完全一致。 2. **javax.naming....
从上述错误信息可以看出,主要的问题在于Spring框架在初始化名为`dataSource`的Bean时发生了异常,异常的具体类型是`javax.naming.NameNotFoundException`,表明无法找到名称为`J2YD`的JNDI资源。 1. **错误来源:*...
- `javax.naming.ldap`包:扩展了`javax.naming.directory`,支持LDAPv3。 - `javax.naming.event`包:提供了命名和目录服务中的事件通知功能。 - `javax.naming.sql`包:Sun公司为服务提供商接口(SPI)实现。 **...
问题二:javax.naming.NameNotFoundException: Name XXX is not bound in this Context 这个问题表明在当前上下文中找不到名为XXX的数据源。这可能是由于Tomcat 5.5及以上版本中,`factory`属性值的更新导致的。原始...
正确的配置可以避免`javax.naming.NameNotFoundException`这类异常。 #### 3. 在`server.xml`中配置连接池 Tomcat允许在`server.xml`中通过`<Resource>`元素来定义全局的数据库连接池。这包括指定连接池的名称、...
在上述配置过程中,可能会遇到`javax.naming.NameNotFoundException`异常,这通常意味着JNDI名称没有正确解析。解决此问题的关键是确保JNDI名称在应用服务器和Spring配置中一致,并且在应用服务器的配置中正确设置了...
6. **ERROR:javax.naming.NameNotFoundException: Name jdbc is not bound in this Context** 这个错误表明在当前环境中找不到指定的JDBC名称。需要检查并修正`server.xml`中的JNDI名称。 7. **严重:Exception ...
- `javax.naming.spi`:包含服务提供商接口(SPI),用于实现具体的命名和目录服务。 #### JNDI异常 在使用JNDI过程中可能会遇到各种异常,例如: - `AuthenticationException`:当用户尝试访问JNDI资源但未通过...
import javax.naming.directory.*; public class LdapExample { public static void main(String[] args) { try { // 创建初始上下文 DirContext ctx = new InitialDirContext(); // 执行搜索操作 ...
import javax.naming.directory.*; public class LdapExample { public static void main(String[] args) throws NamingException { // 创建环境属性 Properties env = new Properties(); env.put(Context....