resin指定java版本_resin的幾個常用配置

本文著重介紹resin的幾個常用配置

注:

1. 本文并非resin.conf的使用說明,只是從實用角度出發,按需分析常用的配置。更多的內容到官網學習吧;

2. 基于resin3.x的探討。

(友情提示:剛下載的resin中,resin.conf里的配置都是包含有注釋的——廢話!)

Dependency checking

在說這個參數之前,不得不先了解一下resin的“Dependency checking”機制。resin會定時檢測和下配置的資源是否改動,如果改動,會根據相應的策略重新啟動web-apps和虛擬主機。那么,具體會檢測那些資源呢?下面是一個清單:

WEB-INF/classes下的class文件

WEB-INF/lib下的jar文件

中指定的class或jar

WEB-INF/resin-web.xml

WEB-INF/web.xml

resin.conf

引入的配置文件

通過或或配置的.war文件;

通過加入的文件

是否很眼熟?沒錯!想當年在本地調試web的時候,改一個java文件,總會罵罵咧咧的停掉resin然后重啟,甚是麻煩,會抱怨為啥class這么矯情,不能像改個jsp那樣立竿見影的看到效果。resin說哥你想法是好的,但就算我有那個熱加載的意愿,它jvm也不干那,你去找sun(oracle就不提了)理論去吧。

那只好忍了吧,但是要等多久才會自動加載一次呢?終于出場了。該標簽定義了resin多久檢測一次上面的那些資源是否變更。這個值是需要加單位的,具體的值定義可以參考Period定義。默認值為2s。

對于取值,resin.conf有這樣的一段注釋:

For production sites, change dependency-check-interval to something – like 600s, so it only checks for updates every 10 minutes.

就是說這種檢測會非常耗時,如果搞resin優化的話,那么就把它設置的長一些吧(比如在生產環境里就設置的長一些)或者干脆設置為-1禁止自動檢測變更,即禁止所謂的熱部署。

Dependency checking與RHS

這個參數明了了,實踐一下吧!于是搞一個測試項目出來,簡單配置一下,跑起來之后,象征性的改一下resin.conf,我們將2s改為1s,看終端的滾動日志,咦,為什么沒有輸出日志?正在納悶之時,日志來了,說檢測到了resin.conf的dependency-check-interval改變了,重啟了所有的host。等等,我們之前的檢測時間是2s,為什么改動文件后感覺過了很久才重啟了resin?

經過多番測試,結論是:“Dependency checking”與resin重啟的機制完全是兩回事。dependency-check-interval只是告訴resin多久檢測一次上下文環境的變化,如果發生變化,先記錄下來,負責監控resin的進程會定期檢測這個記錄,如果發現有新的變更記錄,則重啟resin。至于重啟的機制,屬于Resin Health System的范疇,本文暫不討論。但可以通過這句話簡單的驗證一下我們的推論:

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.

重啟機制

如果是全局的配置(例如resin.conf)變更,則會重啟整個resin(包括所有的虛擬主機),如果只是某個webapp做了變更(如class、jsp、web.xml等),則只對webapp重啟。

需要說明一點的是,在中亦可配置該標簽(屬性),默認情況下,該屬性會繼承全局的dependency-check-interval值,但如果設置該值為-1,會發生什么事呢?我想你不會那么做的……

想要class的變更像jsp那樣迅捷該怎么辦到呢?myeclipse可以辦到。eclipse for javaEE的話,還需要一些插件的支持,本文暫不做討論,參考本文最下邊關于熱部署的推薦文章。

一個server對應于一個jvm實例,為配置在其中的各個虛擬主機提供服務,接收請求并處理。在中可以配置HTTP,集群端口,存活時間,超時時間,線程池以及負載均衡。一個集群(cluster)可以包含多個server,但是id必須不同。server的屬性包含有address(ip)和port,如果resin中只有配置這一個單獨的server,則可以省略address和port,不過這么搞的話該server就無法作為集群的一部分工作,并且無法用命令行來管理。

常用屬性有address和port。即在定義server的時候同時配置address和port。address的默認值是127.0.0.1。

假如由于同一個集群中的多個server配置大同小異,就可以先搞一個通用的server,其他的server會繼承通用的server配置,各自的配置又會覆蓋繼承的配置。就是充當了這個通用的配置,正如其名,就將其中的配置看作是所有server的默認配置即可。像HTTP端口,超時,存活時間,JVM以及線程這些配置可以通過配置實現共享。

下面的一個配置中,定義了JVM的一些參數以及HTTP的通用配置:

02.

03.

04.

05.-Xmx2048m

06.

07.32

08.64

09.

10.

11.

12.

13.

14.

15....

list 1-1

也許你會異想天開的問,既然是默認的配置,那不顯示配置可以嗎?不可以!自己試一下就行了,去掉里面所有顯示定義,重啟resin你就會看到它的抗議:server-id ” has no matching definition. 并且此時resin會陷入腦殘式的無限次重啟之中,它也許認為這是個偶然性事件,重啟resin以嘗試恢復。

從外部的文件讀取配置,這個外部文件必須符合一定的規范,否則resin解析不了的。標準就直接參考${RESIN_HOME}/conf/app-default.xml即可。配置全局的默認訪問頁面,可以修改app-default.xml中的。

http的典型用法是配置在server-default中。因為經常會有這樣一個場景:同一個cluster中的所有server監聽同一個端口。比如在lsit1-2中,兩個server都默認監聽80端口。亦可配置在每個單獨的server中。

一個server可以服務于多個虛擬主機,每個虛擬主機都可以有自己的servlets以及文檔。虛擬主機必須被明確的定義出來,就是說你不能只用(類比)。對于resin來說,創建一個虛擬主機就像創建一個目錄,然后再為其設置一個DNS一樣容易。一個虛擬主機可以包含一個或者多個web-app。簡單的web-app可放置在一個名為“webapps”的頂級目錄下,就像Apache服務器上的/htdocs。復雜一點的站點,可以先部署多個webapps,然后將這些web-app放置在這些webapps中。

舉例來說,假設有個server同時管理者兩個域名:www.gryffindor.com和www.slytherin.com,這兩個域名所對應的web-app部署在不同的目錄下/var/resin/gryffindor和/var/resin/slytherin,他們共享同一個IP。當用戶訪問http://www.gryffindor.com/的時候,首先瀏覽器會發送HTTP請求到共享ip,resin接到請求后,從HTTP請求頭中取出Host,根據Host值再將請求轉發給相應的虛擬主機。

host重要的屬性:

id: resin使用此id來區分不同的請求。若留空則表示該host為默認host,當其他的host無法被匹配的時候便會將請求轉發到此host。

root-directory: 指定一個虛擬主機的文件系統的路徑,默認的“.”就代表${RESIN_HOME}。參考下面list1-2的例子,可以更深入的理解root-directory的含義。

regexp:用正則表達式匹配域名。

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指定項目存放路徑,可以使用絕對路徑,相對路徑則是相對host的root-diirectory而言的。

注意:若使用myeclipse/eclipse創建項目,會有一個項目名(projectName),而此處的root-directory并非項目路徑,而是一個特殊的目錄,該目錄的子目錄以及文件必須符合Servlet規范,通常就是eclipse默認創建的WebContent,這個名字可以隨便改。btw,這個規范的層級結構主要有三個元素:

/WEB-INF/web.xml

/WEB-INF/classes/

/WEB-INF/lib/

必須包含有上面三個東西。配置文件(*.properties, *.xml等等)需要放在classes下。

舉例說明Eclipse中新增一個項目,然后部署resin的方法,假設現在有份配置如下:

01.

02.

03.

04.

05.

06.

07.

08.

09.

10.

list 1-3

下面就簡單講一個本地部署的例子(Eclipse for javaEE,resin3.x)

在Eclipse中新增一個項目,projectName為testResinCfg,根據Servlet規范,自行創建目錄,結構如下:

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

本地調試:

在list1-3所示的默認host中,增加一個:

01.

02.

03.

04.

05.

06.

07.

08.

09.

10.

11.

12.

13.

14.

list 1-5

這樣訪問:http://localhost:8080/tt,如果是id=abc,那就是http://localhost:8080/abc。

在有dns的情況下:

在默認host之下在配置一個host:

1.

2.

3.

4.root-directory="D:\Program_Files\workplace\cache_study\web"?/>

5.

list 1-6

之后便可以通過http://mytest.org/abcd來訪問項目了。

附:Resin與Eclipse for javaEE的整合方法

resin官方文檔提供了安裝Resin Plugin for Eclipse的方法,Galileo版本以上的eclipse for javaEE就可以裝這個軟件了,就像裝tomcat一樣。具體參考:resin

eclipse support

這里主要介紹手工整合Resin與Eclipse的方法。步驟如下:

