resin那些事之resin.conf

泛微E8设置开发环境 包含搭建开发环境、设置编译目录、验证运行效果等。 阅读详情

【经验总结】resin那些事之resin.conf
----by johnson

话说与resin打交道很久了,却从未系统了解过。resin一听火了,说:你老兄当真与我打交道很久了?工具、流程如此发达的今天,部署这种工作都由专门的工具去搞了,你老兄也就偶尔着看下我的死活,最多不过是上机器去机械的kill一下,接着再start一下,你真的了解我吗?好吧,我承认不太了解,搞基不是我的风格 -_-! 呵呵,废话少扯,就先了解了解你的核心配置吧。

注:

1. 本文并非resin.conf的使用说明,只是从实用角度出发,按需分析常用的配置。更多的内容到官网学习吧;

2. 基于resin3.x的探讨。

(友情提示:刚下载的resin中,resin.conf里的配置都是包含有注释的——废话!)

<dependency-check-interval>

Dependency checking

在说这个参数之前,不得不先了解一下resin的“Dependency checking”机制。resin会定时检测<web-app>和<host>下配置的资源是否改动,如果改动,会根据相应的策略重新启动web-apps和虚拟主机。那么,具体会检测那些资源呢?下面是一个清单:

· WEB-INF/classes下的class文件

· WEB-INF/lib下的jar文件

· <class-loader>中指定的class或jar

· WEB-INF/resin-web.xml

· WEB-INF/web.xml

· resin.conf

· <resin:import>引入的配置文件

· 通过<archive-path>或<web-app-deploy>或<host-deploy>配置的.war文件;

· 通过<dependency>加入的文件

是否很眼熟?没错!想当年在本地调试web的时候,改一个java文件,总会骂骂咧咧的停掉resin然后重启,甚是麻烦,会抱怨为啥class这么矫情,不能像改个jsp那样立竿见影的看到效果。resin说哥你想法是好的,但就算我有那个热加载的意愿,它jvm也不干那,你去找sun(oracle就不提了)理论去吧。那只好忍了吧,但是要等多久才会自动加载一次呢?<dependency-check-interval>终于出场了。该标签定义了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 sites reliability is important, Resin monitors its internal 

sensor net every 60 seconds, recording your servers memory, cpu, 

network, database and cluster status.

重启机制

如果是全局的配置(例如resin.conf)变更,则会重启整个resin(包括所有的虚拟主机),如果只是某个webapp做了变更(如class、jsp、web.xml等),则只对webapp重启。

需要说明一点的是,在<jsp>中亦可配置该标签(属性),默认情况下,该属性会继承全局的dependency-check-interval值,但如果设置该值为-1,会发生什么事呢?我想你不会那么做的……

想要class的变更像jsp那样迅捷该怎么办到呢?myeclipse可以办到。eclipse for javaEE的话,还需要一些插件的支持,本文暂不做讨论,参考本文最下边关于热部署的推荐文章。

<server>

一个server对应于一个jvm实例,为配置在其中的各个虚拟主机提供服务,接收请求并处理。在<server>中可以配置HTTP,集群端口,存活时间,超时时间,线程池以及负载均衡。一个集群(cluster)可以包含多个server,但是id必须不同。server的属性包含有address(ip)和port,如果resin中只有配置这一个单独的server,则可以省略address和port,不过这么搞的话该server就无法作为集群的一部分工作,并且无法用命令行来管理。

常用属性有address和port。即在定义server的时候同时配置address和port。address的默认值是127.0.0.1。

<server-default>

假如由于同一个集群中的多个server配置大同小异,就可以先搞一个通用的server,其他的server会继承通用的server配置,各自的配置又会覆盖继承的配置。<server-default>就是充当了这个通用的配置,正如其名,就将其中的配置看作是所有server的默认配置即可。像HTTP端口,超时,存活时间,JVM以及线程这些配置可以通过配置<server-default>实现共享。

下面的一个配置中,<server-default>定义了JVM的一些参数以及HTTP的通用配置:

list 1-1

也许你会异想天开的问,既然<server-default>是默认的<server>配置,那不显示配置<server>可以吗?不可以!自己试一下就行了,去掉里面所有显示定义<server>,重启resin你就会看到它的抗议:server-id ” has no matching <server> definition. 并且此时resin会陷入脑残式的无限次重启之中,它也许认为这是个偶然性事件,重启resin以尝试恢复。

<resin:import>

