`
wwwang123456
  • 浏览: 7143 次
社区版块
存档分类
最新评论

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

阅读更多
把工程部署到websphere下遇到了两个问题,1、定时器在websphere中取不到jndi的连接,2、log4j的日志不能输出到文件中
第一个问题:
    一个web应用程序,里面加了一个定时任务,任务中有取数据库连接的语句,是采用数据源的方式。在tomcat下是完全可以用的。但是在was上发布后,手动操作的可以正常连接数据库执行操作。定时任务使用的是同样的代码,就是报
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.
 [Root exception is javax.naming.NameNotFoundException: Name comp/env/jdbc not found in context "java:".]

查资料才了解到
那个定时的程序,在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
因为我喜欢更多的是更改自己工程内的信息 而尽量少更改服务器的配置信息 所以 采用的是第二种
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics