`
guolang2116
  • 浏览: 71582 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

利用 JNDI 方式远程获取数据源

    博客分类:
  • java
阅读更多

有时候数据库的密码并不能让所有人知道,为此我们可以提供JNDI访问方式,让编码者来获取,


一: 针对JBoss服务器,客户端获取方式如下:

public class Test {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Context ctx = null;
		Properties p = new Properties();
		p.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory"); 
		p.put(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces");
		p.put(Context.PROVIDER_URL, "jnp://192.168.70.11:1199");
		try {
			ctx = new InitialContext(p);
//			javax.sql.DataSource ds = (javax.sql.DataSource) ctx.lookup("java:comp/env/jdbc/CbsDS");
			javax.sql.DataSource ds = (javax.sql.DataSource) ctx.lookup("DS");
//			NamingEnumeration<?> list =((Context) ctx.lookup("DS")).listBindings("");
//			while (list.hasMore()) {
//				Binding b =(Binding)list.next();
//				System.out.println(b.getName());
//			}
			System.out.println(ds==null?"NULL":ds.toString());
			try {
				Connection connect =ds.getConnection();
				Statement st=connect.createStatement();
				String sql="select * from *** d ";
				ResultSet rs=st.executeQuery(sql);
				if(rs.next()) {
					System.out.println(rs.getString("username"));
				}else {
					System.out.println("no data");
				}
				rs.close();
				st.close();
				connect.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		} catch (NamingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}          
		
	}

}

 
二: 针对不同的应用服务器,客户端要用不同的连接方式,收集整理如下:

 

各种服务器中的JNDI设置以方法

WebSphere
Properties properties= new Properties();
properties.put(javax.naming.Context.PROVIDER_URL,"iiop:///");    properties.put(javax.naming.Context.INITIAL_CONTEXT_FACTORY,"com.ibm.ejs.ns.jndi.CNInitialContextFactory");
new InitialContext(properties);

JBoss
Properties p = new Properties();
p.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory"); 
p.put(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces");
p.put(Context.PROVIDER_URL, "jnp://localhost:1099");
InitialContext ctx = new InitialContext(p);

SUN
Properties props = new Properties();
props.setProperty( "java.naming.factory.initial" ,"com.sun.enterprise.naming.SerialInitContextFactory" );
props.setProperty( "java.naming.provider.url" , "localhost:3700" );
InitialContext = new InitialContext(props);

Weblogic10
Properties props = new Properties();
props.setProperty( "java.naming.factory.initial" , "weblogic.jndi.WLInitialContextFactory" );
props.setProperty( "java.naming.provider.url" , "t3://localhost:7001" );
InitialContext = new InitialContext(props); 

 三: 至于应用服务器的设置方法,每个都不相同,现只列出JBoss下的Oracle 设置方式:

文件目录是jboss安装目录下的: deploy/oracle-ds.xml

 

  <local-tx-datasource>
    <jndi-name>DS</jndi-name>
    <use-java-context>false</use-java-context>
    <connection-url>jdbc:oracle:thin:@your ip:1521:your servise name</connection-url>
    <driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
    <!-- Uses the pingDatabase method to check a connection is still valid before handing it out from the pool -->
    <!--valid-connection-checker-class-name>org.jboss.resource.adapter.jdbc.vendor.OracleValidConnectionChecker</valid-connection-checker-class-name-->
   <min-pool-size>1</min-pool-size>
   <max-pool-size>2</max-pool-size>
    <!-- Checks the Oracle error codes and messages for fatal errors -->
    <exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.OracleExceptionSorter</exception-sorter-class-name>
        <!-- sql to call when connection is created
        <new-connection-sql>some arbitrary sql</new-connection-sql>
        -->

        <!-- sql to call on an existing pooled connection when it is obtained from pool - the OracleValidConnectionChecker is prefered
        <check-valid-connection-sql>some arbitrary sql</check-valid-connection-sql>
        -->

      <!-- corresponding type-mapping in the standardjbosscmp-jdbc.xml -->
    <security-domain> your db-domain</security-domain>
      <metadata>
         <type-mapping>Oracle11g</type-mapping>
      </metadata>
  </local-tx-datasource>
 

 

分享到:
评论

相关推荐

    用JNDI建立数据库连接池实例

    在Java应用开发中,JNDI(Java Naming and Directory Interface)是一种标准接口,它允许应用...了解这些知识点后,你就可以在实际项目中有效地利用JNDI和Tomcat来创建和管理数据库连接池,提升应用的性能和稳定性。

    Jndi数据连接池Jndi 数据连 接池

    它提供了一种查找和获取命名对象的方式,这些对象可以是本地的也可以是远程的。在Web应用程序中,JNDI经常被用来查找数据库连接等资源。 #### 三、JNDI 数据连接池配置 在Java Web开发中,通常会使用Servlet容器...

    jndi-1.2.1.jar.zip

    3. **JDBC数据源**:在Web应用服务器中,JNDI常用来查找和配置数据库连接池,使得应用程序可以通过名称直接获取数据源。 4. **Servlet上下文初始化参数**:在Servlet应用中,JNDI可以用来存储和检索全局配置信息,...

    javaJNDI连接数据库

    通过上述步骤,我们可以在Java应用中利用JNDI实现数据库连接的动态配置,这样不仅提高了代码的可维护性和扩展性,也使得系统更加灵活。此外,这种方式还能够有效地管理数据库连接池,减少资源占用,提高系统的整体...

    Struts+Jndi+Ajax

    在Web应用程序中,JNDI常用于获取数据库连接池、远程对象等资源。通过JNDI,开发者可以将资源的配置与代码分离,提高应用的灵活性和可扩展性。例如,在Struts应用中,可以通过JNDI查找数据源,以实现对数据库的操作...

    从实例看JNDI设计

    例如,数据源(DataSource)通常通过JNDI查找获取,这样应用程序可以在运行时动态找到数据库连接。同样,EJB也可以通过JNDI查找来实现远程调用。 **JNDI与源码分析** 理解JNDI的工作原理对于阅读和调试Java EE应用...

    jndi-jar.zip

    在实际应用中,JNDI广泛用于Java企业级应用服务器,如Tomcat、JBoss等,它们利用JNDI来管理资源,如数据源、EJBs、邮件会话等。开发人员可以方便地通过JNDI名称来查找和注入这些资源,提高代码的可移植性和可维护性...

    resin jndi配置

    通过JNDI,应用可以动态地查找和获取数据库连接,这极大地简化了数据库访问代码,并提高了资源利用率和应用程序的可维护性。 #### 配置示例 根据给定的部分内容,我们来看一个具体的Resin JNDI配置示例: ```xml ...

    JavaEE5学习笔记02-JNDI与RMI

    - **数据源对象的获取**:在JavaEE应用中,JNDI常用来查找和获取数据源对象。例如,通过`InitialContext`创建一个上下文实例,然后使用`lookup`方法根据预定义的JNDI名称(如"java:/oracle1")查找数据源,这样可以...

    JNDI解析

    2. **EJB查找** - EJB客户端可以利用JNDI找到并访问远程的EJB组件。 3. **配置管理** - 应用配置信息可以通过JNDI存储,使得配置更改无需修改代码即可实现。 4. **服务注册** - 服务提供者可以将自身注册到JNDI,...

    JNDI连接数据库配置

    本文将详细介绍如何利用JNDI在Tomcat环境下配置和使用数据库连接,并提供具体的步骤与示例。 #### 二、环境配置 **环境需求**: - **JDK版本**:1.6 - **应用服务器**:Tomcat6 - **IDE**:Eclipse Galileo 3.5.1 ...

    servlet学习笔记_JNDI.doc

    - JDBC可以利用JNDI来访问关系数据库。 - 通过配置JNDI数据源,可以简化数据库连接管理,提高应用的可移植性和灵活性。 #### 三、JNDI的实现 JNDI提供了访问不同命名和目录服务的统一接口,使得开发者无需关心...

    comcat配置jndi

    ### Comcat配置JNDI详解 #### 一、引言 在Java开发环境中,JNDI(Java Naming and Directory Interface)是一种广泛使用的API,它...在实际开发过程中,合理利用JNDI可以极大地提高开发效率。希望本文对你有所帮助!

    JNDI_test测试案例

    5. **JNDI配置**:`context.xml`中的JNDI配置可能不正确,例如数据源(DataSource)配置可能有误。 解决这个问题的方法包括: 1. **验证配置**:确认`context.xml`的结构和内容是否符合规范,比如数据源配置应该...

    Spring framework deserialization RCE漏洞分析以及利用1

    近期,安全研究员zerothoughts在Spring框架中发现了一个与Apache Commons Collection组件无关的反序列化漏洞,这促使我们深入探讨Spring框架中的序列化漏洞成因及利用方式。 **序列化基础** Java对象的序列化是将...

    JAVA实现简单分布式,JAVA调用远程方法

    5. **获取远程对象引用**:在客户端,通过RMI注册表获取远程对象的引用。 6. **调用远程方法**:客户端可以像调用本地对象一样调用远程对象的方法。 文章可能包含的示例代码会涵盖以上步骤,演示如何创建一个简单的...

    在Tomcat服务器下使用连接池连接Oracle数据库

    总结来说,要在Tomcat服务器上使用连接池连接Oracle数据库,需要配置web应用的部署描述符和服务器配置文件,确保JDBC驱动可用,并编写相应的Java代码来利用JNDI获取数据源并执行SQL操作。这个过程涉及到数据库连接...

    EJB 3.0实例教程(pdf)

    - **SQL Server 2000数据源**:说明如何配置适用于SQL Server 2000的数据源。 - **发布前准备**:在正式部署实体Bean之前,需要进行哪些准备工作。 - **单表映射**:解释单表映射的概念,以及如何实现基于单个...

    JAVA上百实例源码以及开源项目源代码 java开源包2

    创建一个EJB测试客户端,得到名字上下文,查询jndi名,通过强制转型得到Home接口,getInitialContext()函数返回一个经过初始化的上下文,用client的getHome()函数调用Home接口函数得到远程接口的引用,用远程接口的...

Global site tag (gtag.js) - Google Analytics