随着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" => {} } }
此输出表示操作有三个参数,分别是entries、selector和durable,分别对应于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。!!转义符作为测试的开始告诉插件将其解释为测试。