轉自:https://www.cnblogs.com/aiwz/p/6154594.html
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





JBOSS基本參數配置
#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