[jboss-cvs] JBossAS SVN: r84599 - projects/docs/enterprise/4.3.3/Server_Configuration_Guide/zh-CN.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Sun Feb 22 21:21:41 EST 2009


Author: xhuang at jboss.com
Date: 2009-02-22 21:21:40 -0500 (Sun, 22 Feb 2009)
New Revision: 84599

Modified:
   projects/docs/enterprise/4.3.3/Server_Configuration_Guide/zh-CN/J2EE_Reference_Introduction.po
Log:
update

Modified: projects/docs/enterprise/4.3.3/Server_Configuration_Guide/zh-CN/J2EE_Reference_Introduction.po
===================================================================
--- projects/docs/enterprise/4.3.3/Server_Configuration_Guide/zh-CN/J2EE_Reference_Introduction.po	2009-02-22 12:02:29 UTC (rev 84598)
+++ projects/docs/enterprise/4.3.3/Server_Configuration_Guide/zh-CN/J2EE_Reference_Introduction.po	2009-02-23 02:21:40 UTC (rev 84599)
@@ -9,8 +9,8 @@
 "Project-Id-Version: J2EE_Reference_Introduction\n"
 "Report-Msgid-Bugs-To: http://bugs.kde.org\n"
 "POT-Creation-Date: 2009-01-20 02:37+0000\n"
-"PO-Revision-Date: 2009-02-19 11:16+1000\n"
-"Last-Translator: Xi HUANG <xhuang at redhat.com>\n"
+"PO-Revision-Date: 2009-02-23 12:20+1000\n"
+"Last-Translator: Xi HUANG\n"
 "Language-Team:  <en at li.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -107,8 +107,8 @@
 "Before looking at how JBoss uses JMX as its component bus, it would help to "
 "get a basic overview what JMX is by touching on some of its key aspects."
 msgstr ""
-"通过接触JMX的一些关键概念来了解它的概貌, 对学习JBoss怎样把JMX作为组件总线使用"
-"是有帮助的. "
+"通过接触JMX的一些关键概念来了解它的概貌,对学习JBoss怎样把JMX作为组件总线使用"
+"是有帮助的。"
 
 #. Tag: para
 #: J2EE_Reference_Introduction.xml:32
@@ -123,12 +123,12 @@
 "<emphasis>JMX: Managing J2EE with Java Management Extensions</emphasis> "
 "written by Juha Lindfors (Sams, 2002)."
 msgstr ""
-"JMX组件由Java Management Extensions Instrumentation 和 Agent Specification, "
-"v1.2定义, 你可以在JSR003网页<ulink url=\"http://jcp.org/en/jsr/detail?id=3"
-"\"></ulink>上获得详情. 这个JMX概述部分里的资料来源于JMX instrumentation "
-"specification, 主要集中在JBoss使用最多的概念上. 你可以在Juha Lindfors 所著的"
+"JMX组件由Java Management Extensions Instrumentation 和 Agent Specification,"
+"v1.2定义,你可以在JSR003网页<ulink url=\"http://jcp.org/en/jsr/detail?id=3"
+"\"></ulink>上获得详情。这个JMX概述部分里的资料来源于JMX instrumentation "
+"specification,主要集中在JBoss使用最多的概念上。你可以在Juha Lindfors 所著的"
 "<emphasis>JMX: Managing J2EE with Java Management Extensions</emphasis>"
-"(Sams, 2002)里找到关于JMX及其应用程序更详尽的论述. "
+"(Sams,2002)里找到关于JMX及其应用程序更详尽的论述。"
 
 #. Tag: para
 #: J2EE_Reference_Introduction.xml:35
@@ -202,10 +202,10 @@
 "manageable features, which makes the resource instrumented so that it can be "
 "managed by JMX-compliant applications."
 msgstr ""
-"设备层(Instrumentation Level)定义对实现JMX可管理资源的要求. JMX可管理资源可以"
-"是任何虚拟的东西, 包括应用程序, 服务组件, 设备等等. 可管理资源开放给(expose)"
-"描述它的可管理特征的Java对象或封装器(wrapper), 这使得资源可以设备化从而能被"
-"JMX-compliant应用程序所管理. "
+"设备层(Instrumentation Level)定义对实现JMX可管理资源的要求。JMX可管理资源可以"
+"是任何虚拟的东西,包括应用程序,服务组件,设备等等。可管理资源开放给(expose)"
+"描述它的可管理特征的Java对象或封装器(wrapper),这使得资源可以设备化从而能被"
+"JMX-compliant应用程序所管理。"
 
 #. Tag: para
 #: J2EE_Reference_Introduction.xml:68
@@ -216,9 +216,9 @@
 "standard, dynamic, model, and open. The differences between the various "
 "MBean types is discussed in Managed Beans or MBeans."
 msgstr ""
-"用户用一个或多个managed beans(或MBeans)提供给定资源的设备化. 有四种MBeans的实"
-"现: standard, dynamic, model, 和 open. 我们将在Managed Beans(或MBeans)章节里"
-"讨论不同类型MBean的区别. "
+"用户用一个或多个managed beans(或MBeans)提供给定资源的设备化。有四种MBeans的实"
+"现: standard,dynamic,model,和 open。我们将在Managed Beans(或MBeans)章节里"
+"讨论不同类型MBean的区别。"
 
 #. Tag: para
 #: J2EE_Reference_Introduction.xml:71
@@ -230,9 +230,9 @@
 "change notification mechanism, and can be used for attribute change "
 "notifications, state change notifications, and so on."
 msgstr ""
-"设备层(instrumentation level)也指定了一个提醒机制(notification mechanism). 这"
-"个提醒机制的目的是允许MBeans可以相互通知发生的变化. 这和JavaBean的属性更改提"
-"醒机制相似, 它可以用作属性更改提醒, 状态更改提醒等等. "
+"设备层(instrumentation level)也指定了一个提醒机制(notification mechanism)。这"
+"个提醒机制的目的是允许MBeans可以相互通知发生的变化。这和JavaBean的属性更改提"
+"醒机制相似,它可以用作属性更改提醒,状态更改提醒等等。"
 
 #. Tag: title
 #: J2EE_Reference_Introduction.xml:77
@@ -249,8 +249,8 @@
 "registered with the agent. By default, management agents are located on the "
 "same hosts as their resources. This collocation is not a requirement."
 msgstr ""
-"代理层(agent level)定义对实现代理的要求. 代理负责控制和开放用它注册的被管理资"
-"源. 在缺省情况下, 管理代理和它们的资源都在相同的主机里. 但这种安排并不是必需"
+"代理层(agent level)定义对实现代理的要求。代理负责控制和开放用它注册的被管理资"
+"源。在缺省情况下,管理代理和它们的资源都在相同的主机里。但这种安排并不是必需"
 "的."
 
 #. Tag: para
@@ -262,8 +262,8 @@
 "communications connector. JBoss provides both an html adaptor as well as an "
 "RMI adaptor."
 msgstr ""
-"代理要求(agent requirements)利用设备层来定义标准的MBeanServer管理代理, 它支持"
-"服务和通信连接器(communications connector). JBoss提供html和RMI适配器."
+"代理要求(agent requirements)利用设备层来定义标准的MBeanServer管理代理,它支持"
+"服务和通信连接器(communications connector)。JBoss提供html和RMI适配器."
 
 #. Tag: para
 #: J2EE_Reference_Introduction.xml:84
@@ -274,11 +274,11 @@
 "JBoss server uses the MBeanServer. A JMX agent does not need to know which "
 "resources it will serve. JMX manageable resources may use any JMX agent that "
 "offers the services it requires."
-msgstr "当Java Virtual Machine (JVM)可用时, "
+msgstr "当Java Virtual Machine (JVM)可用时,"
 
 #. Tag: para
 #: J2EE_Reference_Introduction.xml:87
-#, fuzzy, no-c-format
+#, no-c-format
 msgid ""
 "Managers interact with an agent&#39;s MBeans through a protocol adaptor or "
 "connector, as described in the <xref linkend=\"An_Introduction_to_JMX-"
@@ -286,9 +286,9 @@
 "to know anything about the connectors or management applications that "
 "interact with the agent and its MBeans."
 msgstr ""
-"如下一部分内容里的<xref linkend=\"ch2.distlevel.sect\"/>所描述的那样, 管理者"
-"和代理的MBeans通过协议适配器或者连接器来相互作用. 代理不需要知道它和它的"
-"MBeans相互作用的连接器或管理应用程序的任何东西. "
+"如下一部分内容里的<xref linkend=\"ch2.distlevel.sect\"/>所描述的那样,管理者"
+"和代理的MBeans通过协议适配器或者连接器来相互作用。代理不需要知道它和它的"
+"MBeans相互作用的连接器或管理应用程序的任何东西。"
 
 #. Tag: title
 #: J2EE_Reference_Introduction.xml:93
@@ -298,7 +298,7 @@
 
 #. Tag: para
 #: J2EE_Reference_Introduction.xml:94
-#, fuzzy, no-c-format
+#, no-c-format
 msgid ""
 "The JMX specification notes that a complete definition of the distributed "
 "services level is beyond the scope of the initial version of the JMX "
@@ -310,10 +310,9 @@
 "highlight the intended functionality of the distributed services level as "
 "discussed in the current JMX specification."
 msgstr ""
-"JMX规格注明了分布服务层的完整定义是超出JMX规范初始版本的范围的. 这由<xref "
-"linkend=\"ch2.jmxrel.fig\"/>里用横线标出的组件盒(component boxes)所指出. 这一"
-"层的目的是定义用来实现JMX管理程序或管理者所需的接口. 下述各点强调了在目前的"
-"JMX规范里所讨论的分布服务层的intended functionality. "
+"JMX 规格注明了分布服务层的完整定义是超出 JMX 规范初始版本的范围的。这由 <xref linkend=\"An_Introduction_to_JMX-"
+"The_Relationship_between_the_components_of_the_JMX_architecture\"/> 里用横线标出的组件盒(component boxes)所指出。这一"
+"层的目的是定义用来实现 JMX 管理程序或管理者所需的接口。下述各点强调了在目前的 JMX 规范里所讨论的分布服务层的功能。"
 
 #. Tag: para
 #: J2EE_Reference_Introduction.xml:99
@@ -332,7 +331,7 @@
 "HTML or SNMP)"
 msgstr ""
 "通过把语义匹配到data-rich协议(如HTML或SNMP)的构件来开放(exposes)JMX代理及其"
-"MBeans的一个管理视图. "
+"MBeans的一个管理视图。"
 
 #. Tag: para
 #: J2EE_Reference_Introduction.xml:109
@@ -344,11 +343,11 @@
 
 #. Tag: para
 #: J2EE_Reference_Introduction.xml:114
-#, fuzzy, no-c-format
+#, no-c-format
 msgid ""
 "Consolidates management information coming from numerous JMX agents into "
 "logical views that are relevant to the end user&#39;s business operations"
-msgstr "把从大量JMX代理来的管理信息并入到和最终用户的商业操作相关的逻辑视图里."
+msgstr "把从大量 JMX 代理来的管理信息并入到和最终用户的商业操作相关的逻辑视图里。"
 
 #. Tag: para
 #: J2EE_Reference_Introduction.xml:119
@@ -365,7 +364,7 @@
 "components can be expanded to provide a complete management application."
 msgstr ""
 "分布服务层的组件有意允许对代理网络和它们的资源的协同管理(cooperative "
-"management). 这些组件可以被扩展为一个完整的管理程序."
+"management)。这些组件可以被扩展为一个完整的管理程序."
 
 #. Tag: title
 #: J2EE_Reference_Introduction.xml:130
@@ -379,13 +378,13 @@
 msgid ""
 "This section offers an overview of the instrumentation and agent level "
 "components. The instrumentation level components include the following:"
-msgstr "这部分是关于设备和代理层组件的概述. 设备层组件包括了:"
+msgstr "这部分是关于设备和代理层组件的概述。设备层组件包括了:"
 
 #. Tag: para
 #: J2EE_Reference_Introduction.xml:136
 #, no-c-format
 msgid "MBeans (standard, dynamic, open, and model MBeans)"
-msgstr "MBeans (standard, dynamic, open, 和 model MBeans)"
+msgstr "MBeans (standard,dynamic,open,和 model MBeans)"
 
 #. Tag: para
 #: J2EE_Reference_Introduction.xml:141
@@ -432,7 +431,7 @@
 "resource exposes all necessary information and operations that a management "
 "application needs to control the resource."
 msgstr ""
-"MBean是一个Java对象, 它实现了一个标准MBean接口和遵循相关的设计模式. 资源的"
+"MBean是一个Java对象,它实现了一个标准MBean接口和遵循相关的设计模式。资源的"
 "MBean 开放(expose)管理程序需要用来控制资源的所有必需的信息和操作."
 
 #. Tag: para
@@ -461,9 +460,9 @@
 
 #. Tag: para
 #: J2EE_Reference_Introduction.xml:191
-#, fuzzy, no-c-format
+#, no-c-format
 msgid "The constructors for the MBean&#39;s Java class"
-msgstr "MBean's Java类的构造函数"
+msgstr "MBean Java 类的构造函数"
 
 #. Tag: para
 #: J2EE_Reference_Introduction.xml:196
@@ -480,7 +479,7 @@
 "interface. This is the most common type of MBean used by JBoss."
 msgstr ""
 "<emphasis role=\"bold\">Standard MBeans</emphasis>: 它们使用简单的JavaBean风"
-"格的命名规则和被静态地定义的管理接口. 这是JBoss所使用的最常见类型的MBean."
+"格的命名规则和被静态地定义的管理接口。这是JBoss所使用的最常见类型的MBean."
 
 #. Tag: para
 #: J2EE_Reference_Introduction.xml:206
@@ -493,8 +492,8 @@
 "where the components to be managed are not known until runtime."
 msgstr ""
 "<emphasis role=\"bold\">Dynamic MBeans</emphasis>: 它们必须实现"
-"<literal>javax.management.DynamicMBean</literal>接口, 而且当组件为了最大的灵"
-"活性而被实例化时, 它们在运行时开放它们的管理接口. JBoss在被管理的组件直到运行"
+"<literal>javax.management.DynamicMBean</literal>接口,而且当组件为了最大的灵"
+"活性而被实例化时,它们在运行时开放它们的管理接口。JBoss在被管理的组件直到运行"
 "时才被获知的情况下使用Dynamic MBeans."
 
 #. Tag: para
@@ -505,8 +504,8 @@
 "dynamic MBeans. Open MBeans rely on basic, self-describing, user-friendly "
 "data types for universal manageability."
 msgstr ""
-"<emphasis role=\"bold\">Open MBeans</emphasis>: 它们是dynamic MBeans的扩展.  "
-"Open MBeans依赖于易于管理的简单的, 自我描述的, 用户友好的数据类型. "
+"<emphasis role=\"bold\">Open MBeans</emphasis>: 它们是dynamic MBeans的扩展。 "
+"Open MBeans依赖于易于管理的简单的,自我描述的,用户友好的数据类型。"
 
 #. Tag: para
 #: J2EE_Reference_Introduction.xml:216
@@ -519,8 +518,8 @@
 "are an implementation of Model MBeans."
 msgstr ""
 "<emphasis role=\"bold\">Model MBeans</emphasis>: 它们也是 dynamic MBeans的扩"
-"展.  Model MBeans必须实现<literal>javax.management.modelmbean.ModelMBean</"
-"literal>接口. Model MBeans通过提供缺省行为(default behavior)简化了资源的设备"
+"展。 Model MBeans必须实现<literal>javax.management.modelmbean.ModelMBean</"
+"literal>接口。Model MBeans通过提供缺省行为(default behavior)简化了资源的设备"
 "化.JBoss XMBeans是Model MBeans的一个实现."
 
 #. Tag: para
@@ -552,11 +551,11 @@
 "specification also defines the operations on the MBean server that allow for "
 "the registration of notification listeners."
 msgstr ""
-"JMX Notifications 是Java事件模型的扩展. MBean 服务器和 MBeans 都可以发送通知"
-"来提供信息. JMX规格定义了 <literal>javax.management</literal>包和"
-"<literal>Notification</literal>事件对象, <literal>NotificationBroadcaster</"
-"literal>事件发送者, 以及<literal>NotificationListener</literal> 事件接收者接"
-"口. 这个规格也定义了MBean服务器上允许notification listeners注册的操作. "
+"JMX Notifications 是Java事件模型的扩展。MBean 服务器和 MBeans 都可以发送通知"
+"来提供信息。JMX规格定义了 <literal>javax.management</literal>包和"
+"<literal>Notification</literal>事件对象,<literal>NotificationBroadcaster</"
+"literal>事件发送者,以及<literal>NotificationListener</literal> 事件接收者接"
+"口。这个规格也定义了MBean服务器上允许notification listeners注册的操作。"
 
 #. Tag: title
 #: J2EE_Reference_Introduction.xml:234
@@ -566,7 +565,7 @@
 
 #. Tag: para
 #: J2EE_Reference_Introduction.xml:235
-#, fuzzy, no-c-format
+#, no-c-format
 msgid ""
 "There is a collection of metadata classes that describe the management "
 "interface of an MBean. Users can obtain a common metadata view of any of the "
@@ -578,11 +577,11 @@
 "writable, or both. The metadata for an operation contains the signature of "
 "its parameter and return types."
 msgstr ""
-"这是一个元数据类(metadata classes)的集合, 它描述了MBean的管理接口. 通过查询"
-"MBeans所注册的 MBean服务器, 用户可以获得任何四种MBean 类型之一的通用元数据"
-"(metadata)视图. 元数据类包含了MBean的属性, 操作, 通知, 和构造函数, 以及它们的"
-"名字, 描述以及独有的特性. 例如, 某属性的一个特性是是否可读的, 可写还是两者都"
-"可的. 操作(operation)的元数据包含了自身参数和返回类型的签名. "
+"这是一个元数据类(metadata classes)的集合,它描述了 MBean 的管理接口。通过查询"
+"MBeans所注册的 MBean服务器,用户可以获得任何四种 MBean 类型之一的通用元数据"
+"(metadata)视图。元数据类包含了 MBean 的属性、操作、通知和构造函数,以及它们的"
+"名字、描述以及独有的特性。例如,某属性的一个特性是是否可读的、可写还是两者都"
+"可的。操作(operation)的元数据包含了自身参数和返回类型的签名。"
 
 #. Tag: para
 #: J2EE_Reference_Introduction.xml:238
@@ -594,9 +593,9 @@
 "management application that knows how to access the extended information of "
 "a particular type of MBean is able to do so."
 msgstr ""
-"不同类型的MBeans扩展了元数据类(metadata classes)来提供其他所需的信息. 这个常"
-"见的继承使标准信息成为可用的而不需要顾及MBean的类型. 懂得怎样访问特定类型"
-"MBean 的扩展信息的管理应用程序能够做到这一点. "
+"不同类型的MBeans扩展了元数据类(metadata classes)来提供其他所需的信息。这个常"
+"见的继承使标准信息成为可用的而不需要顾及MBean的类型。懂得怎样访问特定类型"
+"MBean 的扩展信息的管理应用程序能够做到这一点。"
 
 #. Tag: title
 #: J2EE_Reference_Introduction.xml:244
@@ -617,10 +616,10 @@
 "available in the MBean server interface. This provides a loose coupling "
 "between management applications and the MBeans they manage."
 msgstr ""
-"代理层的一个关键组件是managed bean服务器. 它的功能是通过 <literal>javax."
-"management.MBeanServer</literal>的实例来开放的. MBean服务器是MBeans 的注册"
-"表, 它让管理应用程序可以使用MBean 管理接口. MBean 从来都不会自己来直接开放"
-"MBean对象; 相反, 它的管理接口通过MBean服务器接口里可用的元数据和操作来开放. "
+"代理层的一个关键组件是managed bean服务器。它的功能是通过 <literal>javax."
+"management.MBeanServer</literal>的实例来开放的。MBean服务器是MBeans 的注册"
+"表,它让管理应用程序可以使用MBean 管理接口。MBean 从来都不会自己来直接开放"
+"MBean对象; 相反,它的管理接口通过MBean服务器接口里可用的元数据和操作来开放。"
 "这在管理应用程序和它们所管理的MBeans之间提供了一个松耦合(loose coupling)."
 
 #. Tag: para
