随着AS7的7.0.1版本发布,JBoss AS7 Maven插件也发布了新版本。除了允许您将应用程序部署到AS7外,该插件现在还具有自动将数据源添加到正在运行的AS7实例的能力。

部署数据源是一个两阶段过程,首先我们需要部署驱动程序,然后我们通过AS7管理API设置数据源。以下示例将引导您通过部署postgresql数据源的过程,但对于一些不急切的读者,完整的示例可以在这里找到。

部署数据库驱动程序

要部署数据库驱动程序,我们首先需要在pom.xml的<dependencies>部分中列出我们的驱动程序。

<dependencies>
  <dependency>
    <groupId>postgresql</groupId>
    <artifactId>postgresql</artifactId>
    <version>8.4-702.jdbc4</version>
  </dependency>
</dependencies>

然后我们需要设置JBoss AS7 Maven插件以将数据源部署到应用服务器。

<plugin>
    <groupId>org.jboss.as.plugins</groupId>
    <artifactId>jboss-as-maven-plugin</artifactId>
    <executions>
        <execution>
            <id>deploy-driver</id>
            <phase>package</phase>
            <configuration>
                <groupId>postgresql</groupId>
                <artifactId>postgresql</artifactId>
                <name>postgresql.jar</name>
            </configuration>
            <goals>
                <goal>deploy-artifact</goal>
            </goals>
        </execution>
    </executions>
</plugin>

运行mvn package现在将连接到本地主机上的运行中的AS7实例并部署驱动程序,部署名为postgresql.jar的部署。

请注意,此功能不仅限于部署数据库驱动程序,使用deploy-artifact目标,您还可以将任何maven工件部署到应用服务器。

创建数据源

现在我们已经部署了驱动程序,我们需要创建数据源。为此,我们需要更新pom,使其看起来像这样

<plugin>
    <groupId>org.jboss.as.plugins</groupId>
    <artifactId>jboss-as-maven-plugin</artifactId>
    <executions>
        <execution>
            <id>deploy-driver</id>
            <phase>package</phase>
            <configuration>
                <groupId>postgresql</groupId>
                <artifactId>postgresql</artifactId>
                <name>postgresql.jar</name>
            </configuration>
            <goals>
                <goal>deploy-artifact</goal>
            </goals>
        </execution>
        <execution>
            <id>add-datasource</id>
            <phase>install</phase>
            <configuration>
                <address>subsystem=datasources,data-source=myDatasource</address>
                <properties>
                    <connection-url>jdbc:postgresql://localhost/myDatabase</connection-url>
                    <jndi-name>myDatasource</jndi-name>
                    <enabled>true</enabled>
                    <pool-name>myPool</pool-name>
                    <user-name>dmusername</user-name>
                    <password>secret</password>
                    <driver-name>postgresql.jar</driver-name>
                </properties>
            </configuration>
            <goals>
                <goal>add-resource</goal>
            </goals>
        </execution>
    </executions>
</plugin>

使用此配置运行mvn install应将Postgresql数据源部署到AS7。

有关更多示例,包括XA数据源和MySQL示例,请参阅我的示例pom.xml,地址为https://github.com/stuartwdouglas/quickstart/blob/master/datasource/pom.xml

它如何工作

您可能已经注意到,maven目标的名称是add-resource,而不是add-datasource。这是因为该插件不仅限于添加数据源,还可以用于向AS7添加其他资源。在内部,插件使用AS7管理API,而<address>和<properties>元素与API/命令行等效项完全对应。这意味着我们还可以添加其他资源,例如JMS队列。

我们需要做的第一件事是确定添加JMS队列所需的语法。为此,我们将使用命令行客户端。启动一个AS7实例,然后在另一个终端窗口中,在bin目录下运行jboss-admin.sh。你应该看到以下内容

You are disconnected at the moment. Type 'connect' to connect to the server or 'help' for the list of supported commands.
[disconnected /]

输入connect,你应该连接到正在运行的AS7实例。现在我们需要确定添加JMS队列的语法。为此,我们运行以下命令

[standalone@localhost:9999 /] /subsystem=messaging/jms-queue=*:read-operation-description(name="add")

这应该给出以下结果

{
    "outcome" => "success",
    "result" => {
        "operation-name" => "add",
        "description" => "Add a queue.",
        "request-properties" => {
            "entries" => {
                "type" => LIST,
                "description" => "The jndi names the queue will be bound to.",
                "required" => true,
                "nillable" => false
            },
            "selector" => {
                "type" => STRING,
                "description" => "The queue selector.",
                "required" => false,
                "nillable" => true
            },
            "durable" => {
                "type" => BOOLEAN,
                "description" => "Whether the queue is durable or not.",
                "required" => false,
                "nillable" => true
            }
        },
        "reply-properties" => {}
    }
}

此输出表示操作有三个参数,分别是entriesselectordurable,分别对应于List、String和Boolean类型。使用这些信息,我们可以在命令行上按如下方式添加队列

[standalone@localhost:9999 /] /subsystem=messaging/jms-queue=cmdLineQueue:add(entries=["java:jboss/cmdLineQueue"], durable=true)
{"outcome" => "success"}

现在让我们从maven插件重新创建这个

<plugin>
    <groupId>org.jboss.as.plugins</groupId>
    <artifactId>jboss-as-maven-plugin</artifactId>
    <executions>
        <execution>
            <id>add-queue</id>
            <phase>install</phase>
            <configuration>
                <address>subsystem=messaging,jms-queue=myQueue</address>
                <properties>
                    <entries>!!["java:jboss/myQueue", "java:jboss/anotherJndiBinding"]</entries>
                    <durable>true</durable>
                </properties>
            </configuration>
            <goals>
                <goal>add-resource</goal>
            </goals>
        </execution>
    </executions>
</plugin>

上述配置中最有趣的部分是<entries>元素。因为参数是非原始类型(在这种情况下是LIST),所以必须指定为DMR String!!转义符作为测试的开始告诉插件将其解释为测试。


返回顶部