【译】resin4.0 API——resin.xml

前端之家收集整理的这篇文章主要介绍了【译】resin4.0 API——resin.xml前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

原文:http://caucho.com/resin-4.0/admin/config-resin-xml.xtp#Resourcesdatabasesqueuescachesandcustom

resin中,所有的用户自定义配置都配在resin.xml里。resin.xml概要着重描述了资源,集群,域名映射与URL映射控制,以及习惯性配置。


目录

1. 概念和命名约定

2. resin.xml概要

3. 默认配置:服务默认配置,集群默认配置,web应用默认配置

4. 服务:一个JVM实例

5. 监控(watchdog):保护服务

6. 集群:执行共同任务的多个服务

7. host:HTTP虚拟host

8. Web应用:HTTP/Servlet应用(即静态或动态的应用)

9. Rewrite:控制URL映射

10. 负载均衡:用于对多个后端服务器负载均衡

11.日志:JDKjava.util.logging

12.resource:数据库,队列,缓存

13.健康:监控,操作,与报告

14.安全:身份验证与权限约束


1.概念和命名约定

·cluster(集群)- 一个集群包含多个server。

·environment(环境) - 应用的(原文是独立类加载环境 insolated class-loader contexts)的上下文,即应用享有的资源。server,host,web-app是最主要的环境。

·host - 一个HTTP虚拟host