@@ -629,7 +628,7 @@
 msgid ""
 "MBeans can be instantiated and registered with the MBeanServer by the "
 "following:"
-msgstr "MBeans可以用MBeanServer实例化和注册, 如下所示:"
+msgstr "MBeans可以用MBeanServer实例化和注册,如下所示:"
 
 #. Tag: para
 #: J2EE_Reference_Introduction.xml:253
@@ -659,8 +658,8 @@
 "operations available on MBeans through the MBean server include the "
 "following:"
 msgstr ""
-"当你注册一个MBean, 你必需给它分配一个唯一的对象名. 然后这个对象名就成为管理应"
-"用程序识别执行管理操作的对象的唯一句柄. MBeans 上通过MBean服务器的可用操作如"
+"当你注册一个MBean,你必需给它分配一个唯一的对象名。然后这个对象名就成为管理应"
+"用程序识别执行管理操作的对象的唯一句柄。MBeans 上通过MBean服务器的可用操作如"
 "下: "
 
 #. Tag: para
@@ -695,7 +694,7 @@
 
 #. Tag: para
 #: J2EE_Reference_Introduction.xml:298
-#, fuzzy, no-c-format
+#, no-c-format
 msgid ""
 "Protocol adaptors and connectors are required to access the MBeanServer from "
 "outside the agent&#39;s JVM. Each adaptor provides a view via its protocol "
@@ -708,11 +707,12 @@
 "versions of the specification will address the need for remote access "
 "protocols in standard ways."
 msgstr ""
-"协议适配器和连接器被要求在代理的JVM之外来访问MBeanServer. 每个适配器通过它的"
-"协议提供一个它所连接的MBean服务器上注册的所有的MBeans的视图. 允许用Web浏览器"
-"查看和编辑MBeans 的HTML适配器就是一个适配器的例子. 如<xref linkend=\"ch2."
-"jmxrel.fig\"/>所指出的, 目前的JMX规格并没有定义协议适配器. 这个规格的后续版本"
-"将解决关于使用标准方法的远程访问协议的需求."
+"协议适配器和连接器被要求在代理的 JVM 之外来访问 MBeanServer。每个适配器通过它的"
+"协议提供一个它所连接的 MBean 服务器上注册的所有的 MBean 的视图。允许用Web浏览器"
+"查看和编辑 MBean 的 HTML 适配器就是一个适配器的例子。如 <xref linkend="
+"\"An_Introduction_to_JMX-"
+"The_Relationship_between_the_components_of_the_JMX_architecture\"/> 所指出的,目前的JMX规格并没有定义协议适配器。这个规格的后续版本"
+"将解决关于使用标准方法的远程访问协议的需求。"
 
 #. Tag: para
 #: J2EE_Reference_Introduction.xml:301
@@ -725,7 +725,7 @@
 "application to connect to an agent transparently through the network, "
 "regardless of the protocol. The specification of the remote management "
 "interface will be addressed in a future version of the JMX specification."
-msgstr "连接器(connector)是管理应用程序使用的来提供公用API的接口, "
+msgstr "连接器(connector)是管理应用程序使用的来提供公用API的接口,"
 
 #. Tag: para
 #: J2EE_Reference_Introduction.xml:304
@@ -738,7 +738,7 @@
 "RMI adaptor."
 msgstr ""
 "适配器(Adaptors)和连接器(connectors)使所有MBean服务器操作对于远程管理应用程序"
-"可用. 对于可从JVM外部管理的代理, 它必须包含至少一个协议适配器或者连接器. "
+"可用。对于可从JVM外部管理的代理,它必须包含至少一个协议适配器或者连接器。"
 "JBoss目前包含了一个自定义的HTML适配器实现和JBoss RMI适配器."
 
 #. Tag: title
@@ -758,9 +758,9 @@
 "functionality to be controlled through the MBean server. The JMX "
 "specification defines the following agent services:"
 msgstr ""
-"JMX代理服务是支持MBean服务器里注册的MBeans上标准操作的对象. 对管理服务的支"
-"持, 可以帮助你建立更强大的管理解决方案. 代理服务经常就是MBeans自己, 它允许通"
-"过MBean服务器来控制代理和它们的功能. JMX规格定义了下列的代理服务:"
+"JMX代理服务是支持MBean服务器里注册的MBeans上标准操作的对象。对管理服务的支"
+"持,可以帮助你建立更强大的管理解决方案。代理服务经常就是MBeans自己,它允许通"
+"过MBean服务器来控制代理和它们的功能。JMX规格定义了下列的代理服务:"
 
 #. Tag: para
 #: J2EE_Reference_Introduction.xml:316
@@ -776,14 +776,14 @@
 
 #. Tag: para
 #: J2EE_Reference_Introduction.xml:321
-#, fuzzy, no-c-format
+#, no-c-format
 msgid ""
 "<emphasis role=\"bold\">Monitor services</emphasis>: These observe an MBean "
 "attribute&#39;s numerical or string value, and can notify other objects of "
 "several types of changes in the target."
 msgstr ""
-"<emphasis role=\"bold\">Monitor services</emphasis>: 它们观察MBean属性的数字"
-"或字符串值, 而且能够向其他对象通知目标的不同类型的变化. "
+"<emphasis role=\"bold\">Monitor services</emphasis>:它们观察 MBean 属性的数字"
+"或字符串值,而且能够向其他对象通知目标的不同类型的变化。"
 
 #. Tag: para
 #: J2EE_Reference_Introduction.xml:326
@@ -814,7 +814,7 @@
 "Any JMX-compliant implementation will provide all of these agent services. "
 "However, JBoss does not rely on any of these standard agent services."
 msgstr ""
-"任何JMX兼容的实现都将提供所有这些代理服务. 然而, JBoss不依赖于这些标准的代理"
+"任何JMX兼容的实现都将提供所有这些代理服务。然而,JBoss不依赖于这些标准的代理"
 "服务."
 
 #. Tag: title
@@ -831,7 +831,7 @@
 
 #. Tag: para
 #: J2EE_Reference_Introduction.xml:349
-#, fuzzy, no-c-format
+#, no-c-format
 msgid ""
 "JBoss employs a class loading architecture that facilitates sharing of "
 "classes across deployment units and hot deployment of services and "
@@ -839,9 +839,9 @@
 "need to understand the nature of Java&#39;s type system and how class "
 "loaders fit in."
 msgstr ""
-"JBoss 采用了一个利用部署单元和服务及应用程序热部署之间共享的类加载架构. 在讨"
-"论JBoss特定的类加载模型之前, 我们需要理解Java的类型体系的性质和类加载器怎样适"
-"应它."
+"JBoss 采用了一个利用部署单元和服务及应用程序热部署之间共享的类加载架构。在讨"
+"论JBoss特定的类加载模型之前,我们需要理解 Java 的类型体系的性质和类加载器怎样适"
+"应它。"
 
 #. Tag: title
 #: J2EE_Reference_Introduction.xml:355
@@ -863,15 +863,15 @@
 "environments in which classes may be loaded from arbitrary locations would "
 "be type-safe."
 msgstr ""
-"类加载(Class loading)是所有服务器架构的基础部分. 任何服务和它们的支持类必须装"
-"载到服务器框架里. 由于Java的强类型(strongly typed)性质, 这可能会是个问题. 大"
-"部分开发者知道Java里类的类型是一个类全名的函数. 然而这个类型也是用来定义"
-"<literal>java.lang.ClassLoader</literal>的一个函数. 类型的这种额外的限制对于"
+"类加载(Class loading)是所有服务器架构的基础部分。任何服务和它们的支持类必须装"
+"载到服务器框架里。由于Java的强类型(strongly typed)性质,这可能会是个问题。大"
+"部分开发者知道Java里类的类型是一个类全名的函数。然而这个类型也是用来定义"
+"<literal>java.lang.ClassLoader</literal>的一个函数。类型的这种额外的限制对于"
 "确保类从任何位置加载都很安全(type-safe)来说是必要的."
 
 #. Tag: para
 #: J2EE_Reference_Introduction.xml:359
-#, fuzzy, no-c-format
+#, no-c-format
 msgid ""
 "However, in a dynamic environment like an application server, and especially "
 "JBoss with its support for hot deployment are that class cast exceptions, "
@@ -879,15 +879,15 @@
 "more static class loading contexts. Let&#39;s take a look at the meaning of "
 "each of these exceptions and how they can happen."
 msgstr ""
-"然而, 在应用程序服务器这样的动态的环境里, 特别是支持热部署的JBoss里, 会出现类"
-"转换异常, 链接错误和非法访问错误, 这些在其他静态的类加载上下文里是看不到的. "
-"让我们看看这些异常的含义以及它们是怎样发生的."
+"然而,在应用程序服务器这样的动态的环境里,特别是支持热部署的 JBoss 里,会出现类"
+"转换异常、链接错误和非法访问错误,这些在其他静态的类加载上下文里是看不到的。"
+"让我们看看这些异常的含义以及它们是怎样发生的。"
 
 #. Tag: title
 #: J2EE_Reference_Introduction.xml:363
-#, fuzzy, no-c-format
+#, no-c-format
 msgid "ClassCastExceptions - I&#39;m Not Your Type"
-msgstr "ClassCastExceptions - I'm Not Your Type"
+msgstr "ClassCastExceptions - 类型不匹配"
 
 #. Tag: para
 #: J2EE_Reference_Introduction.xml:364
@@ -899,12 +899,12 @@
 "<literal>List</literal> into which a <literal>URL</literal> was placed:"
 msgstr ""
 "<literal>java.lang.ClassCastException</literal> 在试图转换不兼容类型的实例时"
-"发生. 一个简单的示例就是试图从存放<literal>URL</literal>的<literal>List</"
+"发生。一个简单的示例就是试图从存放<literal>URL</literal>的<literal>List</"
 "literal>里获取一个<literal>String</literal>:"
 
 #. Tag: programlisting
 #: J2EE_Reference_Introduction.xml:367
-#, fuzzy, no-c-format
+#, no-c-format
 msgid ""
 "ArrayList array = new ArrayList();\n"
 "array.add(new URL(\"file:/tmp\"));\n"
@@ -918,11 +918,11 @@
 "String url = (String) array.get(0);\n"
 "\n"
 "java.lang.ClassCastException: java.net.URL\n"
-"at org.jboss.chap2.ex0.ExCCEa.main(Ex1CCE.java:16)"
+"at org.jboss.book.jmx.ex0.ExCCEa.main(Ex1CCE.java:16)"
 
 #. Tag: para
 #: J2EE_Reference_Introduction.xml:368
-#, fuzzy, no-c-format
+#, no-c-format
 msgid ""
 "The <literal>ClassCastException</literal> tells you that the attempt to cast "
 "the array element to a <literal>String</literal> failed because the actual "
@@ -935,12 +935,10 @@
 "The_ExCCEc_class_used_to_demonstrate_ClassCastException_due_to_duplicate_class_loaders"
 "\"/>."
 msgstr ""
-"<literal>ClassCastException</literal> 告诉当你试图把数组元素转换到"
-"<literal>String</literal>时失败, 因为实际的类型是<literal>URL</literal>. 然而"
-"这个示例并不是我们感兴趣的. 来考虑一个被不同类加载器加载的JAR文件. 虽然通过不"
-"同的类加载器加载的类从字节码来说是一样的, 但是它们被Java 类型体系视作完全不同"
-"的类型. <xref linkend=\"ch2.duploader.ex\"/>里的代码说明了这种情况下的一个例"
-"子."
+"<literal>ClassCastException</literal> 告诉当你试图把数组元素转换到 <literal>String</literal> 时失败,因为实际的类型是<literal>URL</literal>。然而我们并不对这个示例感兴趣。来考虑一个被不同类加载器加载的 JAR 文件。虽然通过不同的类加载器加载的类从字节码来说是一样的,但是它们被 Java 类型体系视作完全不同的类型。<xref linkend=\"ClassCastExceptions___Im_Not_Your_Type-"
+"The_ExCCEc_class_used_to_demonstrate_ClassCastException_due_to_duplicate_class_loaders"
+"\"/> 里的代码说明了这种情况下的一个例"
+"子。"
 
 #. Tag: title
 #: J2EE_Reference_Introduction.xml:371
@@ -1019,12 +1017,76 @@
 "    }\n"
 "}"
 msgstr ""
+"package org.jboss.book.jmx.ex0;\n"
+"\n"
+"import java.io.File;\n"
+"import java.net.URL;\n"
+"import java.net.URLClassLoader;\n"
+"import java.lang.reflect.Method;\n"
+"\n"
+"import org.apache.log4j.Logger;\n"
+"\n"
+"import org.jboss.util.ChapterExRepository;\n"
+"import org.jboss.util.Debug;\n"
+"\n"
+"/**\n"
+" * An example of a ClassCastException that\n"
+" * results from classes loaded through\n"
+" * different class loaders.\n"
+" * @author Scott.Stark at jboss.org\n"
+" * @version $Revision: 1.1 $\n"
+" */\n"
+"public class ExCCEc\n"
+"{\n"
+"    public static void main(String[] args) throws Exception\n"
+"    {\n"
+"        ChapterExRepository.init(ExCCEc.class);\n"
+"\n"
+"        String chapDir = System.getProperty(\"j2eechapter.dir\");\n"
+"        Logger ucl0Log = Logger.getLogger(\"UCL0\");\n"
+"        File jar0 = new File(chapDir+\"/j0.jar\");\n"
+"        ucl0Log.info(\"jar0 path: \"+jar0.toString());\n"
+"        URL[] cp0 = {jar0.toURL()};\n"
+"        URLClassLoader ucl0 = new URLClassLoader(cp0);\n"
+"        Thread.currentThread().setContextClassLoader(ucl0);\n"
+"        Class objClass = ucl0.loadClass(\"org.jboss.book.jmx.ex0.ExObj\");\n"
+"        StringBuffer buffer = new\n"
+"            StringBuffer(\"ExObj Info\");\n"
+"        Debug.displayClassInfo(objClass, buffer, false);\n"
+"        ucl0Log.info(buffer.toString());\n"
+"        Object value = objClass.newInstance();\n"
+"        \n"
+"        File jar1 = new File(chapDir+\"/j0.jar\");\n"
+"        Logger ucl1Log = Logger.getLogger(\"UCL1\");\n"
+"        ucl1Log.info(\"jar1 path: \"+jar1.toString());\n"
+"        URL[] cp1 = {jar1.toURL()};\n"
+"        URLClassLoader ucl1 = new URLClassLoader(cp1);\n"
+"        Thread.currentThread().setContextClassLoader(ucl1);\n"
+"        Class ctxClass2 = ucl1.loadClass(\"org.jboss.book.jmx.ex0.ExCtx\");\n"
+"        buffer.setLength(0);\n"
+"        buffer.append(\"ExCtx Info\");\n"
+"        Debug.displayClassInfo(ctxClass2, buffer, false);\n"
+"        ucl1Log.info(buffer.toString());\n"
+"        Object ctx2 = ctxClass2.newInstance();\n"
+"        \n"
+"        try {\n"
+"            Class[] types = {Object.class};\n"
+"            Method useValue =\n"
+"                ctxClass2.getMethod(\"useValue\", types);\n"
+"            Object[] margs = {value};\n"
+"            useValue.invoke(ctx2, margs);\n"
+"        } catch(Exception e) {\n"
+"            ucl1Log.error(\"Failed to invoke ExCtx.useValue\", e);\n"
+"            throw e;\n"
+"        }\n"
+"    }\n"
+"}"
 
 #. Tag: title
 #: J2EE_Reference_Introduction.xml:373
 #, no-c-format
 msgid "The ExCtx, ExObj, and ExObj2 classes used by the examples"
-msgstr "示例所使用的 ExCtx, ExObj, 和 ExObj2 类."
+msgstr "示例所使用的 ExCtx,ExObj,和 ExObj2 类."
 
 #. Tag: programlisting
 #: J2EE_Reference_Introduction.xml:374
@@ -1089,6 +1151,64 @@
 "    }\n"
 "}"
 msgstr ""
+"package org.jboss.book.jmx.ex0;\n"
+"\n"
+"import java.io.IOException;\n"
+"import org.apache.log4j.Logger;\n"
+"import org.jboss.util.Debug;\n"
+"\n"
+"/**\n"
+" * A classes used to demonstrate various class\n"
+" * loading issues\n"
+" * @author Scott.Stark at jboss.org\n"
+" * @version $Revision: 1.1 $\n"
+" */\n"
+"public class ExCtx\n"
+"{\n"
+"    ExObj value;\n"
+"    \n"
+"    public ExCtx() \n"
+"        throws IOException\n"
+"    {\n"
+"        value = new ExObj();\n"
+"        Logger log = Logger.getLogger(ExCtx.class);\n"
+"        StringBuffer buffer = new StringBuffer(\"ctor.ExObj\");\n"
+"        Debug.displayClassInfo(value.getClass(), buffer, false);\n"
+"        log.info(buffer.toString());\n"
+"        ExObj2 obj2 = value.ivar;\n"
+"        buffer.setLength(0);\n"
+"        buffer = new StringBuffer(\"ctor.ExObj.ivar\");\n"
+"        Debug.displayClassInfo(obj2.getClass(), buffer, false);\n"
+"        log.info(buffer.toString());\n"
+"    }\n"
+"\n"
+"    public Object getValue()\n"
+"    {\n"
+"        return value;\n"
+"    }\n"
+"\n"
+"    public void useValue(Object obj) \n"
+"        throws Exception\n"
+"    {\n"
+"        Logger log = Logger.getLogger(ExCtx.class);\n"
+"        StringBuffer buffer = new\n"
+"            StringBuffer(\"useValue2.arg class\");\n"
+"        Debug.displayClassInfo(obj.getClass(), buffer, false);\n"
+"        log.info(buffer.toString());\n"
+"        buffer.setLength(0);\n"
+"        buffer.append(\"useValue2.ExObj class\");\n"
+"        Debug.displayClassInfo(ExObj.class, buffer, false);\n"
+"        log.info(buffer.toString());\n"
+"        ExObj ex = (ExObj) obj;\n"
+"    }\n"
+"\n"
+"    void pkgUseValue(Object obj) \n"
+"        throws Exception\n"
+"    {\n"
+"        Logger log = Logger.getLogger(ExCtx.class);\n"
+"        log.info(\"In pkgUseValue\");\n"
+"    }\n"
+"}"
 
 #. Tag: programlisting
 #: J2EE_Reference_Introduction.xml:375
@@ -1108,6 +1228,19 @@
 "    public ExObj2 ivar = new ExObj2();\n"
 "}"
 msgstr ""
+"package org.jboss.book.jmx.ex0;\n"
+"\n"
+"import java.io.Serializable;\n"
+"\n"
+"/**\n"
+" * @author Scott.Stark at jboss.org\n"
+" * @version $Revision: 1.1 $\n"
+" */\n"
+"public class ExObj\n"
+"    implements Serializable\n"
+"{\n"
+"    public ExObj2 ivar = new ExObj2();\n"
+"}"
 
 #. Tag: programlisting
 #: J2EE_Reference_Introduction.xml:376
@@ -1126,10 +1259,22 @@
 "{\n"
 "}"
 msgstr ""
+"package org.jboss.book.jmx.ex0;\n"
+"\n"
+"import java.io.Serializable;\n"
+"\n"
+"/**\n"
+" * @author Scott.Stark at jboss.org\n"
+" * @version $Revision: 1.1 $\n"
+" */\n"
+"public class ExObj2 \n"
+"    implements Serializable\n"
+"{\n"
+"}"
 
 #. Tag: para
 #: J2EE_Reference_Introduction.xml:377
-#, fuzzy, no-c-format
+#, no-c-format
 msgid ""
 "The <literal>ExCCEc.main</literal> method uses reflection to isolate the "
 "classes that are being loaded by the class loaders <literal>ucl0</literal> "
@@ -1137,13 +1282,13 @@
 "setup to load classes from the <literal>output/jmx/j0.jar</literal>, the "
 "contents of which are:"
 msgstr ""
-"<literal>ExCCEc.main</literal>方法使用了reflection 来隔离由类加载器"
-"<literal>ucl0</literal> 和 <literal>ucl1</literal>从应用程序类加载器里加载的"
-"类. 它们都设置成从<literal>output/chap2/j0.jar</literal>里加载类, 内容如下:"
+"<literal>ExCCEc.main</literal> 方法使用了反射(reflection)来隔离由类加载器"
+"<literal>ucl0</literal> 和 <literal>ucl1</literal> 从应用程序类加载器里加载的"
+"类。它们都设置成从 <literal>output/chap2/j0.jar</literal> 里加载类,内容如下:"
 
 #. Tag: programlisting
 #: J2EE_Reference_Introduction.xml:380
-#, fuzzy, no-c-format
+#, no-c-format
 msgid ""
 "[examples]$ jar -tf output/jmx/j0.jar\n"
 "...\n"
@@ -1151,15 +1296,15 @@
 "org/jboss/book/jmx/ex0/ExObj.class\n"
 "org/jboss/book/jmx/ex0/ExObj2.class"
 msgstr ""
-"[examples]$ jar -tf output/chap2/j0.jar\n"
+"[examples]$ jar -tf output/jmx/j0.jar\n"
 "...\n"
-"org/jboss/chap2/ex0/ExCtx.class\n"
-"org/jboss/chap2/ex0/ExObj.class\n"
-"org/jboss/chap2/ex0/ExObj2.class"
+"org/jboss/book/jmx/ex0/ExCtx.class\n"
+"org/jboss/book/jmx/ex0/ExObj.class\n"
+"org/jboss/book/jmx/ex0/ExObj2.class"
 
 #. Tag: para
 #: J2EE_Reference_Introduction.xml:381
-#, fuzzy, no-c-format
+#, no-c-format
 msgid ""
 "We will run an example that demonstrates how a class cast exception can "
 "occur and then look at the specific issue with the example. See <xref "
@@ -1167,13 +1312,14 @@
 "examples accompanying the book, and then run the example from within the "
 "examples directory using the following command:"
 msgstr ""
-"我们将运行一个示例来演示类转换异常是怎样发生的, 然后再来看看这个示例的其他问"
-"题. 请参考<xref linkend=\"appendix-install\"/>来安装本书所带的示例, 然后用下"
-"面的命令来运行examples 目录里的示例:"
+"我们将运行一个示例来演示类转换异常是怎样发生的,然后再来看看这个示例的其他问"
+"题。请参考 <xref "
+"linkend=\"Book_Example_Installation\"/> 来安装本书所带的示例,然后用下"
+"面的命令来运行 examples 目录里的示例:"
 
 #. Tag: programlisting
 #: J2EE_Reference_Introduction.xml:384
-#, fuzzy, no-c-format
+#, no-c-format
 msgid ""
 "[examples]$ ant -Dchap=jmx -Dex=0c run-example\n"
 "...\n"
@@ -1192,25 +1338,26 @@
 "     [java]     at org.jboss.book.jmx.ex0.ExCtx.useValue(ExCtx.java:44)\n"
 "     [java]     ... 5 more"
 msgstr ""
-"[examples]$ ant -Dchap=chap2 -Dex=0c run-example\n"
+"[examples]$ ant -Dchap=jmx -Dex=0c run-example\n"
 "...\n"
-"     [java] [ERROR,UCL1] Failed to invoke ExCtx.useValue\n"
 "     [java] java.lang.reflect.InvocationTargetException\n"
-"     [java] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n"
-"     [java] at sun.reflect.NativeMethodAccessorImpl.invoke"
+"     [java]     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native "
+"Method)\n"
+"     [java]     at sun.reflect.NativeMethodAccessorImpl.invoke"
 "(NativeMethodAccessorImpl.java:39)\n"
-"     [java] at sun.reflect.DelegatingMethodAccessorImpl.invoke"
+"     [java]     at sun.reflect.DelegatingMethodAccessorImpl.invoke"
 "(DelegatingMethodAccessorImpl\n"
-".java:25)\n"
-"     [java] at java.lang.reflect.Method.invoke(Method.java:324)\n"
-"     [java] at org.jboss.chap2.ex0.ExCCEc.main(ExCCEc.java:58)\n"
-"     [java] Caused by: java.lang.ClassCastException\n"
-"     [java] at org.jboss.chap2.ex0.ExCtx.useValue(ExCtx.java:44)\n"
-"     [java] ... 5 more"
+"                .java:25)\n"
+"     [java]     at java.lang.reflect.Method.invoke(Method.java:585)\n"
+"     [java]     at org.jboss.book.jmx.ex0.ExCCEc.main(ExCCEc.java:58)\n"
+"     [java] Caused by: java.lang.ClassCastException: org.jboss.book.jmx.ex0."
+"ExObj\n"
+"     [java]     at org.jboss.book.jmx.ex0.ExCtx.useValue(ExCtx.java:44)\n"
+"     [java]     ... 5 more"
 
 #. Tag: para
 #: J2EE_Reference_Introduction.xml:385
-#, fuzzy, no-c-format
+#, no-c-format
 msgid ""
 "Only the exception is shown here. The full output can be found in the "
 "<literal>logs/jmx-ex0c.log</literal> file. At line 55 of <literal>ExCCEc."
@@ -1224,24 +1371,22 @@
 "file shown in <xref linkend=\"ClassCastExceptions___Im_Not_Your_Type-"
 "The_jmx_ex0c.log_debugging_output_for_the_ExObj_classes_seen\"/>."
 msgstr ""
-"这里只显示了异常信息. 完整的输出可以在<literal>logs/chap2-ex0c.log</literal>"
-"文件里找到. 在<literal>ExCCEc.java</literal>的第55行, 我们在第37-48行用"
-"<literal>ucl1</literal>加载和创建的实例上调用了<literal>ExcCCECtx.useValue"
-"(Object)</literal>. 传入的<literal>ExObj</literal>是第25-35行用"
-"<literal>ucl0</literal>创建的实例. 当<literal>ExCtx.useValue</literal>代码试"
-"图转换传入<literal>ExObj</literal>的参数时, 异常发生了. 要理解这个为什么会失"
-"败, 你可以参考<xref linkend=\"ch2.debug.ex\"/>里显示的<literal>chap2-ex0c."
-"log</literal>文件里的调试信息. "
+"这里只显示了异常信息。完整的输出可以在 <literal>logs/jmx-ex0c.log</literal> 文件里找到。在<literal>ExCCEc.java</literal> 的第 55 行,我们在第 37-48 行用 <literal>ucl1</literal> 加载和创建的实例上调用了<literal>ExcCCECtx.useValue"
+"(Object)</literal>。传入的 <literal>ExObj</literal> 是第 25-35 行用"
+"<literal>ucl0</literal>创建的实例。当 <literal>ExCtx.useValue</literal> 代码试"
+"图转换传入 <literal>ExObj</literal> 的参数时,异常发生了。要理解这个为什么会失"
+"败,你可以参考 <xref linkend=\"ClassCastExceptions___Im_Not_Your_Type-"
+"The_jmx_ex0c.log_debugging_output_for_the_ExObj_classes_seen\"/> 里显示的  <literal>jmx-ex0c.log</literal> 文件里的调试信息。"
 
 #. Tag: title
 #: J2EE_Reference_Introduction.xml:388
-#, fuzzy, no-c-format
+#, no-c-format
 msgid "The jmx-ex0c.log debugging output for the ExObj classes seen"
-msgstr "chap2-ex0c.log里关于ExObj类的调试信息"
+msgstr "jmx-ex0c.log 里关于 ExObj 类的调试信息"
 
 #. Tag: programlisting
 #: J2EE_Reference_Introduction.xml:389
-#, fuzzy, no-c-format
+#, no-c-format
 msgid ""
 "[INFO,UCL0] ExObj Info\n"
 "org.jboss.book.jmx.ex0.ExObj(f8968f).ClassLoader=java.net."
@@ -1271,40 +1416,35 @@
 "++++Null CodeSource"
 msgstr ""
 "[INFO,UCL0] ExObj Info\n"
-"org.jboss.chap2.ex0.ExObj(113fe2).ClassLoader=java.net."
-"URLClassLoader at 6e3914\n"
-"..java.net.URLClassLoader at 6e3914\n"
-"....file:/C:/Scott/JBoss/Books/AdminDevel/education/books/admin-devel/"
-"examples/output/\n"
-"  chap2/j0.jar\n"
-"++++CodeSource:\n"
-"    (file:/C:/Scott/JBoss/Books/AdminDevel/education/books/admin-devel/"
-"examples/output/\n"
-"  chap2/j0.jar &lt;no certificates&gt;)\n"
+"org.jboss.book.jmx.ex0.ExObj(f8968f).ClassLoader=java.net."
+"URLClassLoader at 2611a7\n"
+"..java.net.URLClassLoader at 2611a7\n"
+"....file:/Users/orb/proj/jboss/jboss-docs/jbossas/j2ee/examples/output/jmx/"
+"j0.jar\n"
+"++++CodeSource: (file:/Users/orb/proj/jboss/jboss-docs/jbossas/j2ee/examples/"
+"output/\n"
+"                 jmx/j0.jar &lt;no signer certificates&gt;)\n"
 "Implemented Interfaces:\n"
-"++interface java.io.Serializable(7934ad)\n"
+"++interface java.io.Serializable(41b571)\n"
 "++++ClassLoader: null\n"
 "++++Null CodeSource\n"
-" \n"
 "[INFO,ExCtx] useValue2.ExObj class\n"
-"org.jboss.chap2.ex0.ExObj(415de6).ClassLoader=java.net."
-"URLClassLoader at 30e280\n"
-"..java.net.URLClassLoader at 30e280\n"
-"....file:/C:/Scott/JBoss/Books/AdminDevel/education/books/admin-devel/"
-"examples/output/\n"
-"  chap2/j0.jar\n"
-"++++CodeSource:\n"
-"    (file:/C:/Scott/JBoss/Books/AdminDevel/education/books/admin-devel/"
-"examples/output/\n"
-"  chap2/j0.jar &lt;no certificates&gt;)\n"
+"org.jboss.book.jmx.ex0.ExObj(bc8e1e).ClassLoader=java.net."
+"URLClassLoader at 6bd8ea\n"
+"..java.net.URLClassLoader at 6bd8ea\n"
+"....file:/Users/orb/proj/jboss/jboss-docs/jbossas/j2ee/examples/output/jmx/"
+"j0.jar\n"
+"++++CodeSource: (file:/Users/orb/proj/jboss/jboss-docs/jbossas/j2ee/examples/"
+"output/\n"
+"                 jmx/j0.jar &lt;no signer certificates&gt;)\n"
 "Implemented Interfaces:\n"
-"++interface java.io.Serializable(7934ad)\n"
+"++interface java.io.Serializable(41b571)\n"
 "++++ClassLoader: null\n"
 "++++Null CodeSource"
 
 #. Tag: para
 #: J2EE_Reference_Introduction.xml:390
-#, fuzzy, no-c-format
+#, no-c-format
 msgid ""
 "The first output prefixed with <literal>[INFO,UCL0]</literal> shows that the "
 "<literal>ExObj</literal> class loaded at line <literal>ExCCEc.java:31</"
@@ -1325,18 +1465,16 @@
 "instance of <literal>ExObj</literal> from one scope to the other results in "
 "the <literal>ClassCastException</literal>."
 msgstr ""
-"以<literal>[INFO,UCL0]</literal>为前缀的输出显示了在<literal>ExCCEc.java:31</"
-"literal>行加载的<literal>ExObj</literal>类有一个为<literal>113fe2</literal>的"
-"哈希代码, 和有着对应ucl0的哈希代码为<literal>6e3914</literal>的相关"
-"<literal>URLClassLoader</literal>实例. 这是用来创建传入<literal>ExCtx."
-"useValue</literal>方法的实例的类. 第二部分以<literal>[INFO,ExCtx]</literal>为"
-"前缀的输出显示了如<literal>ExCtx.useValue</literal>方法的上下文里看到的"
-"<literal>ExObj</literal>有一个为<literal>415de6</literal>的哈希代码, 和和有着"
-"对应ucl1的哈希代码为<literal>30e280</literal>的<literal>URLClassLoader</"
-"literal>实例. 所以即使<literal>ExObj</literal>类从实际字节码来说是相同的, 因"
-"为都是从同一<literal>j0.jar</literal>而来, 我们可以看到<literal>ExObj</"
-"literal>列的哈希代码和相关的<literal>URLClassLoader</literal>实例都不一样. 因"
-"此, 试图把<literal>ExObj</literal>的实例相互转换都会导致"
+"以 <literal>[INFO,UCL0]</literal> 为前缀的输出显示了在 <literal>ExCCEc.java:31</"
+"literal> 行加载的 <literal>ExObj</literal> 类有一个为 <literal>f8968f</literal> 的"
+"哈希代码,和哈希代码为 <literal>2611a7</literal> 的相关 <literal>URLClassLoader</literal> 实例。这是用来创建传入 <literal>ExCtx.useValue</literal> 方法的实例的类。第二部分以<literal>[INFO,ExCtx]</literal>为"
+"前缀的输出显示了如 <literal>ExCtx.useValue</literal> 方法的上下文里看到的"
+"<literal>ExObj</literal> 有一个为 <literal>bc8e1e</literal> 的哈希代码,和和有着"
+"对应 <literal>ucl1</literal> 的哈希代码为<literal>6bd8ea</literal> 的<literal>URLClassLoader</"
+"literal> 实例。所以即使 <literal>ExObj</literal> 类从实际字节码来说是相同的,因"
+"为都是从同一 <literal>j0.jar</literal> 而来,我们可以看到 <literal>ExObj</"
+"literal> 列的哈希代码和相关的 <literal>URLClassLoader</literal> 实例都不一样。因"
+"此,试图把<literal>ExObj</literal>的实例相互转换都会导致"
 "<literal>ClassCastException</literal>."
 
 #. Tag: para
@@ -1350,9 +1488,9 @@
 "class references. Typically this requires that the dependent applications "
 "themselves be redeployed."
 msgstr ""
-"当重新部署应用程序, 而其他应用程序拥有该重部署程序的类的引用时, 这种类型的错"
-"误很常见. 例如, 访问EJB的独立的WAR. 如果你重新部署一个应用程序, 所有依赖的应"
-"用程序必须刷新它们的类引用. 典型地来讲, 这要求依赖的应用程序自己也重新部署."
+"当重新部署应用程序,而其他应用程序拥有该重部署程序的类的引用时,这种类型的错"
+"误很常见。例如,访问EJB的独立的WAR。如果你重新部署一个应用程序,所有依赖的应"
+"用程序必须刷新它们的类引用。典型地来讲,这要求依赖的应用程序自己也重新部署."
 
 #. Tag: para
 #: J2EE_Reference_Introduction.xml:396
@@ -1365,8 +1503,8 @@
 "same VM. An example of how to enable call-by-value semantics is presented in"
 msgstr ""
 "另一个允许独立的部署和重新部署相互作用的方法就是通过配置EJB层来使用标准的值调"
-"用(call-by-value), 而不是JBoss在同一虚拟机(VM)里缺省布置的引用调用(call-by-"
-"reference), 来隔离部署. 关于怎样启用值调用的示例如所演示的:"
+"用(call-by-value),而不是JBoss在同一虚拟机(VM)里缺省布置的引用调用(call-by-"
+"reference),来隔离部署。关于怎样启用值调用的示例如所演示的:"
 
 #. Tag: title
 #: J2EE_Reference_Introduction.xml:402
@@ -1376,7 +1514,7 @@
 
 #. Tag: para
 #: J2EE_Reference_Introduction.xml:403
-#, fuzzy, no-c-format
+#, no-c-format
 msgid ""
 "A <literal>java.lang.IllegalAccessException</literal> is thrown when one "
 "attempts to access a method or member that visibility qualifiers do not "
@@ -1389,11 +1527,11 @@
 "The_ExIAEd_class_used_to_demonstrate_IllegalAccessException_due_to_duplicate_class_loaders"
 "\"/>."
 msgstr ""
-"当试图访问可见性限定符(visibility qualifiers)所不允许的方法或成员时会抛出"
-"<literal>java.lang.IllegalAccessException</literal>. 典型的例子就是试图访问"
-"private或protected方法或实例变量. 另外一个常见的例子就是访问看似正确的包里的"
-"类的包protected 方法或成员, 但实际上却由于调用者和被调用的类是由不同的类加载"
-"所加载的. <xref linkend=\"ch2.ldcon.ex\"/>里的代码说明了这样的一个例子."
+"当试图访问可见性限定符(visibility qualifiers)所不允许的方法或成员时会抛出 <literal>java.lang.IllegalAccessException</literal>。典型的例子就是试图访问 private 或 protected 方法或实例变量。另外一个常见的例子就是访问看似正确的包里的"
+"类的包 protected 方法或成员,但实际上却由于调用者和被调用的类是由不同的类加载"
+"所加载的。<xref linkend=\"IllegalAccessException___Doing_what_you_should_not-"
+"The_ExIAEd_class_used_to_demonstrate_IllegalAccessException_due_to_duplicate_class_loaders"
+"\"/> 里的代码说明了这样的一个例子."
 
 #. Tag: title
 #: J2EE_Reference_Introduction.xml:406
@@ -1463,6 +1601,61 @@
 "    }\n"
 "}"
 msgstr ""
+"package org.jboss.book.jmx.ex0;\n"
+"\n"
+"import java.io.File;\n"
+"import java.net.URL;\n"
+"import java.net.URLClassLoader;\n"
+"import java.lang.reflect.Method;\n"
+"\n"
+"import org.apache.log4j.Logger;\n"
+"\n"
+"import org.jboss.util.ChapterExRepository;\n"
+"import org.jboss.util.Debug;\n"
+"\n"
+"/**\n"
+" * An example of IllegalAccessExceptions due to\n"
+" * classes loaded by two class loaders.\n"
+" * @author Scott.Stark at jboss.org\n"
+" * @version $Revision: 1.1 $\n"
+" */\n"
+"public class ExIAEd\n"
+"{\n"
+"    public static void main(String[] args) throws Exception\n"
+"    {\n"
+"        ChapterExRepository.init(ExIAEd.class);\n"
+"\n"
+"        String chapDir = System.getProperty(\"j2eechapter.dir\");\n"
+"        Logger ucl0Log = Logger.getLogger(\"UCL0\");\n"
+"        File jar0 = new File(chapDir+\"/j0.jar\");\n"
+"        ucl0Log.info(\"jar0 path: \"+jar0.toString());\n"
+"        URL[] cp0 = {jar0.toURL()};\n"
+"        URLClassLoader ucl0 = new URLClassLoader(cp0);\n"
+"        Thread.currentThread().setContextClassLoader(ucl0);\n"
+"        \n"
+"        StringBuffer buffer = new\n"
+"            StringBuffer(\"ExIAEd Info\");\n"
+"        Debug.displayClassInfo(ExIAEd.class, buffer, false);\n"
+"        ucl0Log.info(buffer.toString());\n"
+"        \n"
+"        Class ctxClass1 = ucl0.loadClass(\"org.jboss.book.jmx.ex0.ExCtx\");\n"
+"        buffer.setLength(0);\n"
+"        buffer.append(\"ExCtx Info\");\n"
+"        Debug.displayClassInfo(ctxClass1, buffer, false);\n"
+"        ucl0Log.info(buffer.toString());\n"
+"        Object ctx0 = ctxClass1.newInstance();\n"
+"\n"
+"        try {\n"
+"            Class[] types = {Object.class};\n"
+"            Method useValue =\n"
+"                ctxClass1.getDeclaredMethod(\"pkgUseValue\", types);\n"
+"            Object[] margs = {null};\n"
+"            useValue.invoke(ctx0, margs);\n"
+"        } catch(Exception e) {\n"
+"            ucl0Log.error(\"Failed to invoke ExCtx.pkgUseValue\", e);\n"
+"        }\n"
+"    }\n"
+"}"
 
 #. Tag: para
 #: J2EE_Reference_Introduction.xml:408
@@ -1475,15 +1668,15 @@
 "<literal>IllegalAccessException</literal> can occur and then look at the "
 "specific issue with the example. Run the example using the following command:"
 msgstr ""
-"当<literal>ExIEAd</literal>类被程序类加载器所加载时, <literal>ExIAEd.main</"
+"当<literal>ExIEAd</literal>类被程序类加载器所加载时,<literal>ExIAEd.main</"
 "literal>方法使用reflection 通过<literal>ucl0</literal>类加载器来加载"
