外部访问Jboss 5中配置的DataSource

本文讲述了在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)运行测试类,程序输出如下:


输出即为数据库中的数据,大功告成。

你可能感兴趣的:(外部访问Jboss 5中配置的DataSource)