4/14/2009

Hibernate运行报错:org.hibernate.TransactionException: JDBC rollback failed

现象:
系统刚刚部署好的当天,访问系统没有问题,运行一段时间后访问该系统便会报错:org.hibernate.TransactionException: JDBC rollback failed,这个时候再重启tomcat一切又都好用了。也可以通过下面的方法测试,重新启动tomcat,一切好用,运行一段时间后,继续报错…服务器控制台提示:关闭的连接。
页面提示错误:

org.hibernate.TransactionException: JDBC rollback failed org.hibernate.transaction.JDBCTransaction.rollback(JDBCTransaction.java:150) com.hostel.guest.Base.BaseDAO.save(BaseDAO.java:646) com.hostel.guest.Base.BaseLogDAO.savesysloginfo(BaseLogDAO.java:199) com.hostel.guest.servlet.AdminLogin.service(AdminLogin.java:99) javax.servlet.http.HttpServlet.service(HttpServlet.java:810) com.hostel.guest.servlet.MainServlet.service(MainServlet.java:586) javax.servlet.http.HttpServlet.service(HttpServlet.java:810) org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)控制台错误:

org.hibernate.TransactionException: JDBC rollback failed
at org.hibernate.transaction.JDBCTransaction.rollback(JDBCTransaction.java:150)
at com.hostel.guest.Base.BaseDAO.save(BaseDAO.java:646)
at com.hostel.guest.Base.BaseLogDAO.savesysloginfo(BaseLogDAO.java:199)
at com.hostel.guest.servlet.AdminLogin.service(AdminLogin.java:99)
org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
at org.apache.tomcat.util.net.MasterSlaveWorkerThread.run(MasterSlaveWorkerThread.java:112)
at java.lang.Thread.run(Thread.java:595)
Caused by: java.sql.SQLException: 关闭的连接

网上的解决方法如下:
方法一:上网查了一下,有人说是数据库事务的原因,要把hibernate的autocommit设为false,我找了一下这个好像要在代码里面设置,而不能通过简单的设置Hibernate的配置文件来设置,就没有继续走这条路。后来想到可能是数据库连接池的原因。
方法二:在hibernate配置文件中加入对c3p0连接池的配置,同时将c3p0-0.8.4.5.jar拷贝到应用的lib文件夹下。这里说明一下,如果没有这个配置,hibernate默认使用其自身的数据库连接池。配置后则采用第三方的c3p0连接池。
使用c3p0连接池后确实没有问题了,但是我还是不明白为什么使用默认的连接池会有问题,如果哪位大哥清楚麻烦回复一下啊,谢谢!

把Hibernate的connection.autocommit设置为false

出现这个问题的原因
首先, 你的代码是从数据库读取用户信息, 不是写入数据. 所以不能使用事务和rollback方法.
第二, 当你更新和插入一条记录到数据库, 使用事务的时候, 关闭数据库的自动提交. 检查你的连接池是否正常.
第三, 当你有一个错误, 一定要关闭你的Hibernate连接. 当你捕获一个异常, 使用finally关闭hibernate Session或者数据库连接.
另外, 可能连接池已经用完.

关于JAVA中public protected private static四个关键字

1、前三个是变量访问控制符
public 对无论任何类都可见
protected只对子类可见
private只对该类可见
static是修饰方法的,定义成static的方法则不是当前类的方法,不可以通过类名.方法名访问

public 还修饰类名
如果没有修饰符则只对包内可见,有public则没有这个限制

public 代表任何类都可以访问
private 代表只有类本身才可以访问
protected 在同一个包中,类及其子类可以访问
不加关键字,默认的是包的访问权限

static是静态的意思,静态的类或者变量只创建一次;不用创建任何实例就可以访问static的东西;

1、public 公有成员函数可被任何其它对象和类的成员函数调用。 当该成员函数必须被该函数所在的层次结构之外的其他对象和类在访问时。
2、protected 被保护的成员函数可被它所在的类或该类的子类的任何成员函数调用。 当该成员函数提供的行为被它所在类的层次结构内部而非外部需要时。
3、private 私有成员函数只可以被该类所在的其它成员函数调用,该类的子类不可以调用。 当该成员函数所提供的行为明确针对定义它的类时。私有成员函数常常是重新分配要素的结果。重新分配要素又叫“重组”,指类内其它成员函数封装某一个特定行为的做法。
4、 static关键字
通常,我们创建类时会指出那个类的对象的外观与行为。除非用new创建那个类的一个对象,否则实际上并未得到任何东西。只有执行了new后,才会正式生成数据存储空间,并可使用相应的方法。
但在两种特殊的情形下,上述方法并不堪用。一种情形是只想用一个存储区域来保存一个特定的数据——无论要创建多少个对象,甚至根本不创建对象。另一种情形是我们需要一个特殊的方法,它没有与这个类的任何对象关联。也就是说,即使没有创建对象,也需要一个能调用的方法。为满足这两方面的要求,可使用static(静态)关键字。一旦将什么东西设为static,数据或方法就不会同那个类的任何对象实例联系到一起。所以尽管从未创建那个类的一个对象,仍能调用一个static方法,或访问一些static数据。而在这之前,对于非static数据和方法,我们必须创建一个对象,并用那个对象访问数据或方法。这是由于非static数据和方法必须知道它们操作的具体对象。当然,在正式使用前,由于static方法不需要创建任何对象,所以它们不可简单地调用其他那些成员,同时不引用一个已命名的对象,从而直接访问非static成员或方法(因为非static成员和方法必须同一个特定的对象关联到一起)。
有些面向对象的语言使用了“类数据”和“类方法”这两个术语。它们意味着数据和方法只是为作为一个整体的类而存在的,并不是为那个类的任何特定对象。有时,您会在其他一些Java书刊里发现这样的称呼。
为了将数据成员或方法设为static,只需在定义前置和这个关键字即可。例如,下述代码能生成一个static数据成员,并对其初始化:

