博文

目前显示的是标签为“JAVA”的博文

EJB事务注解TransactionAttribute说明

在 Java EE 的应用开发中,事务的应用是必不可少的,同时由于方法调用的原因,比如方法 A 调用方法 B 的时候。如果方法 A 在事务环境中运行,那么方法 B 是否也要在事务中运行呢,方法 B 是要和方法 A 在同一个事务中运行还是新开起一个事物呢?等等。要弄清楚这些问题,就要牵涉到事务传播属性的问题,EJB 中针对不同的的情况提供了下面六种不同的事物传播属性: Required :用该属性标注的方法或组件总是在事务中运行。如果客户端已经在事务中,则在原事务中运行;如果没有事务,则开启一个新事务,在其中运行。 Requires_New :方法或组件总是在新开启的事务中运行。如果客户端已经在事务中,则首先将原事务挂起,然后新开启一个事务,在其中运行,新事务结束之后,原来事务从挂起点继续执行;如果没有事务,则开启一个新事务,在其中运行。 Supports :和 Required 属性的不同点是,在没有事务的环境中不会开启一个新事务;如果存在事务的话则加入其中运行,这点和 Reuqired 相同。 Not_Supported :如果事务已经存在的情况下,则原来的事务要挂起,然后调用标注该属性的方法或组件,调用结束之后,继续原来的事务;无事务环境中调用的时候,不开启新事务,这点和 Supports 相同。 Mandatory :调用标注该属性的方法或组件的客户端,必须已经在事务中,如果不在事务中则会抛出异常;如果已经在事务中,则加入原来事务运行。和 Required 不同的是,该属性不会自动开启新的事务; Never :用 Never 属性标注的方法或组件,不能在事务中运行。如果调用该方法或组件的客户端已经在事务中,则抛出异常。

Tomcat 7 的新JDBC连接池的使用说明

Tomcat 7 的JDBC连接池实现类为 org.apache.tomcat.jdbc.pool ,作为替换 commons-dbcp 的方案。 替换 commons-dbcp 的原因如下: commons-dbcp 是单线程的,为了线程安全,就要琐住整个连接池,查询验证阶段也要琐住整个连接池。 commons-dbcp 速度慢,性能差,多CPU的环境下单线程运行,不支持高并发,在JAVA 6中也不能解决速度和并发的问题。 commons-dbcp 实现复杂,超过60个类。 tomcat-jdbc-pool 核心只有8个类,修改更加简单,只需运行连接池本身,易测试。 commons-dbcp 应用静态接口,就意味着并不能用JDK 1.6编译它,在JDK 1.6/1.7中运行时,即使驱动程序支持,所有没有实现的方法也都会抛出 NoSuchMethodException 异常。 commons-dbcp 几乎停滞,很少更新。 作为一个连接池的简单实现不值得重写超过60个类。 Tomcat jdbc连接池实现了一个 commons-dbcp 没有的公平算法,并且比 commons-dbcp 性能更好。 Tomcat jdbc连接池实现了异步获取连接,也不需增加额外的线程。 Tomcat jdbc连接池是一个Tomcat的模块,依赖于Tomcat JULI(Tomcat日志框架) 使用 javax.sql.PooledConnection 接口获取连接。 饥饿算法。如果连接池空了,同时一个线程要获得连接,当一个连接返回到连接池,连接池会将正确的线程唤醒。 除了 commons-dbcp 连接池,还有其它可以选择的方案,如 c3p0 , bonecp 等,与这些连接池实现相比,Tomcat jdbc pool更突出的功能体现在: 支持多核系统,提供更好的高并发性能。 接口动态实现,运行时环境支持 java.sql 和 javax.sql 接口,可以使用低版本JDK编译。 无需每次使用连接时都验证连接,可以在获取或返回连接时验证,不用比设置的间隔时间更频繁。 当数据库连接建立时,一个可设置的查询将运行一次。这对保持连接建立整个时间中的会话十分有用。 可以自定义拦截器增强功能。可定义拦截器来收集查询统计,缓存会话状...

