开发者可以构建一个独立于应用程序的代理程序(Agent),用来监测和协助运行在 JVM 上的程序,甚至能够替换和修改某些类的定义。有了这样的功能,开发者就可以实现更为灵活的运行时虚拟机监控和 Java 类操作了,这样的特性实际上提供了一种虚拟机级别支持的 AOP 实现方式,使得开发者无需对 JDK 做任何升级和改动,就可以实现某些 AOP 的功能了。
在 Java SE 6 里面,instrumentation 包被赋予了更强大的功能:启动后的 instrument、本地代码(native code)instrument,以及动态改变 classpath 等等。这些改变,意味着 Java 具有了更强的动态控制、解释能力,它使得 Java 语言变得更加灵活多变。
在 Java SE6 里面,最大的改变使运行时的 Instrumentation 成为可能。在 Java SE 5 中,Instrument 要求在运行前利用命令行参数或者系统参数来设置代理类,在实际的运行之中,虚拟机在初始化之时(在绝大多数的 Java 类库被载入之前),instrumentation 的设置已经启动,并在虚拟机中设置了回调函数,检测特定类的加载情况,并完成实际工作。但是在实际的很多的情况下,我们没有办法在虚拟机启动之时就为其设 定代理,这样实际上限制了 instrument 的应用。而 Java SE 6 的新特性改变了这种情况,通过 Java Tool API 中的 attach 方式,我们可以很方便地在运行过程中动态地设置加载代理类,以达到 instrumentation 的目的。
另 外,对 native 的 Instrumentation 也是 Java SE 6 的一个崭新的功能,这使以前无法完成的功能 —— 对 native 接口的 instrumentation 可以在 Java SE 6 中,通过一个或者一系列的 prefix 添加而得以完成。
最后,Java SE 6 里的 Instrumentation 也增加了动态添加 class path 的功能。所有这些新的功能,都使得 instrument 包的功能更加丰富,从而使 Java 语言本身更加强大。
Instrumentation可以与Apache 的 BCEL配合使用
http://www.blogjava.net/hadeslee/archive/2007/11/13/160122.html
NTLM 认证提供了一种 Window 平台下较为安全的认证机制;JDK 当中提供了一个轻量级的 HTTP 服务器;提供了较为完善的 HTTP Cookie 管理功能;更为实用的 NetworkInterface;DNS 域名的国际化支持等等。
class DefaultAuthenticator extends Authenticator {
private static String username = "username ";
private static String domain = "domain ";
private static String password = "password ";
public PasswordAuthentication getPasswordAuthentication() {
String usernamewithdomain = domain + "/ "+username;
return (new PasswordAuthentication(usernamewithdomain, password.toCharArray()));
}
}
Authenticator.setDefault (new DefaultAuthenticator());
默认支持:
· HTTP Basic authentication
· HTTP Digest authentication
· NTLM
· Http SPNEGO Negotiate
o Kerberos
o NTLM
通过使用尝试顺序 GSS/SPNEGO -> Digest -> NTLM -> Basic
http://www.blogjava.net/hadeslee/archive/2007/11/14/160123.html
定义了 SQL 语言怎样和 XML 交互:如何创建 XML 数据;如何在 SQL 语句中嵌入 XQuery 表达式等等。作为 JDBC 4.0 的一部分,Java 6 增加了 java.sql.SQLXML
的类型。JDBC 应用程序可以利用该类型初始化、读取、存储 XML 数据。java.sql.Connection.createSQLXML
方法就可以创建一个空白的 SQLXML 对象。当获得这个对象之后,便可以利用 setString
、setBinaryStream
、setCharacterStream
或者 setResult
等方法来初始化所表示的 XML 数据。
在 Java SE 6 之前,有关 JDBC 的异常类型不超过 10 个。这似乎已经不足以描述日渐复杂的数据库异常情况。因此,Java SE 6 的设计人员对以 java.sql.SQLException
为根的异常体系作了大幅度的改进。首先,SQLException 新实现了 Iterable<Throwable>
接口。
Java 6 中新增的异常类被分为 3 种:SQLReoverableException
、SQLNonTransientException
、SQLTransientException
。在 SQLNonTransientException
和 SQLTransientException
之下还有若干子类,详细地区分了 JDBC 程序中可能出现的各种错误情况。
http://www.blogjava.net/hadeslee/archive/2007/11/16/160136.html
Java SE 6 的 XML 处理功能分为两个部分:XML 处理(JAXP)和 XML 绑定(JAXB)。在 XML 处理框架之上,Java SE 6 结合了注释(Annotation)技术,提供了强大的针对 Web 服务的支持。
JAXP 包括 SAX 框架 —— 事件机制处理xml;DOM 框架 —— 构造 XML 文件的树形表示;StAX 框架 —— 拖拽方式的解析(要结合 SAX 框架和 DOM 框架的优点。既要求运行时效率,也要求保持元素的上下文状态。);
XSLT 框架 —— 将 XML 数据转换成其他格式。
JAXB 则是负责将 XML 文件和 Java 对象绑定,在新版 JDK 中,被大量的使用在 Web 服务技术中。
http://www.blogjava.net/hadeslee/archive/2007/11/17/160149.html
通过 javax.script 包,Java 脚本 API 的目标与 Apache 项目 Bean Script Framework(BSF)类似,通过它 Java 应用程序就能通过虚拟机调用各种脚本,同时,脚本语言也能访问应用程序中的 Java 对象和方法。Java 脚本 API 是连通 Java 平台和脚本语言的桥梁。首先,通过它为数众多的现有 Java 库就能被各种脚本语言所利用,节省了开发成本缩短了开发周期;其次,可以把一些复杂异变的业务逻辑交给脚本语言处理,这又大大提高了开发效率。
http://www.blogjava.net/hadeslee/archive/2007/11/19/160140.html