Logging tool for JDBC

jdbcdslog 是一款知名用来跟踪 JDBC 的全功能工具.

特征包括:
- 可挂接到数据库连接, 驱动或数据源上(XA, 连接池)
- 可记录 PreparedStatement 和 CallableStatement 调用所绑定的参数
- 可记录 ResultSet 对象中的查询记录行
- 可记录查询执行时间
- 支持多种日志引擎 (感谢 SLF4J, 你可以使用多数流行的日志组件库, 像 log4j, apache common logging, java logging 或者简单的输出到 System.out) 阅读全文 >>

亲历基本 OSGI 实例,进入另番思维领域

软件的模块越来越插件化发展了,连硬件都处处热插拔,软件更当如此。记原来有个 JPF(Java Plugin Framework),也能实现动态插件化,但要是有个业界标准的东西一般来说会更好的。于是轮到 OSGI(Open Service Gateway Initiative) 登台,OSGI 出来也有好几个年头了,应用也轰轰烈烈的,比如 Eclipse 3 开始不再使用原来的插件体系,完全用 OSGI 搭建。WebSphere 6.1 也全面改用 OSGI;JBoss、WebLogic、Spring DM,甚至是 BMW 车的控制系统中都得到了很好的应用。

前面讲到可以用 OSGI 作为你的微内核,微内核的好处可以打个这样的比方:一台 Linux 服务器出故障了,应用程序坏了、某些服务不能访问等,但只要它还来连入网络,SSH 还是活的,我们就有办法进去修复它,想安装、卸载什么都行。 阅读全文 >>

启动 Equinox 时出现 The System Bundle's start level can not be modified. 错误

使用 Eclipse 的 OSGI 实现 Equinox,通过 config.ini 配置文件在命令行时启动 Equinox 时,可以进到 osgi> 是提示符,但是除 org.eclipse.osgi_3.5.2.R35x_v20100126 是 STARTING 外,其他的 Bundle 都是 RESOLVED 状态,没法进入到 ACTIVE 状态,osgi> start xxx 也不行。

然后看目录 configuration 目录中生成的日志文件,是如下错误:

!SESSION 2010-03-30 11:40:40.156 -----------------------------------------------
eclipse.buildId=unknown
java.version=1.6.0_18
java.vendor=Sun Microsystems Inc.
BootLoader constants: OS=win32, ARCH=x86_64, WS=win32, NL=zh_CN
Command-line arguments:  -console 阅读全文 >>

是同步方法还是 synchronized 代码?– 详解多线程同步规则

熟悉 Java 的多线程的一般都知道会有数据不一致的情况发生,比如两个线程在操作同一个类变量时,而保护数据不至于错乱的办法就是让方法同步或者代码块同步。同步时非原子操作就得同步,比如一个简单的 1.2+1 运算也该同步,以保证一个代码块或方法成为一个原子操作。

简单点说就是给在多线程环境中可能会造成数据破坏的方法,做法有两种,以及一些疑问:

1. 不论是静态的或非静态的方法都加上 synchronized 关键字,那静态的方法和非静态的方法前加上 synchronized 关键字有区别吗?

2. 或者在可疑的代码块两旁用 synchronized(this) 或 synchronized(someObject) 包裹起来,而选用 this 还是某一个对象--someObject,又有什么不同呢? 阅读全文 >>

Java NIO 应用 -- 使用内存映射文件实现进程间通信

一看到 Java NIO 的内存映射文件(MappedByteBuffer),让我立即就联想到 Windows 系统的内存映射文件。Windows 系统的内存映射文件能用来在多个进程间共享数据,即进程间的共享内存,是通过把同一块内存区域映射到不同进程的地址空间中,从而达到共享内存。

Java NIO 的内存映射文件和 Windows 系统下的一样,都能把物理文件的内容映射到内存中,那么 MappedByteBuffer 是否能用来在不同 Java 进程(JVM) 间共享数据呢?答案是肯定的,这样在通常的 Socket 方式来实现 Java 进程间通信之上又多了一种方法。 阅读全文 >>

共享内存在Java中实现和应用[转]

1、共享内存对应应用开发的意义