·proxy cache(代理缓存) - HTTP代理缓存(译注:收到请求之后,检查本地的缓存来确定是否要向后端服务器发起请求,向后端发起请求并收到回复的情况下,把响应回复又缓存在本地。类似Nginx

·resource(资源)- 应用可使用的驱动或服务。含:JNDI,CDI,JMS队列,习惯性CDI配置。resin特有的资源含:安全,身份验证,健康检测和重定向/URL映射系统。

·rewrite/dispatch(重定向/调度) - 定向HTTP请求到servlet和相应响应代码。类似于使用apache的mod_rewrite进行URL地址重定向

·server(服务) - 一个Resin JVM实例。一台机器上可以有多个server。

·watchdog(监控) - 一个用于监控Resin server的JVM实例,它可以在它认为有必要的时候自动重启server。

·web-app (web应用)– 一个HTTP web应用,里面包含了servlet。

2.resin.xml概要

例:

<resinxmlns="http://caucho.com/ns/resin" xmlns:resin="urn:java:com.caucho.resin">

  <cluster-default>         

    <!-- shared configuration across allclusters -->

    <resin:importpath="classpath:Meta-INF/caucho/app-default.xml"/>

    <resin:importpath="${__DIR__}/health.xml" optional="true"/>

  </cluster-default>         

  <cluster id="my-cluster">

    <server-default>

      <!-- thread limits,JVM config,keepalives,ports,HTTP -->

      <http port="8080"/>

    </server-default>

    <server id="server-a"address="192.168.1.10" port="6800"/>

    <server id="server-b"address="192.168.1.11" port="6800"/>

    <host id="www.myhost.com"root-directory="hosts/myhost.com">

   <resin:MovedPermanentlyregexp="/old-file" target="/new-path"/>
   
    <web-app-deploypath="webapps"
           expand-preserve-fileset="WEB-INF/work/**"/>
      <web-app id="/custom">

      </web-app>
 
   </host>
  
  </cluster>

</resin>

<cluster>是server,host,以及通用资源的容器。cluster中的server共用它的配置。

3.默认配置:服务默认配置,集群默认配置,web应用默认配置server-default,cluster-default,web-app-default

想给一组server配一些默认项,比如最大线程数,http端口号时,你可以把这些公共的配置放在<server-default>中。类似的,对于cluster,virtual-host或web-app-default,你可以用<cluster-default>,<host-default>和<web-app-default>去管理这些公共配置。

以下例子中,用<cluster-default>和<resin:import>来管理公共web-app配置,且health-system的配置也通用于所有的cluster。

例子:

<resinxmlns="http://caucho.com/ns/resin" xmlns:resin="urn:java:com.caucho.resin">

  <cluster-default>

    <resin:importpath="classpath:Meta-INF/caucho/app-default.xml"/>
   
    <resin:importpath="${__DIR__}/health.xml" optional="true"/>

  </cluster-default>

  <cluster id="my-cluster-a">

    ...

  </cluster>

  <cluster id="my-cluster-b">
    ...
  </cluster>

</resin>  

4.服务:一个JVM实例

详细配置见serverconfiguration

一个<server>标签配置cluster中的一个JVM实例。一个server的独立配置不通用于整个集群配置。watchdog根据<server>标签内容去启动一个Resin JVM,<server>标签中也配置JVM参数。

· server id 用于标识一个server。

· 局域网IP地址和端口用于和server交互

· JVM参数,比如-Xmx

· 线程配置如thread-idle-min和thread-idle-max

· TCP端口(含HTTP端口)的超时时间和cluster端口

· 负载均衡配置,包含负载比重和超时时间

· 使用Unix setuid的用户名用户组名,保证安全性

<server>配置了cluster中的servers,server使用 --elastic-server和--cluster command-line 启动,server们共享cluster中的<server-default>配置。

5.监控(watchdog):保护服务

watchdog监控Resin server的JVM实例,当实例出错的时候,watchdog会自动重启它。watchdog承担为server设置JVM参数的工作,打印日志,处理Unix的setuid。

6.集群:执行共同任务的多个服务

详细配置说明见:clusteringconfiguration

一个Resin集群包含一组执行共同任务的server,比如说提供HTTP请求服务,负载均衡,或处理JMS队列。每个的server都会属于某个cluster。即使只有一个server,也会隶属于一个cluster。

server共同的任务会被配置在cluster中,无论是传统的HTTP请求,JMS队列或是SOA型的服务。HTTP类型的服务需要特别配置<host>标签,而重定向系统,非HTTP类服务可以使用CanDI型配置。

例子:http servlet的cluster配置

<resinxmlns="http://caucho.com/ns/resin">

  ...

  <cluster id="http">

    <server id="a"address="192.168.1.10" port="6800">

      <http port="8080"/>

    </server>

    <host id="">

      <web-app-deploypath="webapps"

          expand-preserve-fileset="WEB-INF/work/**"/>

    </host>

  </cluster>

</resin>

一个resin cluster也可以用作非HTTP资源。Resin会管理JVM生命周期,watchdog自动重启,系统健康检查以及cluster交互。当然服务也会受自身代码的操纵管理。(废话)

例子:非http servlet的cluster(原文是cluster for httpservlets,应该有问题,此处是non-http配置)

<resinxmlns="http://caucho.com/ns/resin"  xmlns:myservice="urn:java:com.mycom.myservice">

 ...

 <cluster id="http">

    <server id="a"address="192.168.1.10" port="6800"/>

    <myservice:MyServiceaddress="${resin.address}">

      ... <!-- CanDI configuration for theservice -->

    </myservice:MyService>

 </cluster>

</resin>

<cluster>标签形成了一个class-loader资源环境,这个资源可以被所有的host和server中的所有web-apps共享。公共的CDI资源如数据库,队列和缓存可以配置在cluster中,则可以被整个环境所访问。

7.host:HTTP虚拟host

详细配置见:virtualhost configuration

用<host>标签可以配置一个HTTP虚拟host。host的名字用id或host-name属性标识。名字为空的host,如id=””这样的是默认host。

host可以专门用<host>标签配置,也可以用<host-deploy>标签隐式配置。host们共享<host-default>中的公共配置。<host-deploy>中包含一个隐式定义的host的目录,比如说”webapps”目录用于<web-app-deploy>。

<host>标签映射一个HTTP url到一个虚拟host上。这个host可以对应一个或多个<web-app-default>、<web-app>、<web-app-deploy>中的web-app。

对于cluster来说,<host-deploy>可以当做命令行部署的目的地。所有cluster中的server可以继承拓展命令行部署的host。

因为host可定义环境资源,因此它可以定义共享资源如数据库,缓存,CDI服务和队列。host也可以定义URL映射规则

8.Web应用:HTTP/Servlet应用(即静态或动态的应用)

详细配置见:deployconfiguration

一个web-app是一个基于http请求的应用,用servlet来处理请求。web-apps可以在WEB-INF/web.xml和WEB-INF/resin-web.xml中配置。一般用my-web-app.war这样的文件部署或者通过命令行以集群的形式部署,也可以把它按一个文件夹的形式放在webapps目录下。

在resin.xml配置文件中,web-app可以用<web-app>配置在<host>中或用<web-app-deploy>标签的形式隐式配置。web-app共享<web-app-default>中的公共配置。<web-app-deploy>指定一个webapps目录。

web-app标签的范围内也可放置资源环境,我们可以放置共享资源如数据库,缓存,CDI服务和队列。host也可以定义URL映射规则

9.Rewrite:控制URL映射

详细配置见:rewrite/dispatchconfiguration

如果URL需要做变动或想要更美观的URL,你需要控制URL格式或映射URL,resin的rewrite标签可以帮到你。rewrite的功能类似于Apache的mod_rewrite,同时也集成了resin的HTTP和servlet映射功能

举个例子, wiki需要改变易读URL(readable URL)为servlet可识别的URL来读取参数。以下例子中服务允许接收*.PHP,*.gif等后缀的URL请求,所有的请求都可以对应到一个页面。它同时也重定向所有其他的URL到/index.PHP页面

例子:wiki的分发规则

<web-appxmlns="http://caucho.com/ns/resin"  xmlns:resin="urn:java:com.caucho.resin">

<resin:Dispatchtarget="\.(PHP|gif|css|png|js)"/>

<resin:Dispatch>

  <resin:IfFileExists/>

</resin:Dispatch>

<resin:Dispatchregexp="^" target="/index.PHP"/>
 
</web-app>

Resin的负载均衡,http代理和fast-cgi都再重定向规则里配置。这意味着你可以让HTTP请求由一个web-app处理或者一组后端服务集群处理。

例子:负载均衡

<web-appxmlns="http://caucho.com/ns/resin" xmlns:resin="urn:java:com.caucho.resin">

    <resin:LoadBalanceregexp="^/test" cluster="backend-cluster"/>

</web-app>

10.负载均衡:用于对多个后端服务器负载均衡

详细配置说明见:loadbalancing configuration

Resin的HTTP负载均衡基于轮询机制分配后端服务器的HTTP流量,在服务器发生故障时可自动切换。负载均衡基于resin的集群,当有添加删除server的情况时可以自动弹性处理。

负载均衡基于重定向操作,soket参数和超时标准可以在<server>中配置。它可以识别服务器是否有效,超时或过载。

例:负载均衡分发配置

<web-app xmlns="http://caucho.com/ns/resin"  xmlns:resin="urn:java:com.caucho.resin">

    <resin:LoadBalanceregexp="^/test" cluster="backend-cluster"/>
 
</web-app>

例:负载均衡超时时间配置

<resinxmlns="http://caucho.com/ns/resin" xmlns:resin="urn:java:com.caucho.resin">

<clusterid="backend-cluster>           

  <server id="a"address="192.168.1.10" port="6800">

   <load-balance-socket-timeout>60<load-balance-socket-timeout>

   <load-weight>200<load-balance-weight>

  </server>


  ...

11.日志:JDKjava.util.logging

详细配置方法见:loggingconfiguration

Resin的日志打印基于JDK的java.util.logging。另外,watchdog会把控制台输出打印到log/jvm-server.log。

JDK的日志打印模块由两个元素构成:log handler和logger。log handler获得日志信息并处理。Resin进行基本的日志格式化并将日志保存到日志文件中。Java代码中使用JDK logger来发送信息。每一个logger都有一个名字,通常命名为java类的名字,并在日志中打印带着个名字标识的日志。比如"com.caucho.util.ThreadPool"。

通过配置,我们可以设置日志的名称和日志等级。日志等级对所有的log-handler生效,设置之后只有符合等级的日志才会被打印。因此一些handler会收到所有的日志信息,但是logger只会接受info等级的信息。

以下log-handler发送所有日志信息到JVM的控制台输出。它也接受所有info等级的日志和MyBean的finer等级日志。所以控制台输出会包含所有的info和finer日志。

例:基本日志配置

<resinxmlns:resin="urn:java:com.caucho.resin">

  <log-handler name=""level="all" path="stdout:"

               timestamp="[%y-%m-%d%H:%M:%S.%s] {%{thread}} "/>

  <logger name=""level="info"/>

  <logger name="com.foo.MyBean"level="finer"/>
  ...

</resin>


12.resource:数据库,队列,缓存

详细配置见:database configuration

可以用标准XML语法配置所有基于java开发的resource,比如说ActiveMQ队列。Resin可以把resource注册为CDI或JNDI形式,便于应用使用。

一些常用的资源,比如数据库,Resin有专门的标签用于配置。大多数使用基于CDI的形式。

resource和web-app、host、cluster一样使用class-loader环境。因为环境之间是独立的,web-app/foo中的一个foo数据库配置不会影响web-app/bar。

CDI形式的配置是java类与XML之间的直接关联。你可以实例化Java beans,配置他们的CDI标签属性,然后把它注入其他beans。

举个例子,以下配置配置了一个Resin集群式jcache,它可以以@Inject Named的形式注入任意一个应用。也可以说,你的应用可以使用CDI形式获取jcache实例以及其他Resin配置的实例。

ClusterCache实例在集群之间共享缓存数据。

例:jcache配置

<web-app xmlns="http://caucho.com/ns/resin"

       xmlns:resin="urn:java:com.caucho.resin"

        xmlns:ee="urn:java:ee">

  <resin:ClusterCacheee:Named="test-cache" resin:Jndi="cache/test">

   <expire-timeout>1h</expire-timeout>

  </resin:ClusterCache>       

</web-app>

13.健康:监控,操作,与报告

详细配置方法见:healthconfiguration

Resin的健康系统持续监控服务器的健康。

·sensors(传感器):收集Resin内部状态数据。

·meters:保存传感器和JMX数据在内部数据库

·health-checks:评估Resin系统的健康。

·actions:执行具体操作来处理Resin健康问题。如:发送邮件,收集更多细节信息,或重启服务。

·reports:对服务器历史情况生成pdf报告。

a)健康检查

