精灵巫婆 发表于 2015-1-18 11:21:03

发布一篇关于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内容也是个成绩,因而作罢。

自己的整个学习思路完全被老师的讲课思路所牵制,这样几节课听下来,恐怕自己的见解都应该是书里的知识点了,根本谈不上自身发现问题,分析问题,和解决问题能力的切实提高。

分手快乐 发表于 2015-1-18 19:56:43

一直感觉JAVA很大,很杂,找不到学习方向,前两天在网上找到了这篇文章,感觉不错,给没有方向的我指了一个方向,先不管对不对,做下来再说。

海妖 发表于 2015-1-23 08:04:39

你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。

变相怪杰 发表于 2015-1-24 13:00:34

是一种使网页(Web Page)产生生动活泼画面的语言

第二个灵魂 发表于 2015-1-25 09:39:44

你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢?

仓酷云 发表于 2015-1-26 17:15:57

是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言

山那边是海 发表于 2015-2-4 17:10:18

有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想)

飘灵儿 发表于 2015-2-28 04:24:54

你一定会高兴地说,哈哈,原来成为Java高手就这么简单啊!记得Tomjava也曾碰到过一个项目经理,号称Java很简单,只要三个月就可以学会。

金色的骷髅 发表于 2015-3-6 16:13:10

有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想)

简单生活 发表于 2015-3-10 12:59:06

其实说这种话的人就如当年小日本号称“三个月拿下中国”一样大言不惭。不是Tomjava泼你冷水,你现在只是学到了Java的骨架,却还没有学到Java的精髓。接下来你得研究设计模式了。

不帅 发表于 2015-3-13 06:07:12

任职于太阳微系统的詹姆斯·高斯林等人于1990年代初开发Java语言的雏形,最初被命名为Oak,目标设置在家用电器等小型系统的程序语言

小魔女 发表于 2015-3-17 07:11:36

关于设计模式的资料,还是向大家推荐banq的网站 http://www.jdon.com/,他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。

莫相离 发表于 2015-3-24 01:34:11

接着就是EJB了,EJB就是Enterprise JavaBean, 看名字好象它是Javabean,可是它和Javabean还是有区别的。它是一个体系结构,你可以搭建更安全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的 Weblogic,Websphere这些J2EE服务器)完成了,所以我们要做的程序代码量很少,大部分工作都在设计和配置中间件上。
页: [1]
查看完整版本: 发布一篇关于Weblogic Server重启或log rotation招致server.log的i node number变更问 ...