dev2dev 首页 > 资源中心 > 技术文章
为何采用 MySQL?第一部分
功能强大的组合创建功能强大的体系结构
MySQL是一种小型、快速和高效的数据库。这篇文章讨论了如何使用MySQL作为BEA WebLogic
Server 8.1上的数据库。我们将考虑此种情况:在使用BEA WebLogic Workshop
8.1开发和部署到BEA WebLogic Server 8.1的应用程序时,使用MySQL作为数据库引擎。
MySQL是一种小型、快速和高效的数据库。这篇文章讨论了如何使用MySQL作为BEA WebLogic
Server 8.1上的数据库。
我们将考虑此种情况:在使用BEA WebLogic Workshop 8.1开发和部署到BEA
WebLogic Server 8.1的应用程序时,使用MySQL作为数据库引擎。使用Java
2 Enterprise Edition(J2EE)原型体系结构时,我将从不同的方面(比如选择正确的MySQL版本,设置服务器,以及进行开发调整)评估使用MySQL所产生的影响。我还评估了对基本技术(比如企业JavaBeans(EJBs),Java
数据库连接(JDBC),Java 消息服务(JMS)以及Java事务API(JTA))的开发和部署所产生的影响。另外,我还揭露、有逻辑地处理并系统性地解决了许多缺陷。这里提供的信息不仅有助于您理解所使用的工具和技术,还能为您节省大量的时间。即使是那些使用不同数据库技术的读者,也会发现这些信息和材料相当实用和有用。
本文选择的开发工具是BEA WebLogic Workshop 8.1。我将讲述一个J2EE原型体系结构,并探讨借助J2EE技术(比如JDBC和JMS)使用MySQL所带来的影响。第2部分将评估EJB的影响,EJB与JTA同为J2EE的核心组件模型。本文描述了配置和开发过程中的改变,调整和修改。
体系结构
图1所示的示例应用程序具有一个J2EE体系结构,它包含一个数据库层、一个应用层和一个接口层。数据库或后端层包含作为关系数据库管理系统(RDBMS)的MySQL。应用层是BEA
WebLogic Server 8.1。应用服务器包括JMS服务器和EJB容器。JMS服务器作为目的地(比如该示例应用程序用来实现异步处理的队列)的宿主。该示例应用程序包含了许多使用容器管理的事务处理管理(CMTD)的EJB。容器管理的持久性(CMP)把数据库中的表格映射到实体EJB中。实体EJB具有会话EJB外观。消息驱动Bean(MDB)负责监听队列和处理消息。其他应用程序,像命令行应用程序,强大的用户图形接口(GUI)应用程序,或者Web应用程序,都通过这个外观来使用EJB组件。它们利用值对象(也叫数据传输对象)同该会话外观进行数据交换。值对象同实体bean直接对应,并由WebLogic
Workshop自动生成。
选择"正确的"MySQL
MySQL具有很多不同的形式,至少有四种不同的版本:MySQL standard、MySQL
Max、MySQL Pro以及MySQL Classic。除了许可证以外,MySQL Standard
和 MySQL Pro是完全一样的。MySQL Standard注册在GNU Public
License (GPL),而MySQL Pro 是MySQL Standard的商业注册版本。MySQL
Max包括一些尖端的和实验性的功能,这些功能不推荐在生产中使用。MySQL Class仅在取得商业许可证后才能使用,并缺少很多重要功能。这类应用程序需要支持像事务和参照完整性(也就是外键)约束这样的关键功能。选择MySQL时,有MySQL
Standard或MySQL Pro这两种版本。注意:本文中其它涉及到MySQL的都是指MySQL
Standard。(www.mysql.com/products/mysql/index.html页面上提供关于MySQL类型的更多信息)。
MySQL有几种表格类型可供选择,每一种类型都有一些各具优缺点的功能。这些类型分别是ISAM、MyISAM、HEAP、MERGE、BDB和InnoDB。选择类型时要依据许多因素。这些因素包括性能、事务、列锁定和崩溃恢复,当然还不只这些。然而,对该示例应用程序来说,关键的功能是事务和参照完整约束。
只有InnoDB表格类型能满足条件。至少有两种方法可以指定一个InnoDB表格类型。一是用--default-table-type=InnoDB来启动MySQL数据库服务器。这样创建的表格是InnoDB类型。(注意:如果没有指定InnoDB
为默认的表类型,那么默认的表类型则为MyISAM)。另一种方法是在创建表格脚本的数据库描述语言(DDL)中详尽指明表格的类型。(www.mysql.com/doc/en/Table_types.html上提供更多的关于MySQL表格类型的信息)。
MySQL和外部约束有一个特殊特征,即只有列中已经存在索引,才能创建约束。例如,考虑表格Person和Buyer间的一一对应关系。Buyer有一个到Person的外键。Buyer有一个叫Person_Id的列,这是Person表格中列Person_Id的外键。但是只有在Buyer表格的列Person_Id中创建索引后,才能建立外键。否则,创建外键约束将失败。请参考源代码例子中的sem.sql
DDL文件(www.sys-con.com/ weblogic/sourcec.cfm中提供源代码)。
不同的操作系统中具有不同的默认数据库权限。例如,Windows操作系统中的默认权限赋予本地用户完整权限,不需要任何用户名和密码。因此,一项重要的确认是能够连接到MySQL数据库服务器引擎。连接的一种方法是利用MySQL编写的客户端程序。另一种方法是通过JDBC和像DbVisualizer这样的程序来完成。(请参见"使用DbVisualizer验证连接性"一节。www.mysql.com/doc/en/Default_privileges.html上有关于默认权限的信息)。
表格名称默认是否区分大小写是基于操作系统而定的。例如,在Windows操作系统中表格的名称是区分大小写的。对于在一个平台上开发而在另一个平台上部署的情况要特别注意。为了避免类似的问题,推荐在启动服务器时设置lower_case_table_names=1。(在www.mysql.com/doc/en/Name_case_sensitivity.html上有关于这个变量的更多信息)。
利用-log选项启动MySQL数据库服务器可以启用MySQL中的日志记录。强烈推荐在启动MySQL时启用日志记录功能。日志记录能启用对由MySQL执行的结构化查询语言(SQL)的监控,并且是调试和故障寻找时的主要工具。(www.mysql.com/doc/en/Query_log.html上提供关于MySQL日志文件更多的信息)。
像默认表格类型和日志这样不同的选项可以由下面几种方法来指定。一是把选项作为命令行参数传给mysqld,MySQL数据库引擎可执行文件。二是在my.inifile或者my.cnf选项文件中指定这些选项。(www.mysql.com/doc/en/Option_files.html上提供关于选项文件以及在哪里放置它们的信息)。
在我们继续操作之前,完成以下几步:
1. 从www.mysql.com/downloads/mysql-4.0.html上下载MySQL。
2. 根据www.mysql.com/doc/en/Installing.html上的指导安装MySQL。
3. 指定附加选项,比如日志记录和表格类型。
4. 启动MySQL(比如使用mysqld-console)。
5. 使用mysql(如mysql-p-u root)验证与服务器之间的连接。注意:如果在本地Windows操作系统中提示需要密码时,只要回车就行了。
6. 利用create database semdb创建一个叫semdb的数据库。
7. 利用semdb来使用semdb数据库。
8. 使用mysql的source命令加载模式,并指定通向sem.sql的完全限定路径(比如source
c:\MySQL_WLS/db/sem.sql)。注意:使用正斜杠,就算在Windows操作系统中也要如此。
9.通过使用源代码中提供的grant.sql文件,使用source命令加到grant.sql的完全限定路径来授予权限。注意:使用正斜杠,就算在Windows操作系统中也要如此。
下载JDBC驱动程序
JDBC需要JDBC驱动程序来建立与数据库服务器之间的连接。Connector/J是JDBC用于MySQL的驱动程序。从www.mysql.com/downloads/api-jdbc-stable.html.上下载Connector/J,并安装它。下载文件中有一个mysql-connector-java-3.0.9-stable-bin.jar文件,该文件中包含了JDBC驱动程序。
接下来的部分是验证与MySQL服务器之间的连接性,这是可选的,但我们强烈推荐您阅读。
使用DbVisualizer验证连接性
DbVisualizer是与BEA WebLogic Platform 8.1一起发布的。启动DbVisualizer(如在Windows操作系统中,依次是Start
Menu > BEA WebLogic Platform 8.1 > Other
Development Tools > DbVisualizer on Windows),并为DbVisualizer添加驱动程序。使用MySQL
JDBC驱动程序Connection/J,连接到MySQL实例(请参见"连接到MySQL数据库实例")。
为DbVisualizer添加JDBC驱动程序
接下来是为DbVisualizer添加驱动程序的步骤:
1. 选择Database菜单。
2. 选择DriverManager 菜单项。
3. 选择Add new driver location 工具栏菜单项。
4. 选择mysql-connector-java-3.0.9-stable-bin.jar。
5. 关闭。
连接到MySQL数据库实例
接下来描述连接到MySQL数据库实例的步骤:
1. 选择Database菜单。
2. 选择 Add Database Connection菜单项。
3. 指定连接别名 (如 sem)。
4. 在下拉列表中,把JDBC驱动选择为com.mysql.jdbc.Driver。
5. 在下拉列表中,把数据库URL选择为 jdbc:mysql://<host>/<database>
。
6. 修改<host> (如 localhost).
7. 把<database> 改为semdb.
8. 把Userid指定为sem.
9. 把Password设为sem.
10.选择Connect.
修改WebLogic域配置
BEA WebLogic Domain Configuration Wizard用于创建WebLogic
Server的域。基于功能的需要而创建特定类型的域。为这个特定的应用程序创建一个WebLogic
Workshop。例如,创建一个叫SEMDomain的WebLogic Workshop 域。
为了能通过BEA WebLogic Server来使用JDBC,WebLogic Server需要知道JDBC的驱动程序。JDBC驱动必须包含在类路径中,这样服务器才能找到驱动程序。对SEMDomain来说,把JDBC驱动添加到类路径中,这样WebLogic服务器才能找到JDBC驱动程序。
把JDBC驱动程序添加到类路径中
以下步骤描述了如何把Connector/J MySQL JDBC驱动添加到类路径中:
1. 编辑./SEMDomain/_cfgwiz_donotdelete/startscript.xml.
2. 把mysql-connector-java-3.0.9-stable-bin.jar添加到类路径。参考源代码中的startscript.xml文件。
3. 把系统属性Dweblogic.ejb20.cmp.rdbms.codegen.verbose=true添加为JAVA_OPTIONS。参考源代码中的startscript.xml文件。
4. 运行Configuration Wizard来扩展SEMDomain。
5. 选择DefaultWebApp作为扩展。
6. 完成Configuration Wizard。
下面的内容是关于启用更多的WebLogic服务器的日志记录,这是可选的,但是强烈推荐您阅读。
WebLogic日志记录
默认情况下,BEA WebLogic Server仅仅执行有限的日志记录。在开发阶段,日志记录和观察更多的信息是非常有用的。对SEMDomain来说,要将日志记录的级别改为Info。
改变日志记录级别
接下来讲述的是改变BEA WebLogic服务器日志记录配置的步骤:
1. 确保BEA WebLogic Server正在运行。
2. 启动WebLogic服务器控制台。
3. 登陆到控制台。
4. 选择Servers/cgServer。
5. 选择Logging 选项卡。
6. 选中复选框Debug to Stdout。
7. 在下拉列表中把Stdout Severity Threshold选为Info。
修改JMS域配置
默认情况下,像SEMDomain这样新创建的域使用PointBase作为数据库。一个名为cgPool的连接池连接到PointBase和一个名为cgDataSource的相应数据源。JMS服务器把cgDataSource作为持久性存储。为了使用其他的数据库(比如Oracle),只要改变连接池的配置即可。这样JMS就把Oracle当成持久性存储。然而,简单地把连接池连接到MySQL并不起作用,因为当WebLogic服务器启动时,JMS服务器会认为MySQL不是所支持的数据库。一个实际的选择是用一个文件取代数据库作为持久性存储。WebLogic
JMS支持持久性文件存储。对SEMDomain来说,要把持久性存储改成持久性文件存储。
改变文件存储
接下来讲述了配置文件存储的步骤:
1. 创建一个将要用于放置文件存储的目录。
2. 确保BEA WebLogic Server正在运行。
3. 启动WebLogic服务器控制台。
4. 登录到控制台中。
5. 在左边的导航窗格中选择Services/JMS/Stores。
6. 选择Configure a new JMS File Store。
7. 指定名称(如 chJMSFileStore)。
8. 指定前面步骤中创建的目录。
9. 选择Services/JMS/Servers/cgJMSServer.。
10. 通过从下拉列表中选择来改变持久性存储(比如,改为cgJMSFileStore)。
底线是MySQL不能用于JMS的持久性存储。使用一个文件持久性存储是可行的选择。在创建其他的JMS服务器时要牢记这一点。
为了紧密结合源代码例子,在继续深入之前,为示例应用程序完成另外一项JMS配置。
- 建立一个名为semJMSFileStore的JMS文件存储。
- 建立一个名为JMSConnectionFactory的连接工厂,并且其JNDI名称是jms/semJMSConnextionFactory。
- 建立一个名为semJMSServer的JMS服务器,并且其持久性存储是semJMSFileStore。
- 建立一个名为PersonQueue的分布式目的单元,并且其JNDI名称是jms/PersonQueue。
- 在semJMSServer上部署PersonQueue。
修改JDBC域配置
为了在BEA WebLogic Server应用程序中使用JDBC API,要创建和部署连接池及数据源。首先,创建连接池,接着以该连接池为基础创建数据源。
- 连接池:请参?quot;配置连接池"一节,以得到详细的指导。
- 数据源:使用jdbc/semJDBCDataSource作为JNDI的名称。参考"配置数据源"以得到详细的指导。
配置连接池
接下来讲述的是配置连接池的步骤:
1. 确保BEA WebLogic Server正在运行。
2. 启动WebLogic Server控制台。
3. 登录控制台。
4. 选择Services/JDBC/Connection Pools。
5. 选择Configure a New JDBC Connection Pool。
6. 从Database Type下拉列表中选择MySQL。
7. 选择MySQL的驱动(类型4)版本:Any from Database Driver。
8. 指定名称(如semJDBCConnectionPool)。
9. 指定数据库名称(如semdb)
10.指定主机名(如localhost)。
11.指定用户名(如sem)。
12.设置密码(如sem)。
13.测试驱动程序的配置。
14.创建与部署。
配置数据源
接下来讲述的是数据源的配置步骤:
1. 选择Services/JDBC/Data Sources。
2. 选择Configure a New JDBC Datasource。
3. 指定名称(如semJDBCDataSource)。
4. 指定JNDI名称(如jdbc/semJDBCDataSource)。
5. 选择Continue。
6. 指定池的名称(如semJDBCConnectionPool)。
7. 点击Create来指定一个数据源为目标。
结束语
本文探讨了怎样选择"正确"的MySQL版本,并讲述了BEA WebLogic域配置中的改动,以支持J2EE关键技术(比如JDBC和Java消息服务)。我的下一篇文章将探讨像EJB和JTA这样的高级主题。
为了成功地实现项目,理解利用MySQL对像JDBC和JMS这样的技术所带来的影响是很关键的。正像上面举例说明的那样,MySQL、BEA
WebLogic Workshop和BEA WebLogic Server构成了功能强大的组合,用于为实际应用场合的应用程序设计体系结构以及设计和部署它。
这里感谢Steve Ditlinger、 Roshni Malani和Sarah Woo对本文的审阅和宝贵的反馈意见。
参考资料
相关站点
· Source
Code (zip file format)
作者其它文章
|