日常工作杂记(小生初学jboss)

        本文讲述了在Jboss 5中配置DataSource,连接到oracle11g数据库,通过jndi访问DataSource,使用Databasemetadata获取数据库信息(所有的表名,指定表中的字段等)

        1下载jboss,然后解压到某个目录,博主放在了D:\jboss-5.1.0.GA这个目录

        2将oracle jdbc驱动包拷贝到 ${jbosshome}(jboss根目录)下的server\default\lib目录下(因为jboss没有自带oracle的驱动包)

        3拷贝${jbosshome}/jboss-5.0.1.GA/docs/examples/jca/oracle-ds.xml文件(jboss将一些示例的配置文件放在了/docs/example目录下)到${Jboss根目录}/server/default/deploy目录下,并做以下修改:

<?xml version="1.0" encoding="UTF-8"?>
<datasources>
  <local-tx-datasource>
    <jndi-name>oracleDs</jndi-name>
<use-java-context>false</use-java-context>
    <connection-url>jdbc:oracle:thin:@${ip}:1521:orcl</connection-url>
    <driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
    <user-name>${userName}</user-name>
    <password>${password}</password>
    <exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.OracleExceptionSorter</exception-sorter-class-name>
      <metadata>
         <type-mapping>Oracle11g</type-mapping>
      </metadata>
  </local-tx-datasource>
</datasources>

关于jboss数据源配置文件中use-java-context的说明(这个是比较复杂的), 请参照博主转载的另一篇文章,文章里面介绍的比较清晰(链接:http://my.oschina.net/u/1427420/blog/336896)

        4编写一个web项目并部署到jboss目录下(要介绍使用jboss客户端连接jndi数据源的话,相对比较复杂,本文简单一点,就介绍一个简单的方式)。 下面是一个有关在jsp中获取jboss数据源的:

<%@page import="java.sql.*"%>
<%@page import="javax.sql.DataSource"%>
<%@page import="javax.naming.*"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
try {
Context ctx = new InitialContext();
DataSource ds = (DataSource) ctx.lookup("oracleDs");
Connection conn = ds.getConnection();
DatabaseMetaData dbmd = conn.getMetaData();
/**
获得所有表
第二个参数是一定要的,代笔用户名,且必须为大写
**/
ResultSet rs = dbmd.getTables(null,"SCOTT", "%", new String[]{ "table"});
while(rs.next()){
String tableName = rs.getString("TABLE_NAME");
//do someing tableName
}
//获得一个表的所有列,相当于desc ${tableName}
ResultSet columnRs = dbmd.getColumns(null,null,”emp”,”%”);
while(columnRs.next()){
String columnName = rs.getString("COLUMN_NAME");
//do someing columnName
}
 
/**
一定要关闭Connection,要不然jboss会报错
**/ 
conn.close();
} catch (Exception e) {
response.getWriter().println(e.getMessage());
} 
 
%>

在这个程序中,使用了jndi获取jboss定义的oracle数据源,并使用DatabaseMetaData进行了数据库信息的相关解析。使用DatabaseMetaData获取所有表名、一个表的所有列名的好处就是跨数据库通用(博主最近项目就需要做这方面的事,如果使用数据库专用的一些sql来解决的话,就不够通用了)

你可能感兴趣的:(jboss,JNDI)