JBOSS EAP實戰(1)

JBOSS的誕生


1998年,在硅谷SUN公司的SAP實驗室,一個年輕人正坐在電腦前面思考,然後寫着什麼東西。


不,他沒有在寫程序,他在寫辭呈。他正在做出人生的一個重大決定:


他要辭掉在SUN的這份工作,投身到open source的開發。旁邊好多朋友在勸他,這樣的做法是"moving down the food chain"(應該是丟掉鐵飯碗的意思),這是他整個職業生涯的下坡路。


但是這個年輕人卻義無反顧地微笑着,眼睛裏充滿着自信,他相信幾年以後他會爲他今天的決定自豪,他相信這不是他職業生涯的下坡路,而是他真正的成功職業生涯的開始。


這個年青人就是Marc Fleury,就是他一手創建了JBoss,這個全世界都在使用的開源應用服務器;是他推動整個Java開源社區的發展。


JBOSS和他的架構師:


電影The Maxtrix裏那句經典臺詞,還記得Neo被Morpheus帶救到一個小房子裏,然後掏出兩顆藥丸的場景嗎?


:"If you take the red pill I'll show you how deep the rabbit hole goes. If you take the blue pill you stay in corporate land and you believe whatever you want to believe.“


JBoss的總體架構設計師Bill Burke就是這樣被招安過來的。當時Bill Burke還是在做一個商業應用,買不起BEA的東西,就在google上搜到了JBoss,發現了一些bug,修改完後發了個email給Marc Fleury,Marc Fleury問完Bill的情況後發了一條只有一句的話的Email:"Do want to take the red pill?"。於是Bill Burke就成了JBoss的一員。


JBOSS開始輝煌


2001年,當我還是一個屌絲時,當時啃着和天書一般的EJB2.X,當好不容易寫完一個EJB時使用當時的WebLogic5.x進行Deploy時,偶看到了讓人崩潰的一幕的出現。


我的那臺MMX166出現了out of memory。


在當時,32MB的內存已經算很大了,可是在2001年在同一臺機器上又裝JBUILDER又裝Weblogic,佈署一個EJB的實體BEAN在它反向生成數據庫表時,需要用掉50多MB的內存,這在當時顯然是一個奢侈的行爲。


於是我當時開始在網上進行瘋狂搜索EJB Container即J2EE APP Server,突然我們發現了一個東西,它在一天內被下載量就超過了100萬。


這就是JBOSS3.X。


JBOSS推向真正企業級應用的正是jboss3.2.x版,當時只有20兆不到的一個小東西可以秒級佈署EJB並且可以真正實現跨平臺,而它的啓動在當時只需要11MB。我也是在當時認識了JBOSS。


JBOSS的性能不可不說相當的優異,一切熱佈署,一切簡單化,就好像它生爲J2EE所服務一樣。


JBOSS經歷了3.2.X以及4.X並於JBOSS5.X後完成了JBOSS最終的變形,即JBOSS步入了Jboss7.x和JBOSS EAP的階段。


一開始JBOSS7.X走開源路線,JBOSS EAP6.X走商業路線。


隨着開源社區的不斷努力 ,最終於JBOSSEAP6.X後JBOSS EAP版也開始走開源路線了。


JBOSS版本選擇





JBOSS安裝


JBOSS從4.X開始內嵌Tomcat,並且它內嵌的Tomcat是一個高度優化後的Tomcat,無論是在穩定性、線程數、連接池上都是被高度源碼級優化過的。


一般我們選擇JBOSS EAP6.4這個版本,JBOSS從8.x後不再叫JBOSS了,而是改名叫WildFly。


JBOSS官方下載地址





JBOSS目錄結構解釋





JBOSS基本配置-端口


在JBOSS EAP6的bin目錄下,輸入./standalone.sh即可啓動JBOSS EAP6




在啓動過程中如果發現端口衝突的問題可以修改$JBOSS_HOME/standalone/configuration/standalone.xml,把該文件中的端口改成相應的地址即可,如下圖所示:




如果你要終止JBOSS也很簡單,直接ctrl + c即可。


