WebSphere下定时器无法取得数据源连接,log4j不输入日志

把工程部署到websphere下遇到了两个问题,1、定时器在websphere中取不到jndi的连接,2、log4j的日志不能输出到文件中
第一个问题:
一个web应用程序,里面加了一个定时任务,任务中有取数据库连接的语句,是采用数据源的方式。在tomcat下是完全可以用的。但是在was上发布后,手动操作的可以正常连接数据库执行操作。定时任务使用的是同样的代码,就是报
[code="java"]javax.naming.ConfigurationException:
A JNDI operation on a "java:" name cannot be completed because the serverruntime is not able to associate the operation's thread with any J2EE application component.
This condition can occur when the JNDI client using the "java:" name is not executed on the thread of a server application request.
Make sure that a J2EE application does not execute JNDI operations on "java:" names within static code blocks or in threads created by that J2EE application.
Such code does not necessarily run on the thread of a server application request and therefore is not supported by JNDI operations on "java:" names.
[/code]
查资料才了解到
那个定时的程序,在was上执行的时候用ctx.lookup("java:comp/env/DSsystem")取不到数据源.用ctx.lookup("jdbc/DSsystem")这个可以。

定时任务不能取到数据源是因为定时任务是单独起了一个线程,在was中,这个单独的线程不受系统jndi的管理,多以在这个单独起的线程里不能从jndi取。但是可以直接用ctx.lookup("jdbc/DSsystem")。
如果不行,就用在工程内配置数据源的方式。

第二个问题:
是因为was日志与log4j的日志冲突。
解决方法:在目录:
/opt/IBM/WebSphere/AppServer/profiles/AppSrv01/properties
增加一个文件名:
commons-logging.properties
内容为
org.apache.commons.logging.LogFactory=org.apache.commons.logging.impl.LogFactoryImpl
或是在 META-INF/services/org.apache.commons.logging.LogFactory 中指名 org.apache.commons.logging.impl.Log4jFactory
因为我喜欢更多的是更改自己工程内的信息 而尽量少更改服务器的配置信息 所以 采用的是第二种
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值