-"<literal>ExCtx</literal>类. 我们将运行这个例子来演示"
+"<literal>ExCtx</literal>类。我们将运行这个例子来演示"
 "<literal>IllegalAccessException</literal>是怎样产生的并查看这个例子的特定问"
-"题. 用下面的命令运行这个例子:"
+"题。用下面的命令运行这个例子:"
 
 #. Tag: programlisting
 #: J2EE_Reference_Introduction.xml:411
-#, fuzzy, no-c-format
+#, no-c-format
 msgid ""
 "[examples]$ ant -Dchap=jmx -Dex=0d run-example\n"
 "Buildfile: build.xml\n"
@@ -1496,20 +1689,20 @@
 "[java]     at java.lang.reflect.Method.invoke(Method.java:578)\n"
 "[java]     at org.jboss.book.jmx.ex0.ExIAEd.main(ExIAEd.java:48)"
 msgstr ""
-"[examples]$ ant -Dchap=chap2 -Dex=0d run-example\n"
+"[examples]$ ant -Dchap=jmx -Dex=0d run-example\n"
 "Buildfile: build.xml\n"
 "...\n"
-"[java] [ERROR,UCL0] Failed to invoke ExCtx.pkgUseValue\n"
-"[java] java.lang.IllegalAccessException: Class org.jboss.chap2.ex0.ExIAEd \n"
-"  can not access a member of class org.jboss.chap2.ex0.ExCtx with modifiers "
-"\"\"\n"
-"[java] at sun.reflect.Reflection.ensureMemberAccess(Reflection.java:57)\n"
-"[java] at java.lang.reflect.Method.invoke(Method.java:317)\n"
-"[java] at org.jboss.chap2.ex0.ExIAEd.main(ExIAEd.java:48)"
+"[java] java.lang.IllegalAccessException: Class org.jboss.book.jmx.ex0."
+"ExIAEd \n"
+"  can not access a member of class org.jboss.book.jmx.ex0.ExCtx with "
+"modifiers \"\"\n"
+"[java]     at sun.reflect.Reflection.ensureMemberAccess(Reflection.java:65)\n"
+"[java]     at java.lang.reflect.Method.invoke(Method.java:578)\n"
+"[java]     at org.jboss.book.jmx.ex0.ExIAEd.main(ExIAEd.java:48)"
 
 #. Tag: para
 #: J2EE_Reference_Introduction.xml:412
-#, fuzzy, no-c-format
+#, no-c-format
 msgid ""
 "The truncated output shown here illustrates the "
 "<literal>IllegalAccessException</literal>. The full output can be found in "
@@ -1524,18 +1717,14 @@
 "looking at the debugging output from the <literal>jmx-ex0d.log file</"
 "literal>."
 msgstr ""
-"整理过的输出说明了<literal>IllegalAccessException</literal>. 完整的输出可以"
-"在 <literal>logs/chap2-ex0d.log</literal>文件里找到. <literal>ExIAEd.java</"
-"literal>的第48行通过reflection调用了<literal>ExCtx.pkgUseValue(Object)</"
-"literal>方法. <literal>pkgUseValue</literal>方法有?包保护的访问, 且即使"
-"<literal>ExIAEd</literal>和<literal>ExCtx</literal>的方法是在<literal>org."
-"jboss.chap2.ex0</literal>包里被调用的, 但由于这两个类是由不同的类加载器所加载"
-"的, 所以这个调用是无效的. 这些可以通过 <literal>chap2-ex0d.log file</literal>"
-"里的调试信息看到. "
+"整理过的输出说明了<literal>IllegalAccessException</literal>。完整的输出可以"
+"在 <literal>logs/jmx-ex0d.log</literal>文件里找到。<literal>ExIAEd.java</"
+"literal>的第 48 行通过反射调用了<literal>ExCtx.pkgUseValue(Object)</"
+"literal>方法。<literal>pkgUseValue</literal>方法有包保护的访问,且即使 <literal>ExIAEd</literal> 和 <literal>ExCtx</literal> 的方法是在 <literal>org.jboss.book.jmx.ex0</literal> 包里被调用的,但由于这两个类是由不同的类加载器所加载的,所以这个调用是无效的。这些可以通过 <literal>jmx-ex0d.log</literal> 里的调试信息看到。"
 
 #. Tag: programlisting
 #: J2EE_Reference_Introduction.xml:415
-#, fuzzy, no-c-format
+#, no-c-format
 msgid ""
 "[INFO,UCL0] ExIAEd Info\n"
 "org.jboss.book.jmx.ex0.ExIAEd(7808b9).ClassLoader=sun.misc.Launcher"
@@ -1549,19 +1738,19 @@
 "..."
 msgstr ""
 "[INFO,UCL0] ExIAEd Info\n"
-"org.jboss.chap2.ex0.ExIAEd(65855a).ClassLoader=sun.misc.Launcher"
-"$AppClassLoader at 3f52a5\n"
-"..sun.misc.Launcher$AppClassLoader at 3f52a5\n"
+"org.jboss.book.jmx.ex0.ExIAEd(7808b9).ClassLoader=sun.misc.Launcher"
+"$AppClassLoader at a9c85c\n"
+"..sun.misc.Launcher$AppClassLoader at a9c85c\n"
 "...\n"
 "[INFO,UCL0] ExCtx Info\n"
-"org.jboss.chap2.ex0.ExCtx(70eed6).ClassLoader=java.net."
-"URLClassLoader at 113fe2\n"
-"..java.net.URLClassLoader at 113fe2\n"
+"org.jboss.book.jmx.ex0.ExCtx(64c34e).ClassLoader=java.net."
+"URLClassLoader at a9c85c\n"
+"..java.net.URLClassLoader at 5d88a\n"
 "..."
 
 #. Tag: para
 #: J2EE_Reference_Introduction.xml:416
-#, fuzzy, no-c-format
+#, no-c-format
 msgid ""
 "The ExIAEd class is seen to have been loaded via the default application "
 "class loader instance <literal>sun.misc.Launcher$AppClassLoader at a9c85c</"
@@ -1572,12 +1761,9 @@
 "function of both the fully qualified class name and class loader, the "
 "package scope is as well."
 msgstr ""
-"我们可以看到 ExIAEd类通过缺省的应用程序类加载器实例<literal>sun.misc.Launcher"
-"$AppClassLoader at 3f52a5</literal>被加载, 而<literal>ExCtx</literal>是由"
-"<literal>java.net.URLClassLoader at 113fe2</literal>实例来加载的. 因为它们是由不"
-"同的类加载器所加载的, 所以对包受保护的方法(package protected method)的访问就"
-"是对安全性的违反. 因此, 类型不仅是类全名和类加载器的函数, 它也是包范围的函"
-"数?.   "
+"我们可以看到 ExIAEd 类通过缺省的应用程序类加载器实例 <literal>sun.misc.Launcher$AppClassLoader at a9c85c</literal> 被加载,而 <literal>ExCtx</literal> 是由 <literal>java.net.URLClassLoader at a9c85c</literal> 实例来加载的。因为它们是由不"
+"同的类加载器所加载的,所以对包受保护的方法(package protected method)的访问就"
+"是对安全性的违反。因此,类型不仅是类权限定名和类加载器的函数,包作用域也是。"
 
 #. Tag: para
 #: J2EE_Reference_Introduction.xml:419
@@ -1593,11 +1779,11 @@
 "is referenced by the SARs, or to combine the SARs into a single deployment. "
 "This can either be a single SAR, or an EAR that includes both SARs."
 msgstr ""
-"实践中的一个例子就是在两个不同的SAR部署里包括相同的类. 如果部署里的类有一个包"
-"保护的关系, SAR服务的用户可以结束从一个SAR里加载类之后, 从第二个SAR里加载另外"
-"一个类. 如果这两个类有类保护访问的关系, 那么将导致"
-"<literal>IllegalAccessError</literal>. 解决办法是把它们放在SAR所引用的独立的"
-"JAR里, 或者把两个SAR合并为单一的部署. 这个部署可以是单一的SAR或者包含这两个"
+"实践中的一个例子就是在两个不同的SAR部署里包括相同的类。如果部署里的类有一个包"
+"保护的关系,SAR服务的用户可以结束从一个SAR里加载类之后,从第二个SAR里加载另外"
+"一个类。如果这两个类有类保护访问的关系,那么将导致"
+"<literal>IllegalAccessError</literal>。解决办法是把它们放在SAR所引用的独立的"
+"JAR里,或者把两个SAR合并为单一的部署。这个部署可以是单一的SAR或者包含这两个"
 "SAR的EAR."
 
 #. Tag: title
@@ -1617,14 +1803,14 @@
 "essentially an extension of the class cast exception that is enforced by the "
 "VM when classes are loaded and used."
 msgstr ""
-"加载约束(Loading constraints)在类加载器范围的上下文里确认类型, 来确保当有多个"
-"类加载器被调用时, 类<literal>X</literal>可以保持一致性. 这很重要, 因为Java允"
-"许用户定义类加载器. 链接错误(Linkage errors)本质上是类转换异常(class cast "
-"exception)的一个扩展, 它是在类被加载和使用时由虚拟机(VM)强制抛出的."
+"加载约束(Loading constraints)在类加载器范围的上下文里确认类型,来确保当有多个"
+"类加载器被调用时,类<literal>X</literal>可以保持一致性。这很重要,因为Java允"
+"许用户定义类加载器。链接错误(Linkage errors)本质上是类转换异常(class cast "
+"exception)的一个扩展,它是在类被加载和使用时由虚拟机(VM)强制抛出的."
 
 #. Tag: para
 #: J2EE_Reference_Introduction.xml:429
-#, fuzzy, no-c-format
+#, no-c-format
 msgid ""
 "To understand what loading constraints are and how they ensure type-safety "
 "we will first introduce the nomenclature of the Liang and Bracha paper along "
@@ -1651,20 +1837,20 @@
 "Classes_demonstrating_the_need_for_loading_constraints\"/>."
 msgstr ""
 "为了理解加载约束(loading constraints)是什么和它怎样确保类型安全(type-"
-"safety), 我们将首先引入随本书的例子一起的 Liang and Bracha paper的术语. 有两"
-"种类型的类加载器, initiating 和 defining. initiating加载器调用"
-"<literal>ClassLoader.loadClass</literal>方法来初始化命名类的加载. defining加"
-"载器调用<literal>ClassLoader.defineClass</literal>方法来把类字节码转换到"
-"<literal>Class</literal>实例里.  <literal>&lt;C,Ld&gt;<superscript>Li</"
-"superscript> </literal> 给出了最完整的类的表达方式, 在这里<literal>C</"
-"literal>是类的全名, <literal>Ld</literal>是defining类加载器, <literal>Li</"
-"literal>是initiating 类加载器. 在initiating 类加载器不是很重要的情况下, 类型"
-"可以由<literal>&lt;C,Ld&gt;</literal>来代表, 而当defining 类加载器不重要的情"
-"况下, 类型可以用<literal>C<superscript>Li</superscript> </literal>来代表. 在"
-"后面的例子里, 仍然有一个defining 类加载器, 它恰好不象它所代表的那样重要?. 而"
-"且, 类型完全是由<literal>&lt;C,Ld&gt;</literal>定义的. 唯一和initiating 类加"
-"载器有关的就是加载约束被确认(validated)的时候. 现在考虑一下<xref linkend="
-"\"ch2.ldcon.ex\"/>里的展示的类."
+"safety),我们将首先引入随本书的例子一起的 Liang and Bracha paper的术语。有两"
+"种类型的类加载器,initiating 和 defining。initiating 加载器调用"
+"<literal>ClassLoader.loadClass</literal> 方法来初始化命名类的加载。defining 加"
+"载器调用 <literal>ClassLoader.defineClass</literal> 方法来把类字节码转换到 <literal>Class</literal> 实例里。 <literal>&lt;C,Ld&gt;<superscript>Li</"
+"superscript> </literal> 给出了最完整的类的表达方式,在这里 <literal>C</"
+"literal>是类的全限定名,<literal>Ld</literal>是defining类加载器,<literal>Li</"
+"literal>是initiating 类加载器。在initiating 类加载器不是很重要的情况下,类型"
+"可以由<literal>&lt;C,Ld&gt;</literal>来代表,而当defining 类加载器不重要的情"
+"况下,类型可以用<literal>C<superscript>Li</superscript> </literal>来代表。在"
+"后面的例子里,仍然有一个defining 类加载器,它恰好不象它所代表的那样重要?。而"
+"且,类型完全是由 <literal>&lt;C,Ld&gt;</literal> 定义的。唯一和initiating 类加"
+"载器有关的就是加载约束被确认(validated)的时候。现在考虑一下 <xref linkend="
+"\"LinkageErrors___Making_Sure_You_Are_Who_You_Say_You_Are-"
+"Classes_demonstrating_the_need_for_loading_constraints\"/> 里的展示的类。"
 
 #. Tag: title
 #: J2EE_Reference_Introduction.xml:432
@@ -1686,7 +1872,7 @@
 msgstr ""
 "class &lt;C,L1&gt; {\n"
 "    void f() {\n"
-"        &lt;Spoofed, L1&gt;<superscript>L1</superscript>x = &lt;Delegated, "
+"        &lt;Spoofed,L1&gt;<superscript>L1</superscript>x = &lt;Delegated,"
 "L2&gt;<superscript>L2</superscript>\n"
 "        x.secret_value = 1; // Should not be allowed\n"
 "    }\n"
@@ -1702,7 +1888,7 @@
 "}"
 msgstr ""
 "class &lt;Delegated,L2&gt; {\n"
-"    static &lt;Spoofed, L2&gt;<superscript>L3</superscript> g() {...}\n"
+"    static &lt;Spoofed,L2&gt;<superscript>L3</superscript> g() {...}\n"
 "    }\n"
 "}"
 
@@ -1714,7 +1900,7 @@
 "    public int secret_value;\n"
 "}"
 msgstr ""
-"class &lt;Spoofed, L1&gt; {\n"
+"class &lt;Spoofed,L1&gt; {\n"
 "    public int secret_value;\n"
 "}"
 
@@ -1726,7 +1912,7 @@
 "    private int secret_value;\n"
 "}"
 msgstr ""
-"class &lt;Spoofed, L2&gt; {\n"
+"class &lt;Spoofed,L2&gt; {\n"
 "    private int secret_value;\n"
 "}"
 
@@ -1899,6 +2085,70 @@
 "    }\n"
 "}"
 msgstr ""
+"package org.jboss.book.jmx.ex0;\n"
+"import java.io.File;\n"
+"import java.net.URL;\n"
+"\n"
+"import org.apache.log4j.Logger;\n"
+"import org.jboss.util.ChapterExRepository;\n"
+"import org.jboss.util.Debug;\n"
+"\n"
+"/** \n"
+" * An example of a LinkageError due to classes being defined by more\n"
+" * than one class loader in a non-standard class loading environment.\n"
+" *\n"
+" * @author Scott.Stark at jboss.orgn\n"
+" * @version $Revision: 1.1 $\n"
+" */\n"
+"public class ExLE\n"
+"{\n"
+"    public static void main(String[] args) \n"
+"        throws Exception\n"
+"    {\n"
+"        ChapterExRepository.init(ExLE.class);\n"
+"\n"
+"        String chapDir = System.getProperty(\"j2eechapter.dir\");\n"
+"        Logger ucl0Log = Logger.getLogger(\"UCL0\");\n"
+"        File jar0 = new File(chapDir+\"/j0.jar\");\n"
+"        ucl0Log.info(\"jar0 path: \"+jar0.toString());\n"
+"        URL[] cp0 = {jar0.toURL()};\n"
+"        Ex0URLClassLoader ucl0 = new Ex0URLClassLoader(cp0);\n"
+"        Thread.currentThread().setContextClassLoader(ucl0);\n"
+"        <emphasis role=\"bold\">Class ctxClass1 = ucl0.loadClass(\"org.jboss."
+"book.jmx.ex0.ExCtx\");</emphasis>\n"
+"        <emphasis role=\"bold\">Class obj2Class1 = ucl0.loadClass(\"org."
+"jboss.book.jmx.ex0.ExObj2\");</emphasis>\n"
+"        StringBuffer buffer = new StringBuffer(\"ExCtx Info\");\n"
+"        Debug.displayClassInfo(ctxClass1, buffer, false);\n"
+"        ucl0Log.info(buffer.toString());\n"
+"        buffer.setLength(0);\n"
+"        buffer.append(\"ExObj2 Info, UCL0\");\n"
+"        Debug.displayClassInfo(obj2Class1, buffer, false);\n"
+"        ucl0Log.info(buffer.toString());\n"
+"        \n"
+"        File jar1 = new File(chapDir+\"/j1.jar\");\n"
+"        Logger ucl1Log = Logger.getLogger(\"UCL1\");\n"
+"        ucl1Log.info(\"jar1 path: \"+jar1.toString());\n"
+"        URL[] cp1 = {jar1.toURL()};\n"
+"        Ex0URLClassLoader ucl1 = new Ex0URLClassLoader(cp1);\n"
+"        <emphasis role=\"bold\">Class obj2Class2 = ucl1.loadClass(\"org."
+"jboss.book.jmx.ex0.ExObj2\");</emphasis>\n"
+"        buffer.setLength(0);\n"
+"        buffer.append(\"ExObj2 Info, UCL1\");\n"
+"        Debug.displayClassInfo(obj2Class2, buffer, false);\n"
+"        ucl1Log.info(buffer.toString());\n"
+"        \n"
+"        <emphasis role=\"bold\">ucl0.setDelegate(ucl1);</emphasis>\n"
+"        try {\n"
+"            ucl0Log.info(\"Try ExCtx.newInstance()\");\n"
+"            <emphasis role=\"bold\">Object ctx0 = ctxClass1.newInstance();</"
+"emphasis>\n"
+"            ucl0Log.info(\"ExCtx.ctor succeeded, ctx0: \"+ctx0);\n"
+"        } catch(Throwable e) {\n"
+"            ucl0Log.error(\"ExCtx.ctor failed\", e);\n"
+"        }\n"
+"    }\n"
+"}"
 
 #. Tag: programlisting
 #: J2EE_Reference_Introduction.xml:448
@@ -1966,6 +2216,67 @@
 "    }\n"
 "}"
 msgstr ""
+"package org.jboss.book.jmx.ex0;\n"
+"\n"
+"import java.net.URLClassLoader;\n"
+"import java.net.URL;\n"
+"\n"
+"import org.apache.log4j.Logger;\n"
+"\n"
+"/** \n"
+" * A custom class loader that overrides the standard parent delegation\n"
+" * model\n"
+" *\n"
+" * @author Scott.Stark at jboss.org\n"
+" * @version $Revision: 1.1 $\n"
+" */\n"
+"public class Ex0URLClassLoader extends URLClassLoader\n"
+"{\n"
+"    private static Logger log = Logger.getLogger(Ex0URLClassLoader.class);\n"
+"    private Ex0URLClassLoader delegate;\n"
+"\n"
+"    public Ex0URLClassLoader(URL[] urls)\n"
+"    {\n"
+"        super(urls);\n"
+"    }\n"
+"    \n"
+"    void setDelegate(Ex0URLClassLoader delegate)\n"
+"    {\n"
+"        this.delegate = delegate;\n"
+"    }\n"
+"    \n"
+"    protected synchronized Class loadClass(String name, boolean resolve)\n"
+"        throws ClassNotFoundException\n"
+"    {\n"
+"        Class clazz = null;\n"
+"        if (delegate != null) {\n"
+"            log.debug(Integer.toHexString(hashCode()) +\n"
+"                      \"; Asking delegate to loadClass: \" + name);\n"
+"            clazz = delegate.loadClass(name, resolve);\n"
+"            log.debug(Integer.toHexString(hashCode()) +\n"
+"                      \"; Delegate returned: \"+clazz);\n"
+"        } else {\n"
+"            log.debug(Integer.toHexString(hashCode()) + \n"
+"                      \"; Asking super to loadClass: \"+name);\n"
+"            clazz = super.loadClass(name, resolve);\n"
+"            log.debug(Integer.toHexString(hashCode()) + \n"
+"                      \"; Super returned: \"+clazz);\n"
+"        }\n"
+"        return clazz;\n"
+"    }\n"
+"\n"
+"    protected Class findClass(String name)\n"
+"        throws ClassNotFoundException\n"
+"    {\n"
+"        Class clazz = null;\n"
+"        log.debug(Integer.toHexString(hashCode()) + \n"
+"                  \"; Asking super to findClass: \"+name);\n"
+"        clazz = super.findClass(name);\n"
+"        log.debug(Integer.toHexString(hashCode()) + \n"
+"                  \"; Super returned: \"+clazz);\n"
+"        return clazz;\n"
+"    }\n"
+"}"
 
 #. Tag: para
 #: J2EE_Reference_Introduction.xml:449
