当前位置:七道奇文章资讯编程技术Java编程
日期:2011-03-22 16:13:00  来源:本站整理

关于Weblogic Server重启或log rotation招致server.log的i node[Java编程]

赞助商链接



  本文“关于Weblogic Server重启或log rotation招致server.log的i node[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

关于Weblogic Server重启或log rotation招致server.log的i node number改变问题

前两天同事问我一个问题,说是客户哪里利用Tivoli解析weblogic server日记的时刻,每当server重启,Tivoli就出错,说是FileId is changed.当时就猜疑大概跟server log的iNodeNumber有关.因为没怎么细心看过weblogic server logging的代码,也不是很确认.跟同事说,让客户通过 ls -i 确认一下对应的iNodeNumber.客户反馈说:iNodeNumber没有发生改变,崩溃,文件名没变, iNodeNumber没变,Tivoli说的FileId毕竟是什么? FileSystem里还有其他标识文件的东西?我有点开始猜疑这个客户了,嘿嘿. 干脆,自己做个测试吧.

首先看了看weblogic的代码,log rotation的时刻,只是调用了File.renameTo(),以下:

weblogic.loggin.FileStreamHandler.rotateLog()

logFile.renameTo(rotatedFile)

见鬼了, rename完了iNodeNumber还有不变的原理?看看JDK代码再说,

File.renameTo()

1     public boolean renameTo(File dest) {
2                 SecurityManager security = System.getSecurityManager();
3                 if (security != null) {
4                     security.checkWrite(path);
5                     security.checkWrite(dest.path);
6                 }
7                 return fs.rename(this,dest);
8     }

这家伙,还是依靠于FileSystem的,再一看,FileSystem是个抽象类,rename的具体实现必定跟具体的subclass有关了,只能看看Win32FileSystem吧,

Win32FileSystem.java

1     public boolean rename(File f1,File f2) {
2         // Keep canonicalization caches in sync after file deletion
3         // and renaming operations. Could be more clever than this
4         // (i.e.,only remove/update affected entries) but probably
5         // not worth it since these entries expire after 30 seconds
6         // anyway.
7         cache.clear();
8         prefixCache.clear();
9         return rename0(f1,f2);
10     }
11     private native boolean rename0(File f1,File f2);

好了,目前看到了,rename0()是个native 操作,跟同享库(.dll or .so)又扯上关系了.得, 没有本地库代码,也看不到什么实现了(不过个人感受,本地实现调用应当是系统函数rename:  int rename(const char *old,const char *new)),只能自己做实现了.写了个小测试程序, 以下:

1 package com.bea.cs.test.file;
2
3 import java.io.File;
4
5 public class FileTest {
6
7     private File src = new File("test");
8
9     public static void main(String args[])
10     {
11         FileTest test = new FileTest();
12         test.run();
13     }
14
15     public void run()
16     {
17         rename("test1");
18     }
19
20     private boolean rename(String name)
21     {
22         boolean ret = false;
23         File dest = new File(name);
24         ret = src.renameTo(dest);
25         /*
26          * as src is renamed to dest,dest should hold the iNodeNumber of src
27          */
28         src = new File("test");
29         try
30         {
31             /*
32              * As has been renamed to dest,src should not exist again
33              * so we should create a new src file,or it will disappear when
34              * test exits. As a new file,src shuold get a new iNodeNumber
35              * that different from it's original value
36              */
37             if(!src.exists())
38                 src.createNewFile();
39         }catch(Exception e)
40         {
41             e.printStackTrace();
42         }
43         return ret;
44     }
45 }

测试的后果以下:

Test Reustlslsol6% ls -il
total 8
6033508 drwxr-xr-x   3 fjin     staff       4096 Sep 26 23:48 com
6033514 -rw-r--r--   1 fjin     staff          0 Sep 26 23:56 test
slsol6% java com.bea.cs.test.file.FileTest
slsol6% ls -il
total 8
6033508 drwxr-xr-x   3 fjin     staff       4096 Sep 26 23:48 com
6033506 -rw-r--r--   1 fjin     staff          0 Sep 27 01:03 test
6033514 -rw-r--r--   1 fjin     staff          0 Sep 26 23:56 test1

目前我这能猜疑客户了, Tivoli报错应当是正常的(Work as design),不过对比烦闷的是:Tivoli为什么要引用FileId,而不是FileName? 开始想改改weblogic的代码,调用近似于 copy的操作,而不是rename.后果没有看到File供应近似的API,并且假如这样做的话,清空原先file内容也是个问题,于是作罢.


  以上是“关于Weblogic Server重启或log rotation招致server.log的i node[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • 关于weblogic中操纵Dom4j、Xerces招致实施线程挂起的问题
  • 关于weblogic中jms message的情况
  • 关于Weblogic Server重启或log rotation招致server.log的i node
  • 关于Weblogic中XAER_NOTA XAException的两种注释
  • 关于weblogic中操纵prepared statement cache后操作DDL的问题
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .