版权 © 2006-2007
摘要
这是针对 JBoss 企业级应用程序平台 4.2 发行版本的发行注记,它也包含了最新的重要信息。
正在寻找强大的工具来在纯 Java 平台上开发功能丰富、高性能的 Web 2.0 应用程序?
JBoss 企业级应用程序平台 4.2 是开源企业级软件革命性的下一步。
它提供了和现有的 J2EE 1.4 企业级 Java 应用程序的完全的兼容性。
同时,它支持 Java EE 5.0 规格里定义的几乎所有的关键特征和组件。所以您新的企业级 Java 应用程序可以马上利用 Java EE 5.0 里大大简化的基于 POJO 的编程模式。
而且,通过集成最好的开源框架 - 如 JBoss Seam、Hibernate、Tomcat 和 JBoss Cache - JBoss 企业级应用程序平台充分利用了开源社区的技术创新。
再者,JBoss 企业级应用程序平台 4.2 经过了完全的测试并被红帽所支持,它被证明可以在许多主要的企业级硬件和软件产品上运行。
这都意味着您可以马上使用 Java EE 5.0 技术开发您新的应用程序,并坚信它将和将来 JBoss 平台的新版本兼容。
http://www.redhat.com/support/process/
http://www.redhat.com/support/policy/soc/production
http://www.redhat.com/support/policy/sla/production/
http://www.redhat.com/support/policy/soc/developer/
http://www.redhat.com/support/policy/sla/developer/
http://www.redhat.com/security/updates/jboss_notes/
在此 zip 分发版本里,本平台及其单个组件的文档在单独的 zip 文件里分发:jboss-eap-docs-4.2.0-1.ep1.1.zip。
在 Linux 系统里,需要手工安装两个关于文档的 rpm 软件包。它们是jboss-seam-docs-1.2.0-1.AP.ep1.11.noarch.rpm 和 rh-eap-docs-4.2.0-1.ep1.5.noarch.rpm。关于在红帽企业版 Linux 上安装 rpm 软件包,请参考红帽知识库里的文章: http://kbase.redhat.com/faq/FAQ_35_198.shtm。
文档的更新版本可以在 http://www.redhat.com/docs 上获得
请阅读文档目录里的 index.html 文件来获得包含的文档的列表。您也可以参考 JBoss AS 4.2 的发行注记: JBOSS_DIST/jboss-as/readme.html。
如果您正在使用 rpm,或是 zip 分发版本,请注意在缺省情况下,验证会被启用且没有设立用户帐号。这是为了阻止对 JBoss AS 各种服务的未授权的访问。要获得如何使服务可以被访问的信息,请参考 http://kbase.redhat.com/faq/FAQ_107_9963.shtm。
我们推荐您使用 production 配置来运行服务器包含的 Seam 应用程序示例。如 部署 SEAM 示例时导致 java.lang.OutOfMemoryError: PermGen space 里所描述的,使用其他的配置可能会导致内存问题。注意,如果没有指定使用哪个配置,服务器将使用 production 配置启动。
请注意,内嵌的 Hypersonic 数据库只是一个技术预览,它并不被产品环境所支持。虽然没有对它的技术支持,我们很高兴收到关于该组件的程序错误报告,不过我们不承诺在明确时间范围内修复这些错误。
下面是发行时已知问题的列表。这些问题的更多细节可以在 JIRA 里找到。
某些 MBean 的部署失败并有错误。
和下面类似的错误出现在 server.log 里:
ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[localhost].[/portal-core]] Error configuring application listener of class org.apache.myfaces.webapp.StartupServletContextListener java.lang.ClassNotFoundException: org.apache.myfaces.webapp.StartupServletContextListener
目前正在等待程序错误的修复。
此时还没有。Portal 2.6 可以在 4.2 版本上部署,但并非所有功能都可以使用。
因为不能被检测到,JBoss AS 4.2.0.GA 不能被加入到 NetBeans 5.5 的服务器列表。
这已经在 NetBeans 的后续版本里得到解决。NetBeans 5.5.1 RC1 和更高的版本可以成功地检测到 JBoss 4.2.0。
如果不能使用 NetBeans 5.5.1 RC 1 或更高版本,您可以把一个名为 resolver.jar 的空文件加入到 $JBOSS_HOME/lib/endorsed 里。这将启用 NetBeans 5.5 的服务器检测。
SEAM 应用程序平台提供了两个 SEAM 示例。此外,在 seam/examples 下还有几个例程。当试图部署这些示例时,会耗尽服务器的 PermGen space。这个服务器不能继续使用,且该进程必须显性地用 "kill" 命令终止。
用 production 配置启动服务器将解决这个问题。
当 JBoss AS 作为服务在 Linux 下运行时,HSQL Database Manager 启动失败。类似下面的错误可以在 server.log 里看到:
2007-05-17 12:15:29,113 ERROR [org.jboss.jdbc.HypersonicDatabase] Failed to star
t database manager
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.jboss.jdbc.HypersonicDatabase$1.run(HypersonicDatabase.java:517)
Caused by: java.awt.HeadlessException:
No X11 DISPLAY variable was set, but this program performed an operation which r
equires it.
at java.awt.GraphicsEnvironment.checkHeadless(GraphicsEnvironment.java:1
59)
at java.awt.Window.<init>
>(Window.java:317)
at java.awt.Frame.<init>(Frame.java:419)
at javax.swing.JFrame.<init>(JFrame.java:194)
at org.hsqldb.util.DatabaseManagerSwing.main(Unknown Source)
如果用 run.sh 启动 JBoss AS,HSQL Database Manager 可以正常启动。
当用 minimal 配置启动 JBoss AS 时,桌面上的关闭服务器的快捷键导致了许多错误信息。
这是预期的正常行为。关闭服务器的快捷键以及关闭脚本都依赖于 jmx-invoker-service.xml 服务。因为这个服务在 minimal 配置里没有启用,所以这两个方法都不能用来关闭服务器。在这种情况下,服务器可以手工地在命令行启动并用 Ctrl-C 键组合来终止。
当 JON 代理运行在 Windows 平台且 JON 服务器运行在 Linux 系统时,instrument Tomcat 的指令没有出现。
你可以根据这些指令来 instrument Tomcat 并监控:
配置监控 JBoss 内嵌的 Tomcat 6.0
注意:如果您正在监控 JON 内部的 Tomcat,这些步骤不是必需的。
要启用 Tomcat 服务器和服务的监控,Tomcat 服务器必须用过滤器收集 metrics 并用一个 web 程序把 metric 数据递送到 JON 里。这个 web 程序、过滤器以及其他的 jar 文件都打包在 product_connectors\servlet 下的 JON 代理目录里。下面所有的命令都应该从该目录运行。
使 Tomcat 可监控的第一个步骤是安装过滤器和 web 程序。它们被用来收集内部 Tomcat 的 metrics。
copy libs\hq-filter.jar %JBOSS_HOME%\server\{default | all|\deploy\jboss-web.deployer
然后,在您的 JBoss 服务器里部署 jbnem-monitor 应用程序:
xcopy /E jbnem-monitor %JBOSS_HOME%\server\{default | all}\deploy\jboss-web.deployer\..\jbnem-monitor.war\
最后,您必须启用过滤器。下面的语句必须加入 %JBOSS_HOME%\server\{default | all}\deploy\jboss-web.deployer\conf\web.xml。请记住每个标签类型都必须分组。
<filter>
<filter-name>JMXFilter</filter-name>
<filter-class>net.hyperic.hq.product.servlet.filter.JMXFilter</filter-class>
<!-- Uncomment the following line to enable response time logging.
The directory you specify as the param can include properties
referenced from the System.properties of the vm.
The ResponseTime log file will by default store the last 1 hour's
worth of response time data. This file gets truncated as soon as
data is succesfully sent into the server. The file is named uniquely
for each webapp in the form: yourContextName_JBNEMResponseTime.log
If this fragment is included in the global web.xml for the container,
all webapps in it will generate response time data, and have logs
following the format described above. You can enable it individually
on each webapp as well if you dont want every webapp to generate
response time data
-->
<!--
<init-param>
<param-name>responseTimeLogDir</param-name>
<param-value>%JBOSS_HOME%\jboss-as\server\{default | all}\log</param-value>
</init-param>
-->
<!-- these are optional parameters which you can override to optimize logging -->
<!--
<init-param>
<param-name>bufferSize</param-name>
<param-value>8k</param-value>
</init-param>
<init-param>
<param-name>bufferTime</param-name>
<param-value>1h</param-value>
</init-param>
-->
</filter>
<filter-mapping>
<filter-name>JMXFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<listener>
<listener-class>net.hyperic.hq.product.servlet.filter.JMXSessionListener</listener-class>
</listener>
<servlet>
<servlet-name>JMXWebappMetricServlet</servlet-name>
<servlet-class>net.hyperic.hq.product.servlet.filter.JMXFilterInitServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
当 JSF backing bean 的方法要求 EJB3 bean 的注入或 bean 接口被调用时,它产生一个异常: ERROR [JBossInjectionProvider] Injection failed on managed bean.
JBoss AS 4.2 完全兼容 Java 1.4 EE 应用程序,并通过 EJB3 插件提供扩展的功能。注入和注解目前只适用于 EJB3 插件内部。
有两个方法可以绕过这个问题。一个是使用显性的 JNDI 查找。请参考本文档的 ejb3jsf 例程里的 TodoBean 代码。另外一个方法是利用 Seam 框架来在 web 获取 EJB3 bean。请参考本文档附带的 seam 例程。
请参考附带文档里的《起步指南》里关于这些解决办法的更多信息。
在 PostgreSQL 8.2 里,在 LIKE 表达式里使用某些脱字符,会导致异常的出现。
为了在不同数据库里的稳定性,你可以避免某些“脱字符”。例如,反斜杠(“/”)在 PostgreSQL(可能还有其他数据库)里具有特殊含义,所以它不能象在其他数据库里一样用于脱字符序列。相反,你可以选择在所有数据库里都安全的脱字符,如竖杠(“|”)。
在使用本平台进行开发时,你需要理解本发行版本的 EJB3 实现里的许多问题。下面是这些问题的总结。
EJBTHREE-899 - 部署描述符里的 WebServiceRef 注入不能工作。
EJBTHREE-900 - WebServiceContext 注入不能工作。
EJBTHREE-896 - 在 ejb-jar.xml 里指定拦截器顺序也会创建一个新的拦截器实例。
EJBTHREE-985 - env-entry-value 是可选的(16.4.1.3 最后一个段落)。
EJBTHREE-989 - 不能注入 URL 类型的资源。
EJBTHREE-967 - ORB 注入不能工作(EJB3 16.13)。
EJBTHREE-724 - persistence.xml jar 文件处理(EJB3 6.2.1.6)。
EJBTHREE-757 - getMessageContext 没有被实现。