@@ -2034,12 +2345,12 @@
 "    value = new ExObj();\n"
 "    Logger log = Logger.getLogger(ExCtx.class);\n"
 "    StringBuffer buffer = new StringBuffer(\"ctor.ExObj\");\n"
-"    Debug.displayClassInfo(value.getClass(), buffer, false);\n"
+"    Debug.displayClassInfo(value.getClass(),buffer,false);\n"
 "    log.info(buffer.toString());\n"
 "    ExObj2 obj2 = value.ivar;\n"
 "    buffer.setLength(0);\n"
 "    buffer = new StringBuffer(\"ctor.ExObj.ivar\");\n"
-"    Debug.displayClassInfo(obj2.getClass(), buffer, false);\n"
+"    Debug.displayClassInfo(obj2.getClass(),buffer,false);\n"
 "    log.info(buffer.toString());\n"
 "}"
 
@@ -2426,7 +2737,7 @@
 "这个类是否已经被加载了。只有库里没有这个类时,UCL才会把它加载进去。缺省来说,"
 "会有单一的<literal>UnifiedLoaderRepository3</literal>在所有UCL实例中共享。这"
 "意味着这些UCL组成了一个单一的类加载器命名空间。调用"
-"<literal>UnfiedClassLoader3.loadClass(String, boolean)</literal>方法的完整次"
+"<literal>UnfiedClassLoader3.loadClass(String,boolean)</literal>方法的完整次"
 "序是:"
 
 #. Tag: para
@@ -2453,7 +2764,7 @@
 "and returned."
 msgstr ""
 "然后,询问<literal>UnfiedClassLoader3</literal>是否能够加载这个类。这本质上是"
-"一个对超级类<literal>URLClassLoader.loadClass(String, boolean)</literal>方法"
+"一个对超级类<literal>URLClassLoader.loadClass(String,boolean)</literal>方法"
 "的调用,它可以知道这个类是否在和类加载器相关的URL里,或者对于父类加载器可见。"
 "如果这个类被找到的话,它会被放入库缓存并被返回。"
 
@@ -2542,10 +2853,18 @@
 "   url=file:/home/vrenish/jboss-eap-4.3/jboss-as/server/production/deploy/"
 "jboss-messaging.sar/ ,addedOrder=12}]"
 msgstr ""
+"[org.jboss.mx.loading.UnifiedClassLoader3 at 1950198{ \n"
+"   url=null ,addedOrder=2}, \n"
+" org.jboss.mx.loading.UnifiedClassLoader3 at 89e2f1{\n"
+"   url=file:/home/vrenish/jboss-eap-4.3/jboss-as/server/production/deploy/"
+"ejb3.deployer/ ,addedOrder=3},\n"
+" org.jboss.mx.loading.UnifiedClassLoader3 at 1555185{ \n"
+"   url=file:/home/vrenish/jboss-eap-4.3/jboss-as/server/production/deploy/"
+"jboss-messaging.sar/ ,addedOrder=12}]"
 
 #. Tag: para
 #: J2EE_Reference_Introduction.xml:544
-#, fuzzy, no-c-format
+#, no-c-format
 msgid ""
 "This is the string representation of the set. It shows three "
 "<literal>UnifiedClassLoader3</literal> instances. The primary url is "
@@ -2555,11 +2874,11 @@
 "the JARs in the <literal>lib</literal> directory of the server configuration "
 "(e.g., <literal>server/production/lib</literal>)."
 msgstr ""
-"这是集合的字符串表示。它展示了一个主URL指向<literal>jboss-service.xml</"
-"literal>描述符的<literal>UnifiedClassLoader3</literal>实例。这是加入到库"
+"这是集合的字符串表示。它展示了一个主 URL 指向 <literal>jboss-service.xml</"
+"literal> 描述符的 <literal>UnifiedClassLoader3</literal> 实例。这是加入到库"
 "(repository)里的第二个类加载器(如<literal>addedOrder=2</literal>所示)。它也是"
-"拥有所有服务器配置的<literal>lib</literal>目录下(如<literal>server/default/"
-"lib</literal>)的JAR文件的类加载器。"
+"拥有所有服务器配置的 <literal>lib</literal> 目录下(如<literal>server/default/"
+"lib</literal>)的 JAR 文件的类加载器。"
 
 #. Tag: para
 #: J2EE_Reference_Introduction.xml:547
@@ -2572,7 +2891,7 @@
 "package we just looked at, the following description is displayed:"
 msgstr ""
 "要查看给定类的信息,你可以使用<literal>server/default/lib</literal>操作,传入"
-"类的全名来查看。例如,如果我们使用刚才看过的包里的<literal>org.jboss.jmx."
+"类的全限定名来查看。例如,如果我们使用刚才看过的包里的<literal>org.jboss.jmx."
 "adaptor.html.HtmlAdaptorServlet</literal>,下面的描述符将会显示:"
 
 #. Tag: programlisting
@@ -2590,6 +2909,16 @@
 "----------> Parent Classloader:\n"
 "java.net.FactoryURLClassLoader at 2f5dda"
 msgstr ""
+"org.jboss.jmx.adaptor.html.HtmlAdaptorServlet Information\n"
+"Not loaded in repository cache\n"
+"\n"
+"\n"
+"### Instance0 via UCL: WebappClassLoader\n"
+"  delegate: false\n"
+"  repositories:\n"
+"    /WEB-INF/classes/\n"
+"----------> Parent Classloader:\n"
+"java.net.FactoryURLClassLoader at 2f5dda"
 
 #. Tag: para
 #: J2EE_Reference_Introduction.xml:556
@@ -2610,7 +2939,7 @@
 
 #. Tag: para
 #: J2EE_Reference_Introduction.xml:563
-#, fuzzy, no-c-format
+#, no-c-format
 msgid ""
 "If you need to deploy multiple versions of an application you need to use "
 "deployment based scoping. With deployment based scoping, each deployment "
@@ -2625,12 +2954,11 @@
 "xml_descriptor_for_enabled_scoped_class_loading_at_the_EAR_level.\"/>."
 msgstr ""
 "如果你要部署一个应用程序的多个版本,你需要使用基于部署的作用域(deployment "
-"based scoping)。每个部署都以如<literal>HeirarchicalLoaderRepository3</"
-"literal>的形式创建自己的类加载器库,EAR里的部署单元的"
-"<literal>UnifiedClassLoader3</literal>实例在委托给缺省的"
-"<literal>UnifiedLoaderRepository3</literal>之前,会先查看它。要启用与EAR相关"
-"的的加载器库,你需要建立一个如<xref linkend=\"ch2.scopedapp.ex\"/>所示的"
-"<literal>META-INF/jboss-app.xml</literal>描述符。o"
+"based scoping)。每个部署都以如 <literal>HeirarchicalLoaderRepository3</"
+"literal> 的形式创建自己的类加载器库,EAR里的部署单元的 <literal>UnifiedClassLoader3</literal> 实例在委托给缺省的 <literal>UnifiedLoaderRepository3</literal> 之前,会先查看它。要启用与 EAR 相关"
+"的的加载器库,你需要建立一个如 <xref linkend=\"Scoping_Classes-"
+"An_example_jboss_app."
+"xml_descriptor_for_enabled_scoped_class_loading_at_the_EAR_level.\"/> 所示的 <literal>META-INF/jboss-app.xml</literal> 描述符。"
 
 #. Tag: title
 #: J2EE_Reference_Introduction.xml:566
@@ -2675,7 +3003,7 @@
 "contain any JDK classes or (when using a war deployment) they must be "
 "excluded via the <property>FilteredPackages</property> atribute within the "
 "<filename>jboss-service.xml</filename> file."
-msgstr ""
+msgstr "你不能对 JDK 提供的类限定作用域。这意味着部署不能包含任何 JDK 类或者(当使用 WAR 部署时)必须通过 <filename>jboss-service.xml</filename> 文件里的 <property>FilteredPackages</property> 属性进行排除。"
 
 #. Tag: title
 #: J2EE_Reference_Introduction.xml:579
@@ -2685,7 +3013,7 @@
 
 #. Tag: para
 #: J2EE_Reference_Introduction.xml:580
-#, fuzzy, no-c-format
+#, no-c-format
 msgid ""
 "The previous discussion of the core class loading components introduced the "
 "custom <literal>UnifiedClassLoader3</literal> and "
@@ -2697,12 +3025,11 @@
 "A_complete_class_loader_view\"/> shows an outline of the class hierarchy "
 "that would exist for an EAR deployment containing EJBs and WARs."
 msgstr ""
-"前面关于核心类加载部件的讨论引入了自定义的<literal>UnifiedClassLoader3</"
-"literal>和<literal>UnifiedLoaderRepository3</literal>类,它们组成了一个共享的"
-"类加载空间。完整的类加载也必须包括<literal>UnifiedClassLoader3</literal>使用"
-"的父类加载器,以及为作用域(scoping)和其他特别的目的而引入的类加载器。<xref "
-"linkend=\"ch2.classloaderview.fig\"/>展示了类层次的概要,对于包含EJB和WAR的"
-"EAR部署来说,它都会存在。"
+"前面关于核心类加载部件的讨论引入了自定义的 <literal>UnifiedClassLoader3</"
+"literal> 和 <literal>UnifiedLoaderRepository3</literal> 类,它们组成了一个共享的"
+"类加载空间。完整的类加载也必须包括 <literal>UnifiedClassLoader3</literal> 使用"
+"的父类加载器,以及为作用域(scoping)和其他特别的目的而引入的类加载器。<xref linkend=\"The_Complete_Class_Loading_Model-"
+"A_complete_class_loader_view\"/> 展示了类层次的概要,对于包含 EJB 和 WAR 的 EAR 部署来说,它都会存在。"
 
 #. Tag: title
 #: J2EE_Reference_Introduction.xml:584
@@ -2781,14 +3108,14 @@
 "The JBoss JMX jar and GNU regex jar, <literal>jboss-jmx.jar</literal> and "
 "<literal>gnu-regexp.jar</literal>."
 msgstr ""
-"JBoss JMX jar 和 GNU regex jar, <literal>jboss-jmx.jar</literal> 和 "
+"JBoss JMX jar 和 GNU regex jar,<literal>jboss-jmx.jar</literal> 和 "
 "<literal>gnu-regexp.jar</literal>。"
 
 #. Tag: para
 #: J2EE_Reference_Introduction.xml:621
 #, no-c-format
 msgid "Oswego concurrency classes JAR, <literal>concurrent.jar</literal>"
-msgstr "Oswego concurrency classes JAR, <literal>concurrent.jar</literal>"
+msgstr "Oswego concurrency classes JAR,<literal>concurrent.jar</literal>"
 
 #. Tag: para
 #: J2EE_Reference_Introduction.xml:626
@@ -2826,7 +3153,7 @@
 
 #. Tag: para
 #: J2EE_Reference_Introduction.xml:643
-#, fuzzy, no-c-format
+#, no-c-format
 msgid ""
 "<emphasis role=\"bold\">All UnifiedClassLoader3s</emphasis>: The "
 "<emphasis>All UnifiedClassLoader3</emphasis> node represents the UCLs "
@@ -2842,13 +3169,12 @@
 "JBoss server."
 msgstr ""
 "<emphasis role=\"bold\">All UnifiedClassLoader3s</emphasis>:<emphasis>All "
-"UnifiedClassLoader3</emphasis>节点代表了部署者所创建的UCL。它覆盖了EAR,JAR,"
-"WAR,SAR和部署扫描器(deployment scanner)能见到的目录,还有它们的manifests和包"
-"含的任何嵌套的部署单元所引用的JAR。它是一个简单的命名空间,在不同的部署JAR里"
+"UnifiedClassLoader3</emphasis> 节点代表了部署者所创建的 UCL。它覆盖了 EAR、JAR、WAR、SAR 和部署扫描器(deployment scanner)能见到的目录,还有它们的 manifest 和包"
+"含的任何嵌套的部署单元所引用的 JAR。它是一个简单的命名空间,在不同的部署 JAR 里"
 "不应该有同一个类的多个实例。如果有的话,只有第一个被加载的会被使用,而且可能"
 "得不到所期望的结果。这里有一个关于作用域可见性(scoping visibility)的机制,它"
-"基于我们在<xref linkend=\"ch2.scoping.sect\"/>里讨论的EAR部署单元。在给定的"
-"JBoss服务器里,如果你需要部署同一个类的多个版本的话,你可以使用这个机制。"
+"基于我们在 <xref linkend="
+"\"Inside_the_JBoss_Class_Loading_Architecture-Scoping_Classes\"/> 里讨论的EAR部署单元。在给定的 JBoss 服务器里,如果你需要部署同一个类的多个版本的话,你可以使用这个机制。"
 
 #. Tag: para
 #: J2EE_Reference_Introduction.xml:648
@@ -2872,7 +3198,7 @@
 
 #. Tag: para
 #: J2EE_Reference_Introduction.xml:653
-#, fuzzy, no-c-format
+#, no-c-format
 msgid ""
 "<emphasis role=\"bold\">EJB ENCLoader</emphasis>: The <emphasis>EJB "
 "ENCLoader</emphasis> node is a <literal>URLClassLoader</literal> that exists "
@@ -2882,13 +3208,13 @@
 "class loader."
 msgstr ""
 "<emphasis role=\"bold\">EJB ENCLoader</emphasis>:<emphasis>EJB ENCLoader</"
-"emphasis>节点是一个只为EJB部署的<literal>java:comp</literal>JNDI上下文提供唯"
-"一上下文的<literal>URLClassLoader</literal>。它指定一个空的<literal>URL[]</"
-"literal>并委托EJB <literal>DynClassLoader</literal>作为它的父类加载器。"
+"emphasis> 节点是一个只为 EJB 部署的 <literal>java:comp</literal> JNDI 上下文提供唯"
+"一上下文的 <literal>URLClassLoader</literal>。它指定一个空的 <literal>URL[]</"
+"literal> 并委托 EJB <literal>DynClassLoader</literal> 作为它的父类加载器。"
 
 #. Tag: para
 #: J2EE_Reference_Introduction.xml:658
-#, fuzzy, no-c-format
+#, no-c-format
 msgid ""
 "<emphasis role=\"bold\">Web ENCLoader</emphasis>: The Web "
 "<literal>ENCLoader</literal> node is a URLClassLoader that exists only to "
@@ -2897,13 +3223,13 @@
 "delegates to the TCL as its parent class loader."
 msgstr ""
 "<emphasis role=\"bold\">Web ENCLoader</emphasis>:<literal>ENCLoader</"
-"literal>节点是只为web 部署的<literal>java:comp</literal> JNDI上下文提供唯一上"
-"下文的URLClassLoader。它指定一个空的<literal>URL[]</literal>并委托TCL作为它的"
+"literal>节点是只为 web 部署的<literal>java:comp</literal> JNDI 上下文提供唯一上"
+"下文的 URLClassLoader。它指定一个空的 <literal>URL[]</literal> 并委托 TCL 作为它的"
 "父类加载器。"
 
 #. Tag: para
 #: J2EE_Reference_Introduction.xml:663
-#, fuzzy, no-c-format
+#, no-c-format
 msgid ""
 "<emphasis role=\"bold\">WAR Loader</emphasis>: The <emphasis>WAR Loader</"
 "emphasis> is a servlet container specific classloader that delegates to the "
@@ -2915,10 +3241,10 @@
 "loader."
 msgstr ""
 "<emphasis role=\"bold\">WAR Loader</emphasis>:<emphasis>WAR Loader</"
-"emphasis>是一个与servlet容器相关的类加载器,它委托Web ENCLoader作为它的父类加"
-"载器。它的缺省行为是从它的父加载器里加载,然后是WAR <literal>WEB-INF</"
+"emphasis>是一个与 servlet 容器相关的类加载器,它委托 Web ENCLoader 作为它的父类加"
+"载器。它的缺省行为是从它的父加载器里加载,然后是 WAR <literal>WEB-INF</"
 "literal> <literal>classes</literal> 和 <literal>lib</literal> 目录。如果启用"
-"了servlet 2.3类加载模型,它将首先从它的<literal>WEB-INF</literal>目录里加载,"
+"了 servlet 2.3 类加载模型,它将首先从它的 <literal>WEB-INF</literal> 目录里加载,"
 "之后才是父加载器。"
 
 #. Tag: para
@@ -2982,7 +3308,7 @@
 
 #. Tag: para
 #: J2EE_Reference_Introduction.xml:706
-#, fuzzy, no-c-format
+#, no-c-format
 msgid ""
 "XMBeans are the JBoss JMX implementation version of the JMX model MBean. "
 "XMBeans have the richness of the dynamic MBean metadata without the tedious "
@@ -2997,13 +3323,13 @@
 "literal> for the XMBean descriptor is given in <xref linkend=\"JBoss_XMBeans-"
 "The_JBoss_1.0_XMBean_DTD_Overview_jboss_xmbean_1_2.dtd\"/>."
 msgstr ""
-"XMBeans是JMX model MBean实现的JBoss版本。XMBeans具有动态MBean元数据的丰富内"
-"容,而不需要沉闷地编程来直接实现<literal>DynamicMBean</literal>接口。JBoss "
-"model MBean实现允许你通过XML描述符来指定部件的管理接口,这就是XMBean里的X的来"
-"历。除了提供一个用来描述动态MBean所需的元数据的简单机制,XMBean也考虑到了属性"
-"持久化,缓存行为和更高级的自定义如MBean实现拦截器(implementation "
-"interceptors)的规格。<xref linkend=\"ch2.xmbeandtd.fig\"/>给出了"
-"<literal>jboss_xmbean_1_2.dtd</literal>里关于XMBean描述符的高级别元素"
+"XMBeans是JMX model MBean实现的JBoss版本。XMBean 具有动态 MBean 元数据的丰富内"
+"容,而不需要沉闷地编程来直接实现 <literal>DynamicMBean</literal> 接口。JBoss "
+"model MBean 实现允许你通过 XML 描述符来指定部件的管理接口,这就是 XMBean 里的X的来"
+"历。除了提供一个用来描述动态 MBean 所需的元数据的简单机制,XMBean 也考虑到了属性"
+"持久化,缓存行为和更高级的自定义如 MBean 实现拦截器(implementation "
+"interceptors)的规格。<xref linkend=\"JBoss_XMBeans-"
+"The_JBoss_1.0_XMBean_DTD_Overview_jboss_xmbean_1_2.dtd\"/> 里关于 XMBean 描述符的高级别元素"
 "(elements)。"
 
 #. Tag: title
@@ -3023,7 +3349,7 @@
 "purpose of the MBean, as well as an optional descriptors element which "
 "allows for persistence policy specification, attribute caching, etc."
 msgstr ""
-"<literal>mbean</literal>元素是包含描述MBean(constructors, attributes, "
+"<literal>mbean</literal>元素是包含描述MBean(constructors,attributes,"
 "operations 和 notifications)的管理接口的元素的文档的根元素。它也包括了一个可"
 "选的用来描述MBean的目的的描述符元素,以及考虑到持久化策略规格,属性缓存等的可"
 "选的描述符元素。"
@@ -3036,7 +3362,7 @@
 
 #. Tag: para
 #: J2EE_Reference_Introduction.xml:722
-#, fuzzy, no-c-format
+#, no-c-format
 msgid ""
 "The descriptors element contains all the descriptors for a containing "
 "element, as subelements. The descriptors suggested in the JMX specification "
@@ -3045,9 +3371,10 @@
 "value attributes as show in <xref linkend=\"Descriptors-"
 "_The_descriptors_element_content_model\"/>."
 msgstr ""