运行健康检查需要几分钟时间。期间会检查JVM状态,返回简单的响应来告知服务器的健康状态是OK,WARNING,CRITICAL或者FATAL。如果你使用Nagios管理工具,这个过程是很类似的。Resin有几项固定的健康检查项,它很直接地描述一个用户自定义健康检查。

健康检查的结果中会记录这次检查是否通过,可以设置触发动作比如说发邮件或重启服务。

在下面这个例子中,JvmDeadlockHealthCheck包含了JVM的线程死锁检测。如果检测到线程死锁,健康检查的结果将会是fatal(致命的)。MemoryTenuredHealthCheck用于检测JVM的空闲空间。如果空闲空间过小,他会强制进行一次堆垃圾回收。如果垃圾回收也失败了,则返回一个critical结果。

例:健康检查

<resinxmlns="http://caucho.com/ns/resin"

         xmlns:resin="urn:java:com.caucho.resin">

<cluster-default>

  <health:JvmDeadlockHealthCheck/>

  <health:MemoryTenuredHealthCheck>

   <memory-free-min>1m</memory-free-min>

  </health:MemoryTenuredHealthCheck>

</cluster-default>

</resin>

b)健康操作

健康操作可以根据健康检查结果,JMX值或者根据定时事件触发。每分钟Resin会检测一次是否符合条件启动某个健康操作。

