resin指定java版本_resin的几个常用配置
本文著重介紹resin的幾個(gè)常用配置
注:
1. 本文并非resin.conf的使用說(shuō)明,只是從實(shí)用角度出發(fā),按需分析常用的配置。更多的內(nèi)容到官網(wǎng)學(xué)習(xí)吧;
2. 基于resin3.x的探討。
(友情提示:剛下載的resin中,resin.conf里的配置都是包含有注釋的——廢話!)
Dependency checking
在說(shuō)這個(gè)參數(shù)之前,不得不先了解一下resin的“Dependency checking”機(jī)制。resin會(huì)定時(shí)檢測(cè)和下配置的資源是否改動(dòng),如果改動(dòng),會(huì)根據(jù)相應(yīng)的策略重新啟動(dòng)web-apps和虛擬主機(jī)。那么,具體會(huì)檢測(cè)那些資源呢?下面是一個(gè)清單:
WEB-INF/classes下的class文件
WEB-INF/lib下的jar文件
中指定的class或jar
WEB-INF/resin-web.xml
WEB-INF/web.xml
resin.conf
引入的配置文件
通過(guò)或或配置的.war文件;
通過(guò)加入的文件
是否很眼熟?沒(méi)錯(cuò)!想當(dāng)年在本地調(diào)試web的時(shí)候,改一個(gè)java文件,總會(huì)罵罵咧咧的停掉resin然后重啟,甚是麻煩,會(huì)抱怨為啥class這么矯情,不能像改個(gè)jsp那樣立竿見(jiàn)影的看到效果。resin說(shuō)哥你想法是好的,但就算我有那個(gè)熱加載的意愿,它jvm也不干那,你去找sun(oracle就不提了)理論去吧。
那只好忍了吧,但是要等多久才會(huì)自動(dòng)加載一次呢?終于出場(chǎng)了。該標(biāo)簽定義了resin多久檢測(cè)一次上面的那些資源是否變更。這個(gè)值是需要加單位的,具體的值定義可以參考Period定義。默認(rèn)值為2s。
對(duì)于取值,resin.conf有這樣的一段注釋:
For production sites, change dependency-check-interval to something – like 600s, so it only checks for updates every 10 minutes.
就是說(shuō)這種檢測(cè)會(huì)非常耗時(shí),如果搞resin優(yōu)化的話,那么就把它設(shè)置的長(zhǎng)一些吧(比如在生產(chǎn)環(huán)境里就設(shè)置的長(zhǎng)一些)或者干脆設(shè)置為-1禁止自動(dòng)檢測(cè)變更,即禁止所謂的熱部署。
Dependency checking與RHS
這個(gè)參數(shù)明了了,實(shí)踐一下吧!于是搞一個(gè)測(cè)試項(xiàng)目出來(lái),簡(jiǎn)單配置一下,跑起來(lái)之后,象征性的改一下resin.conf,我們將2s改為1s,看終端的滾動(dòng)日志,咦,為什么沒(méi)有輸出日志?正在納悶之時(shí),日志來(lái)了,說(shuō)檢測(cè)到了resin.conf的dependency-check-interval改變了,重啟了所有的host。等等,我們之前的檢測(cè)時(shí)間是2s,為什么改動(dòng)文件后感覺(jué)過(guò)了很久才重啟了resin?
經(jīng)過(guò)多番測(cè)試,結(jié)論是:“Dependency checking”與resin重啟的機(jī)制完全是兩回事。dependency-check-interval只是告訴resin多久檢測(cè)一次上下文環(huán)境的變化,如果發(fā)生變化,先記錄下來(lái),負(fù)責(zé)監(jiān)控resin的進(jìn)程會(huì)定期檢測(cè)這個(gè)記錄,如果發(fā)現(xiàn)有新的變更記錄,則重啟resin。至于重啟的機(jī)制,屬于Resin Health System的范疇,本文暫不討論。但可以通過(guò)這句話簡(jiǎn)單的驗(yàn)證一下我們的推論:
Because your site’s reliability is important, Resin monitors its internal sensor net every 60 seconds, recording your server’s memory, cpu, network, database and cluster status.
重啟機(jī)制
如果是全局的配置(例如resin.conf)變更,則會(huì)重啟整個(gè)resin(包括所有的虛擬主機(jī)),如果只是某個(gè)webapp做了變更(如class、jsp、web.xml等),則只對(duì)webapp重啟。
需要說(shuō)明一點(diǎn)的是,在中亦可配置該標(biāo)簽(屬性),默認(rèn)情況下,該屬性會(huì)繼承全局的dependency-check-interval值,但如果設(shè)置該值為-1,會(huì)發(fā)生什么事呢?我想你不會(huì)那么做的……
想要class的變更像jsp那樣迅捷該怎么辦到呢?myeclipse可以辦到。eclipse for javaEE的話,還需要一些插件的支持,本文暫不做討論,參考本文最下邊關(guān)于熱部署的推薦文章。
一個(gè)server對(duì)應(yīng)于一個(gè)jvm實(shí)例,為配置在其中的各個(gè)虛擬主機(jī)提供服務(wù),接收請(qǐng)求并處理。在中可以配置HTTP,集群端口,存活時(shí)間,超時(shí)時(shí)間,線程池以及負(fù)載均衡。一個(gè)集群(cluster)可以包含多個(gè)server,但是id必須不同。server的屬性包含有address(ip)和port,如果resin中只有配置這一個(gè)單獨(dú)的server,則可以省略address和port,不過(guò)這么搞的話該server就無(wú)法作為集群的一部分工作,并且無(wú)法用命令行來(lái)管理。
常用屬性有address和port。即在定義server的時(shí)候同時(shí)配置address和port。address的默認(rèn)值是127.0.0.1。
假如由于同一個(gè)集群中的多個(gè)server配置大同小異,就可以先搞一個(gè)通用的server,其他的server會(huì)繼承通用的server配置,各自的配置又會(huì)覆蓋繼承的配置。就是充當(dāng)了這個(gè)通用的配置,正如其名,就將其中的配置看作是所有server的默認(rèn)配置即可。像HTTP端口,超時(shí),存活時(shí)間,JVM以及線程這些配置可以通過(guò)配置實(shí)現(xiàn)共享。
下面的一個(gè)配置中,定義了JVM的一些參數(shù)以及HTTP的通用配置:
02.
03.
04.
05.-Xmx2048m
06.
07.32
08.64
09.
10.
11.
12.
13.
14.
15....
list 1-1
也許你會(huì)異想天開(kāi)的問(wèn),既然是默認(rèn)的配置,那不顯示配置可以嗎?不可以!自己試一下就行了,去掉里面所有顯示定義,重啟resin你就會(huì)看到它的抗議:server-id ” has no matching definition. 并且此時(shí)resin會(huì)陷入腦殘式的無(wú)限次重啟之中,它也許認(rèn)為這是個(gè)偶然性事件,重啟resin以嘗試恢復(fù)。
從外部的文件讀取配置,這個(gè)外部文件必須符合一定的規(guī)范,否則resin解析不了的。標(biāo)準(zhǔn)就直接參考${RESIN_HOME}/conf/app-default.xml即可。配置全局的默認(rèn)訪問(wèn)頁(yè)面,可以修改app-default.xml中的。
http的典型用法是配置在server-default中。因?yàn)榻?jīng)常會(huì)有這樣一個(gè)場(chǎng)景:同一個(gè)cluster中的所有server監(jiān)聽(tīng)同一個(gè)端口。比如在lsit1-2中,兩個(gè)server都默認(rèn)監(jiān)聽(tīng)80端口。亦可配置在每個(gè)單獨(dú)的server中。
一個(gè)server可以服務(wù)于多個(gè)虛擬主機(jī),每個(gè)虛擬主機(jī)都可以有自己的servlets以及文檔。虛擬主機(jī)必須被明確的定義出來(lái),就是說(shuō)你不能只用(類比)。對(duì)于resin來(lái)說(shuō),創(chuàng)建一個(gè)虛擬主機(jī)就像創(chuàng)建一個(gè)目錄,然后再為其設(shè)置一個(gè)DNS一樣容易。一個(gè)虛擬主機(jī)可以包含一個(gè)或者多個(gè)web-app。簡(jiǎn)單的web-app可放置在一個(gè)名為“webapps”的頂級(jí)目錄下,就像Apache服務(wù)器上的/htdocs。復(fù)雜一點(diǎn)的站點(diǎn),可以先部署多個(gè)webapps,然后將這些web-app放置在這些webapps中。
舉例來(lái)說(shuō),假設(shè)有個(gè)server同時(shí)管理者兩個(gè)域名:www.gryffindor.com和www.slytherin.com,這兩個(gè)域名所對(duì)應(yīng)的web-app部署在不同的目錄下/var/resin/gryffindor和/var/resin/slytherin,他們共享同一個(gè)IP。當(dāng)用戶訪問(wèn)http://www.gryffindor.com/的時(shí)候,首先瀏覽器會(huì)發(fā)送HTTP請(qǐng)求到共享ip,resin接到請(qǐng)求后,從HTTP請(qǐng)求頭中取出Host,根據(jù)Host值再將請(qǐng)求轉(zhuǎn)發(fā)給相應(yīng)的虛擬主機(jī)。
host重要的屬性:
id: resin使用此id來(lái)區(qū)分不同的請(qǐng)求。若留空則表示該host為默認(rèn)host,當(dāng)其他的host無(wú)法被匹配的時(shí)候便會(huì)將請(qǐng)求轉(zhuǎn)發(fā)到此host。
root-directory: 指定一個(gè)虛擬主機(jī)的文件系統(tǒng)的路徑,默認(rèn)的“.”就代表${RESIN_HOME}。參考下面list1-2的例子,可以更深入的理解root-directory的含義。
regexp:用正則表達(dá)式匹配域名。
01.
02.
03.
04....
05.
06.
07.
08.
09....
10.
11.
list 1-2
主要的屬性是id和root-directory,同host的id類似,web-app的id也是用于匹配url的。root-directory指定項(xiàng)目存放路徑,可以使用絕對(duì)路徑,相對(duì)路徑則是相對(duì)host的root-diirectory而言的。
注意:若使用myeclipse/eclipse創(chuàng)建項(xiàng)目,會(huì)有一個(gè)項(xiàng)目名(projectName),而此處的root-directory并非項(xiàng)目路徑,而是一個(gè)特殊的目錄,該目錄的子目錄以及文件必須符合Servlet規(guī)范,通常就是eclipse默認(rèn)創(chuàng)建的WebContent,這個(gè)名字可以隨便改。btw,這個(gè)規(guī)范的層級(jí)結(jié)構(gòu)主要有三個(gè)元素:
/WEB-INF/web.xml
/WEB-INF/classes/
/WEB-INF/lib/
必須包含有上面三個(gè)東西。配置文件(*.properties, *.xml等等)需要放在classes下。
舉例說(shuō)明Eclipse中新增一個(gè)項(xiàng)目,然后部署resin的方法,假設(shè)現(xiàn)在有份配置如下:
01.
02.
03.
04.
05.
06.
07.
08.
09.
10.
list 1-3
下面就簡(jiǎn)單講一個(gè)本地部署的例子(Eclipse for javaEE,resin3.x)
在Eclipse中新增一個(gè)項(xiàng)目,projectName為testResinCfg,根據(jù)Servlet規(guī)范,自行創(chuàng)建目錄,結(jié)構(gòu)如下:
01.testResinCfg
02.testResinCfg/src/
03.testResinCfg/web/
04.testResinCfg/web/META-INF/
05.testResinCfg/web/index.jsp
06.testResinCfg/web/WEB-INF/
07.testResinCfg/web/WEB-INF/classes/
08.testResinCfg/web/WEB-INF/lib/
09.testResinCfg/web/WEB-INF/work/
10.testResinCfg/web/WEB-INF/web.xml
list 1-4
本地調(diào)試:
在list1-3所示的默認(rèn)host中,增加一個(gè):
01.
02.
03.
04.
05.
06.
07.
08.
09.
10.
11.
12.
13.
14.
list 1-5
這樣訪問(wèn):http://localhost:8080/tt,如果是id=abc,那就是http://localhost:8080/abc。
在有dns的情況下:
在默認(rèn)host之下在配置一個(gè)host:
1.
2.
3.
4.root-directory="D:\Program_Files\workplace\cache_study\web"?/>
5.
list 1-6
之后便可以通過(guò)http://mytest.org/abcd來(lái)訪問(wèn)項(xiàng)目了。
附:Resin與Eclipse for javaEE的整合方法
resin官方文檔提供了安裝Resin Plugin for Eclipse的方法,Galileo版本以上的eclipse for javaEE就可以裝這個(gè)軟件了,就像裝tomcat一樣。具體參考:resin
eclipse support
這里主要介紹手工整合Resin與Eclipse的方法。步驟如下:
1. 將web application配置到resin.conf中,具體方法參考上面;
2. 在待部署的項(xiàng)目上右擊——Build Path,將${RESIN_HOME}/lib添加到項(xiàng)目的classpath中;
3. Run – Run Configurations(在本地調(diào)試的話,選擇Debug Configurations),彈出的會(huì)話中,雙擊“Java Application”創(chuàng)建一個(gè)Configuration,在右邊的Name中隨意填寫(xiě)一個(gè)名字,標(biāo)簽頁(yè)Main中,Project選擇待運(yùn)行web application,Main class填寫(xiě)resin的主類,查找該類有兩種方法:
該類可以在${RESIN_HOME}/lib/resin.jar中的META-INF/MANIFEST.MF文件中找到,即Main-Class的值;
將${RESIN_HOME}/lib添加到項(xiàng)目的classpath后,即在Main標(biāo)簽頁(yè)點(diǎn)擊“搜索”,在彈出的對(duì)話框中搜索“resin”,如果是3.0.x,選擇com.caucho.server.resin.Resin,如果是3.1.x,選擇com.caucho.boot.ResinBoot,具體的選擇,還是要參考META-INF/MANIFEST.MF文件的Main-Class值;
完成以上各步之后,點(diǎn)擊Run即可啟動(dòng)resin。
如果需要在啟動(dòng)resin的時(shí)候加上一些參數(shù),可以在Arguments中的VM arguments中輸入。
比如: -Djava.util.logging.manager=com.caucho.log.LogManagerImpl。
實(shí)際上,真正的部署與eclipse是沒(méi)有直接關(guān)系的,eclipse在這里僅僅是啟動(dòng)/關(guān)閉eclipse的作用。我們?nèi)绻苯釉陂_(kāi)發(fā)機(jī)上搞得花,就與eclipse無(wú)關(guān)了,因此還是需要掌握手工部署的技巧。
總結(jié)
以上是生活随笔為你收集整理的resin指定java版本_resin的几个常用配置的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: UIView转UIimage
- 下一篇: 家用台式计算机的额定功率,台式机的功率(