从外部的文件读取配置,这个外部文件必须符合一定的规范,否则resin解析不了的。标准就直接参考${RESIN_HOME}/conf/app-default.xml即可。配置全局的默认访问页面,可以修改app-default.xml中的<welcome-file-list>。

<http>

http的典型用法是配置在server-default中。因为经常会有这样一个场景:同一个cluster中的所有server监听同一个端口。比如在lsit1-2中,两个server都默认监听80端口。<http>亦可配置在每个单独的server中。

<host>

一个server可以服务于多个虚拟主机,每个虚拟主机都可以有自己的servlets以及文档。虚拟主机必须被明确的定义出来,就是说你不能只用<host-default>(类比<server-default>)。对于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:用正则表达式匹配域名。

list 1-2

<web-app>

主要的属性是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的方法,假设现在有份配置如下:

list 1-3

下面就简单讲一个本地部署的例子(Eclipse for javaEE,resin3.x)

在Eclipse中新增一个项目,projectName为testResinCfg,根据Servlet规范,自行创建目录,结构如下:

list 1-4

本地调试:

在list1-3所示的默认host中,增加一个<web-app>:

list 1-5

这样访问:http://localhost:8080/tt,如果是id=abc,那就是http://localhost:8080/abc。

在有dns的情况下:

在默认host之下在配置一个host:



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无关了,因此还是需要掌握手工部署的技巧。

参考资料

《Resin3.1 Documentation》

《resin3.1配置说明》

Caucho Java Doc

Servlet各种规范 

关于热部署的好文推荐

http://baike.baidu.com/view/5036687.htm

http://java.chinaitlab.com/configure/855096.html

http://fengyouhua.iteye.com/blog/51458


本文原创自无线技术运营空间: http://wireless.qzone.qq.com 及 http://blog.csdn.net/wireless_tech (专注无线技术运营——无线技术(操作系统/数据库/WEB前端/负载均衡/系统容灾/系统安全/短信接入/WAP接入/3G等)、无线业务运营、无线开放平台、统计分析(用户行为分析/数据挖掘)、CP合作,联系我们:1780551083@qq.com)

华为od 面试八股文_前端_02_含答案 阅读详情

相关推荐

一台NAS两个系统:飞牛nas上完美运行群晖DSM?(飞牛nas+群晖nas套娃安装实操)

想在飞牛NAS上体验群晖DSM系统?💡 本文详细记录了飞牛nas上部署群晖的完整过程,从镜像转换到系统安装,每一步都有详细说明 🖥️,让你在不增加硬件成本的情况下,轻松实现一套硬件、多种系统的灵活部署 ✅

XiaoqiangClub的博客 2033

resin.conf配置详解

如下讲的是在 linux上安装resin服务器的配置 ,在window上就安装的时候不用设置 其他都一样 1.安装好一个resin不动 2. 安装另外目录一个resin,修改resin.conf的端口(8080和6802的就可以了)、路径 3. 修改另外的resin的httpd.sh,在里面增加: JAVA_HOME=/opt/jdk1.0...

系统运维 668

SAEAS8017D-2017防撞灯系统最低性能标准.pdf

SAEAS8017D-2017防撞灯系统最低性能标准.pdf

Resin介绍及其使用配置

Resin是一个提供高性能的,支持 Java/PHP 的应用服务器。目前有两个版本:一个是GPL下的开源版本,提供给一些爱好者、开发人员和低流量网站使用;一种是收费的专业版本,增加了一些更加适用于生产环境的特性。 Resin的一些特性: 可靠性:Resin包含了很多可靠的特性,包括服务器自动重启、检测并重启死锁的服务器、管理JVM内存以防止内存泄露等。 集群:Resin可以将多个服...

aifeier1982的博客 490

resin3.X那些resin.conf

【经验总结】resin那些resin.conf ----by johnson 话说与resin打交道很久了,却从未系统了解过。resin一听火了,说:你老兄当真与我打交道很久了?工具、流程如此发达的今天,部署这种工作都由专门的工具去搞了,你老兄也就偶尔着看下我的死活,最多不过是上机器去机械的kill一下,接着再start一下,你真的了解我吗?好吧,我承认不太了解,搞基不是我的风格 -_

飞鸟快快的专栏 1772

resin3配置https

RESIN3配置SSL首先下载OPENSSL http://gnuwin32.sourceforge.net/packages/openssl.htm。安装后把C:/Program Files/GnuWin32/bin/下的libssl32.dll和libeay32.dll两个文件copy到RESIN的根目录, 在RESIN根目录下建立keys目录用来保存生成的密钥, 在keys目录下建立open

Herr Apfel的专栏 5619

resin3.1下resin.conf配置文件说明

resin3.1下resin.conf配置文件说明 &lt;!-- - Resin 3.1 配置文件. --&gt;&lt;resin xmlns="http://caucho.com/ns/resin"          xmlns:resin="http://caucho.com/ns/resin/core"&gt;&lt;!-- 加载resin/lib下的所有.jar文件--&gt;&lt...

java学习者 159

Resin3.1下resin.conf配置文件说明

Resin3.1下resin.conf配置文件说明

☆未ん知★ッ的探索空间 1218

resin设置权限_Resin学习笔记

resin服务在不同的启动级中设置成自启动:#/sbin/chkconfig resin reset从中还学到了不少关于用chkconfig管理服务启动的知识。其实/etc/init.d/resin这个脚本之所以可以用chkconfig来配置主要是有以下的注释:# chkconfig: 345 85 15# description: Resin is a Java Web server.这个注释...

weixin_30359591的博客 266

eclipse 中配置resin,找不到resin.conf文件的问题

myeclipse6.0中配置RESIN时, 出现了一些小错误, 导致了不能正常启动RESIN, 错误提示: unknown argument 'Files\resin3\conf\resin.conf' usage: Resin [-conf resin.conf] [-server id] 查了一些资料,没有合理的解释. 无意中发现了'Files\resin3\c...

这里的海水静悄悄 701

配置resin.conf

配置resin.conf 博客分类:  j2se resin resin 1.本文以resin3.1为例说明,与其之前的版本相比,Resin3.1配置JVM参数的位置发生了变化Resin3.1在resin.conf文件中配置JVM参数,之前的版本则直接配置在wrapper.pl中配置。  一、修改resin.conf文件  1.1 修改JVM的参数  修改resin

daxue_yingyu的专栏 802

Resin的配置文件一览

Resin是一款功能非常强大的Web Server,在我们的日常开发中经常应用到,但是其负责的配置却

wenbingcai的专栏 847

resin3.1的配置文件说明

[code="java"] 2s . -Xmx256m -Xss1m -X...

奔跑的羚羊 261

resin学习随笔

Resin是CAUCHO公司的产品,是一个非常流行的application server,对servlet和JSP提供了良好的支持,性能也比较优良,resin自身采用JAVA语言开发。版本区别:resin 普通版本和pro版本主要区别是 pro支持缓存和负载均衡,并且pro版本收费的。pro因为有强大的cache功能,独立作为web服务器处理静态页面性能都可以和apache有...

weixin_33825683的博客 281

resin4基本配置信息

Resin说明: 配置app应用时要注意是在   标签下配置的 有两种配置方式可以参考: 1.多域名单路径配置 在resin中标签是配置多域名的地方,配置此项是再有DNS解析下才可以 例如: (1)  (2) 第一个:是通过本地IP/localhost进行访问 第二个则是通过域名boy.com进行访问 root-directory:用于全局定义项目文件夹   2.单域名多

ps2012的专栏 1253

服务器-resin--日志配置--Resin 3.1.x 日志配置说明

转载请注明From:http://blog.163.com/jackswu@yeah Described By Jack 1、打开Resin.conf    在里面修改/添加下面代码:(一般resin.conf都会有这句)   参数说明: Name 是指定记录各层次类型的调试日志;name 设定有几种情况,如:  Name=’’  name为空,是对所有应用

5430

【问题】4.Nginx之default_server问题

nginx 的 default_server 指令可以定义默认的 server出处理一些没有成功匹配 server_name 的请求1.显示定义2.指定Server_name3.隐式定义这三种方式都可禁止 ip 直接访问且 1,3同时可以禁止未绑定域名的访问(比如泛解析了主域名)。如果没有显式定义,则会选取第一个定义的 server 作为 default_server。http {# 显示的定义一个 default serverserver {}}

颜淡慕潇 9482

Resin服务器配置指南

                                   Resin服务器配置指南   转载:http://blog.sina.com.cn/s/blog_9fd5b6df01010ys3.html   1       修改历史 2       目的和范围 本文讲述了resin服务器配置相关的内容,包括:配置实例、日志的配置、超时配置、常见问题和解答等等。 3      ...

stay hungry ! stay foolish! 2027
上一篇: 由webdings引发的乱码问题
下一篇: 浅议基于系统规范的设计创新(一)
wireless_tech
博客等级 码龄15年 23粉丝 54原创
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值