内置的操作有:重启,生成报告,发送邮件,收集信息比如线程快照,执行自定义PHP页面自定义操作也可以简单地实现。

以下例子展示了当健康检查结果是fatal或持续处于critical状态超过5分钟时对resin执行重启操作。

例:重启操作

<resinxmlns="http://caucho.com/ns/resin"

         xmlns:resin="urn:java:com.caucho.resin">

<cluster-default>

  <health:Restart>

    <health:Or>

      <health:IfHealthFatal/>

      <health:IfHealthCriticaltime="5m"/>

    </health:Or>

  </health:Restart>

... 

</cluster-default>

...

</resin>


c)健康仪

健康仪收集每分钟的数据然后记录在内部数据库里。这些数据用于展示在/resin-admin中或者生成PDF报告。

以下两个例子来自默认的health.xml配置文件,配置中使用内部的JDK MBeans来存储JDK数据。第一个例子保存了操作系统的屋里存储数据。第二个meter每60s保存一次JIT编译时间。

例:JMX meters

<resin xmlns="http://caucho.com/ns/resin"

          xmlns:resin="urn:java:com.caucho.resin">

<cluster-default>

  <health:JmxMeter>

    <name>OS|Memory|Physical MemoryFree</name>

   <objectName>java.lang:type=OperatingSystem</objectName>

   <attribute>FreePhysicalMemorySize</attribute>

  </health:JmxMeter>

 
  <health:JmxDeltaMeter>

    <name>JVM|Compilation|CompilationTime</name>

   <objectName>java.lang:type=Compilation</objectName>

   <attribute>TotalCompilationTime</attribute>

  </health:JmxDeltaMeter>