class StaticTest {
Static int i = 47;
}

用 LotusScript 实现 Excel 报表的自动生成和操作

Lotus Notes 是 Windows® 和 Macintosh® 计算机上功能强大且用途广泛的软件,在企业内部的办公应用领域,扮演了十分重要的角色。而 Excel® 表格也是企业办公领域的流行工具之一,经常作为统计数据的报表使用。Lotus Domino Designer 当中的 LotusScript 语言提供了丰富的编程功能,可以在 Notes 数据库当中实现对 Excel 文件的自动生成、操作和发送等等功能。本文结合本人在开发过程当中的实际经验,以一个具体的应用模块为例,介绍在 Lotus 平台下,用 LotusScript 语言实现 Excel 报表操作功能的原理、方法和一些实用技巧。
Lotus Notes 应用开发概念简介
Lotus Notes 是大型企业内部办公协作的首选工具之一,除了众所周知的电子邮件收发功能以外,Notes 也是一个强大的应用程序运行平台,可以通过运行各种 Notes 应用来实现各种各样的功能。Notes 客户端上运行的应用被称为 Notes 数据库,如同网页浏览器(如Firefox)通过打开不同的 URL 访问功能各异的网络应用(网页)一样,Notes 客户端的强大功能,正在于通过打开不同的 Notes 数据库,从而实现千变万化的业务功能。从物理上看,Notes 数据库很简单,就是一个后缀名为“nsf”的文件,Notes 客户端只要打开本地或者远程服务器上的 nsf 文件,就可以访问这个 Notes 数据库了。从逻辑上看,Notes 数据库文件将数据库的设计和数据都集中在一起,便于访问和维护。
要理解 Notes 数据库的逻辑结构,就要理解 Notes 数据库独特的数据库类型-“文档数据库”。一提到“数据库”,人们都会想起通用的关系型数据库,其实,很多其他形式的数据库,如“文档数据库”也非常的有价值,便于实现某些特定的功能。文档数据库的概念很简单,就是在数据库当中没有关系型数据库那样复杂的结构和严格的规定,数据按照简单的“文档”形式来存储,一个“文档”当中包含很多内容字段,文档之间的关联不是很紧密。除开数据存储以外,Notes 数据库当中还储存了一些操作数据的应用程序,包括脚本程序、图形界面设计、数据表单设计等等。有了这些设计,Notes 数据库就不仅仅具有简单的数据存储功能,还可以实现丰富的应用逻辑功能了。关系型数据库虽然很通用,可以存储任何结构的数据,但是在存储结构不是很复杂,数据间关联不是很紧密的情况下,文档数据库的形式就更加容易设计和修改;而这种将数据和设计放在一个文件当中的形式,也更加便于部署和掌握。
一个很容易想到的文档数据库的例子就是电子邮件信箱:在邮箱里,每一封邮件都可以被认为是一个独立的文档,有着类似的结构和字段,而且相互之间关联程度不大。如果用关系型数据库来记录邮件内容,在开发过程中必须遵循很多的限制和约束,而且对于归类、排序、自动设置属性等等邮件文档的常用功能,必须按照关系型数据库的规范编写比较复杂的应用程序来实现。有了文档数据库,事情就变得简单了,由于文档的共同特性,文档数据库一般都有通用的归类、排序等功能,几乎不用写代码,就可以实现这些常规的操作功能。而且,当我们要迁移邮箱内容的时候,只要拷贝邮箱的 nsf 文件就可以了,不会像关系数据库那样需要复杂的导入导出和配置过程。所以,Lotus Notes 当中应用最为广泛的,就是邮件数据库,它充分体现了文档数据库的特点,另外,个人通讯录、日程安排管理、公司内部的文档管理系统等等企业办公协作应用,也可以用文档数据库很好的实现。

Domino系统登录使用数据库::定制OA登录界面

下载后解压到domino/data目录下即可;
可根据自己的需要重新修改;
下载数据库

4/02/2009

img控件判断一个图片是否存在的方法[不错的js代码]

,img src=”images/img.jpg” mce_src=”images/img.jpg” onerror=”this.src=’默认图.jpg’”>

当指定的图片不存在时用,默认图替换该图片


'SCRIPT>
var sImg=’’;
function fnLoadFirst(){
oContainer.innerHTML=sImg;
oStub.onerror=fnLoadFail1;
oStub.src=”" mce_src=”";
oStub.style.display=”block”;
}
function fnLoadFail1(){
oStub.alt=”Image failed to load.”;
return true;
}
'/SCRIPT>

'INPUT TYPE=button VALUE=”Load First Image” onclick=”fnLoadFirst()”>
'DIV ID=oContainer>'/DIV>


参考以上代码,实际上只要在客户端定义的onerror事件进行处理就行了。
imgID.onerror = “imgID.src=’出错图片.gif’”

通过js取select的text值

通过JS代码获得select的文本值。document.all.name.value是获得value中的值;

'script language=”javascript”>
function chk(){
var obj = document.getElementById(”sel”);
var strsel = obj.options[obj.selectedIndex].text;
if (confirm(”确定要选择”+strsel+”吗?”)){

}else{

}
}
'/script>
'select name=”sel” onchange=”return chk()”>



'/select>

通过js判断当前页面中input是否存在

在bs开发中经常会判断当前页面中input 是否存在..

下面代码可解决这个问题:

var oFileChecker = document.getElementById(”fileChecker”);
if (oFileChecker!=null){

//input存在…

}

说明:

此处必须使用getElementById来获得,通过getElementByName来获得,可以判断是否存在,但进一步取值时,obj.value则提示为undefined