有时候数据库的密码并不能让所有人知道,为此我们可以提供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>
相关推荐
在Java应用开发中,JNDI(Java Naming and Directory Interface)是一种标准接口,它允许应用...了解这些知识点后,你就可以在实际项目中有效地利用JNDI和Tomcat来创建和管理数据库连接池,提升应用的性能和稳定性。
它提供了一种查找和获取命名对象的方式,这些对象可以是本地的也可以是远程的。在Web应用程序中,JNDI经常被用来查找数据库连接等资源。 #### 三、JNDI 数据连接池配置 在Java Web开发中,通常会使用Servlet容器...
3. **JDBC数据源**:在Web应用服务器中,JNDI常用来查找和配置数据库连接池,使得应用程序可以通过名称直接获取数据源。 4. **Servlet上下文初始化参数**:在Servlet应用中,JNDI可以用来存储和检索全局配置信息,...
通过上述步骤,我们可以在Java应用中利用JNDI实现数据库连接的动态配置,这样不仅提高了代码的可维护性和扩展性,也使得系统更加灵活。此外,这种方式还能够有效地管理数据库连接池,减少资源占用,提高系统的整体...
在Web应用程序中,JNDI常用于获取数据库连接池、远程对象等资源。通过JNDI,开发者可以将资源的配置与代码分离,提高应用的灵活性和可扩展性。例如,在Struts应用中,可以通过JNDI查找数据源,以实现对数据库的操作...
例如,数据源(DataSource)通常通过JNDI查找获取,这样应用程序可以在运行时动态找到数据库连接。同样,EJB也可以通过JNDI查找来实现远程调用。 **JNDI与源码分析** 理解JNDI的工作原理对于阅读和调试Java EE应用...
在实际应用中,JNDI广泛用于Java企业级应用服务器,如Tomcat、JBoss等,它们利用JNDI来管理资源,如数据源、EJBs、邮件会话等。开发人员可以方便地通过JNDI名称来查找和注入这些资源,提高代码的可移植性和可维护性...
通过JNDI,应用可以动态地查找和获取数据库连接,这极大地简化了数据库访问代码,并提高了资源利用率和应用程序的可维护性。 #### 配置示例 根据给定的部分内容,我们来看一个具体的Resin JNDI配置示例: ```xml ...
- **数据源对象的获取**:在JavaEE应用中,JNDI常用来查找和获取数据源对象。例如,通过`InitialContext`创建一个上下文实例,然后使用`lookup`方法根据预定义的JNDI名称(如"java:/oracle1")查找数据源,这样可以...
2. **EJB查找** - EJB客户端可以利用JNDI找到并访问远程的EJB组件。 3. **配置管理** - 应用配置信息可以通过JNDI存储,使得配置更改无需修改代码即可实现。 4. **服务注册** - 服务提供者可以将自身注册到JNDI,...
本文将详细介绍如何利用JNDI在Tomcat环境下配置和使用数据库连接,并提供具体的步骤与示例。 #### 二、环境配置 **环境需求**: - **JDK版本**:1.6 - **应用服务器**:Tomcat6 - **IDE**:Eclipse Galileo 3.5.1 ...
- JDBC可以利用JNDI来访问关系数据库。 - 通过配置JNDI数据源,可以简化数据库连接管理,提高应用的可移植性和灵活性。 #### 三、JNDI的实现 JNDI提供了访问不同命名和目录服务的统一接口,使得开发者无需关心...
### Comcat配置JNDI详解 #### 一、引言 在Java开发环境中,JNDI(Java Naming and Directory Interface)是一种广泛使用的API,它...在实际开发过程中,合理利用JNDI可以极大地提高开发效率。希望本文对你有所帮助!
5. **JNDI配置**:`context.xml`中的JNDI配置可能不正确,例如数据源(DataSource)配置可能有误。 解决这个问题的方法包括: 1. **验证配置**:确认`context.xml`的结构和内容是否符合规范,比如数据源配置应该...
近期,安全研究员zerothoughts在Spring框架中发现了一个与Apache Commons Collection组件无关的反序列化漏洞,这促使我们深入探讨Spring框架中的序列化漏洞成因及利用方式。 **序列化基础** Java对象的序列化是将...
5. **获取远程对象引用**:在客户端,通过RMI注册表获取远程对象的引用。 6. **调用远程方法**:客户端可以像调用本地对象一样调用远程对象的方法。 文章可能包含的示例代码会涵盖以上步骤,演示如何创建一个简单的...
总结来说,要在Tomcat服务器上使用连接池连接Oracle数据库,需要配置web应用的部署描述符和服务器配置文件,确保JDBC驱动可用,并编写相应的Java代码来利用JNDI获取数据源并执行SQL操作。这个过程涉及到数据库连接...
- **SQL Server 2000数据源**:说明如何配置适用于SQL Server 2000的数据源。 - **发布前准备**:在正式部署实体Bean之前,需要进行哪些准备工作。 - **单表映射**:解释单表映射的概念,以及如何实现基于单个...
创建一个EJB测试客户端,得到名字上下文,查询jndi名,通过强制转型得到Home接口,getInitialContext()函数返回一个经过初始化的上下文,用client的getHome()函数调用Home接口函数得到远程接口的引用,用远程接口的...