本文讲述了在Jboss 5中配置DataSource,连接到MySQL数据库,并在Jboss 5服务器外部(另一个JVM中)通过JNDI访问该DataSource。
(1)下载jboss-5.0.1.GA,然后解压到某个目录,下文将以“${Jboss根目录}”来表示该目录。
(2)下载MySQL Connector,并将解压之后的mysql-connector-java-5.1.22-bin.jar拷贝到${Jboss根目录}/server/default/lib下。
(3)启动MySQL,创建testDb,并创建一张testTable表:
+-----------------+ | name | +-----------------+ | testData | | anotherTestData | +-----------------+
(4)拷贝${Jboss根目录}/jboss-5.0.1.GA/docs/examples/jca/mysql-ds.xml文件到${Jboss根目录}/server/default/deploy目录下,并做以下修改:
<?xml version="1.0" encoding="UTF-8"?> <datasources> <local-tx-datasource> <jndi-name>MySqlDS</jndi-name> <connection-url>jdbc:mysql://localhost:3306/testDb</connection-url>、 <driver-class>com.mysql.jdbc.Driver</driver-class> <user-name>{数据库用户名}</user-name> <password>{数据库密码}</password> <use-java-context>false</use-java-context> <exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorter</exception-sorter-class-name> <metadata> <type-mapping>mySQL</type-mapping> </metadata> </local-tx-datasource> </datasources>
请特别注意,在mysql-ds.xml文件中,我们需要加入:
<
use-java-context
>false</
use-java-context
>
这样DataSource才能被外部所访问,不然外部程序在访问该DataSource时将抛出以下异常:
Exception in thread "main" javax.naming.NameNotFoundException: MySqlDS not bound
(5)启动Jboss,直接运行${Jboss根目录}/bin下的run.sh即可,此时将默认启动default模式。访问http://localhost:8080/jmx-console/,点击页面上的“service=JNDIView”,在下一个页面中再点击list栏的Invoke按钮,便可以看到我们已经配置好的MySqlDS:
(6)编写一个测试类如下:
public class MySqlTest { public static void main(String args[]) throws NamingException, SQLException { Hashtable<String, String> env = new Hashtable<String, String>(); env.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory"); env.put(Context.PROVIDER_URL, "jnp://127.0.0.1:1099"); env.put(Context.URL_PKG_PREFIXES, "org.jboss.namingrg.jnp.interfaces"); Context ctx = new InitialContext(env); Connection connection = ((DataSource) ctx.lookup("MySqlDS")).getConnection(); ResultSet resultSet = connection.createStatement().executeQuery("SELECT * FROM testTable"); while (resultSet.next()) { String job_name = resultSet.getString("name"); System.out.println(job_name); } } }
在运行时,需要将下面两个jar文件加入到classpath中:
{Jboss根目录}/common/lib/jnpserver.jar
{Jboss根目录}/lib/jboss-logging-spi.jar
本人的做法是将{Jboss根目录}/common/lib和{Jboss根目录}/lib都加到classpath中。
(7)运行测试类,程序输出如下:
输出即为数据库中的数据,大功告成。