-"描述符元素把内含元素的所有描述符作为子元素。JMX规格里提出的和JBoss所使用的描"
+"描述符元素把内含元素的所有描述符作为子元素。JMX 规格里提出的和 JBoss 所使用的描"
 "述符都含有预定义的元素和属性,而自定义的描述符有一个共用的有着名字和值属性的"
-"descriptor元素,如<xref linkend=\"ch2.descriptorselem.fig\"/>所示。"
+"descriptor 元素,如 <xref linkend=\"Descriptors-"
+"_The_descriptors_element_content_model\"/> 所示。"
 
 #. Tag: title
 #: J2EE_Reference_Introduction.xml:726
@@ -3295,7 +3622,7 @@
 
 #. Tag: para
 #: J2EE_Reference_Introduction.xml:833
-#, fuzzy, no-c-format
+#, no-c-format
 msgid ""
 "<emphasis role=\"bold\">value</emphasis>: The <literal>value</literal> "
 "element specifies a management attribute&#39;s current value. Unlike the "
@@ -3303,9 +3630,9 @@
 "written through to the MBean on startup provided there is a setter method "
 "available."
 msgstr ""
-"<emphasis role=\"bold\">value</emphasis>:<literal>value</literal>元素指定当"
-"前value的管理属性。不象<literal>default</literal>元素,如果setter方法可用的"
-"话,<literal>value</literal>元素在启动时就写入到MBean里。"
+"<emphasis role=\"bold\">value</emphasis>:<literal>value</literal> 元素指定当"
+"前值的管理属性。不象 <literal>default</literal> 元素,如果 setter 方法可用的"
+"话,<literal>value</literal> 元素在启动时就写入到 MBean 里。"
 
 #. Tag: para
 #: J2EE_Reference_Introduction.xml:838
@@ -3451,15 +3778,16 @@
 
 #. Tag: para
 #: J2EE_Reference_Introduction.xml:896
-#, fuzzy, no-c-format
+#, no-c-format
 msgid ""
 "The <literal>constructor</literal> element(s) specifies the constructors "
 "available for creating an instance of the managed object. The constructor "
 "element and its content model are shown in <xref linkend=\"The_Constructors-"
 "The_XMBean_constructor_element_and_its_content_model\"/>."
 msgstr ""
-"<literal>constructor</literal>元素指定用来建立被管理对象的实例的可用构造函"
-"数。<xref linkend=\"ch2.xmcons.fig\"/>展示了constructor元素和它的内容模型。"
+"<literal>constructor</literal> 元素指定用来建立被管理对象的实例的可用构造函"
+"数。<xref linkend=\"The_Constructors-"
+"The_XMBean_constructor_element_and_its_content_model\"/> 展示了 constructor 元素和它的内容模型。"
 
 #. Tag: title
 #: J2EE_Reference_Introduction.xml:900
@@ -3544,15 +3872,15 @@
 
 #. Tag: para
 #: J2EE_Reference_Introduction.xml:953
-#, fuzzy, no-c-format
+#, no-c-format
 msgid ""
 "The <literal>attribute</literal> element(s) specifies the management "
 "attributes exposed by the MBean. The attribute element and its content model "
 "are shown in <xref linkend=\"The_Attributes-"
 "The_XMBean_attribute_element_and_its_content_model\"/>."
 msgstr ""
-"<literal>attribute</literal>元素指定MBean开放的管理属性。<xref linkend=\"ch2."
-"xmattr.fig\"/>展示了attribute元素和它的内容模型。"
+"<literal>attribute</literal> 元素指定 MBean 开放的管理属性。<xref linkend=\"The_Attributes-"
+"The_XMBean_attribute_element_and_its_content_model\"/> 展示了 attribute 元素和它的内容模型。"
 
 #. Tag: title
 #: J2EE_Reference_Introduction.xml:957
@@ -3674,15 +4002,15 @@
 
 #. Tag: para
 #: J2EE_Reference_Introduction.xml:1030
-#, fuzzy, no-c-format
+#, no-c-format
 msgid ""
 "The management operations exposed by the XMBean are specified via one or "
 "more operation elements. The operation element and its content model are "
 "shown in <xref linkend=\"The_Operations-"
 "The_XMBean_operation_element_and_its_content_model\"/>."
 msgstr ""
-"XMBean开放的管理操作由一个或多个operation元素指定。<xref linkend=\"ch2.xmops."
-"fig\"/>展示了operation元素和它的内容模型。"
+"XMBean 开放的管理操作由一个或多个 operation 元素指定。<xref linkend=\"The_Operations-"
+"The_XMBean_operation_element_and_its_content_model\"/> 展示了 operation 元素和它的内容模型。"
 
 #. Tag: title
 #: J2EE_Reference_Introduction.xml:1034
@@ -3742,7 +4070,7 @@
 
 #. Tag: para
 #: J2EE_Reference_Introduction.xml:1071
-#, fuzzy, no-c-format
+#, no-c-format
 msgid ""
 "<emphasis role=\"bold\">name</emphasis>: This element contains the "
 "operation&#39;s name"
@@ -3750,7 +4078,7 @@
 
 #. Tag: para
 #: J2EE_Reference_Introduction.xml:1076
-#, fuzzy, no-c-format
+#, no-c-format
 msgid ""
 "<emphasis role=\"bold\">parameter</emphasis>: This element describes the "
 "operation&#39;s signature."
@@ -3785,15 +4113,16 @@
 
 #. Tag: para
 #: J2EE_Reference_Introduction.xml:1095
-#, fuzzy, no-c-format
+#, no-c-format
 msgid ""
 "The <literal>notification</literal> element(s) describes the management "
 "notifications that may be emitted by the XMBean. The notification element "
 "and its content model is shown in <xref linkend=\"Notifications-"
 "The_XMBean_notification_element_and_content_model\"/>."
 msgstr ""
-"<literal>notification</literal>元素描述可以被XMBean发送的管理通知(management "
-"notifications)。<xref linkend=\"ch2.xmnot.fig\"/>展示了notification元素和它的"
+"<literal>notification</literal> 元素描述可以被 XMBean 发送的管理通知(management "
+"notifications)。<xref linkend=\"Notifications-"
+"The_XMBean_notification_element_and_content_model\"/> 展示了 notification 元素和它的"
 "内容模型。"
 
 #. Tag: title
@@ -4032,14 +4361,14 @@
 msgstr ""
 "&lt;?xml version=\"1.0\"?&gt;\n"
 "&lt;!DOCTYPE web-app PUBLIC\n"
-"          \"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN\"\n"
+"          \"-//Sun Microsystems,Inc.//DTD Web Application 2.3//EN\"\n"
 "          \"http://java.sun.com/dtd/web-app_2_3.dtd\"&gt;\n"
 "&lt;web-app&gt;\n"
-"    &lt;!-- ... --&gt;\n"
+"    &lt;!-- ..。--&gt;\n"
 "    \n"
 "    &lt;!-- A security constraint that restricts access to the HTML JMX "
 "console\n"
-"         to users with the role JBossAdmin. Edit the roles to what you want "
+"         to users with the role JBossAdmin。Edit the roles to what you want "
 "and\n"
 "         uncomment the WEB-INF/jboss-web.xml/security-domain element to "
 "enable\n"
@@ -4102,9 +4431,9 @@
 "    \"http://www.jboss.org/j2ee/dtd/jboss-web_3_0.dtd\"&gt;\n"
 "&lt;jboss-web&gt;\n"
 "    &lt;!-- \n"
-"        Uncomment the security-domain to enable security. You will\n"
+"        Uncomment the security-domain to enable security。You will\n"
 "        need to edit the htmladaptor login configuration to setup the\n"
-"        login modules used to authentication users.      \n"
+"        login modules used to authentication users。     \n"
 "    --&gt;\n"
 "    &lt;security-domain&gt;java:/jaas/jmx-console&lt;/security-domain&gt;\n"
 "&lt;/jboss-web&gt;"
@@ -4286,7 +4615,7 @@
 "        // Invoke the list(boolean) op\n"
 "        String[] sig    = {\"boolean\"};\n"
 "        Object[] opArgs = {Boolean.TRUE};\n"
-"        Object   result = server.invoke(name, \"list\", opArgs, sig);\n"
+"        Object   result = server.invoke(name,\"list\",opArgs,sig);\n"
 "\n"
 "        System.out.println(\"JNDIView.list(true) output:\\n\"+result);\n"
 "    }\n"
@@ -4456,7 +4785,7 @@
 "     [java]   |   +- HsqlDbRealm (class: org.jboss.security.plugins."
 "SecurityDomainContext)\n"
 "     [java]   +- timedCacheFactory (class: javax.naming.Context)\n"
-"     [java] Failed to lookup: timedCacheFactory, errmsg=null\n"
+"     [java] Failed to lookup: timedCacheFactory,errmsg=null\n"
 "     [java]   +- TransactionPropagationContextExporter (class: org.jboss.tm."
 "TransactionPropag\n"
 "ationContextFactory)\n"
@@ -4580,15 +4909,15 @@
 "usage: twiddle.sh [options] &lt;command&gt; [command_arguments]\n"
 "\n"
 "options:\n"
-"    -h, --help                Show this help message\n"
+"    -h,--help                Show this help message\n"
 "        --help-commands       Show a list of commands\n"
 "    -H=&lt;command&gt;              Show command specific help\n"
 "    -c=command.properties     Specify the command.properties file to use\n"
 "    -D&lt;name&gt;[=&lt;value&gt;]        Set a system property\n"
 "    --                        Stop processing options\n"
-"    -s, --server=&lt;url&gt;        The JNDI URL of the remote server\n"
-"    -a, --adapter=&lt;name&gt;      The JNDI name of the RMI adapter to use\n"
-"    -q, --quiet               Be somewhat more quiet"
+"    -s,--server=&lt;url&gt;        The JNDI URL of the remote server\n"
+"    -a,--adapter=&lt;name&gt;      The JNDI name of the RMI adapter to use\n"
+"    -q,--quiet               Be somewhat more quiet"
 
 #. Tag: title
 #: J2EE_Reference_Introduction.xml:1222
@@ -4676,9 +5005,9 @@
 "usage: serverinfo [options]\n"
 "\n"
 "options:\n"
-"    -d, --domain    Get the default domain\n"
-"    -c, --count     Get the MBean count\n"
-"    -l, --list      List the MBeans\n"
+"    -d,--domain    Get the default domain\n"
+"    -c,--count     Get the MBean count\n"
+"    -l,--list      List the MBeans\n"
 "    --              Stop processing options\n"
 "[bin]$ ./twiddle.sh --server=toki serverinfo --count\n"
 "460\n"
@@ -4722,7 +5051,7 @@
 " \n"
 "usage: query [options] &lt;query&gt;\n"
 "options:\n"
-"    -c, --count    Display the matching MBean count\n"
+"    -c,--count    Display the matching MBean count\n"
 "    --             Stop processing options\n"
 "Examples:\n"
 " query all mbeans: query '*:*'\n"
@@ -5017,7 +5346,7 @@
 "usage: invoke [options] &lt;query&gt; &lt;operation&gt; (&lt;arg&gt;)*\n"
 "\n"
 "options:\n"
-"    -q, --query-type[=&lt;type&gt;]    Treat object name as a query\n"
+"    -q,--query-type[=&lt;type&gt;]    Treat object name as a query\n"
 "    --                           Stop processing options\n"
 "\n"
 "query type:\n"
@@ -5041,7 +5370,7 @@
 "  |   +- HsqlDbRealm (class: org.jboss.security.plugins."
 "SecurityDomainContext)\n"
 "  +- timedCacheFactory (class: javax.naming.Context)\n"
-"Failed to lookup: timedCacheFactory, errmsg=null\n"
+"Failed to lookup: timedCacheFactory,errmsg=null\n"
 "  +- TransactionPropagationContextExporter (class: org.jboss.tm."
 "TransactionPropagationContext\n"
 "Factory)\n"
@@ -5471,7 +5800,7 @@
 "JBoss MBean服务模式由提供状态变化通知(state change notifications)的一系列的生"
 "命周期操作(life cycle operations)组成。notifications通知MBean服务什么时候可以"
 "创建,停止和删除(destroy)它自己。MBean服务生命周期的管理由三个JBoss MBean负"
-"责:<literal>SARDeployer</literal>, <literal>ServiceConfigurator</literal> "
+"责:<literal>SARDeployer</literal>,<literal>ServiceConfigurator</literal> "
 "和 <literal>ServiceController</literal>。"
 
 #. Tag: title
@@ -6180,7 +6509,7 @@
 "        jboss.mq:service=SecurityManager\n"
 "    &lt;/depends&gt;\n"
 "\n"
-"    &lt;!-- ... --&gt;\n"
+"    &lt;!-- ..。--&gt;\n"
 "\n"
 "    &lt;!-- Declare a dependency on the\n"
 "         \"jboss.mq:service=CacheManager\" without\n"
@@ -6311,10 +6640,10 @@
 "String\"/&gt;\n"
 "                &lt;/properties&gt;\n"
 "            &lt;/attribute&gt;\n"
-"            &lt;!-- ... --&gt;\n"
+"            &lt;!-- ..。--&gt;\n"
 "        &lt;/mbean&gt;\n"
 "    &lt;/depends&gt;\n"
-"    &lt;!-- ... --&gt;\n"
+"    &lt;!-- ..。--&gt;\n"
 "&lt;/mbean&gt;"
 
 #. Tag: title
@@ -6567,16 +6896,16 @@
 "literal>\", \"<literal>TAGS</literal>\", \"<literal>core</literal>\", "
 "\"<literal>tags</literal>\""
 msgstr ""
-"\"<literal>#*</literal>\", \"<literal>%*</literal>\", \"<literal>,*</literal>"
-"\", \"<literal>.*</literal>\", \"<literal>_$*</literal>\", \"<literal>*#</"
-"literal>\", \"<literal>*$</literal>\", \"<literal>*%</literal>\", "
-"\"<literal>*.BAK</literal>\", \"<literal>*.old</literal>\", \"<literal>*."
-"orig</literal>\", \"<literal>*.rej</literal>\", \"<literal>*.bak</literal>"
-"\", \"<literal>*.sh</literal>\", \"<literal>*,v</literal>\", \"<literal>*~</"
-"literal>\", \"<literal>.make.state</literal>\", \"<literal>.nse_depinfo</"
-"literal>\", \"<literal>CVS</literal>\", \"<literal>CVS.admin</literal>\", "
-"\"<literal>RCS</literal>\", \"<literal>RCSLOG</literal>\", \"<literal>SCCS</"
-"literal>\", \"<literal>TAGS</literal>\", \"<literal>core</literal>\", "
+"\"<literal>#*</literal>\",\"<literal>%*</literal>\",\"<literal>,*</literal>"
+"\",\"<literal>.*</literal>\",\"<literal>_$*</literal>\",\"<literal>*#</"
+"literal>\",\"<literal>*$</literal>\",\"<literal>*%</literal>\","
+"\"<literal>*.BAK</literal>\",\"<literal>*.old</literal>\",\"<literal>*."
+"orig</literal>\",\"<literal>*.rej</literal>\",\"<literal>*.bak</literal>"
+"\",\"<literal>*.sh</literal>\",\"<literal>*,v</literal>\",\"<literal>*~</"
+"literal>\",\"<literal>.make.state</literal>\",\"<literal>.nse_depinfo</"
+"literal>\",\"<literal>CVS</literal>\",\"<literal>CVS.admin</literal>\","
+"\"<literal>RCS</literal>\",\"<literal>RCSLOG</literal>\",\"<literal>SCCS</"
+"literal>\",\"<literal>TAGS</literal>\",\"<literal>core</literal>\","
 "\"<literal>tags</literal>\""
 
 #. Tag: para
@@ -6921,7 +7250,7 @@
 "        InitialContext rootCtx = new InitialContext();\n"
 "        Name fullName = rootCtx.getNameParser(\"\").parse(jndiName);\n"
 "        System.out.println(\"fullName=\"+fullName);\n"
-"        NonSerializableFactory.rebind(fullName, contextMap, true);\n"
+"        NonSerializableFactory.rebind(fullName,contextMap,true);\n"
 "    }\n"
 "\n"
 "    private void unbind(String jndiName)\n"
@@ -7127,7 +7456,7 @@
 "        InitialContext rootCtx = new InitialContext();\n"
 "        Name fullName = rootCtx.getNameParser(\"\").parse(jndiName);\n"
 "        log.info(\"fullName=\"+fullName);\n"
-"        NonSerializableFactory.rebind(fullName, contextMap, true);\n"
+"        NonSerializableFactory.rebind(fullName,contextMap,true);\n"
 "    }\n"
 "\n"
 "    private void unbind(String jndiName)\n"
@@ -7137,7 +7466,7 @@
 "            rootCtx.unbind(jndiName);\n"
 "            NonSerializableFactory.unbind(jndiName);\n"
 "        } catch(NamingException e) {\n"
-"            log.error(\"Failed to unbind map\", e);\n"
+"            log.error(\"Failed to unbind map\",e);\n"
 "        }\n"
 "    }\n"
 "}"
@@ -7262,7 +7591,7 @@
 #: J2EE_Reference_Introduction.xml:1781
 #, no-c-format
 msgid "Version 1, The Annotated JNDIMap XMBean"
-msgstr "Version 1, The Annotated JNDIMap XMBean"
+msgstr "Version 1,The Annotated JNDIMap XMBean"
 
 #. Tag: para
 #: J2EE_Reference_Introduction.xml:1782
@@ -7457,12 +7786,12 @@
 "               setMethod=\"setInitialValues\"&gt;\n"
 "        &lt;description&gt;The array of initial values that will be placed "
 "into the\n"
-"            map associated with the service. The array is a collection of\n"
+"            map associated with the service。The array is a collection of\n"
 "            key,value pairs with elements[0,2,4,...2n] being the keys and\n"
-"            elements [1,3,5,...,2n+1] the associated values. The\n"
+"            elements [1,3,5,...,2n+1] the associated values。The\n"
 "            \"[Ljava.lang.String;\" type signature is the VM representation "
 "of the\n"
-"            java.lang.String[] type. &lt;/description&gt;\n"
+"            java.lang.String[] type。&lt;/description&gt;\n"
 "        &lt;name&gt;InitialValues&lt;/name&gt;\n"
 "        &lt;type&gt;[Ljava.lang.String;&lt;/type&gt;\n"
 "        &lt;descriptors&gt;\n"
@@ -7595,27 +7924,27 @@
 "     [java]  + [Ljava.lang.String; getInitialValues()\n"
 "     [java]  + void setInitialValues([Ljava.lang.String; chap2.xmbean:"
 "service=JNDIMap)\n"
-"     [java] handleNotification, event: null\n"
-"     [java] key=key10, value=value10\n"
-"     [java] handleNotification, event: javax.management.Notification"
+"     [java] handleNotification,event: null\n"
+"     [java] key=key10,value=value10\n"
+"     [java] handleNotification,event: javax.management.Notification"
 "[source=chap2.xmbean:s\n"
 "ervice=JNDIMap,type=org.jboss.chap2.xmbean.JNDIMap.put,sequenceNumber=7,"
 "timeStamp=10986326\n"
 "93716,message=null,userData=null]\n"
-"     [java] JNDIMap.put(key1, value1) successful\n"
-"     [java] handleNotification, event: javax.management.Notification"
+"     [java] JNDIMap.put(key1,value1) successful\n"
+"     [java] handleNotification,event: javax.management.Notification"
 "[source=chap2.xmbean:s\n"
 "ervice=JNDIMap,type=org.jboss.chap2.xmbean.JNDIMap.get,sequenceNumber=8,"
 "timeStamp=10986326\n"
 "93857,message=null,userData=null]\n"
 "     [java] JNDIMap.get(key0): null\n"
-"     [java] handleNotification, event: javax.management.Notification"
+"     [java] handleNotification,event: javax.management.Notification"
 "[source=chap2.xmbean:s\n"
 "ervice=JNDIMap,type=org.jboss.chap2.xmbean.JNDIMap.get,sequenceNumber=9,"
 "timeStamp=10986326\n"
 "93896,message=null,userData=null]\n"
 "     [java] JNDIMap.get(key1): value1\n"
