• DAnalyzer 1.2发布啦 -- Weblogic与Directory协议分析工具

  • SQLView -- 可视化的Weblogic JDBC DEBUG

/Articles

Weblogic和LDAP集成的验证请求分析

Weblogic和LDAP比如Active Directory的集成登录比较简单。分析集成过程中的LDAP通信,就能很直观地看出他们的工作原理。 所有的LDAP的登录都遵循2个步骤,我画了一张简单的图来表示过程。 查询: SearchRequest/SearchResEntry 验证: BindRequest/BindResponse 下面的分析通过Active Directory来做举例。 假设Weblogic中绑定的用户为user2@mycompany.com 。这个用户是用来做LDAP初始连接,后续的请求都要依赖这条连接。...

文件/文件夹权限的override

setUID / setGID setUID会让当前用户能够临时地以执行文件的拥有者的身份,相当于用高权限override了自己的低级权限。比如某个文件不允许被普通用户写操作(比如vi)、甚至不允许最基本的读操作(比如cat)。但是当root授予vi或者cat予setUID或者setGID后,当前用户就拥有了vi/cat拥有者的权限,具备了对文件的读写。 假设root用户创建了一个文本文件,并且只赋给 rwx------ 权限。 [root@localhost shell]# p2d.sh rwx------ permission = rwx------ binary =...

Agile SDK的Numeric字段精度问题

Web Client显示Numeric字段时(Double类型),根据在Java Client中scale设定的小数位数自动计算精度。比如下图中所示的Java Client和Web Client所展示的那样。 但是如果使用SDK来获取Numeric字段时,不能简单地通过下面的错误代码来获取Double类型返回值,因为它这个代码只是获取Double的实际值,并没有获取精度设定。 IItem item = (IItem)session.getObject(IItem.OBJECT_TYPE, "DIE-00001"); Object num = item.getValue(new...

自定义JavaClient中的subclass图标

关于如何自定义JavaClient中subclass的图标,官方用户手册中讲到了要把图标文件添加到JavaClient的custom.jar中。文档是这么讲的: 实际上如果简单地按照它的做法,这是无法实现的。原因在于所有通过Java Web Start发布的jar文件都是经过了签名保护的。下面的内容我来演示如何通过自签名的方式实现它。 创建keystore d:\>keytool -genkeypair -dname "cn=Jie Chen, ou=Agile, o=Oracle, c=US" -alias javaclientKey -keypass oracle...

try-with-resources和异常处理

Java 7开始有一个有意思的功能,就是结合了自动关闭资源和异常处理的try-with-resources语句。按照旧式的处理方式,关闭资源一般放在try-catch的finally块中,需要显式地关闭。比如关闭文件句柄、数据库中的连接、语句和记录集等。而try-with-resources不需要显式声明关闭,它会自动调用close()方法,防止程序员忘记关闭资源而引起内存可能的泄漏。因此这种方式必须要求资源具有统一性,即必须实现了java.lang.AutoCloseable接口和它的唯一方法close()。 实现AutoCloseable...

为什么对super的调用必须是类构造器中的第一个语句

仔细研究(类与成员变量的初始化),可以解释很多疑问。这里顺便分析一下Java界一直存在的疑惑。 为什么对super的调用必须是当前类构造器函数中的第一个语句? 先说明一下JLS语言规范对super调用的规则 如果父类存在默认构造函数(就是无参构造函数),子类的构造函数中,Java会隐式地在第一行语句前填入 super(); 用户也可以显式地调用 super(); 且必须保证是第一个语句。 如果父类不存在默认构造函数,但存在有参构造函数,那么在子类的构造函数中,程序员必须显式地调用父类的有参构造函数,如: super(xxx);...

类与成员变量的初始化

之前研究过变量(类变量与实例变量的内存存储),顺便这次分析一下类变量的初始化问题,也能从另外一个角度来证明类变量的内存分配的共享性质。 假设我定义一个ClassA,含有一个实例变量s,一个默认构造函数(无参构造器),一个有参构造函数,还有一个实例方法check(String)。 public class ClassA { String s; public ClassA(){ s = "hello"; System.out.println("ClassA.ClassA(): s=" + s); } public...

finalize与资源释放/对象销毁

在Oracle Agile的代码中有一段非常不好的设计,就是关闭FTP连接释放socket资源的过程被定义在封装类的finalize()方法中。比如下面的代码。 private void disconnect() throws IOException { // Disconnect from FTP site if (this.m_connected) { this.m_ftp.disconnect(); this.m_ftp = null; this.m_connected = false; } } @Override...

类变量与实例变量的内存存储

变量有类变量、实例变量和局部变量。局部变量比较好区别。类变量与实例变量的区别就在于前者在类中被定义时有static修饰符。 类变量属于类级别,因此在多个线程中引用时是共享的,因此只存在于一个内存区域。而实例变量仅仅属于类定义的具体实例,多个实例之间不共享实例变量,因此他们使用不同的内存地址。 这里就出现了一个问题。实例都是类的具体定义,都是保存在heap堆中,因为堆都是保存具体的对象,所以实例变量也一定会保存在heap堆中。heap堆中因此一定不会存储类变量,因为类变量不属于任何对象。废话那么多,那类变量储存在哪个内存区域呢? 通过具体的例子来看看就明白了。 package...

String对象常量池和内存分配

创建String变量的时候,对象的产生和内存分配会因为创建方式不同而有显著的差别。 直接赋值 String a1 = "hello"; String a2 = "hello"; String a3 = "hello"; System.out.println("a1=a2?" + (a1==a2)); System.out.println("a1=a3?" + (a1==a3));...

Tomcat Service在Windows上的JVM参数位置

Tomcat如果以命令行的方式启动,JVM以及程序参数的设置非常简单,只要修改命令文件中的参数就可以了。偶尔接触到Tomcat在Windows上以Service的形式启动,找到JVM设置的位置,花了不少的冤枉时间,因为Tomcat文档几乎没有提到。 JVM以及程序参数 Tomcat被注册为Service之后,相应的所有启动参数全部写到注册表中,具体的路径就是: HKEY_LOCAL_MACHINE |_____________SOFTWARE |______Wow6432Node...

Java IO - PipedInputStream和PipedOutputStream的多线程读写

PipedInputStream和PipedOutputStream通过pipe使得同一个JVM进程中的不同线程下的两个输入输出流可以交换数据。Pipe流设计时有下面的限制。 输入流不能比输出流先关闭 输入流必须完整无缺地读到全部的输出流数据,不能只读一部分 输出流和输出流必须显式地调用close()关闭 PipedInputStream的读处于阻塞状态,即等待PipedOutputStream写出数据后才能写入...

1 2 3 4 5 6 7 8 9 10