修改Eclipse Console的默认语言

图片
在用Eclipse开发Web程序的时候,启动Tomcat后,Console里输出的信息会自动翻译成操作系统的语言,在中文操作系统中,中英文混杂输出,看着很别扭。 在Eclipse里添加一个JRE调用时的参数就可以修正这个问题。 选择Window > Preferences > Java > Installed JREs > 默认 JRE > Edit [caption id="" align="aligncenter" width="608" caption="修改Eclipse console的语言"] [/caption] 再次运行,Console里就清净多了。

Windows Eclipse下潜在的文件编码问题

图片
如果你和我一样,在Windows下用Eclipse开发Java程序,尤其是Web程序,为了防止乱码问题,都习惯于将默认的文件编码设置为“UTF-8”。 BTW,设置默认文件编码的方法: Java代码文件和其他文本文件:Windows->Preferences->General->Wordspace->Text file encoding css,jsp,html文件:Windows->Preferences->Web->CSS Files/HTML Files/JSP Files 经过以上的设置之后,在Eclipse下新建文件都默认采用UTF-8编码,但是问题出现了,用下面这段java代码测试一下Windows系统的默认文件编码和在Eclipse中默认的文件编码分别是什么。 package com.lveyo.java.lite.system; import java.util.Properties; public class SystemProperties { public static void main(String[] args) { Properties props = System.getProperties(); System.out.println("Java Version: " + props.getProperty("java.version")); System.out.println("Java Vendor: " + props.getProperty("java.vendor")); System.out.println("JVM Version: " + props.getProperty("java.vm.version")); System.out.println("Java Specification Version: " + props.getProperty("java.specification.version")); System.out.println("OS name: ...

Eclipse3.6 Helios插件–Properties Editor

在用JAVA开发项目的时候,软件的国际化一般都用调用资源文件来实现各种语言的显示,对于中文的处理是先输入好中文之后,在命令行中调用native2ascii命令把中文字符转换成UTF-8代码,这样JAVA调用之后才能正确显示中文,否则就会出现乱码。这样就对资源文件的编辑带来很大的麻烦,修改之后还要再运行native2ascii命令,反反复复的。 在Eclipse 3.6 helios中,用Properties Editor插件就可以直接编辑UTF-8的中文资源文件。可以通过在线安装来安装这个插件,它的Update Site是 http://propedit.sourceforge.jp/eclipse/updates/ 安装好之后,再打开之前的message_zh_CN.properties的文件,就不会显示UTF-8的编码了,而是直接显示中文,可以直接修改编辑了。 errors.notLogin = 请登录后访问 errors.badCheckCode = 验证码不正确,请重新输入 errors.expiredCheckCode = 验证码已过期 errors.other = 操作错误,请重试 errors.badCheckCodeLogin = 验证码不正确 而用普通的文本编辑器打开就会是这样: errors.notLogin = \u8bf7\u767b\u5f55\u540e\u8bbf\u95ee errors.badCheckCode = \u9a8c\u8bc1\u7801\u4e0d\u6b63\u786e\uff0c\u8bf7\u91cd\u65b0\u8f93\u5165 errors.expiredCheckCode = \u9a8c\u8bc1\u7801\u5df2\u8fc7\u671f errors.other = \u64cd\u4f5c\u9519\u8bef\uff0c\u8bf7\u91cd\u8bd5 errors.badCheckCodeLogin = \u9a8c\u8bc1\u7801\u4e0d\u6b63\u786e [ad#Single page bottom]

JAVA应用JNI调用OpenCV2.1实现人脸检测

图片
1.JAVA JNI部分 a.调用JNI的基类(JNIBase.java) package info.lveyo.opencv.facedetection; public class JNIBase { public JNIBase() { } public JNIBase(String libraryName) { loadLibrary(libraryName); } private static void loadLibrary(String libraryName) { System.loadLibrary(libraryName); } } b.实现这个基类(JNIOpencv.java) package info.lveyo.opencv.facedetection; public class JNIOpencv extends JNIBase { public JNIOpencv(String libraryName) { super(libraryName); } public JNIOpencv() { System.loadLibrary("JNIOpenCV21"); } /*调用DLL的方法实现人脸检测,返回人脸的坐标(x, y, width, height)*/ public native int[] detectFace(int minFaceWidth, int minFaceHeight, String cascade, String filename, double scale); } 编译好这个类后,要在命令行用javah命令生成需要的.h的头文件: javah info.lveyo.opencv.facedetection.JNIOpencv 生成的.h头文件是info_lveyo_opencv_facedetection_JNIOpencv.h,内容如下: /* DO NOT EDIT THIS FILE - it is machine generated */ #include /* Header for class info_lveyo_opencv_facedetection_JNIOpencv */ #ifndef _Included_info_lveyo_o...

Eclipse Helios的PermGen space错误的解决办法

运行eclipse3.6 helios的时候,如挂加载的项目比较大,类较多的时候,就容易报"java.lang.OutOfMemoryError: PermGen space" 的错误,然后整个eclipse就死掉了,尤其是在加载web项目做JSP预编译的时候更容易报错。 PermGen space是保存类对象和方法的放射元数据的一块内存区域。解决办法就是在eclipse启动的时候加大这块内存区域。 修改eclipse.ini加入以下两行: -XX:PermSize=128M -XX:MaxPermSize=128M 从网上的资料看PermSize大一点肯定更好,而且最好是设置PermSize和MaxPermSize一样大。理由如下: PermSize 和MaxPermSize如果设置为相同还可以在一定程度上提高性能,因为,PermSize在不断的变化中会需要转移其中的数据。如果固定了以后,则可以减少每次扩大PermSize带来的性能损失。

Eclipse3.6 Helios SVN插件--Subversive

用Eclipse开发程序,首先要安装的就是版本控制系统的插件,可以用CVS和SVN,当然还有GIT,因为Google Code用的是SVN,我就介绍一下SVN插件。在Eclipse中最常用的SVN插件就是Subversive和Subclipse,尽管Subclipse在Eclipse Plugin网站活跃度很高,但是我还是喜欢用Subversive。 Subversive的Update Site: http://download.eclipse.org/technology/subversive/0.7/update-site/ 在Eclipse3.6中,直接将这个Update Site设为Enable就可以了,这个插件已经捆绑在Eclipse3.6里了,说明我推荐Subversive还是很有道理的,哈哈。 安装方法和之前一样,重新启动Eclipse之后,还要安装Subversive SVN Connector,我推荐选择纯JAVA编写的SVN Kit 1.3.2。 全部安装好之后,建立Google Code的Repository,然后测试Commit和Update都没有问题。 [ad#Single page bottom]

Eclipse3.6 Helios初体验

图片
一直在用Eclipse做开发,从2.0到MyEclipse再到Eclipse3,再到现在的Eclipse3.6,由于Eclipse的开放性和插件机制,深受开发者的喜爱,再加上IBM深厚的技术实力,使得Eclipse不断发展壮大,成为了开源社区里用户最广泛的IDE。 6月23日,Eclipse.org放出了最新的3.6版本,也就是Helios,其引入的重要创新包括 Git 支持、Linux 开发及 JavaScript 支持。 http://www.eclipse.org/org/press-release/20100623_heliosrelease.php介绍了新版本的改进情况。我最感兴趣的还是Web Tools Platform 支持创建、运行及调试由最新的 Java EE 规范所编写的程序,以及改进了 JavaScript 开发工具的支持,包含 JavaScript 调试框架、新的 JavaScript IDE 包。 About Eclipse的截图 不知道插件的兼容情况怎么样,我会在后续文章中写试用感受。 [ad#Single page bottom]