-"     [java] handleNotification, event: javax.management.Notification"
+"     [java] handleNotification,event: javax.management.Notification"
 "[source=chap2.xmbean:s\n"
 "ervice=JNDIMap,type=org.jboss.chap2.xmbean.JNDIMap.put,sequenceNumber=10,"
 "timeStamp=1098632\n"
@@ -7839,7 +8168,7 @@
 "               setMethod=\"setInitialValues\"&gt;\n"
 "        &lt;description&gt;The array of initial values that will be placed "
 "into the\n"
-"            map associated with the service. The array is a collection of\n"
+"            map associated with the service。The array is a collection of\n"
 "            key,value pairs with elements[0,2,4,...2n] being the keys and\n"
 "            elements [1,3,5,...,2n+1] the associated values&lt;/"
 "description&gt;\n"
@@ -7979,27 +8308,27 @@
 "     [java]  + [Ljava.lang.String; getInitialValues()\n"
 "     [java]  + void setInitialValues([Ljava.lang.String; chap2.xmbean:"
 "service=JNDIMap)\n"
-"     [java] handleNotification, event: null\n"
-"     [java] key=key10, value=value10\n"
-"     [java] handleNotification, event: javax.management.Notification"
+"     [java] handleNotification,event: null\n"
+"     [java] key=key10,value=value10\n"
+"     [java] handleNotification,event: javax.management.Notification"
 "[source=chap2.xmbean:s\n"
 "ervice=JNDIMap,type=org.jboss.chap2.xmbean.JNDIMap.put,sequenceNumber=7,"
 "timeStamp=10986326\n"
 "93716,message=null,userData=null]\n"
-"     [java] JNDIMap.put(key1, value1) successful\n"
-"     [java] handleNotification, event: javax.management.Notification"
+"     [java] JNDIMap.put(key1,value1) successful\n"
+"     [java] handleNotification,event: javax.management.Notification"
 "[source=chap2.xmbean:s\n"
 "ervice=JNDIMap,type=org.jboss.chap2.xmbean.JNDIMap.get,sequenceNumber=8,"
 "timeStamp=10986326\n"
 "93857,message=null,userData=null]\n"
 "     [java] JNDIMap.get(key0): null\n"
-"     [java] handleNotification, event: javax.management.Notification"
+"     [java] handleNotification,event: javax.management.Notification"
 "[source=chap2.xmbean:s\n"
 "ervice=JNDIMap,type=org.jboss.chap2.xmbean.JNDIMap.get,sequenceNumber=9,"
 "timeStamp=10986326\n"
 "93896,message=null,userData=null]\n"
 "     [java] JNDIMap.get(key1): value1\n"
-"     [java] handleNotification, event: javax.management.Notification"
+"     [java] handleNotification,event: javax.management.Notification"
 "[source=chap2.xmbean:s\n"
 "ervice=JNDIMap,type=org.jboss.chap2.xmbean.JNDIMap.put,sequenceNumber=10,"
 "timeStamp=1098632\n"
@@ -8029,7 +8358,7 @@
 "[examples] ant -Dchap=chap2 -Dex=xmbean2a run-example\n"
 "...\n"
 "     [java] InitialValues.length=2\n"
-"     [java] key=key10, value=value10"
+"     [java] key=key10,value=value10"
 
 #. Tag: programlisting
 #: J2EE_Reference_Introduction.xml:1825
@@ -8044,8 +8373,8 @@
 "[examples] ant -Dchap=chap2 -Dex=xmbean2a run-example\n"
 "...\n"
 "     [java] InitialValues.length=4\n"
-"     [java] key=key10, value=value10\n"
-"     [java] key=key2, value=value2"
+"     [java] key=key10,value=value10\n"
+"     [java] key=key2,value=value2"
 
 #. Tag: programlisting
 #: J2EE_Reference_Introduction.xml:1828
@@ -8061,9 +8390,9 @@
 "[examples] ant -Dchap=chap2 -Dex=xmbean2a run-example\n"
 "...\n"
 "     [java] InitialValues.length=6\n"
-"     [java] key=key10, value=value10\n"
-"     [java] key=key2, value=value2\n"
-"     [java] key=key3, value=value3"
+"     [java] key=key10,value=value10\n"
+"     [java] key=key2,value=value2\n"
+"     [java] key=key3,value=value3"
 
 #. Tag: para
 #: J2EE_Reference_Introduction.xml:1830
@@ -8135,6 +8464,58 @@
 "    }\n"
 "}"
 msgstr ""
+"package org.jboss.book.jmx.xmbean;\n"
+"\n"
+"import javax.management.Attribute;\n"
+"import javax.management.ObjectName;\n"
+"import javax.naming.InitialContext;\n"
+"\n"
+"import org.jboss.jmx.adaptor.rmi.RMIAdaptor;\n"
+"\n"
+"/**\n"
+" *  A client that demonstrates the persistence of the xmbean\n"
+" *  attributes. Every time it run it looks up the InitialValues\n"
+" *  attribute, prints it out and then adds a new key/value to the\n"
+" *  list.\n"
+" *  \n"
+" *  @author Scott.Stark at jboss.org\n"
+" *  @version $Revision: 1.1 $\n"
+" */\n"
+"public class TestXMBeanRestart\n"
+"{\n"
+"    /**\n"
+"     * @param args the command line arguments\n"
+"     */\n"
+"    public static void main(String[] args) throws Exception\n"
+"    {\n"
+"        InitialContext ic = new InitialContext();\n"
+"        RMIAdaptor server = (RMIAdaptor) ic.lookup(\"jmx/rmi/RMIAdaptor\");\n"
+"        \n"
+"        // Get the InitialValues attribute\n"
+"        ObjectName name = new ObjectName(\"j2eechap2.xmbean:service=JNDIMap"
+"\");\n"
+"        String[] initialValues = (String[])\n"
+"            server.getAttribute(name, \"InitialValues\");\n"
+"        System.out.println(\"InitialValues.length=\"+initialValues.length);\n"
+"        int length = initialValues.length;\n"
+"        for (int n = 0; n &lt; length; n += 2) {\n"
+"            String key = initialValues[n];\n"
+"            String value = initialValues[n+1];\n"
+"            \n"
+"            System.out.println(\"key=\"+key+\", value=\"+value);\n"
+"        }\n"
+"        // Add a new key/value pair\n"
+"        String[] newInitialValues = new String[length+2];\n"
+"        System.arraycopy(initialValues, 0, newInitialValues,\n"
+"                         0, length);\n"
+"        newInitialValues[length] = \"key\"+(length/2+1);\n"
+"        newInitialValues[length+1] = \"value\"+(length/2+1);\n"
+"        \n"
+"        Attribute ivalues = new\n"
+"            Attribute(\"InitialValues\", newInitialValues);\n"
+"        server.setAttribute(name, ivalues);\n"
+"    }\n"
+"}"
 
 #. Tag: para
 #: J2EE_Reference_Introduction.xml:1834
@@ -8149,7 +8530,7 @@
 
 #. Tag: programlisting
 #: J2EE_Reference_Introduction.xml:1837
-#, fuzzy, no-c-format
+#, no-c-format
 msgid ""
 "[examples]$ ant -Dchap=jmx -Dex=xmbean2 run-example\n"
 "...\n"
@@ -8214,9 +8595,9 @@
 "timeStamp=10986\n"
 "33665614,message=null,userData=null]"
 msgstr ""
-"[examples]$ ant -Dchap=chap2 -Dex=xmbean2 run-example\n"
+"[examples]$ ant -Dchap=jmx -Dex=xmbean2 run-example\n"
 "...\n"
-" \n"
+"\n"
 "run-examplexmbean2:\n"
 "     [java] JNDIMap Class: org.jboss.mx.modelmbean.XMBean\n"
 "     [java] JNDIMap Operations: \n"
@@ -8240,42 +8621,42 @@
 "     [java] <emphasis role=\"bold\">key=key4, value=value4</emphasis>\n"
 "     [java] handleNotification, event: javax.management.Notification"
 "[source=chap2.xmbean:s\n"
-"ervice=JNDIMap,type=org.jboss.chap2.xmbean.JNDIMap.put,sequenceNumber=3,"
-"timeStamp=10986336\n"
-"64712,message=null,userData=null]\n"
+"ervice=JNDIMap,type=org.jboss.book.jmx.xmbean.JNDIMap.put,sequenceNumber=3,"
+"timeStamp=10986\n"
+"33664712,message=null,userData=null]\n"
 "     [java] JNDIMap.put(key1, value1) successful\n"
 "     [java] handleNotification, event: javax.management.Notification"
 "[source=chap2.xmbean:s\n"
-"ervice=JNDIMap,type=org.jboss.chap2.xmbean.JNDIMap.get,sequenceNumber=4,"
-"timeStamp=10986336\n"
-"64821,message=null,userData=null]\n"
+"ervice=JNDIMap,type=org.jboss.book.jmx.xmbean.JNDIMap.get,sequenceNumber=4,"
+"timeStamp=10986\n"
+"33664821,message=null,userData=null]\n"
 "     [java] JNDIMap.get(key0): null\n"
 "     [java] handleNotification, event: javax.management.Notification"
 "[source=chap2.xmbean:s\n"
-"ervice=JNDIMap,type=org.jboss.chap2.xmbean.JNDIMap.get,sequenceNumber=5,"
-"timeStamp=10986336\n"
-"64860,message=null,userData=null]\n"
+"ervice=JNDIMap,type=org.jboss.book.jmx.xmbean.JNDIMap.get,sequenceNumber=5,"
+"timeStamp=10986\n"
+"33664860,message=null,userData=null]\n"
 "     [java] JNDIMap.get(key1): value1\n"
 "     [java] handleNotification, event: javax.management.Notification"
 "[source=chap2.xmbean:s\n"
-"ervice=JNDIMap,type=org.jboss.chap2.xmbean.JNDIMap.put,sequenceNumber=6,"
-"timeStamp=10986336\n"
-"64877,message=null,userData=null]\n"
+"ervice=JNDIMap,type=org.jboss.book.jmx.xmbean.JNDIMap.put,sequenceNumber=6,"
+"timeStamp=10986\n"
+"33664877,message=null,userData=null]\n"
 "     [java] handleNotification, event: javax.management.Notification"
 "[source=chap2.xmbean:s\n"
-"ervice=JNDIMap,type=org.jboss.chap2.xmbean.JNDIMap.put,sequenceNumber=7,"
-"timeStamp=10986336\n"
-"64895,message=null,userData=null]\n"
+"ervice=JNDIMap,type=org.jboss.book.jmx.xmbean.JNDIMap.put,sequenceNumber=7,"
+"timeStamp=10986\n"
+"33664895,message=null,userData=null]\n"
 "     [java] handleNotification, event: javax.management.Notification"
 "[source=chap2.xmbean:s\n"
-"ervice=JNDIMap,type=org.jboss.chap2.xmbean.JNDIMap.put,sequenceNumber=8,"
-"timeStamp=10986336\n"
-"64899,message=null,userData=null]\n"
+"ervice=JNDIMap,type=org.jboss.book.jmx.xmbean.JNDIMap.put,sequenceNumber=8,"
+"timeStamp=10986\n"
+"33664899,message=null,userData=null]\n"
 "     [java] handleNotification, event: javax.management.Notification"
 "[source=chap2.xmbean:s\n"
-"ervice=JNDIMap,type=org.jboss.chap2.xmbean.JNDIMap.put,sequenceNumber=9,"
-"timeStamp=10986336\n"
-"65614,message=null,userData=null]"
+"ervice=JNDIMap,type=org.jboss.book.jmx.xmbean.JNDIMap.put,sequenceNumber=9,"
+"timeStamp=10986\n"
+"33665614,message=null,userData=null]"
 
 #. Tag: para
 #: J2EE_Reference_Introduction.xml:1838
@@ -8721,6 +9102,346 @@
 "    \n"
 "}"
 msgstr ""
+"package org.jboss.book.jmx.ex3;\n"
+"            \n"
+"import java.lang.reflect.Method;\n"
+"import javax.ejb.CreateException;\n"
+"import javax.management.Attribute;\n"
+"import javax.management.AttributeList;\n"
+"import javax.management.AttributeNotFoundException;\n"
+"import javax.management.DynamicMBean;\n"
+"import javax.management.InvalidAttributeValueException;\n"
+"import javax.management.JMRuntimeException;\n"
+"import javax.management.MBeanAttributeInfo;\n"
+"import javax.management.MBeanConstructorInfo;\n"
+"import javax.management.MBeanInfo;\n"
+"import javax.management.MBeanNotificationInfo;\n"
+"import javax.management.MBeanOperationInfo;\n"
+"import javax.management.MBeanException;\n"
+"import javax.management.MBeanServer;\n"
+"import javax.management.ObjectName;\n"
+"import javax.management.ReflectionException;\n"
+"import javax.naming.InitialContext;\n"
+"import javax.naming.NamingException;\n"
+"\n"
+"import org.jboss.system.ServiceMBeanSupport;\n"
+"\n"
+"/** \n"
+" *  An example of a DynamicMBean that exposes select attributes and\n"
+" *  operations of an EJB as an MBean.\n"
+" *  @author Scott.Stark at jboss.org\n"
+" *  @version $Revision: 1.1 $\n"
+" */\n"
+"public class EjbMBeanAdaptor extends ServiceMBeanSupport\n"
+"    implements DynamicMBean\n"
+"{\n"
+"    private String helloPrefix;\n"
+"    private String ejbJndiName;\n"
+"    private EchoLocalHome home;\n"
+"    \n"
+"    /** These are the mbean attributes we expose\n"
+"     */\n"
+"    private MBeanAttributeInfo[] attributes = {\n"
+"        new MBeanAttributeInfo(\"HelloPrefix\", \"java.lang.String\",\n"
+"                               \"The prefix message to append to the session "
+"echo reply\",\n"
+"                               true, // isReadable\n"
+"                               true, // isWritable\n"
+"                               false), // isIs\n"
+"        new MBeanAttributeInfo(\"EjbJndiName\", \"java.lang.String\",\n"
+"                               \"The JNDI name of the session bean local home"
+"\",\n"
+"                               true, // isReadable\n"
+"                               true, // isWritable\n"
+"                               false) // isIs\n"
+"    };\n"
+"\n"
+"    /** \n"
+"     * These are the mbean operations we expose\n"
+"     */\n"
+"    private MBeanOperationInfo[] operations;\n"
+"    \n"
+"    /** \n"
+"     * We override this method to setup our echo operation info. It\n"
+"     * could also be done in a ctor.\n"
+"     */\n"
+"    public ObjectName preRegister(MBeanServer server,\n"
+"                                  ObjectName name)\n"
+"        throws Exception\n"
+"    {\n"
+"        log.info(\"preRegister notification seen\");\n"
+"        \n"
+"        operations = new MBeanOperationInfo[5];\n"
+"        \n"
+"        Class thisClass = getClass();\n"
+"        Class[] parameterTypes = {String.class};\n"
+"        Method echoMethod =\n"
+"            thisClass.getMethod(\"echo\", parameterTypes);\n"
+"        String desc = \"The echo op invokes the session bean echo method and"
+"\"\n"
+"            + \" returns its value prefixed with the helloPrefix attribute "
+"value\";\n"
+"        operations[0] = new MBeanOperationInfo(desc, echoMethod);\n"
+"            \n"
+"        // Add the Service interface operations from our super class\n"
+"        parameterTypes = new Class[0];\n"
+"        Method createMethod =\n"
+"            thisClass.getMethod(\"create\", parameterTypes);\n"
+"        operations[1] = new MBeanOperationInfo(\"The\n"
+"                JBoss Service.create\", createMethod);\n"
+"        Method startMethod =\n"
+"            thisClass.getMethod(\"start\", parameterTypes);\n"
+"        operations[2] = new MBeanOperationInfo(\"The\n"
+"                JBoss Service.start\", startMethod);\n"
+"        Method stopMethod =\n"
+"            thisClass.getMethod(\"stop\", parameterTypes);\n"
+"        operations[3] = new MBeanOperationInfo(\"The\n"
+"                JBoss Service.stop\", startMethod);\n"
+"        Method destroyMethod =\n"
+"            thisClass.getMethod(\"destroy\", parameterTypes);\n"
+"        operations[4] = new MBeanOperationInfo(\"The\n"
+"                JBoss Service.destroy\", startMethod);\n"
+"        return name;\n"
+"    }\n"
+"    \n"
+"    \n"
+"    // --- Begin ServiceMBeanSupport overides\n"
+"    protected void createService() throws Exception\n"
+"    {\n"
+"        log.info(\"Notified of create state\");\n"
+"    }\n"
+"\n"
+"    protected void startService() throws Exception\n"
+"    {\n"
+"        log.info(\"Notified of start state\");\n"
+"        InitialContext ctx = new InitialContext();\n"
+"        home = (EchoLocalHome) ctx.lookup(ejbJndiName);\n"
+"    }\n"
+"\n"
+"    protected void stopService()\n"
+"    {\n"
+"        log.info(\"Notified of stop state\");\n"
+"    }\n"
+"\n"
+"    // --- End ServiceMBeanSupport overides\n"
+"            \n"
+"    public String getHelloPrefix()\n"
+"    {\n"
+"        return helloPrefix;\n"
+"    }\n"
+"    public void setHelloPrefix(String helloPrefix)\n"
+"    {\n"
+"        this.helloPrefix = helloPrefix;\n"
+"    }\n"
+"    \n"
+"    public String getEjbJndiName()\n"
+"    {\n"
+"        return ejbJndiName;\n"
+"    }\n"
+"    public void setEjbJndiName(String ejbJndiName)\n"
+"    {\n"
+"        this.ejbJndiName = ejbJndiName;\n"
+"    }\n"
+"    \n"
+"    public String echo(String arg)\n"
+"        throws CreateException, NamingException\n"
+"    {\n"
+"        log.debug(\"Lookup EchoLocalHome@\"+ejbJndiName);\n"
+"        EchoLocal bean = home.create();\n"
+"        String echo = helloPrefix + bean.echo(arg);\n"
+"        return echo;\n"
+"    }\n"
+"    \n"
+"    // --- Begin DynamicMBean interface methods\n"
+"    /** \n"
+"     *  Returns the management interface that describes this dynamic\n"
+"     *  resource.  It is the responsibility of the implementation to\n"
+"     *  make sure the description is accurate.\n"
+"     *\n"
+"     * @return the management interface descriptor.\n"
+"     */\n"
+"    public MBeanInfo getMBeanInfo()\n"
+"    {\n"
+"        String classname = getClass().getName();\n"
+"        String description = \"This is an MBean that uses a session bean in "
+"the\"\n"
+"            + \" implementation of its echo operation.\";\n"
+"        MBeanInfo[] constructors = null;\n"
+"        MBeanNotificationInfo[] notifications = null;\n"
+"        MBeanInfo mbeanInfo = new MBeanInfo(classname,\n"
+"                                            description, attributes,\n"
+"                                            constructors, operations,\n"
+"                                            notifications);\n"
+"        // Log when this is called so we know when in the\n"
+"        lifecycle this is used\n"
+"            Throwable trace = new Throwable(\"getMBeanInfo trace\");\n"
+"        log.info(\"Don&#39;t panic, just a stack\n"
+"                trace\", trace);\n"
+"        return mbeanInfo;\n"
+"    }\n"
+"    \n"
+"    /** \n"
+"     *  Returns the value of the attribute with the name matching the\n"
+"     *  passed string.\n"
+"     *\n"
+"     * @param attribute the name of the attribute.\n"
+"     * @return the value of the attribute.\n"
+"     * @exception AttributeNotFoundException when there is no such\n"
+"     * attribute.\n"
+"     * @exception MBeanException wraps any error thrown by the\n"
+"     * resource when\n"
+"     * getting the attribute.\n"
+"     * @exception ReflectionException wraps any error invoking the\n"
+"     * resource.\n"
+"     */\n"
+"    public Object getAttribute(String attribute)\n"
+"        throws AttributeNotFoundException, \n"
+"               MBeanException, \n"
+"               ReflectionException\n"
+"    {\n"
+"        Object value = null;\n"
+"        if (attribute.equals(\"HelloPrefix\")) {\n"
+"            value = getHelloPrefix();\n"
+"        } else if(attribute.equals(\"EjbJndiName\")) {\n"
+"            value = getEjbJndiName();\n"
+"        } else {\n"
+"            throw new AttributeNotFoundException(\"Unknown\n"
+"                attribute(\"+attribute+\") requested\");\n"
+"        }\n"
+"        return value;\n"
+"    }\n"
+"            \n"
+"    /** \n"
+"     * Returns the values of the attributes with names matching the\n"
+"     * passed string array.\n"
+"     *\n"
+"     * @param attributes the names of the attribute.\n"
+"     * @return an {@link AttributeList AttributeList} of name\n"
+"     * and value pairs.\n"
+"     */\n"
+"    public AttributeList getAttributes(String[] attributes)\n"
+"    {\n"
+"        AttributeList values = new AttributeList();\n"
+"        for (int a = 0; a &lt; attributes.length; a++) {\n"
+"            String name = attributes[a];\n"
+"            try {\n"
+"                Object value = getAttribute(name);\n"
+"                Attribute attr = new Attribute(name, value);\n"
+"                values.add(attr);\n"
+"            } catch(Exception e) {\n"
+"                log.error(\"Failed to find attribute: \"+name, e);\n"
+"            }\n"
+"        }\n"
+"        return values;\n"
+"    }\n"
+"            \n"
+"    /**\n"
+"     *  Sets the value of an attribute. The attribute and new value\n"
+"     *  are passed in the name value pair {@link Attribute\n"
+"     *  Attribute}.\n"
+"     *\n"
+"     * @see javax.management.Attribute\n"
+"     *\n"
+"     * @param attribute the name and new value of the attribute.\n"
+"     * @exception AttributeNotFoundException when there is no such\n"
+"     * attribute.\n"
+"     * @exception InvalidAttributeValueException when the new value\n"
+"     * cannot be converted to the type of the attribute.\n"
+"     * @exception MBeanException wraps any error thrown by the\n"
+"     * resource when setting the new value.\n"
+"     * @exception ReflectionException wraps any error invoking the\n"
+"     * resource.\n"
+"     */\n"
+"    public void setAttribute(Attribute attribute)\n"
+"        throws AttributeNotFoundException, \n"
+"               InvalidAttributeValueException,\n"
+"               MBeanException, \n"
+"               ReflectionException\n"
+"    {\n"
+"        String name = attribute.getName();\n"
+"        if (name.equals(\"HelloPrefix\")) { \n"
+"            String value = attribute.getValue().toString();\n"
+"            setHelloPrefix(value);\n"
+"        } else if(name.equals(\"EjbJndiName\")) {\n"
+"            String value = attribute.getValue().toString();\n"
+"            setEjbJndiName(value);\n"
+"        } else {\n"
+"            throw new AttributeNotFoundException(\"Unknown attribute(\"+name+"
+"\") requested\");\n"
+"        }\n"
+"    }\n"
+"            \n"
+"    /**\n"
+"     * Sets the values of the attributes passed as an\n"
+"     * {@link AttributeList AttributeList} of name and new\n"
+"     * value pairs.\n"
+"     *\n"
+"     * @param attributes the name an new value pairs.\n"
+"     * @return an {@link AttributeList AttributeList} of name and\n"
+"     * value pairs that were actually set.\n"
+"     */\n"
+"    public AttributeList setAttributes(AttributeList attributes)\n"
+"    {\n"
+"        AttributeList setAttributes = new AttributeList();\n"
+"        for(int a = 0; a &lt; attributes.size(); a++) {\n"
+"            Attribute attr = (Attribute) attributes.get(a);\n"
+"            try {\n"
+"                setAttribute(attr);\n"
+"                setAttributes.add(attr);\n"
+"            } catch(Exception ignore) {\n"
+"            }\n"
+"        }\n"
+"        return setAttributes;\n"
+"    }\n"
+"    \n"
+"    /**\n"
+"     *  Invokes a resource operation.\n"
+"     *\n"
+"     *  @param actionName the name of the operation to perform.\n"
+"     *  @param params the parameters to pass to the operation.\n"
+"     *  @param signature the signartures of the parameters.\n"
+"     *  @return the result of the operation.\n"
+"     *  @exception MBeanException wraps any error thrown by the\n"
+"     *  resource when performing the operation.\n"
+"     *  @exception ReflectionException wraps any error invoking the\n"
+"     *  resource.\n"
+"     */\n"
+"    public Object invoke(String actionName, Object[] params,\n"
+"                         String[] signature)\n"
+"        throws MBeanException,\n"
+"               ReflectionException\n"
+"    {\n"
+"        Object rtnValue = null;\n"
+"        log.debug(\"Begin invoke, actionName=\"+actionName);\n"
+"        try {\n"
+"            if (actionName.equals(\"echo\")) {\n"
+"                String arg = (String) params[0];\n"
+"                rtnValue = echo(arg);\n"
+"                log.debug(\"Result: \"+rtnValue);\n"
+"            } else if (actionName.equals(\"create\")) {\n"
+"                super.create();\n"
+"            } else if (actionName.equals(\"start\")) {\n"
+"                super.start();\n"
+"            } else if (actionName.equals(\"stop\")) {\n"
+"                super.stop();\n"
+"            } else if (actionName.equals(\"destroy\")) {\n"
+"                super.destroy();\n"
+"            } else {\n"
+"                throw new JMRuntimeException(\"Invalid state,\n"
+"                don&#39;t know about op=\"+actionName);\n"
+"            }\n"
+"        } catch(Exception e) {\n"
+"            throw new ReflectionException(e, \"echo failed\");\n"
+"        }\n"
+"\n"
+"\n"
+"        log.debug(\"End invoke, actionName=\"+actionName);\n"
+"        return rtnValue;\n"
+"    }\n"
+"    \n"
+"    // --- End DynamicMBean interface methods\n"
+"    \n"
+"}"
 
 #. Tag: para
 #: J2EE_Reference_Introduction.xml:1860
