您的位置:首页 > 其它

在Weblogic8.1 SP4下配置连接池、数据源[including JNDI]试验

2008-04-05 13:40 477 查看
在Weblogic8.1 SP4下配置连接池、数据源[including JNDI]试验

[虽然比较弱,但是绝对原创啊]
一、试验环境:
(1)Mysql database under Fedora Core 4(on a VMWare Workstation 5.5);
(2)Weblogic8.1 SP4 Server under Windows XP SP2;
二、准备工作:
1、要在FC4上启动mysql数据库服务器,添加新用户(mysql),并使该用户(mysql)有远程以及本机(localhost)数据库访问权限,将一个数据库脚本导入MYSQL数据库;
(1)首先启动mysql数据库服务器(当然要保证您的机器上装有MYSQL):
#service mysqld start
(2)添加新用户,并使该用户(mysql)有在远程以及在本机的访问权限:
可以以root身份登陆mysql服务器
#mysql -u root(如果mysql中的root用户设置了密码则:#mysql -u root -p)
mysql>GRANT ALL PRIVILEGES ON *.* TO mysql@localhost IDENTIFIED BY "password";
mysql>GRANT ALL PRIVILEGES ON *.* TO mysql@"%" IDENTIFIED BY "password";
注:其中password为该用户的密码,"%"显示了该用户可以在任何机器上访问数据库,*.*表示该用户可以对任何数据库以及任何表进行访问。
可以查看名为:mysql的mysql系统数据库查看,操作如下
mysql>use mysql;
mysql>show tables;显示该数据库中所有数据表
mysql>SELECT Host,User FROM user;查看所有被数据库服务器授权的用户;确信用户:mysql被授权以后,可进行下一步操作(当然这一步并不完全影响下一步)
(3)为数据库服务器添加一个测试用数据库(该数据库为21天学通J2EE第一版中附带的一个数据库例子)
1)首先通过root登陆mysql数据库服务器
#mysql -u root
2)然后建立名为Agency的数据库
mysql>create database Agency;
3)可以退出登陆了
mysql>quit;
请将下列代码保存成一个文件,可以将该文件命名为Agency.sql;
----------------------------------文件开始(此行不需要拷贝)--------------------------------------------
use Agency;
drop table ApplicantSkill;
drop table Applicant;
drop table JobSkill;
drop table Job;
drop table Matched;
drop table Customer;
drop table Location;
drop table Skill;
create table Skill(name varchar(16), description varchar(64));
create table Location(name varchar(16), description varchar(64));
create table Applicant(login varchar(16), name varchar(64), email varchar(64), summary varchar(512), location varchar(16));
create table ApplicantSkill(applicant varchar(16), skill varchar(16));
create table Customer(login varchar(16), name varchar(64), email varchar(64), address1 varchar(64), address2 varchar(64));
create table Job(ref varchar(16), customer varchar(16), description varchar(512), location varchar(16));
create table JobSkill(job varchar(16), customer varchar(16), skill varchar(16));
create table Matched(applicant varchar(16), job varchar(16), customer varchar(16), exact boolean);
insert into Location values ('London','London UK');
insert into Location values ('Washington','Washington DC, USA');
insert into Location values ('Verona','Verona, Renaissance Italy');
insert into Location values ('Wessex','Wessex,Kingdom of England');
insert into Skill values ('Tree Surgeon','Tree Surgeon');
insert into Skill values ('Cigar Maker','Cigar Maker');
insert into Skill values ('Bodyguard','Bodyguard');
insert into Skill values ('Cook','Cook');
insert into Skill values ('Lawyer','Lawyer');
insert into Skill values ('Critic','Critic');
insert into Applicant values ('juliet','Juliet Capulet', 'juliet@capulet.co' , 'Dutiful daughter', 'London' );
insert into Applicant values ('romeo','Romeo Montague', 'romeo@montague.co' , 'Dutiful son', 'Wessex');
insert into Applicant values ('julius','Julius Caesar', 'julias@caesar.co' , 'Roman Emperor', 'Washington' );
insert into Applicant values ('brutus','Marcus Brutus', 'marcus@brutus.co' , 'Roman Senator', 'Washington' );
insert into Applicant values ('proteus','Proteus', 'proteus@verona.co' , 'Gentleman', 'Verona' );
insert into Applicant values ('valentine','Valentine', 'valentine@verona.co' , 'Gentleman', 'Verona' );
insert into ApplicantSkill values ('juliet', 'Cook');
insert into ApplicantSkill values ('romeo', 'Cook');
insert into ApplicantSkill values ('romeo', 'Bodyguard');
insert into ApplicantSkill values ('julius', 'Tree Surgeon' );
insert into ApplicantSkill values ('julius', 'Tree Surgeon' );
insert into ApplicantSkill values ('brutus', 'Critic' );
insert into ApplicantSkill values ('brutus', 'Lawyer' );
insert into ApplicantSkill values ('proteus', 'Lawyer' );
insert into ApplicantSkill values ('proteus', 'Critic' );
insert into ApplicantSkill values ('valentine', 'Critic' );
insert into ApplicantSkill values ('valentine', 'Cigar Maker' );
insert into Customer values ('george','George Washington', 'george@washinton.co', 'White House', 'Washington');
insert into Customer values ('winston','Winston S Churchill', 'winston@churchill.co', '10 Downing Street', 'London');
insert into Customer values ('abraham','Abraham Lincoln', 'abe@lincoln.co', 'Springfield', 'Illinois');
insert into Customer values ('alfred','Alfred the Great', 'alf@great.co', 'Wessex','England');
insert into Job values ('Tree pruner', 'george', 'Must be honest', 'Washington');
insert into Job values ('Cigar trimmer', 'winston', 'Must like to talk and smoke', 'London');
insert into Job values ('Theatre goer', 'abraham', 'Should be intelligent and articulate', 'Washington');
insert into Job values ('Cake maker', 'alfred', 'Should have a good sense of of smell','Wessex');
insert into JobSkill values ('Tree pruner','george','Tree Surgeon');
insert into JobSkill values ('Cigar trimmer', 'winston', 'Cigar Maker');
insert into JobSkill values ('Cigar trimmer', 'winston', 'Critic');
insert into JobSkill values ('Theatre goer', 'abraham', 'Bodyguard');
insert into JobSkill values ('Theatre goer', 'abraham', 'Lawyer');
insert into JobSkill values ('Theatre goer', 'abraham', 'Critic');
insert into JobSkill values ('Cake maker', 'alfred', 'Cook');
----------------------------------文件结束(此行不需要拷贝)--------------------------------------------
4)保存文件后使用下面的命令,将该文件导入数据库中:
#mysql -u root < Agency.sql
(当然,要先进入到Agency.sql所在的目录,比如您将其保存在/home/Barry中,那么要先进入这个目录:cd /home/Barry虽然这个命令有点弱智,但是还是加上吧!)
如果您的root身份有密码的话,还请加上-p参数,如下:
#mysql -u root -p< Agency.sql
数据库方面的准备工作算是做完了!
2、准备启动Weblogic8.1 SP4服务器,在启动之前,当然要在系统的环境变量(或者Weblogic的某一个domain当中的startWeblogic.cmd[for windows]或者startWeblogic.sh[for linux])当中的CLASSPATH变量中加入连接Mysql的驱动程序。
(1)下载mysql数据库的驱动程序比如:mysql-connector-java-3.1.13-bin.jar
可以在下面的网址下到ftp://202.96.64.144/pub/mysql-connector-java-3.1.13.tar.gz
(2)解压后,放到一个目录中去,比如可以放到weblogic的common/lib/目录中,放入以后我的这个全路径是这样的
E:beaweblogic81commonlibmysql-connector-java-3.1.13-bin.jar
(3)对于windowsXP可以用下面的方法加入该环境变量
右键"我的电脑"->属性->高级->环境变量
可以在系统变量当中新建一个叫做CLASSPATH的变量,如果您当前还没有这个变量的话。
然后将下面的字符串拷贝到其值中
E:beaweblogic81commonlibmysql-connector-java-3.1.13-bin.jar
如果已经有这个环境变量的话那么把这个直接加到现有的值得后面就行了,就像我的一样,别忘了分号‘;’。
(其实设置环境变量的方法很多人讲,我就不细说了。本来应该加入一些其他的变量,我把我的作为例子给大家
./;E:beajdk142_05libdt.jar;E:beajdk142_04libtools.jar;E:Program Filesjb2006thirdpartyjakarta-tomcat-4.1.31commonlibservlet.jar;E:beaweblogic81commonlibTdsSqlServerJdbc2.jar;E:beaweblogic81commonlibjdom.jar;F:mysql-connector-java-3.1.13mysql-connector-java-3.1.13-bin.jar;)
准备工作总是这么麻烦!
三、该到了试验的正文部分了
关注下面三个文件:
bea/user_projects/domains/mydomain/config.xml
webmodule目录/WEB-INF/web.xml
webmodule目录/WEB-INF/weblogic.xml
1、假设你已经有一个自己mydomain了,那么启动webLogic服务器,进入控制台,添加连接池,添加数据源
(1)进入控制台:通常网址为:http://localhost:7001/console
通常用用户名为:weblogic,密码为:weblogic登陆到控制台
(2)登陆后,选择
Connection Pools->
Configure a new JDBC Connection Pool... ->
选择数据库类型Mysql并且选择DataBase Driver (比如我选的:com.mysql.jdbc.Drvie) ->
定义该连接池:
1)给他一个Name(我的就叫MyJDBC Connection Pool)
2)Database Name:Agency(前面我们导入的Agency数据库)
3)Host Name:192.168.215.128(数据库服务器所在的IP地址)
4)Port:3306(通常用默认)
5)Database UserName:mysql(我们前面添加的数据库用户)
6)Password:(与前面我们在添加用户的时候设置的密码一样)
7)Confirm Password:不用说了吧
都设置完了,选择 Continue吧,好像在某一部中,需要输入测试用的SQL语句,填入"SELECT 1"就好了。
(3)在Test database connection页面中,可以点击Test Driver Configuration按钮来测试设置是否正确,如果正确那就恭喜了,在测试结果页面点击Create and Deploy按钮就可以了.
连接池终于配置完毕了,请查看bea/user_projects/domains/mydomain/config.xml文件有什么变化,是不是将我们设置的连接池信息加入到里面了.
2、建立数据源
(1)进入控制台:通常网址为:http://localhost:7001/console
通常用用户名为:weblogic,密码为:weblogic登陆到控制台
(2)登陆后,选择
Data Sources ->
Configure a new JDBC Data Source->
Name:MyJDBC Data Source(默认的,我没有改)
JNDI Name:jdbc/Agency(这个地方最关键了,以后这个"jdbc/Agency"会出现在我们的程序中)
在Connect to connection pool中选择连接池名字,就是我们刚才建好的。然后Continue
然后再点击Create按钮就好了。请查看bea/user_projects/domains/mydomain/config.xml文件有什么变化,是不是将我们设置的s数据源信息加入到里面了.

