发布一篇关于Weblogic Server重启或log rotation招致server.log的i node number变更问 ...
java也能做一些底层语言开发做的事情(难度很高,不是java顶尖高手是做不来的),关于WeblogicServer重启或logrotation招致server.log的inodenumber变更成绩
前两天同事问我一个成绩,说是客户何处利用Tivoli剖析weblogicserver日记的时分,每当server重启,Tivoli就堕落,说是FileIdischanged。事先就嫌疑大概跟serverlog的iNodeNumber有关。由于没怎样细心看过weblogicserverlogging的代码,也不是很确认。跟同事说,让客户经由过程ls-i确认一下对应的iNodeNumber。客户反应说:iNodeNumber没有产生变更,溃散,文件名没变,iNodeNumber没变,Tivoli说的FileId究竟是甚么?FileSystem里另有其他标识文件的工具?我有点入手下手嫌疑这个客户了,嘿嘿。干脆,本人做个测试吧。
起首看了看weblogic的代码,logrotation的时分,只是挪用了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操纵,跟共享库(.dllor.so)又扯上干系了。得, 没有当地库代码,也看不到甚么完成了(不外团体感到,当地完成挪用应当是体系函数rename: intrename(constchar*old,constchar*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 its 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报错应当是一般的(Workasdesign),不外对照烦闷的是:Tivoli为何要援用FileId,而不是FileName? 入手下手想改改weblogic的代码,挪用相似于copy的操纵,而不是rename。了局没有看到File供应相似的API,并且假如如许做的话,清空本来file内容也是个成绩,因而作罢。
自己的整个学习思路完全被老师的讲课思路所牵制,这样几节课听下来,恐怕自己的见解都应该是书里的知识点了,根本谈不上自身发现问题,分析问题,和解决问题能力的切实提高。 一直感觉JAVA很大,很杂,找不到学习方向,前两天在网上找到了这篇文章,感觉不错,给没有方向的我指了一个方向,先不管对不对,做下来再说。 你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。 是一种使网页(Web Page)产生生动活泼画面的语言 你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢? 是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言 有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想) 你一定会高兴地说,哈哈,原来成为Java高手就这么简单啊!记得Tomjava也曾碰到过一个项目经理,号称Java很简单,只要三个月就可以学会。 有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想) 其实说这种话的人就如当年小日本号称“三个月拿下中国”一样大言不惭。不是Tomjava泼你冷水,你现在只是学到了Java的骨架,却还没有学到Java的精髓。接下来你得研究设计模式了。 任职于太阳微系统的詹姆斯·高斯林等人于1990年代初开发Java语言的雏形,最初被命名为Oak,目标设置在家用电器等小型系统的程序语言 关于设计模式的资料,还是向大家推荐banq的网站 http://www.jdon.com/,他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。 接着就是EJB了,EJB就是Enterprise JavaBean, 看名字好象它是Javabean,可是它和Javabean还是有区别的。它是一个体系结构,你可以搭建更安全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的 Weblogic,Websphere这些J2EE服务器)完成了,所以我们要做的程序代码量很少,大部分工作都在设计和配置中间件上。
页:
[1]