1. 將web application配置到resin.conf中,具體方法參考上面;

2. 在待部署的項目上右擊——Build Path,將${RESIN_HOME}/lib添加到項目的classpath中;

3. Run – Run Configurations(在本地調試的話,選擇Debug Configurations),彈出的會話中,雙擊“Java Application”創建一個Configuration,在右邊的Name中隨意填寫一個名字,標簽頁Main中,Project選擇待運行web application,Main class填寫resin的主類,查找該類有兩種方法:

該類可以在${RESIN_HOME}/lib/resin.jar中的META-INF/MANIFEST.MF文件中找到,即Main-Class的值;

將${RESIN_HOME}/lib添加到項目的classpath后,即在Main標簽頁點擊“搜索”,在彈出的對話框中搜索“resin”,如果是3.0.x,選擇com.caucho.server.resin.Resin,如果是3.1.x,選擇com.caucho.boot.ResinBoot,具體的選擇,還是要參考META-INF/MANIFEST.MF文件的Main-Class值;

完成以上各步之后,點擊Run即可啟動resin。

如果需要在啟動resin的時候加上一些參數,可以在Arguments中的VM arguments中輸入。

比如: -Djava.util.logging.manager=com.caucho.log.LogManagerImpl。

實際上,真正的部署與eclipse是沒有直接關系的,eclipse在這里僅僅是啟動/關閉eclipse的作用。我們如果直接在開發機上搞得花,就與eclipse無關了,因此還是需要掌握手工部署的技巧。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/459074.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/459074.shtml
英文地址,請注明出處:http://en.pswp.cn/news/459074.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Android生命周期函數執行順序

轉載自:http://blog.csdn.net/intheair100/article/details/39061473 程序正常啟動:onCreate()->onStart()->onResume(); onCreate之后就會執行onStart,此時畫面已經顯示出來了,但還不能交互;然后執行onResume,此時可以與用…

hdoj-2028-Lowest common multiple plus

題目&#xff1a;Lowest common multiple plus 代碼&#xff1a; #include<stdio.h> int common(int a,int b)//計算最大公約數 {int ca%b,t0;if(b>a){tb;ba;at;}while(a%b!0){ca%b;ab;bc;}return b; } int q[105]; int main() {int n,i,j,t0;while(scanf("%d&qu…

C#系統命名空間

*************************************************** 更多精彩&#xff0c;歡迎進入&#xff1a;http://shop115376623.taobao.com *************************************************** 一、基礎命名空間 System.Collections 包含了一些與集合相關的類型,比如列表,隊列,位數…

java不規則算法_分布式id生成算法 snowflake 詳解

背景在復雜分布式系統中&#xff0c;往往需要對大量的數據和消息進行唯一標識。如在支付流水號、訂單號等&#xff0c;隨者業務數據日漸增長&#xff0c;對數據分庫分表后需要有一個唯一ID來標識一條數據或消息&#xff0c;數據庫的自增ID顯然不能滿足需求&#xff0c;此時一個…

Android中下載、安裝和卸載(原)

應用場景&#xff1a;在檢查版本更新的時候經常需要從服務器端下載然后安裝到手機中 使用工具&#xff1a; XUtils&#xff0c;這個開源的框架真的是需要花大把時間去閱讀和理解的&#xff0c;十分有用的&#xff0c;on the way &#xff01; fighting&#xff01; 下載&#x…

Android加載圖片OOM錯誤解決方式

前幾天做項目的時候&#xff0c;甲方要求是PAD &#xff08;SAMSUNG P600 10.1寸 2560*1600&#xff09;的PAD上顯示高分辨率的大圖片。 SQLITE採用BOLD方式存儲圖片&#xff0c;這個存取過程就不說了哈&#xff0c;網上一大堆。 可是在加載/讀取/顯示圖片的時候會報OOM錯誤&am…

C# 對Ini文件操作(C# ini文件操作類)

*************************************************** 更多精彩&#xff0c;歡迎進入&#xff1a;http://shop115376623.taobao.com *************************************************** /* C# 對Ini文件操作&#xff08;C# ini文件操作類&#xff09; [IniFiles.cs] 蝶曉…

python對文件進行讀寫操作