注:此时我的config.xml文件中多出了下面几行
<JDBCConnectionPool DriverName="com.mysql.jdbc.Driver" Name="MyJDBC Connection Pool" PasswordEncrypted="" Properties="user=mysql" Targets="myserver" TestTableName="SQL SELECT 1" URL="jdbc:mysql://192.168.215.128:3306/Agency"/>
<JDBCTxDataSource JNDIName="jdbc/Agency" Name="MyJDBC Data Source" PoolName="MyJDBC Connection Pool" Targets="myserver"/>
3.要在Web.xml中填入下面的代码
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/Agency</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
4.若使用JBuilder2006这个工具,在make或者rebuild的时候,会在weblogic.xml中添加下面代码
<reference-descriptor>
<resource-description>
<res-ref-name>jdbc/Agency</res-ref-name>
<jndi-name>jdbc/Agency</jndi-name>
</resource-description>
</reference-descriptor>
当然我们也可以自己添加。
5.写两个测试的JSP文件吧

test2.jsp 将数据源信息(url)直接写在代码当中.
-------------test2.jsp文件开始(此行不需要拷贝)----------------------------------
<%@ page contentType="text/html; charset=gb2312" %>
<%@ page language="java" %>
<%@ page import="com.mysql.jdbc.Driver" %>
<%@ page import="java.sql.*" %>
<%
//驱动程序名
String driverName="com.mysql.jdbc.Driver";
//数据库用户名
String userName="mysql";
//密码
String userPasswd="";//
//数据库名
String dbName="Agency";
//表名
String tableName="Location";
//联结字符串
String url="jdbc:mysql://192.168.215.128:3306/"+dbName+"?user="+userName+"&password="+userPasswd;
Class.forName("com.mysql.jdbc.Driver").newInstance();
Connection connection=DriverManager.getConnection(url);
Statement statement = connection.createStatement();
String sql="SELECT * FROM "+tableName;
ResultSet rs = statement.executeQuery(sql);
//获得数据结果集合
ResultSetMetaData rmeta = rs.getMetaData();
//确定数据集的列数,亦字段数
int numColumns=rmeta.getColumnCount();
// 输出每一个数据值
out.print("id");
out.print("|");
out.print("num");
out.print("<br>");
while(rs.next()) {
out.print(rs.getString(1)+" ");
out.print("|");
out.print(rs.getString(2));
out.print("<br>");
}
out.print("<br>");
out.print("数据库操作成功,恭喜你");
rs.close();
statement.close();
connection.close();
%>
-------------test2.jsp文件结束(此行不需要拷贝)----------------------------------

test3.jsp是测试通过jndi能否获得数据源的
-------------test3.jsp文件结束(此行不需要拷贝)----------------------------------

<%@ page contentType="text/html; charset=GBK"%>
<%@ page import="java.sql.*,javax.sql.DataSource"%>
<%@ page import="javax.naming.*"%>
<html>
<head><title>test.jsp</title></head>
<body bgcolor="#ffffff">
<h1>test Tomcat</h1>
<%
try
{
Context initCtx=new InitialContext();
out.println("initCtx is got");
DataSource ds = (DataSource)initCtx.lookup("java:comp/env/jdbc/Agency");
out.println("ds is got");
Connection conn=ds.getConnection();
out.println("data from database:<br>");
Statement stmt=conn.createStatement();
ResultSet rs =stmt.executeQuery("select name,description from Location");
while(rs.next())
{
out.println("name:"+rs.getString("name"));
}
rs.close();
stmt.close();
}
catch(Exception e)
{
out.println("ERROR");
e.printStackTrace();
}
%>
</body>
</html>
-------------test3.jsp文件结束(此行不需要拷贝)----------------------------------
如果都没有问题,就应该没大问题了。谢天谢地,至此算是过了一小关了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: