Wildfly 初步接触以及使用Maven配置JBoss、Wildfly数据源

初步接触

Oracle宣布它将停止对GlassFish商业版的支持,它的主要传播者,Arun Gupta,最近离开Oracle去了RedHat。现在它让WildFly来作为替代。WildFly项目经理Jason Greene谈WildFly 8中也讲到Oracle决定停止GlassFish的商业支持.

Wildfly之前的jboss版本内部的web容器,都是redhat基于tomcat修改的“jboss web”,而在wildfly中换成了undertow。  Undertow用Java写的一个灵活的高性能web服务器,同时提供阻塞和非阻塞的基于NIO的API。
Undertow 提供一个基础的架构用来构建 Web 服务器,允许您通过合并小单用途处理器来构建一个Web服务器,完全兼容 Java EE Servlet 3.1 和低级非堵塞的处理器。
Undertow 是红帽公司的开源产品,是 Wildfly 默认的 Web 服务器。Undertow采用Apache 2协议发布. 

JBoss AS 7中web容器是JBoss Web7,是在Tomcat 7基础之上改了一些东西,同时也加了一些:比如websocket,NIO2。redhat修改tomcat做jboss web也是不得已而为之,因为与jboss core有很多需要衔接的代码。

WildFly,前身是JBoss AS,从V8开始为区别于JBoss EAP,更名为WildFly。Wildfly 8主要具备如下特性:

  • Java EE7的参考实现
  • 启动速度更快,占用内存更少
  • 模块化(JSR294)设计
  • 统一配置管理
  • 分布式domain管理

使用Maven配置JBoss、Wildfly数据源

大多数Java EE应用在其业务逻辑层中会访问数据库,所以开发者会经常需要为应用服务器配置数据库驱动和数据库连接。这篇文章会讨论如何用Maven自动化JBoss、Wildfly和Postgre数据库的配置。

Maven 配置

让我们从下面的pom.xml 开始吧,
Wildfly Maven Plugin
<plugin>
    <groupid>org.wildfly.plugins</groupid>
    <artifactid>wildfly-maven-plugin</artifactid>
    <version>1.0.2.Final</version>
    <configuration>
        <executecommands>
            <batch>false</batch>
            <scripts>%MINIFYHTML7db47c7a4774fb3aa46c5ca8120866ec8%</scripts>
        </executecommands>
    </configuration>
    <dependencies>
        <dependency>
            <groupid>org.postgresql</groupid>
            <artifactid>postgresql</artifactid>
            <version>9.3-1102-jdbc41</version>
        </dependency>
    </dependencies>
</plugin>

我们开始使用Wildfly Maven Plugin在应用服务器执行命令脚本。我们已经添加了 Postgre的依赖, Maven会下载依赖, 因为我们将要在后面把它加到服务器中。这里有一个 ${cli.file} 属性, 将指明将执行哪一个脚本。

让我们在pom.xml中添加下面内容:

Maven Resources Plugin:

<plugin>
    <groupid>org.apache.maven.plugins</groupid>
    <artifactid>maven-resources-plugin</artifactid>
    <version>2.6</version>
    <executions>
        <execution>
            <id>copy-resources</id>
            <phase>process-resources</phase>
            <goals>
                <goal>copy-resources</goal>
            </goals>
            <configuration>
                <outputdirectory>${basedir}/target/scripts</outputdirectory>
                <resources>
                    <resource>
                        <directory>src/main/resources/scripts</directory>
                        <filtering>true</filtering>
                    </resource>
                </resources>
                <filters>
                    <filter>${basedir}/src/main/resources/configuration.properties</filter>
                </filters>
            </configuration>
        </execution>
    </executions>
</plugin>

用这个插件,我们可以过滤包含在src/main/resources/scripts这个目录中的脚本。使用${basedir}/src/main/resources/configuration.properties这个文件中的属性进行替换。

最后添加一些 Maven属性到pom.xml文件中:
Maven Profiles
<profiles>
    <profile>
        <id>install-driver</id>
        <properties>
            <cli.file>wildfly-install-postgre-driver.cli</cli.file>
        </properties>
    </profile>
 
    <profile>
        <id>remove-driver</id>
        <properties>
            <cli.file>wildfly-remove-postgre-driver.cli</cli.file>
        </properties>
    </profile>
 
    <profile>
        <id>install-wow-auctions</id>
        <properties>
            <cli.file>wow-auctions-install.cli</cli.file>
        </properties>
    </profile>
 
    <profile>
        <id>remove-wow-auctions</id>
        <properties>
            <cli.file>wow-auctions-remove.cli</cli.file>
        </properties>
    </profile>
</profiles>

Wildfly Script Files

添加驱动
添加驱动的脚本:
wildfly-install-postgre-driver.cli
# Connect to Wildfly instance
connect
 
# Create Oracle JDBC Driver Module
# If the module already exists, Wildfly will output a message saying that the module already exists and the script exits.
module add \
    --name=org.postgre \
    --resources=${settings.localRepository}/org/postgresql/postgresql/9.3-1102-jdbc41/postgresql-9.3-1102-jdbc41.jar \
    --dependencies=javax.api,javax.transaction.api
 
# Add Driver Properties
/subsystem=datasources/jdbc-driver=postgre: \
    add( \
        driver-name="postgre", \
        driver-module-name="org.postgre")

数据库驱动作为Wildfly的一个模块(Module)。这样数据库驱动可以被部署在服务器中的所有应用使用。使用${settings.localRepository}  配置,我们指定数据库驱动下载到你的本地Maven仓库。还记得我们加到 Wildfly Maven Plugin的依赖吗,在你插件运行的时候他将下载驱动并加到服务器中。要运行脚本(必须保证应用服务器正在运行中)可以执行下面的命令:

mvn process-resources wildfly:execute-commands -P "install-driver"

需要用process-resources生命周期替换脚本中的属性。在这个例子中 ${settings.localRepository}  被替换为  /Users/radcortez/.m3/repository/. 。检查target/scripts 文件夹。在运行命令后,可以在Maven的日志看到以下输出:

{"outcome" => "success"}
服务器上的日志:
INFO  [org.jboss.as.connector.subsystems.datasources] (management-handler-thread - 4) JBAS010404: Deploying non-JDBC-compliant driver class org.postgresql.Driver (version 9.3)
INFO  [org.jboss.as.connector.deployers.jdbc] (MSC service thread 1-4) JBAS010417: Started Driver service with driver-name = postgre

wildfly-remove-postgre-driver.cli

# Connect to Wildfly instance
connect
 
if (outcome == success) of /subsystem=datasources/jdbc-driver=postgre:read-attribute(name=driver-name)
 
    # Remove Driver
    /subsystem=datasources/jdbc-driver=postgre:remove
 
end-if
 
# Remove Oracle JDBC Driver Module
module remove --name=org.postgre

这段脚本是把驱动从你的服务器上删除。允许 mvn wildfly:execute-commands -P “remove-driver”,如果你已经执行了以前的命令就不需要再配置process-resource,除非脚本发生改变。

添加数据源

wow-auctions-install.cli
这个脚本使用命令添加了一个数据源
# Connect to Wildfly instance
connect
 
# Create Datasource
/subsystem=datasources/data-source=WowAuctionsDS: \
    add( \
        jndi-name="${datasource.jndi}", \
        driver-name=postgre, \
        connection-url="${datasource.connection}", \
        user-name="${datasource.user}", \
        password="${datasource.password}")
 
/subsystem=ee/service=default-bindings:write-attribute(name="datasource", value="${datasource.jndi}")

我们依然需要一个文件来定义这些属性。

configuration.properties

datasource.jndi=java:/datasources/WowAuctionsDS
datasource.connection=jdbc:postgresql://localhost:5432/wowauctions
datasource.user=wowauctions
datasource.password=wowauctions

Java EE 7 默认数据源

Java EE 7中, 指定容器必须提供一个默认数据源。不要在程序中使用 java:/datasources/WowAuctionsDS JNDI 定义的数据源,我们将指定一个新创建的数据源 /subsystem=ee/service=default-bindings:write- attribute(name=”datasource”, value=”${datasource.jndi}”)。 这样就无需改变程序中的任何配置。 执行 mvn wildfly:execute-commands -P “install-wow-auctions”,就可以得到以下输出:
org.jboss.as.cli.impl.CommandContextImpl printLine
INFO: {"outcome" => "success"}
{"outcome" => "success"}
org.jboss.as.cli.impl.CommandContextImpl printLine
INFO: {"outcome" => "success"}
{"outcome" => "success"}

服务器日志:

INFO  [org.jboss.as.connector.subsystems.datasources] (MSC service thread 1-1) JBAS010400: Bound data source

wow-auctions-remove.cli

# Connect to Wildfly instance
connect
 
# Remove Datasources
/subsystem=datasources/data-source=WowAuctionsDS:remove
 
/subsystem=ee/service=default-bindings:write-attribute(name="datasource", value="java:jboss/datasources/ExampleDS")

上面是删除数据源转为Java EE 7 默认数据源的脚本。执行时用这个命令:mvn wildfly:execute-commands -P "remove-wow-auctions"。

总结
这篇博客展示了如何自动在Wildfly实例中添加删除添加驱动和数据源。如果需要在不同数据库之间切换或者打算重头配置服务器,本文的内容会对你非常有帮助。在做持续集成(CI)时,这些脚本稍作调整就可以转到其他驱动。
你可以在这里得到代码WoW Auctions Github repo:https://github.com/radcortez/wow-auctions。
本节引用自:http://www.importnew.com/13718.html

JBOSS常用设置

JBoss服务器改成支持外网访问
在standalone.xml文件中找到
<interface name="public">
            <inet-address value="${jboss.bind.address:127.0.0.1}"/>
</interface>
在这个下面加入
 <interface name="any">
            <any-ipv4-address/>
 </interface>
另外把1改成2
1  <socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port-offset:0}">
2  <socket-binding-group name="standard-sockets" default-interface="any" port-offset="${jboss.socket.binding.port-offset:0}">
 
访问端口的更改
<socket-binding name="http" port="${jboss.http.port:80}"/>
 
改为可以修改JSP页面不用重启
<servlet-container name="default">
      <jsp-config development="true"/>
</servlet-container>
 
部署的程序不用wildfly内置CXF包
 在应用的WEB-INF目录下面增加该文件:jboss-deployment-structure.xml
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.2">
    <deployment>
  <!-- exclude-subsystem prevents a subsystems deployment unit processors running on a deployment -->
     <!-- which gives basically the same effect as removing the subsystem, but it only affects single deployment -->
        <exclude-subsystems>
            <subsystem name="webservices" />
        </exclude-subsystems>
    </deployment>
</jboss-deployment-structure>

你可能感兴趣的:(Wildfly 初步接触以及使用Maven配置JBoss、Wildfly数据源)