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.mzph.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"二零○一年十二月二十…