经常碰到有人使用了 Log4j 的项目在别处运行的好好的,一放到 WAS 下发现不能输出日志了:控制台文件 SystemOut.log 中没有 Log4j 本应输出的内容, 要么就只见磁盘上有一个设定的日志文件,却总是空空如也。
本文就来以一个实际的例子分析为什么会出现这样的情况,以及告诉你应如何解决。这其中也是因为 ClassLoader 在作祟。 通常我们会在通用日志框架 jakarta-commons-logging 之下使用 Log4j,这也是合情理的,因为 Struts、Hibernate 等众多框架就是这么干的, 然而这却是一方面的根源。分析的过程应用了前面一篇介绍的 Eclipse 远程调试 WebSphere Application Server (WAS) 方法。
测试环境和工具是:WAS 5.1+Eclipse 3.3.2+MyEclipse 6.0.1,在 Eclipse 中建立 Web 项目 testlog(此处可下载: testlog.zip), 其中所用到的 jar 包只有 commons-logging.jar(V1.0.3)、log4j-1.2.11.jar。 再有为了知道是哪个 ClassLoader 加载了某个类, 参考了: 利用 JWhich 掌握类路径,确定类路径中的什么类将被载入。 Read More
- 我们用 Eclipse 开发 Web 项目时,多会用某个插件(如 MyEclipse) 来对 Tomcat 中的应用进行单步调试。而要调试 WAS 下的应用,MyEclipse 也是可以的,但在 MyEclipse 中启动 WAS 比较慢,且需要在本地安装一个 WAS。再有便捷点的方法是用 WSAD (Websphere Studio Application Developer) 或它的升级版 RAD (Rational Application Developer),它们内置了对 WAS 很好的支持,不过也需要本机安装了 WAS,WSAD/RAD 肥大的身躯自是不必说。若要让 WSAD/RAD 进行远程调试,似乎还得在Server 上安装个 IBM Agent Controller。
实际上 WAS 就支持远程调试的设置,打开它,你只需要用 Eclipse Debug 中的 Remote Java Application 功能连接到服务器上相应端口即行。设置很简单,这样的办法你甚至可以在闲时偷偷的调试一下生产环境的 WAS 应用以验证测试环境难以/无法重现的问题。具体做法如下(WAS 5.x 和 6.x 下的操作基本相同): Read More
从 Tomcat 再到使用 Webshpere Application Server (WAS) 不光金钱上付出太多(这当然不用我操心),精力上也费神的多,不过收获也不少,特别是商业产品在处理大用户量的并发访问能力是 Tomcat 无法比的。这里记述一个使用 WAS 给应用打补丁时遇到的问题--要更新哪一个 web.xml。
为便于描述,我们假设已在 WAS 下部署了一个名叫 Prod.war 的包(你也可以部署一个 ear 包,部署的 ear 包后的目录名更明确一些),WAS 的安装目录表示为 WAS_HOME,WAS 所在的主机名为 unmi,那么 Prod.war 部署后所在的目录就是
WAS_HOME/installedApps/unmi/Prod_war.ear/Prod.war
用过 WAS 的人都知道,如果是部署后要给应用打补丁的话,和 Tomcat 下的应用一样,也是把类或 JSP 拷到如上相应的目录中就行了,换了类,WAS 会自动重新加载。 Read More
今夜,打开 TheServerSide.Com,看到 MyEclipse 又出新品 MyEclipse Blue Edition,专为 WebSphere 开发者打造的。WebSphere 用户也算是有福了,想想以前在 MyEclipse 里联用 WebSphere Server 是一件多么痛苦的事情啊,所以不得不在本地用 Tomcat 测试,一搬到正式环境难免要受到兼容性的折磨。WSAD 和 RAD 提供的功能自是不必说,但慢的难以忍受,快来体验一下 MyEclipse Blue Edition 吧。
原文翻译如下:
Genuitec 今日宣布发布一款名为 MyEclipse Blue Edition 的新产品,它针对的是 IBM Rational Application Developer (RAD) 和 WebSphere 的开发。 Read More
通常 Websphere Application Server (WAS) 都是结合 LDAP 来对用户对行验证,实现单点登陆的。因为 LDAP 有着一个得天独厚的优势,它对查询进行了优化,因此 WAS 理所当然的提供了对 LDAP 十分完善的支持。从 WAS 控制台进 安全性->用户注册表->LDAP,在类型里可以看到支持 IBM_Directory_Server、SecureWay、Sun ONE、Domino、Active_Directory、eDirectory 还可定制 LDAP 连接。
好,就此打住,我在这里要介绍的是如何配置 WAS 控制台和应用通过 JDBC 来验证用户。这一想法产生的背景是:公司原所有系统是通过 Portal 做的集成,配置 LDAP 便能实现 SSO,但有一个新的项目暂不能通过 LDAP 来验证,但也要能实现 SSO,于是就意思到要用 JDBC 来进行用户验证。你也许已注意到在 安全性->用户注册表 下除了 本地 OS 和 LDAP 外,还有一个 定制。我们就是要在这个 "定制" 上做文章的。下面详细具体步骤。 Read More
Hibernate应用程序部署到WebSphere Application Server 5.1上,使用WAS的连接池,程序在处理了比较多的 session.save(object)操作之后,在执行提交事物 trans.commit()之时出现以下异常
java.lang.NullPointerException
at oracle.jdbc.dbaccess.DBData.clearItem(DBData.java:431)
at oracle.jdbc.dbaccess.DBDataSetImpl.clearItem(DBDataSetImpl.java:3528)
at oracle.jdbc.driver.OraclePreparedStatement.clearParameters(OraclePreparedStatement.java:3401)
at com.ibm.ws.rsadapter.jdbc.WSJdbcConnection.resetStatement(WSJdbcConnection.java:1719) Read More
有一个项目,是用Hibernate开发的部署在WebSphere Application Server 5.1下,总是会出现数据库记录被死锁的情况,即使是一个简单的更新动作,都有可能造成。
这个问题,困扰我许久,检查过所有代码,事物一定要提交或者回滚,Session及时释放,怀疑过是否是因为是部署在集群环境,但好像那些措施总于事无补,百思不得其解。
就差没有使用容器提供的事物了。 Read More