对熟知UNIX系统应用开发的程序员来说,IPC(InterProcess Communication)机制是非常熟悉的,IPC基本包括共享内存、信号灯操作、消息队列、信号处理等部分,是开发应用中非常重要的必不可少的工具。其中共享内存IPC机制的关键,对于数据共享、系统快速查询、动态配置、减少资源耗费等均有独到的优点。

对应UNIX系统来说,共享内存分为一般共享内存和映像文件共享内存两种,而对应Windows,实际上只有映像文件共享内存一种。所以Java应用中,也是只能创建映像文件共享内存。 阅读全文 >>

Java NIO 入门学习(读写文件)

我们用原有 IO 读写文件应该不会陌生了,顺带回顾一下,大致两种:

1. 在 InputStream 或 OutputStream 上读写字节或字节数组,读 InputStream 时用是否返回 -1 来判断是否到达末尾。
2. 包装成 Reader/Writer 可以直接读写字符串,进一步包装到 BufferedReader/BufferedWriter 就可以按行读写了。readLine() 时看是否返回 null 断定是否读完了最后一行。

现在我们要用 NIO 来读写文件,肯定是要用到 Channel 和 Buffer 了。一句话描述过程就是从 FileInputStream 得到的 FileChannel 中读取数据到 Buffer 中,再处理 Buffer 中的数据。看代码: 阅读全文 >>

Java NIO 入门学习(通道和缓冲区)

对于 NIO 来说,Channel(通道) 和 Buffer(缓冲区) 这两个东西是不得不提的,因为它们是 NIO 的核心对象,几乎每一个 I/O 操作都要它们。

通道是对原 I/O 流的模拟,但有不同的是它是双向的,不再像流那样分 InputStream 和 OutputStream,通道的双向性更好的反映了底层操作系统的真识情况。也不能像原 I/O 那样可以直接往流里写或读数据,在通道了传输数据必须经由缓冲区。有点类似原 I/O 流通过过滤器流 BufferedInputStream 和 BufferedOutputStream 来读写数据。

FileInputStream/FileOutputStream/RandomAccessFile/DatagramSocket/ServerSocket/Socket 的 getChannel() 方法可以获得相应类型的 Channel,Channel 的类型有 FileChannel/SocketChannel/SelectableChannel/DatagramChannel/ServerSocketChannel 等。 阅读全文 >>

Java NIO 入门学习(过门)

Java NIO(New IO) 还是在 JDK 1.4 中引入的新特性。JDK 1.4 的另一重要特性正则表达式大家应该经常用到,但 NIO 就可能使用寥寥了,大概是缘于旧有 IO 体系仍然够用。有如 JDK1.5 早就泛型和注解了,但基于各种原因而无法亲力去实践泛型和注解一般,NIO 多数时候也只是与我们擦着肩而已。

相比与 Old IO,NIO 在某些领域里确有其过人之处,所以现在让我们一起来对 NIO 有个更楚的认识。

NIO 的相关 API,在 java.nio 中,它会与你纠缠的就是各种 ChannelBuffer。相关的应用在于处理通道和缓冲区、异步(非阻塞)的 IO、文件的锁定、字符集的处理上。 阅读全文 >>

了解NoSQL的必读资料汇总

前记:看到 Twitter 和 Digg 相继用 NoSQL 替代了原有的关系型数据库 MySql。显然,NoSQL 定然有它的许多优势,且目前已有相当的 NoSQL 产品实现,所以有必要对 NoSQL 表示一定的关注,故找些资料来看。它也是非关系型的数据库,那它与著名的文档型数据库 Domino 又有何种关系呢,Java 程序又该如何实际应用 NoSQL 呢?

NoSQL 的官网是:http://nosql-database.org/,里面有丰富的介绍
Wiki 百科上的条目:http://en.wikipedia.org/wiki/NoSQL。以及如下文字:

NoSQL 是非关系型数据存储的广义定义。它打破了长久以来关系型数据库ACID理论大一统的局面。NoSQL 数据存储不需要固定的表结构,通常也不存在连接操作。在大数据存取上具备关系型数据库无法比拟的性能优势。该术语在 2009 年初得到了广泛认同。 阅读全文 >>