JBOSS基本配置


允許遠程訪問

JBOSS無論什麼版本,從一誕生開始默認只支持localhost的訪問,包括基於JNDI的訪問也只支持本地訪問。


比如說JBOSS EAP的圖形化Console,http://ip:9990。


如果在此你用的是http://localhost:9990,你可以訪問!


如果在此你用的是http://192.168.0.101:9990, 它會告訴你無法訪問。


請修改$JBOSS_HOME/standalone/configuration/standalone.xml文件中如下面截圖。




你可以把它改成<any-address/>也可以指定IP(爲了安全),一般來說management功能如果你不是在開發、實驗機,那我不建議開啓“遠程可訪問”。


初始化用戶名密碼


我們打開一個IE輸入http://192.168.0.101:9990/,此時我們會得到如下的畫面




這是因爲我們沒有配置默認的admin用戶,在jboss啓動的情況下按照如下步驟:


cd /opt/jboss/bin
./add-user.sh



我們增加一個admin的用戶,記住:admin的密碼必須爲8位字符+數字混合




在上面的步驟中我們:


  • 增加了一個用戶admin,它的密碼爲:password_1
  • 爲admin分配了admin,administrator,root三個超級用戶的權限
現在,我們重新在遠程使用IE訪問http://192.168.0.101:9990




當我們輸入了剛纔創建的用戶名和密碼後我們就可以登錄進JBOSS的圖形化管理界面了。





在Jboss中安裝MySql數據庫驅動與連接


雖然從JBOSS EAP起,我們可以使用http://xxx.xxx.xxx.xxx:9990這個圖形化management console來對JBOSS做任何配置(以前全部是基於xml文件的配置)的,但是我們在練習中還是使用手改xml的方式,這樣便於我們對JBOSS的配置印象更深刻些。


爲了增加一個數據庫的驅動,我們需要經歷下面的步驟:


  • 在JBOSS下建立相關的數據庫驅動用Module
  • 編寫Module Description
  • 修改standalone.xml
  • 重啓JBOSS

拿MySql爲例:


它的驅動叫:mysql-connector-java-5.1.38.jar
它的Module Layer叫com\mysql(這個名字可以隨便,你也可以叫abc\org,一般每個Module下有一個Main,這是Module的“入口”
Module的Description文件名永遠叫module.xml




按照上面描述:


  • 我們在D:\$JBOSS_HOME\modules\system\layers\base\下建立如此層次的文件夾com\mysql\main。如: D:\$JBOSS_HOME\modules\system\layers\base\com\mysql\main


  • 新建一個module.xml,使其內容如下:


<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.1" name="com.mysql">
    <properties>
        <property name="jboss.api" value="public"/>
    </properties>
    <resources>
        <resource-root path="mysql-connector-java-5.1.38.jar"/>
        <!-- Insert resources here -->
    </resources>
    <dependencies>
        <module name="javax.api"/>
        <module name="javax.transaction.api"/>
        <module name="javax.servlet.api" optional="true"/>
    </dependencies>
</module>

  • 將module.xml和mysql-connector-java-5.1.38.jar 全部copy至:D:\$JBOSS_HOME\modules\system\layers\base\com\mysql\main目錄內




開始修改D:\$JBOSS_HOME\standalone\configuration\standalone.xml文件,找到“<datasources>”段

 <datasources>
                <datasource jndi-name="java:jboss/datasources/ExampleDS" pool-name="ExampleDS" enabled="true" use-java-context="true">
                    <connection-url>jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE</connection-url>
                    <driver>h2</driver>
                    <security>
                        <user-name>sa</user-name>
                        <password>sa</password>
                    </security>
                </datasource>
                <drivers>
                    <driver name="h2" module="com.h2database.h2">
                        <xa-datasource-class>org.h2.jdbcx.JdbcDataSource</xa-datasource-class>
                    </driver>
                </drivers>
 </datasources>

可以看到,此處分成兩段:

  • Datasource的基本描述
  • 數據庫驅動Module的描述 ,其中module=“com.h2database.h2”指向的爲:D:\$JBOSS_HOME\modules\system\layers\base\下的com\h2database\h2

按照這個原理,我們來改寫我們的standalone.xml文件吧。


<datasources>
                <datasource jndi-name="java:/comp/env/jdbc/jbpm" pool-name="DroolsDS" enabled="true" use-java-context="true">
                    <connection-url>jdbc:mysql://192.168.0.101:3306/guvnor?autoReconnect=true&failOverReadOnly=false&maxReconnects=10&useUnicode=true&characterEncoding=UTF-8</connection-url>
                    <driver>mysql</driver>
                    <security>
                        <user-name>drools</user-name>
                        <password>aaaaaa</password>
                    </security>
                </datasource>
                <drivers>
                    <driver name="mysql" module="com.mysql">
                        <driver-class>com.mysql.jdbc.Driver</driver-class>
                        <xa-datasource-class>com.mysql.jdbc.jdbc2.optional.MysqlXADataSource</xa-datasource-class>
                    </driver>
                </drivers>
</datasources>

改完後保存


爲了驗證我們的修改是正確的,我們可以進入http://192.168.0.101:9990的JBOSS圖形化console




當你看到彈出:
Successfully connected to…的字樣說明我們的數據庫連接建立正確。


在Jboss中安裝Oracle數據庫


這次我們直接使用jboss自帶console來GUI的建立一條oracle連接。


  • 建立module.xml
  • 準備oracle驅動

<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.1" name="com.oracle">
    <properties>
        <property name="jboss.api" value="public"/>
    </properties>
    <resources>
        <resource-root path="ojdbc6.jar"/>
        <!-- Insert resources here -->
    </resources>
    <dependencies>
        <module name="javax.api"/>
        <module name="javax.transaction.api"/>
        <module name="javax.servlet.api" optional="true"/>
    </dependencies>
</module>


  • 修改standalone.xml-增加一個oracle driver

drivers>
                    <driver name="mysql" module="com.mysql">
                        <driver-class>com.mysql.jdbc.Driver</driver-class>
                        <xa-datasource-class>com.mysql.jdbc.jdbc2.optional.MysqlXADataSource</xa-datasource-class>
                    </driver>
                    <driver name="oracle" module="com.oracle">
                        <driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
                        <xa-datasource-class>oracle.jdbc.xa.client.OracleXADataSource</xa-datasource-class>
                    </driver>
</drivers>


  • 重啓JBOSS

使用http://xxx.xxx.xxx.xxx:9990 進入jboss console界面




使用http://xxx.xxx.xxx.xxx:9990 進入jboss console界面









JBOSS基本參數配置


找到$JBOSS_HOME\bin\目錄下的standalone.conf,在這一段之後:


#PRESERVE_JAVA_OPTS=true


#
# Specify options to pass to the Java VM.
#


加入:
export JAVA_OPTS="-Xms1024m -Xmx1024m -XX:MaxPermSize=512m -Djava.net.preferIPv4Stack=true -Djboss.modules.system.pkgs=$JBOSS_MODULES_SYSTEM_PKGS -Djava.awt.headless=true -Djboss.modules.policy-permissions=true"


它會覆蓋掉原有standalone.conf和standalone.sh文件中的所有的JAVA_OPTS參數(是所有


WAR(Web Application)的佈署



在JBOSS中既可以佈署EAR也可以佈署WAR包。


當然,它也可以佈署一個文件夾,該文件夾的名字應該爲:myweb.war或者是myee.ear。


如果:


你佈署的是文件夾如:kie-wb.war,你必須要在同一級目錄下製作一個佈署文件,該文件名必須爲:kie-wb.war.dodeploy。


此處,紅色加粗部分名字必須和你的文件夾同名。


此文件內容爲“空”,什麼都沒有。


JBOSS在啓動時會把這個文件名自動改成kie-wb.war.deploying。


如果佈署成功,該文件名會被自動改名成:kie-wb.war.deployed


如果佈署失敗,該文件名會被自動改名成:kie-wb.war.failed





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章