2019獨角獸企業重金招聘Python工程師標準>>> python進行文件讀寫的函數是open或file file_handler open(filename,,mode&#xff09; Table mode 模式描述r以讀方式打開文件&#xff0c;可讀取文件信息。w以寫方式打開文件&#xff0c;可向文件寫入信息。如文件存在…

android:contentDescription

android:contentDescription這個屬性相信大家并不陌生&#xff0c;在ImageButton的使用過程中如果不添加這個屬性會有警告信息。 那么android:contentDescription究竟是干什么的呢&#xff1f;今天查了下資料才知道這個屬性的真正作用。 該屬性為視力障礙的用戶提供方便&#x…

c#中bin,obj,properties文件夾的作用

*************************************************** 更多精彩&#xff0c;歡迎進入&#xff1a;http://shop115376623.taobao.com *************************************************** Bin目錄用來存放編譯的結果&#xff0c;bin是二進制binrary的英文縮寫&#xff0c;因為…

getAttribute實例例java_Java ExifInterface.getAttribute方法代碼示例

import android.media.ExifInterface; //導入方法依賴的package包/類public static void copyExif(ExifInterface originalExif, int width, int height, String imageOutputPath) {String[] attributes new String[]{ExifInterface.TAG_APERTURE,ExifInterface.TAG_DATETIME,…

檢測SDWebImage有沒有緩存圖片 IOS 獲取網絡圖片大小

判斷圖片是否緩存NSURL *url [NSURL URLWithString:[model.content objectForKey:"image"]];//請求網絡地址數據的同步方法//因為這個方法在子線程(全局隊列)中執行,所以不需要考慮死線程的問題SDWebImageManager *manager [SDWebImageManager sharedManager];[man…

mac 下 使用 java運行 class 文件 總是提示 “錯誤: 找不到或無法加載主類”的解決方法...

發現問題 切換到mac平臺后&#xff0c;突然想寫點程序運行在mac下&#xff0c;想到mac自帶java&#xff0c;會方便好多。不過在這過程中遇到了麻煩&#xff1a; 總是提示 “錯誤: 找不到或無法加載主類” 工程結構 查了好久&#xff0c;終于找到原型所在&#xff0c;發現網上很…

[轉]VisualStudio如何組織解決方案的目錄結構

*************************************************** 更多精彩&#xff0c;歡迎進入&#xff1a;http://shop115376623.taobao.com *************************************************** 解決方案與項目&#xff1a; 從VC6之后VC系列就使用解決方案&#xff08;Solution&…

java幾種刪除_幾種刪除Linux目錄的方法

在Linux中有很多方法可以刪除目錄&#xff0c;在圖形化界面可以利用文件管理器&#xff0c;或者通過終端刪除。本文將介紹在文本界面使用命令刪除目錄。使用rmdir刪除目錄Rmdir命令間成“remove directory”&#xff0c;用于刪除空目錄的命令。例如&#xff0c;刪除一個名為“M…

php公鑰模數,php – 如何從公共指數和RSA模數生成DER / PEM證書?

眾所周知,公鑰由公共指數和模數組成.我的問題是&#xff1a;如何從公共指數和RSA模數生成DER / PEM證書&#xff1f;非常感謝你提前.解決方法:使用公共指數和模數,你可能希望做的最好的事情是得到這樣的東西&#xff1a;-----BEGIN PUBLIC KEY-----MIGGAoGAfHlcdrcuOK6C02rbGR3…

C# DataTable的詳細用法

*************************************************** 更多精彩&#xff0c;歡迎進入&#xff1a;http://shop115376623.taobao.com *************************************************** DataTable 是一個臨時保存數據的網格虛擬表(表示內存中數據的一個表。)。DataTable是A…

【SpringMVC】SpringMVC系列6之@CookieValue 映射請求Cookie 值

6、CookieValue 映射請求Cookie 值 6.1、示例 CookieValue 可讓處理方法入參綁定某個 Cookie 值&#xff0c;示例如下&#xff1a;

杭電OJ-2104_hide handkerchief超簡潔代碼

#include<iostream> using namespace std; int n, m;; int zz(int a, int b) {return b0 ? a: zz(b, a%b); } int main() {while (cin >> n >> m&&n ! -1 && m ! -1)cout << (nb(n, m) 1 ? "YES" : "POOR Haha"…

php 年月日 中文,轉換中文日期的PHP程序

轉換中文日期的PHP程序本程序將中文日期輸出為2001-12-23&#xff0c;并很好解決了“十”的問題&#xff0c;如“十一”和“二十一”中“十”的處理&#xff01;稍加修改可改為函數。跟隨小編去看看吧&#xff01;希望對大家有所幫助&#xff01;$str"二零○一年十二月二十…