- 浏览: 3502957 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
wanglf1207:
EJB的确是个不错的产品,只是因为用起来有点门槛,招来太多人吐 ...
weblogic-ejb-jar.xml的元素解析 -
qwfys200:
总结的不错。
Spring Web Flow 2.0 入门 -
u011577913:
u011577913 写道也能给我发一份翻译文档? 邮件437 ...
Hazelcast 参考文档-4 -
u011577913:
也能给我发一份翻译文档?
Hazelcast 参考文档-4 -
songzj001:
DbUnit入门实战
最近,公司的GlassFish移植项目基本告以段落,由于之前的代码严重依赖于Weblogic,给移植工作带来了很大的难度,很多实现方式在 GlassFish中根本就没有对应的替代品。在经历了几个月的移植之后,竟让我对Weblogic开始产生好感了,作为一款商用的 Application Server,Weblogic确实非常成熟,非常强大,提供了很多特性,以帮助提高程序的运行效率,但是太笨重了,访问Admin Console极慢;GlassFish作为一款开源的Application Server,非常适合开发者使用,速度很快,并且严格遵照J2EE的标准,以达到平台独立的特性,但是确实简陋了点,只提供了最标准的实现,并且还存在 一些明显的BUG,社区不够活跃,文档、资源都很少,可能是现在SUN处于动 乱期,连商业Support都很难联系到。下面是我在做移植工作时,随笔记下 来的一些小经验,让其他的同学们少受一些折磨,少踩一些坑。
1、EJB Client与 weblogic.jar冲突
若使用
EJB Client访问
GlassFish中的
EJB,需将
appserv-rt.jar、
appserv-ext.jar、
appserv-deployment-client.jar和
javaee.jar加入到
classpath中。若
classpath中存在
weblogic.jar,则可能会遇到错误:
java.lang.NoSuchMethodError:
org.omg.CosTransactions.OTSPolicy.value()S
将
weblogic.jar从
classpath中移除即可。
2、Transaction使用
使用 Spring的 JtaTransactionManager需要配置两个属性: JtaTransactionManager 和 userTransactionName。对于 GlassFish, JtaTransactionManager 为 java:appserver/TransactionManager , userTransactionName 为 java:comp/UserTransaction。只有 Bean管理的 SessionBean和 MDB允许使用 UserTransaction, Entity Bean只允许使用 Container管理的 transaction。如果 Container管理的 SessionBean或 MDB使用了 UserTransaction,则会出现错误: Lookup of java:comp/UserTransaction not allowed for Container managed Transaction beans 。
3、HTTP Thread count
使用 asadmin修改 HTTP 的 thread count后,从 Admin Console上访问, Admin Server的配置可生效,但 Cluster不生效,检查 domain.xml已改变,通过 asadmin查询也已生效,应该是 GlassFish页面展示的 BUG。
4、EJB Timer的使用
在 GlassFish中使用 EJB Timer,需要有一个独立的 XADataSource,和数据表 EJB__TIMER__TBL,建表语句可在 <server_path>/lib/install/databases中找到。对于 developer模式, GlassFish默认使用内置的 __TimerPool,不需要你手工创建 datasource和表;对于 cluster模式, Admin Server会默认使用 __TimerPool, Cluster则需要单独配置。如果让 Admin Server和 Cluster同时使用手工创建的 datasource,则可能导致 Cluster配置中的 timer datasource在 server重启后丢失, Timer Service会出现异常,这应该是 GlassFish的 BUG,目前的解决方案就是 Admin Server用默认的 Timer配置, Cluster用另外的配置。
5、ClassLoader优先加载
在 weblogic中,可以通过配置 prefer-application-packages来优先加载 application中的类,在 GlassFish中则没有对应的方式来控制加载顺序,一个典型的场景就是:项目中采用 CXF作为 webservice的实现,但 GlassFish中默认使用了 Metro的实现,由于 Metro的 jar包比 application加载的早,就会导致 CXF依赖的类库没有正常加载,而是使用了 Metro的 JAX-WS的实现。
6、CMP配置中的数据库表名区分大小写
CMP在 GlassFish中需要配置 sun-cmp-mappings.xml,该 XML中的 table-name是区分大小写的, Oracle中的表名默认是大写的,如果这里的 table-name写成小写,就会报找不到表的错误,可以通过添加一个 *.dbschema文件,对表名进行适配,以减少切换数据库时的修改操作。
7、GlassFish的部署结果不可靠
在使用 asadmin部署 EAR时,如果没有遇到极其严重的错误,部署一般都会返回成功,但这个结果并不可靠,你需要关注 server.log,如果这里出现了错误,应用程序则可能没有真正部署成功,在运行时就会出现错误,所以要确保你的程序部署时, server.log中没有错误信息。
8、TLD路径
根据
JSP2.1规范,
tld文件不能存放在
/WEB-INF/classes或者
/WEB-INF/lib目录中,特别不能放在
/WEB-INF/tags目录或子目录中,否则会出现错误:
exception:
org.apache.jasper.JasperException: PWC6180: Unable to initialize
TldLocationsCache
root cause:
org.apache.jasper.JasperException: PWC6336: Illegal TLD path
/WEB-INF/tags/fn.tld, must not start with “/WEB-INF/tags”
在
Tomcat和
Weblogic中不会出现该问题,
GlassFish则严格遵照规范,可将
tld文件放置在
/WEB-INF/tld目录。
9、注册 servlet listener
在 web.xml中注册 servlet的 listener时,在 <listener>中添加多个 <listener-class>不会报错,但是只有最后一个 <listener-class>生效,因此,要注册多个 listener,需要添加多个 <listener>。
10、 Pass-by-reference
Weblogic中的 call-by-reference能够极大的提高本地接口调用的效率,在 GlassFish中也有相应的替代,就是 pass-by-reference,可以在 sun-ejb-jar.xml中对某个 EJB进行配置,也可以在 sun-application.xml中配置,这样就可以对整个 application中的 EJB生效。
11、 HTTP错误消息体
当 HTTP的 ErrorCode大于 400,并且相应的消息体是空时, GlassFish会自动在返回的 Response中添加错误信息,对于使用 HttpClient操作时,就可能和我们期望的 Response不同,该问题的解决办法:在往 Response中写入内容后,调用 response.getOutputStream().flush() 或 response.flushBuffer();或者在 web.xml中设置 ErrorcCde对应的 ErrorPage, ErrorPage可以是一个空内容的页面。
12、 ServletRequest中 inputStream的使用
InputStream有一个 markSupported属性,如果该属性为 true,则支持 mark和 reset,可以多次读取该流,反之则只能读取一次该输入流。一种情形就是:如果在 Filter中读取了该 InputStream,则不能在 Servlet中再次读取。 ServletRequest中的 InputStream在不同的 Server中有不同的实现,在 Weblogic中 markSupported就设为了 true,在 GlassFish中则为 false。
发表评论
-
字符串分割--java中String.split()用法
2013-03-06 14:25 74151在java.lang包中有String.sp ... -
用 HttpServletResponseWrapper 实现 Etag 过滤器
2012-07-09 16:58 3759原文出处:http://blog.chenlb.com/200 ... -
Fitnesse使用
2012-05-05 13:27 23494Fitnesse 的使用 一,介绍 Fitnesse是一种 ... -
Customizing the new FitNesse parser
2012-05-05 13:13 2134FitNesse began its life using ... -
java application中内嵌ActiveX控件
2011-11-14 15:57 5524我这里用的是SWT/JFace开发application,SW ... -
Google Java Developer Tools Downloads
2011-08-09 00:04 2347WindowBuilder Pro原来叫WindowB ... -
Jalita
2011-08-06 00:49 1565Jalita (Java light terminal ada ... -
【转】用Java写字符终端界面
2011-07-29 13:13 2122终端界面GUI开源项目charva。 这个框架让你可以用开发 ... -
[转]mybatis下的分页,支持所有的数据库
2011-07-21 13:21 14841大 家都知道,mybatis的自带分页方法只是逻 ... -
Java framework for text- & console-based forms?
2011-07-21 01:06 1711charva jcurses JNA , ... -
JNA(Java Native Access)学习入门
2011-07-21 01:04 22625Java Native Access 项目 在 ... -
JAVA上加密算法的实现用例
2011-06-25 12:38 4884来源:www.ibm.com ... -
如何将GlassFish作为Windows服务运行
2011-05-18 23:21 2375本文档来自GlassFish官方网站,详细介绍了将 G ... -
JAVA UDP打洞必备知识点---NAT
2011-05-05 12:56 8699一、引言 RFCl631 ... -
Keystore概念,Keytool工具使用
2011-04-28 16:20 2906近来由于项目需要做Single Sign On, 研究了一 ... -
利用Eclipse Profile Plugin监控分析Tomcat性能
2011-04-18 16:14 3702目前新版本的Eclipse在启动应用服务器的时候有一个新的选 ... -
m2eclipse: Eclipse is running in a JRE, but a JDK is required
2011-02-04 23:43 2542Eclipse 安装了Maven插件,启动Eclipse ... -
利用JNative实现Java调用动态库
2010-10-18 00:43 2100由于项目要求,需要用J ... -
RHEL5支持大内存
2010-10-08 16:19 3005安装 RHEL 5 ,硬件为 4G 内存,安装完成 ... -
Windows Server 2003 和 Windows 2000 提供大内存支持
2010-10-08 16:19 1854本文介绍物理地址扩展 ...
相关推荐
标题《Glassfish集群搭建手册》指的是利用Oracle提供的Glassfish应用服务器软件进行集群配置的详细指南。此手册涵盖了在不同场景下通过图形化界面和命令行方式搭建集群的整个过程,并且描述了如何配置集群环境以支持...
GlassFish 安装配置文档 GlassFish 是一个基于 Java 的开源应用服务器,提供了一个强大且灵活的平台来部署和管理基于 Java 的应用程序。本文档将指导 readers 通过安装和配置 GlassFish 服务器,并将其与 Eclipse ...
### Glassfish部署Web项目知识点详解 #### 一、概述 **Glassfish** 是一款开源的Java EE应用服务器,由Oracle公司维护。它基于Java EE标准,支持多种Java EE技术,如EJB、JPA、JSF等。由于其强大的功能和良好的...
GlassFish4的下载和安装的详细步骤,下载地址,配置等。附带有GlassFish3的安装简述
《深入解析Glassfish 3.1.2.2与Java EE 6的融合应用》 Glassfish 3.1.2.2是一款由Oracle公司开发的开源应用服务器,它是Java EE 6规范的重要实现者,提供了全面的支持和丰富的功能,为开发者提供了构建企业级Web...
在Linux环境下,Glassfish服务器的自动化启动是系统管理员和开发者常用的需求,这有助于提升服务器管理效率,确保服务的持续性和稳定性。Glassfish是Oracle公司提供的一个开源Java EE应用服务器,它支持各种Web应用...
【GlassFish 5.0 安装与配置详解】 GlassFish,由Oracle公司主导的开源项目,是一款功能强大的Web服务器和应用服务器,以其卓越的性能和丰富的特性在开发者社区中备受推崇。相比于Tomcat,GlassFish提供了更全面的...
### Glassfish安装与启动详解 #### 一、简介 GlassFish 是一款开源的应用服务器,它遵循Java EE标准,被广泛应用于开发、测试和生产环境中。本文档将详细介绍如何安装和启动GlassFish应用服务器。 #### 二、安装前...
《glassfish-ose-4.0 白皮书》是一份详尽的文档,它深入介绍了GlassFish 4.0服务器的各项特性和功能。GlassFish是Oracle公司开发的一款开源的应用服务器,基于Java EE(Java Platform, Enterprise Edition)标准,为...
在IT行业中,Glassfish是一款开源的应用服务器,由Sun Microsystems开发并维护,后来成为Oracle Corporation的一部分。Glassfish支持Java EE(现在称为Jakarta EE)规范,为开发者提供了构建企业级Web应用的平台。当...
GlassFish网络开发服务器是一款强大的开放源代码应用服务器,主要用于运行Java EE(Java Platform, Enterprise Edition)应用程序。由Oracle公司维护,它支持各种企业级服务,包括Web服务、EJB(Enterprise ...
【GlassFish 2.0 安装详解】 GlassFish 2.0 是 Sun Microsystems 推出的一款免费且开源的 Java EE 服务器,它基于 Java Platform, Enterprise Edition (Java EE) 5规范,提供了包括EJB 3.0、JSF 1.2、Servlet 2.5、...
### Glassfish与Tomcat对比分析 #### 执行摘要 对于Web 2.0初创公司、应用服务提供商以及提供动态Web应用的独立软件供应商(ISVs)而言,应用即业务,而应用服务器中的Web容器技术能够直接影响业务成果。Web容器是...
《Glassfish安装手册及源文件详解》 Glassfish是一款开源的应用服务器,它是Java EE平台的实现,为企业级应用提供了一套完整的开发、部署环境。在本文中,我们将深入探讨如何安装Glassfish,以及如何利用Ant工具...
《GlassFish Eclipse Plugin:集成开发环境的强大力量》 GlassFish Eclipse Plugin是专为Eclipse IDE设计的一款插件,旨在提升开发人员在Eclipse环境中对GlassFish应用服务器的管理和开发效率。GlassFish,作为...
### Glassfish安装步骤详解 #### 一、简介 Glassfish是一款开源的应用服务器,它支持Java EE标准,并且在企业级应用开发中具有广泛的应用。为了能够成功安装并配置Glassfish,确保系统环境中已经安装了合适的JDK...
《Glassfish安装详解》 Glassfish,作为Oracle公司开源的一款Java EE应用服务器,是开发者进行企业级Java应用程序部署的重要平台。本文将详细讲解如何安装和配置Glassfish,以帮助初学者快速入门。 首先,理解...
GlassFish 是一款强健的商业兼容应用服务器,达到产品级质量,可免费用于开发、部署和重新分发。开发者可以免费获得源代码,还可以对代码进行更改。 GlassFish 是用于构建 Java EE 5应用服务器的开源开发项目的名称...
《深入解析Glassfish-v2源码》 Glassfish-v2是一款基于Java EE 5标准的开源应用服务器,其源码的公开为开发者提供了深入了解和学习Java企业级开发的宝贵资源。在本文中,我们将深入探讨Glassfish-v2的核心概念、...