... 

</cluster-default>

...

</resin>


d)健康报告

PDF报告中可以自定义选择图或测量数据。每个图包含一组检测数据。比如,一个关于线程的图标可以展示JDK处于不同状态的线程数量(runnable,blocke等等),可以表现出Resin的线程池状态。

例:汇总报告

<resinxmlns="http://caucho.com/ns/resin"

         xmlns:resin="urn:java:com.caucho.resin">

<cluster-default>

  <health:MeterGraPHPage>

    <name>Summary</name>

    <period>6h</period>

    <columns>3</columns>

    <graph name="RequestCount">

      <meter>Resin|Http|RequestCount</meter>

    </graph>

    <graph name="Threads">

      <meter>JVM|Thread|JVM ThreadCount</meter>

      <meter>Resin|Thread|ThreadCount</meter>

      <meter>Resin|Thread|Thread IdleCount</meter>

      <meter>JVM|Thread|JVM RunnableCount</meter>

      <meter>JVM|Thread|JVM BlockedCount</meter>

      <meter>JVM|Thread|JVM NativeCount</meter>

      <meter>JVM|Thread|JVM WaitingCount</meter>

    </graph>

</cluster-default>

</resin>


14.安全:身份验证与权限约束

详细配置方法见:securityconfiguration

安全项可以使用CanDI型的资源或者使用servlet <security-constraints>来配置。

·autenticator(身份验证):检查用户的身份证明(密码)。

·登陆:通过HTTP/servlet验证身份并得到证明。

·constraints(权限约束):允许或不允许用户访问某些资源。

以下例子使用基本的表单登陆来保护/admin.jsp页面的访问。只有用户有admin权限才可以访问。<resin: XmlAuthenticator>配置身份验证源(基于文件)。<resin:FormLogin>配置了登陆表单。<resin:Allow>限制了可以访问的页面

例:表单登陆验证

<web-appxmlns:resin="urn:java:com.caucho.resin">

 

  <resin:XmlAuthenticator>

    <user name="admin"

            password="{SSHA}h5QdSulQyqIgYo7BIJ3YfnRSY56kD847"

             role="user,admin"/>

  </resin:XmlAuthenticator>

 

  <resin:FormLogin>

    <login-page>/login.jsp</login-page>

    <error-page>/form_error.jsp</error-page>

  </resin:FormLogin>

 

  <resin:Allowurl-pattern="/admin.jsp">

     <resin:IfUserInRolerole="admin"/>

  </resin:Allow>


</web-app>
原文链接:https://www.f2er.com/xml/297317.html

猜你在找的XML相关文章