@@ -8778,7 +9499,7 @@
 "    public void setHelloPrefix(String prefix);\n"
 "    public String getEjbJndiName();\n"
 "    public void setEjbJndiName(String jndiName);\n"
-"    public String echo(String arg) throws CreateException, NamingException;\n"
+"    public String echo(String arg) throws CreateException,NamingException;\n"
 "    public void create() throws Exception;\n"
 "    public void start() throws Exception;\n"
 "    public void stop();\n"
@@ -8806,7 +9527,7 @@
 "interface."
 msgstr ""
 "回到67—83行,这里是MBean操作元数据构造的地方。<literal>echo(String)</"
-"literal>, <literal>create()</literal>,<literal>start()</literal>,"
+"literal>,<literal>create()</literal>,<literal>start()</literal>,"
 "<literal>stop()</literal> 和<literal>destroy()</literal>操作通过获取相应的"
 "java.lang.reflect.Method对象和加入描述来定义。让我们遍历这段代码,讨论这个接"
 "口实现在什么地方,而且MBean怎么使用EJB。从40-51行开始,创建的两个"
@@ -9059,6 +9780,76 @@
 "/tmp60550jmx-ex3.ear-contents/jmx-ex3.jar                    \n"
 "14:57:14,075 INFO  [EARDeployer] Started J2EE application: ..."
 msgstr ""
+"14:57:12,906 INFO  [EARDeployer] Init J2EE application: file:/private/tmp/"
+"jboss-eap-4.3/jboss-as/server/\n"
+"        production/deploy/j2ee_chap2-ex3.ear\n"
+"14:57:13,044 INFO  [EjbMBeanAdaptor] Don&#39;t panic, just a stack trace\n"
+"java.lang.Throwable: getMBeanInfo trace\n"
+"  at org.jboss.book.jmx.ex3.EjbMBeanAdaptor.getMBeanInfo(EjbMBeanAdaptor."
+"java:153)\n"
+"...\n"
+"14:57:13,088 INFO  [EjbMBeanAdaptor] preRegister notification seen\n"
+"14:57:13,093 INFO  [EjbMBeanAdaptor] Don&#39;t panic, just a stack trace\n"
+"java.lang.Throwable: getMBeanInfo trace\n"
+"  at org.jboss.book.jmx.ex3.EjbMBeanAdaptor.getMBeanInfo(EjbMBeanAdaptor."
+"java:153)\n"
+"...\n"
+"14:57:13,117 INFO  [EjbMBeanAdaptor] Don&#39;t panic, just a stack trace\n"
+"java.lang.Throwable: getMBeanInfo trace\n"
+"  at org.jboss.book.jmx.ex3.EjbMBeanAdaptor.getMBeanInfo(EjbMBeanAdaptor."
+"java:153)\n"
+"...        \n"
+"14:57:13,140 WARN  [EjbMBeanAdaptor] Unexcepted error accessing MBeanInfo "
+"for null\n"
+"java.lang.NullPointerException\n"
+"  at org.jboss.system.ServiceMBeanSupport.postRegister(ServiceMBeanSupport."
+"java:418)\n"
+"...\n"
+"14:57:13,203 INFO  [EjbMBeanAdaptor] Don&#39;t panic, just a stack trace\n"
+"java.lang.Throwable: getMBeanInfo trace\n"
+"  at org.jboss.book.jmx.ex3.EjbMBeanAdaptor.getMBeanInfo(EjbMBeanAdaptor."
+"java:153)\n"
+"... \n"
+"14:57:13,232 INFO  [EjbMBeanAdaptor] Don&#39;t panic, just a stack trace\n"
+"java.lang.Throwable: getMBeanInfo trace\n"
+"  at org.jboss.book.jmx.ex3.EjbMBeanAdaptor.getMBeanInfo(EjbMBeanAdaptor."
+"java:153)\n"
+"...\n"
+"14:57:13,420 INFO  [EjbModule] Deploying Chap2EchoInfoBean\n"
+"14:57:13,443 INFO  [EjbModule] Deploying chap2.EchoBean\n"
+"14:57:13,488 INFO  [EjbMBeanAdaptor] Don&#39;t panic, just a stack trace\n"
+"java.lang.Throwable: getMBeanInfo trace\n"
+"  at org.jboss.book.jmx.ex3.EjbMBeanAdaptor.getMBeanInfo(EjbMBeanAdaptor."
+"java:153)\n"
+"...\n"
+"14:57:13,542 INFO  [EjbMBeanAdaptor] Don&#39;t panic, just a stack trace\n"
+"java.lang.Throwable: getMBeanInfo trace\n"
+"  at org.jboss.book.jmx.ex3.EjbMBeanAdaptor.getMBeanInfo(EjbMBeanAdaptor."
+"java:153)\n"
+"...\n"
+"14:57:13,558 INFO  [EjbMBeanAdaptor] Begin invoke, actionName=create\n"
+"14:57:13,560 INFO  [EjbMBeanAdaptor] Notified of create state\n"
+"14:57:13,562 INFO  [EjbMBeanAdaptor] End invoke, actionName=create\n"
+"14:57:13,604 INFO  [EjbMBeanAdaptor] Don&#39;t panic, just a stack trace\n"
+"java.lang.Throwable: getMBeanInfo trace\n"
+"  at org.jboss.book.jmx.ex3.EjbMBeanAdaptor.getMBeanInfo(EjbMBeanAdaptor."
+"java:153)\n"
+"... \n"
+"14:57:13,621 INFO  [EjbMBeanAdaptor] Don&#39;t panic, just a stack trace\n"
+"java.lang.Throwable: getMBeanInfo trace\n"
+"  at org.jboss.book.jmx.ex3.EjbMBeanAdaptor.getMBeanInfo(EjbMBeanAdaptor."
+"java:153)\n"
+"14:57:13,641 INFO  [EjbMBeanAdaptor] Begin invoke, actionName=getState\n"
+"14:57:13,942 INFO  [EjbMBeanAdaptor] Begin invoke, actionName=start\n"
+"14:57:13,944 INFO  [EjbMBeanAdaptor] Notified of start state\n"
+"14:57:13,951 INFO  [EjbMBeanAdaptor] Testing Echo\n"
+"14:57:13,983 INFO  [EchoBean] echo, info=echo info, arg=, arg=startService\n"
+"14:57:13,986 INFO  [EjbMBeanAdaptor] echo(startService) = startService\n"
+"14:57:13,988 INFO  [EjbMBeanAdaptor] End invoke, actionName=start\n"
+"14:57:13,991 INFO  [EJBDeployer] Deployed: file:/tmp/jboss-eap-4.3/jboss-as/"
+"server/production/tmp/deploy\n"
+"/tmp60550jmx-ex3.ear-contents/jmx-ex3.jar                    \n"
+"14:57:14,075 INFO  [EARDeployer] Started J2EE application: ..."
 
 #. Tag: para
 #: J2EE_Reference_Introduction.xml:1900
@@ -9126,12 +9917,12 @@
 "10:51:48,687 INFO [EjbMBeanAdaptor] Result: AdaptorPrefix-echo-arg\n"
 "10:51:48,687 INFO [EjbMBeanAdaptor] End invoke, actionName=echo"
 msgstr ""
-"10:51:48,671 INFO [EjbMBeanAdaptor] Begin invoke, actionName=echo\n"
+"10:51:48,671 INFO [EjbMBeanAdaptor] Begin invoke,actionName=echo\n"
 "10:51:48,671 INFO [EjbMBeanAdaptor] Lookup EchoLocalHome at local/chap2."
 "EchoBean\n"
-"10:51:48,687 INFO [EchoBean] echo, info=echo info, arg=, arg=-echo-arg\n"
+"10:51:48,687 INFO [EchoBean] echo,info=echo info,arg=,arg=-echo-arg\n"
 "10:51:48,687 INFO [EjbMBeanAdaptor] Result: AdaptorPrefix-echo-arg\n"
-"10:51:48,687 INFO [EjbMBeanAdaptor] End invoke, actionName=echo"
+"10:51:48,687 INFO [EjbMBeanAdaptor] End invoke,actionName=echo"
 
 #. Tag: title
 #: J2EE_Reference_Introduction.xml:1923
@@ -9717,7 +10508,7 @@
 msgstr ""
 "用 <literal>org.jboss.invocation.MarshalledInvocation.calculateHash</"
 "literal> 方法创建一个从开放的接口 <literal>java.lang.reflect.Method</"
-"literal> 到 long hash representation 的 <literal>HashMap&lt;Long, Method&gt;"
+"literal> 到 long hash representation 的 <literal>HashMap&lt;Long,Method&gt;"
 "</literal> 匹配。"
 
 #. Tag: para
@@ -9953,7 +10744,7 @@
 "\n"
 "public class InvokerAdaptorService\n"
 "    extends ServiceMBeanSupport\n"
-"    implements InvokerAdaptorServiceMBean, ServerConstants\n"
+"    implements InvokerAdaptorServiceMBean,ServerConstants\n"
 "{\n"
 "    private static ObjectName mbeanRegistry;\n"
 "    \n"
@@ -9988,13 +10779,13 @@
 "            Method method = methods[m];\n"
 "            Long hash = new Long(MarshalledInvocation.calculateHash"
 "(method));\n"
-"            tmpMap.put(hash, method);\n"
+"            tmpMap.put(hash,method);\n"
 "        }\n"
 "\n"
 "        marshalledInvocationMapping = Collections.unmodifiableMap(tmpMap);\n"
 "        // Place our ObjectName hash into the Registry so invokers can\n"
 "        // resolve it\n"
-"        Registry.bind(new Integer(serviceName.hashCode()), serviceName);\n"
+"        Registry.bind(new Integer(serviceName.hashCode()),serviceName);\n"
 "    }\n"
 "\n"
 "    protected void stopService()\n"
@@ -10018,8 +10809,8 @@
 "        if (objectName != null) {\n"
 "            // Obtain the ClassLoader associated with the MBean deployment\n"
 "            newCL = (ClassLoader) \n"
-"                server.invoke(mbeanRegistry, \"getValue\",\n"
-"                              new Object[] { objectName, CLASSLOADER },\n"
+"                server.invoke(mbeanRegistry,\"getValue\",\n"
+"                              new Object[] { objectName,CLASSLOADER },\n"
 "                              new String[] { ObjectName.class.getName(),\n"
 "                                             \"java.lang.String\" });\n"
 "        }\n"
@@ -10044,14 +10835,14 @@
 "                String name = method.getName();\n"
 "                Class[] sig = method.getParameterTypes();\n"
 "                Method mbeanServerMethod =\n"
-"                    MBeanServer.class.getMethod(name, sig);\n"
-"                value = mbeanServerMethod.invoke(server, args);\n"
+"                    MBeanServer.class.getMethod(name,sig);\n"
+"                value = mbeanServerMethod.invoke(server,args);\n"
 "            } catch(InvocationTargetException e) {\n"
 "                Throwable t = e.getTargetException();\n"
 "                if (t instanceof Exception) {\n"
 "                    throw (Exception) t;\n"
 "                } else {\n"
-"                    throw new UndeclaredThrowableException(t, method.toString"
+"                    throw new UndeclaredThrowableException(t,method.toString"
 "());\n"
 "                }\n"
 "            }\n"
@@ -10108,7 +10899,7 @@
 msgstr ""
 "InvokerAdaptorService 的 54-64 行用 <literal> org.jboss.invocation."
 "MarshalledInvocation.calculateHash(Method)</literal> 方法建立 "
-"ExportedInterface 类的 HashMap&lt;Long, Method&gt; 。因为 <literal>java.lang."
+"ExportedInterface 类的 HashMap&lt;Long,Method&gt; 。因为 <literal>java.lang."
 "reflect.Method</literal> 实例不是可串形化的,非串形化的 <literal>Invocation</"
 "literal> 类的 <literal>MarshalledInvocation</literal> 版本被用来将客户端和服"
 "务器之间的调用打包(marshall)。<literal>MarshalledInvocation</literal> 用相应"
@@ -10356,7 +11147,7 @@
 "    &lt;/mbean&gt;  \n"
 "    &lt;!-- This is the service that handles the RMIAdaptor invocations by "
 "routing\n"
-"         them to the MBeanServer the service is deployed under. --&gt;\n"
+"         them to the MBeanServer the service is deployed under。--&gt;\n"
 "    &lt;mbean code=\"org.jboss.jmx.connector.invoker.InvokerAdaptorService"
 "\" \n"
 "           name=\"jboss.jmx:type=adaptor,name=Invoker\"&gt;\n"
@@ -10630,7 +11421,7 @@
 "value."
 msgstr ""
 "<emphasis role=\"bold\">ClientConnectAddress</emphasis>:客户传入 "
-"<literal>Socket(addr, port)</literal> 构造函数的地址。它的缺省值是服务器的 "
+"<literal>Socket(addr,port)</literal> 构造函数的地址。它的缺省值是服务器的 "
 "<literal> InetAddress.getLocalHost()</literal>。"
 
 #. Tag: para
@@ -10642,7 +11433,7 @@
 "default is the port of the server listening socket."
 msgstr ""
 "<emphasis role=\"bold\">ClientConnectPort</emphasis>:客户传入 "
-"<literal>Socket(addr, port)</literal> 构造函数的端口。它的缺省值是服务器侦听"
+"<literal>Socket(addr,port)</literal> 构造函数的端口。它的缺省值是服务器侦听"
 "套接字的端口号。"
 
 #. Tag: para
@@ -11153,7 +11944,7 @@
 "for(int m = 0; m &lt; methods.length; m ++) {\n"
 "    Method method = methods[m];\n"
 "    Long hash = new Long(MarshalledInvocation.calculateHash(method));\n"
-"    marshalledInvocationMapping.put(hash, method);\n"
+"    marshalledInvocationMapping.put(hash,method);\n"
 "}"
 
 #. Tag: para
@@ -11231,13 +12022,13 @@
 "    Object[] args = invocation.getArguments();\n"
 "    Object value = null;\n"
 "    try {\n"
-"        value = method.invoke(theServer, args);\n"
+"        value = method.invoke(theServer,args);\n"
 "    } catch(InvocationTargetException e) {\n"
 "        Throwable t = e.getTargetException();    \n"
 "        if (t instanceof Exception) {\n"
 "            throw (Exception) e;\n"
 "        } else {\n"
-"            throw new UndeclaredThrowableException(t, method.toString());\n"
+"            throw new UndeclaredThrowableException(t,method.toString());\n"
 "        }\n"
 "    }\n"
 " \n"




More information about the jboss-cvs-commits mailing list