# 大染志
Go, JavaScript, Ruby on Rails, Java,Docker, CI, CD, Photography

0%

## 嘿，有人在吗？新年快乐

Posted on 2012-01-23 Edited on 2014-07-22 In 我说

人长大了，过年都觉得没什么意思了。今天大年初一就在家了。有点无聊。下午在弄Linux，本来装了centos minial 可是文字界面，网络连接搞不定。然后就转到ubuntu server 了，之所以这样做，是因为本来用linux也是为了做服务器用，而且服务器版开机不起其他进程的话，占用的内存很少。因为不需要桌面。

分享一个经验吧：如果你想在在host 主机商ping virtualbox 里面的linux 虚拟机的话，请把网络连接设成桥接（Bridge Adapter）模式.桥接模式，虚拟机将使用和host主机同一类的IP地址。

然后推荐使用putty 通过ssh对linux进行控制。这个在windows下面真的很好用。当然请记得在你的虚拟机上安装

    sudo apt-get install openssh-server

    sudo apt-get install ssh

在这里这大家新年快乐，龙年大吉，当然也祝自己今年又好的发展，马上实习了，希望找到好的工作。

## 使用maven部署项目到tomcat 7

Posted on 2012-01-19 Edited on 2014-07-22 In java , maven

上一篇文章，我们讲了maven的简单入门应用，其实最详尽的文档还是应该看官方的document。我想其他人在网上写都是一些细节上的解释和补充。或者干脆就是简单的大致的描述。

今天我想分享的是使用maven插件部署we项目到tomcat 7 中运行。之前如果我们没有使用maven,那么我想很多人都是使用的eclipse自带的run on server中选择tomcat，将web项目部署到tomcat中实现自动部署和运行。我想maven本身强大也在于，我们可以写很多插件（plugin）来扩展maven的功能，实现各种自动化的操作。下面进入正题。

对于使用maven插件部署项目到tomcat 6中，网上已经有很多说明。对tomcat 7由于推出不久，笔者今天弄的时候，也在网上找了很多资料感觉都说得不好，或者不能解决问题，于是今天我们来讲这个。（下面Tomcat 均指Tomcat 7）

tomcat maven plugin 插件已经从codehaus 转到Tomcat官网了，以前的codehaus只支持tomcat 6.这里我们需要使用最新的tomcat maven plugin. 该插件的pom为，即是在pom.xml加入：

    <pluginManagement>
          <plugins>
            <plugin>
              <groupId>org.apache.tomcat.maven</groupId>
              <artifactId>tomcat6-maven-plugin</artifactId>
              <version>2.0-SNAPSHOT</version>
            </plugin>
            <plugin>
              <groupId>org.apache.tomcat.maven</groupId>
              <artifactId>tomcat7-maven-plugin</artifactId>
              <version>2.0-SNAPSHOT</version>
                  <configuration>
                     <url>http://localhost:8080/manager/html</url>
                     <server>tomcat</server>
                 </configuration>
            </plugin>
          </plugins>
        </pluginManagement>

这样写的目的是既支持tomcat 6 也支持tomcat 7.虽说这个插件是2.0-snapshot版本，不太稳定，不过我试的时候没有遇到任何问题，可以放心使用。(红色部分我们将在下面解释)

下面我们需要在插件仓库（plugin repositories）和普通仓库（repositories）中添加以下仓库到pom.xml:

repository:

    <repository>
          <id>people.apache.snapshots</id>
          <url>http://repository.apache.org/content/groups/snapshots-group/</url>
          <releases>
            <enabled>false</enabled>
          </releases>
          <snapshots>
            <enabled>true</enabled>
          </snapshots>
        </repository>

plugin repository:

    <pluginRepository>
          <id>apache.snapshots</id>
          <name>Apache Snapshots</name>
          <url>http://repository.apache.org/content/groups/snapshots-group/</url>
          <releases>
            <enabled>false</enabled>
          </releases>
          <snapshots>
            <enabled>true</enabled>
          </snapshots>
        </pluginRepository>

这样做的目的是为了保证maven能够下载到maven tomcat plugin。而且是从上述的仓库。

为了成功执行maven 部署 我们需要开启tomcat支持 admin-script，manager-gui的权限。

admin-script:是让tomcat支持以脚本的形式来管理

manager-gui:是让tomcat支持图形化的管理界面。

打开tomcat的安装目录的 conf/tomcat-users.xml

添加以下内容：

    <role rolename="admin-script"/>
    <role rolename="manager-gui"/>
    <user username="admin" password="admin" roles="manager-gui,admin-script"/>

这里请自行改变用户名和密码。

接下来我们还需要配置一下maven，给他添加一个服务器和相关配置，在maven安装目录下的conf/settings.xml添加如下内容。

    <!--Tomcat 7 server -->
         <server>
                <id>tomcat</id>
                <username>admin</username>
                <password>admin</password>
         </server>

注意：这里的id需要和上面用醒目绿色标记的ID一致，用户名和密码需要和tomcat里面设置的用户名和密码相同。

这里在解释一下，上面红色部分的地址的是因为tomcat7中的部署地址变成了

    http://localhost:8080/manager/html

好了，配置我们就做好了，在部署之前，当然我们需要打开tomcat服务器。tomcat 7部署请使用命令:

    mvn tomcat7:deploy

在eclipse只需要在goal中填入 tomcat7：deploy 即可。
不出意外，应该就可以部署成功了。
童鞋们，试试吧。有什么疑问以及文中的缺点，请指出。谢谢。

如果出现以下错误，请按照本文章验证，就可以搞定了。

> Failed to execute goal org.codehaus.mojo:tomcat-maven-plugin:1.0:deploy (default-cli) on project my-webapp: Cannot invoke Tomcat manager: Server returned HTTP response code: 403 for URL:

## Maven 学习入门 1

Posted on 2012-01-12 Edited on 2014-07-22 In java , maven , 各类教程

Maven是一个项目构建工具，它不止可以用于Java，可能大家对Ant更加熟悉，个人感觉Maven相比Ant更加高级，功能也更加丰富，使用比较灵活的构建工具，maven还支持插件，当然也有机遇eclipse的插件m2e。现在还有maven的仓库软件nexus，以及更对可以对maven进行持续集成的服务器Hudson。对于Maven过多的讲解就不再这里提及，希望把这个日志作为一个maven学习的记录。下面我们就来一步一步安装并学习使用Maven：

首先下载并安装maven，进入http://maven.apache.org/download.html 下载Maven的已编译好的binary可运行版本。然后将这个压缩文件解压到一个指定目录，比如说D盘。我为了使用方便已经将maven后面的版本号去掉，因为我的文件夹目录为：

    D:maven

请下载最新版本3.X版。3.X和2.X的版本有较大差别。

接下来我们需要做的是，配置环境变量：M2_HOME，其值为你解压的maven文件夹根目录，比如我的就是D:maven.

添加环境变量 M2，其值为%M2_HOME%bin目录。（注：所有配置均在windows下完成）

    M2_HOME=D:maven;

    M2=%M2_HOME%bin;
    PATH=$M2:$PATH;

保存并退出。然后打开命令行，输入以下命令：mvn –version

如果出现类似于下面这些信息，即是安装成功了。

我们也可以通过命令行 mvn –help来查看maven 有哪些常用命令。

接下来我们对仓库的相关设置做一个简单设置，windows下默认地maven会自动将c:usersYOURNAE.m2repository作为仓库，用来存放下载的类库。个人不太喜欢各种这类东西安装在C盘，这样比较消耗资源。因此请将你的maven文件夹下面的 conf/settings.xml打开，找到：

    <localRepository>/path/to/local/repo</localRepository>

并将其值改成你想要防止仓库的位置，个人建议放在maven程序下的repository目录下，并去掉该语句前后的注释。

紧接着，我们就来创建一个maven项目：

我们选择一步一步来创建项目，使用命令行切换到你需要创建项目的文件夹，在命令行输入：

    mvn archetype:generate

然后按照maven的提醒来输入相关信息.

大致解释一下相关属性：

groupId：在一个项目或者组织中通常是唯一的标识符，一般以项目或者组织的网址来命名，例：info.junv.test

artifactId:类似于给项目取个别名。例：first-app

version:项目的版本号。例：1.0-snapshot

package:为项目的包名，例：info.junv.test

当程序显示DUILD SUCCESS 时即表示，项目创建成功了，打开创建项目的文件夹就可以看到刚才创建的文件了。

源代码在first-app/src/main下面，first-app/src/test下为测试的相关代码。

并且在first-app代码的根目录下生成了pom.xml，该文件非常重要，里面包含程序的相关包依赖和仓库地址，以及其他项目任务等，这里不多讲。

下面执行有管项目的其他一些操作：（需要在命令行下进入该项目，例：cd fitst-app）

    mvn package #执行项目打包操作，生成target文件夹，jar文件，以及其他相关文件夹

下面是maven官方的一些其他命令，以及解释：

Although hardly a comprehensive list, these are the most common default lifecycle phases executed.

- validate: validate the project is correct and all necessary information is available
- compile: compile the source code of the project
- test: test the compiled source code using a suitable unit testing framework. These tests should not require the code be packaged or deployed
- package: take the compiled code and package it in its distributable format, such as a JAR.
- integration-test: process and deploy the package if necessary into an environment where integration tests can be run
- verify: run any checks to verify the package is valid and meets quality criteria
- install: install the package into the local repository, for use as a dependency in other projects locally
- deploy: done in an integration or release environment, copies the final package to the remote repository for sharing with other developers and projects.

There are two other Maven lifecycles of note beyond the default list above. They are

- clean: cleans up artifacts created by prior builds

- site: generates site documentation for this project

如果需要将源代码编译后并打包：则需要使用package或者install。如果选择install，maven还会将该包存放至本地仓库。

上面这些都是生成普通的项目结构，其实我们平时使用最多的是eclipse项目。maven也可以生成eclipse项目结构。

    mvn eclipse:eclipse

为了删除eclipse的文件结构我们需要使用：

    mvn eclipse:clean

这样我们就可以在eclipse中导入maven生成的eclipse项目，最方便的还是在eclipse中安装maven 的eclipse插件m2e。

m2e下载地址：http://download.eclipse.org/technology/m2e/releases/

好了，这就是maven的简单应用，希望下一次写pom.xml。

## Spring OSGI入门(1) Hello World

Posted on 2012-01-09 Edited on 2014-07-22 In java , OSGI

什么是OSGI，他是一个动态组件、服务模型，简单得说就是在运行程序的时候，你可以动态安装、卸载、开始、停止服务。达到动态配置管理的功能，大大增加程序的灵活性。在Eclipse中就用到了OSGI，eclipse自带了一个osgi容器Equinox用来运行和管理OSGI相关的功能。

Spring osgi是springsource基于spring framework开发的OSGI框架，继承了spring的特性，当然使用spring osgi的时候也需要导入spring framwork,现在spring osgi 已经变成了Eclipse 的gemini blueprint项目。由于本人也在学习之中，具体的细节我也不太清楚，希望与各位分享讨论。

这个实例文章，我们将运行一个简单的Spring osgi示例。首先我们需要建立一个项目用来提供Spring osgi运行相关的类库，我们采用maven来获取类库，maven的操作就不多讲了。这里只是涉及简单操作。

> 这个程序我所用到的所有资源：

> Eclipse 3.7

> Java SDK 1.6

> Maven 3.0、m2e插件

> Spring framework 3.0 、spring source tool 插件

> Spring osgi 1.2.1

下面我们就开始一步一步的操作：

依次点击File–>New–>Project–>选中General下面的Project(建立常规项目)

弹出新建项目对话框里面，在项目名称里面填入SpringDMTarget,点击Finish结束。

在项目根目录下创建一个target目录，并创建一个pom.xml文件，创建成功后，项目目录如下：

由于pom文件里面的依赖关系很多，这里就不一一列出了。下面贴出源文件：

pom （点击下载）

你需要做的就是改变其中一行，把它改成你的电脑的SpringDMTarget项目target的绝对路径：

> <taget-platform.root>D:javaSpring-DM-Targettarget</taget-platform.root>

然后选中pom.xml右键点击run as –>Maven install 即可开始运行maven，如果本地没有需要的包，maven会自动下载。等待一段时间后（时间长短由网速快慢而定）。只要看到控制台显示** BUILD SUCCESS** 则表明maven 已经成功下载并将包复制到目标目录了。选中项目，右键点击refresh即可看到target目录下已经下载好了相关的包。

接下来我们就需要配置运行环境了。依次点击Windows–>Preferences–>Plug in Development–>Target Platform 出现如下界面

点击Add按钮，新建一个目标运行环境。选择Nothing:Start with an empty tarfget defination.点击Next,在这个对话框中Name属性行填入对运行环境的命名：我们就填Spring DM,点击右边的Add按钮，弹出Add Content对话框,

选择Directory点击Next，在下页对话框点击Browse 从电脑中找到SpringDMTagret项目的target目录。完成后将看到，目录中的包已经全部导入了，点击Finish。选中我们新建的运行环境。

点击OK保存修改。

然后配置我们的项目运行选项，我们需要以Osgi Framework形式运行。选中项目，邮件点击Run As–>Run configurations,进入页面

选中 OSGI Framework,右键选择New ,我们可以看到系统已经默认将target platform中所有的包已经选中了。点击RUN，即可运行了。如果出现如下界面即说明运行成功了。

你可以在eclipse 命名行中输入ss查看所有服务运行状态。

大家也注意到了，上面的那两行红色的字，

>     log4j:WARN No appenders could be found for logger (org.springframework.osgi.extender.internal.activator.ContextLoaderListener).
>     log4j:WARN Please initialize the log4j system properly.

他提示我们Log4j没有正确配置，下面我们将修复这个“Bug”，各位请看第二讲吧。

Spring OSGI入门 Hello World(2) 处理Log4j “WARN No appenders could be found for logger”

## Spring OSGI入门(2) 处理Log4j “WARN No appenders could be found for logger”

Posted on 2012-01-09 Edited on 2014-07-22 In java , OSGI

上一篇文章，我们讲到了Spring OSGI运行所需要的目标环境已经建好了，不过Log4j出现一个问题，提示我们：

> log4j:WARN No appenders could be found for logger (org.springframework.osgi.extender.internal.activator.ContextLoaderListener).
> log4j:WARN Please initialize the log4j system properly.

原因就是我们没有配置Log4j，导致log4j不能正常使用。下面我们就来处理这个问题。

打开Eclipse 依次点击File–>Project–>在对话框中选中Fragment Project 点击Next.在对话框中按如下进行配置：

项目名称为：info.junv.osgi.log4j,在target platform中选中 an OSGI framework选中 equinox,点击Next:

在plug-in ID中选择com.springsource.org.apache.log4j，点击Finish,完成。

在项目src根目录下建立log4j.properties文件。项目结构层次如下：

打开log4j.properties，粘贴入一下内容

    log4j.rootLogger = INFO,FirstAppender
    log4j.appender.FirstAppender = org.apache.log4j.ConsoleAppender
    log4j.appender.FirstAppender.Threshold = INFO
    log4j.appender.FirstAppender.ImmediateFlush = true
    log4j.appender.FirstAppender.Target = System.out
    log4j.appender.FirstAppender.layout = org.apache.log4j.PatternLayout
    log4j.appender.FirstAppender.layout.ConversionPattern = [%x]-%p-%d{yyyy-MM-dd HH:mm:ss}-%m[%c]%n

添加点击点击当前项目或者，前面我们写的SpringDMTarget项目，右键选择Run As–>Run Configurations–>OSGI framework（去掉其余所有多于的项目，保证只剩下我们之前导入的包已经当前这个log4j项目。）
同时需要注意的是，为了让程序顺利运行，需要优先启动…osgi.web.extender，这里我们需要将其的start level设置成4以上（因为默认启动等级为4，为了使其优先启动，所以优先级应大于4，笔者在自己电脑上将优先级设成5依然不行，因为建议如果不行，可以将优先级设得大一些，这里我设置为10，运行成功），

点击RUN。即可以运行。

如果…osgi.web.webextender的优先级不够，将会出现如下错误：

No Catalina Service found, bailing out[org.springframework.osgi.web.deployer.tomcat.TomcatWarDeployer

…….

出现这个错误你需要做的是，将osgi.web.webextender组件的启动优先级别再调高一些。即可。

## Nexus 1.9 在JDK 1.7下不能安装运行

Posted on 2011-12-30 Edited on 2014-07-22 In java

Nexus 是一个Maven仓库管理软件，或者叫做Maven包管理软件。一般用于企业内部当做自己的maven仓库，同时也可以对他做一些配置用来优化内部仓库和外部仓库中间的访问等等。如果需要详细了解Nexus和MAVEN相关信息，这里有一篇文章写得比较好 MAVEN仓库管理（穿越吧）。

笔者昨天安装Nexus的时候，一直没有成功，不论是通过Nexus自带Jetty服务器，还是通过Tomcat 安装WAR程序都不行。经查看日志文件，发现如下错误：

> jvm 1 | 2011-12-29 22:59:40 WARN [er_start_runner] -
> org.sonatype.security.configuration.source.FileSecurityConfigurationSource -
> No configuration file in place, copying the default one and continuing with it.

后面我反编译异常里面的class文件。发现原来由于Nexus 没有按照要求生成nexus.xml配置文件，于是他就停止工作了。我尝试将class里面的xml文件拷到相关目录，并命名为nexus.xml，不行。后面检查tmp目录，发现有nexus.xxxxxxx.xml。更加使我确信了。是配置文件的错误。

哎。后面所做的工作，就不必多讲了，总之我弄到凌晨1点也没有解决。

今天来在同学电脑上安装测试，可行，在老师电脑电脑上安装测试也可行。他们的电脑都使用的是JDK 1.6，我把JAVA_HOME改成1.6在Tomcat下测试也可行，但是使用Jetty还是不行。这个不难解释，Tomcat调用的是JAVA_HOME的JDK而程序自带的Jetty调用的是JRE，而我的JRE是1.7。

现在真相大白了，是程序不支持Java JDK 1.7.

需要值得提一下的是我在JDK 1.7下面测试过1.9 和1.9.2.4 两个版本都是不行的。

刚才也向他们官网提交了这个bug,第一次提交bug哦！

安装Nexus 成功之后，你应该是可以看到这样的画面：

期待下一篇文章将OSGI或者MAVEN！！！！加油

## Java实现单一账号某时刻单一登录

Posted on 2011-12-21 Edited on 2014-07-22 In java

原谅我使用如此晦涩的词语来表达我的意思，其实我想表达的意思的用java实现类似于当其他人登录你的QQ时，你会收到“你的账号已在其他地方登录，请重新登录。”这样的东西，简单的说就是同一时刻一账号只允许一个人登录在线状态。也许就是保证时间、空间上的唯一性。但是我想强调的是这种效果绝不是单点登录，真正的单点登录是类似于Google中，使用多个产品只需要登录一次，其实QQ也有这样的功能。好了，废话少说下面说正经的。

我们最常用的用来验证用户使用登录的东西是Session，但是session并不能达到我们想要的效果，因为每个客户端访问网站的时候都会获得一个session，因此虽然是同一个账号登录系统，只要用户使用的浏览器，服务器都会产生两个session。但是每个客户端访问服务器的服务器的时候都会产生一个SessionId,而这个ID这是唯一的，我们会在后面用到。这里我们使用使用Application 域，在Java EE里面是ServletContext。这个东西是一个全局变量，当Web 程序运行的时候便会一直存在。而且整个程序只有一个Application.

于是我们可以这样。我们将数据存入Application中。而存入的内容则是：键（key）为当前用户使用用户名或者其他一个可以识别用户身份信息的ID，而值（value）则是用户得到的sessionID。这样便保证了一个账号同时至于一个用户对应。在用户登录的时候想Application中写入 key:value信息，在以后用户每次请求数据的时候，进行验证。看Application中的SessionID与用户本身的SessionID是否一致，不一致则说明多人登录。

下面是代码了：（我感觉说了好多废话）

首先获取Application:

    HttpSession session = request.getSession(); //request为HttpServletRequest对象
        ServletContext  application = session.getServletContext();

向其中存入我们的验证数据，这里键为用户ID，值为该用户实例获得的sessionID

    application.setAttribute(userId, session.getId());//userID为用户ID，

在每次验证的时候，在java里面我们可以采用至少两种方法，一种是Filter(Servlet 过滤器)、另外一种则是Spring AOC 面向切面编程，这里由于我对Spring AOC还不太熟悉，所以就用Filter，Filter具体设置，编写都不说了，只说一些怎么处理。拿到一个客户端来的请求，就进行sessionID比较，如果相同就让请求继续，如果不相同，就将该请求所对于的session清空（如果采用session验证用户是否登录，就可以达到让该用户退出登录）,并给出提示信息，跳转到登录页面。

    //获取application对象
          ServletContext  application = session.getServletContext();
          String sessionId = (String) application.getAttribute(userid);
        String trueSessionId = session.getId();
        System.out.println("sessionID====="+sessionId+"现在的sessionID"+trueSessionId);
        if(sessionId.equals(trueSessionId)){
            //do nothing
        }else{
            //说明有多个用户登录,去掉其session
            session.removeAttribute(sessionKey);
            //response.sendRedirect(request.getContextPath() + redirectURL);
            response.setContentType("text/html;charset=utf-8");
                 PrintWriter out = response.getWriter();
                out.println(MyTools.getAlertMessage(request.getContextPath(), "您的账户已在别处登录，请重新登录", 3));
            return;
            }

这里可以使用sendRedirect,将用户直接跳转到某个页面，但是这样不太友好，因为没有提示信息，我选择另外一个使用response给用户一些提示信息，然后设置一段时间后跳转到另外的页面。这就是我写的一个静态方法 getAlertMessage,下面贴出具体代码吧。

    /**
         * 生成用户返回的警告页面信息
         *
         * @param path
         *            系统根目录
         * @param content
         *            需要显示的内容
         * @param second
         *            需要停留消息的秒数
         * @return String
         */
        public static String getAlertMessage(String path, String content, int second) {
            StringBuilder sb = new StringBuilder();
            sb.append("<html>");
            sb.append("<head>");
            sb.append("<meta http-equiv='refresh' content='3;url=" + path
                    + "/login.html'>");
            sb.append("<link rel='stylesheet' type='text/css' href='" + path
                    + "/css/login.css'>");
            sb.append("</head>");
            sb.append("<body><form id='login'><fieldset id='inputs' style='font-size:18px;'>"
                    + content
                    + ","
                    + second
                    + "秒后你将跳转到登录页面</form></fieldset></body>");
            sb.append("</html>");

            return sb.toString();

        }

好了，现在差不多实现这个功能的主要代码都有了。原谅我的表达能力不够好，如果各位有什么问题，留言吧。我们可以讨论一下。

## 解决Spring 管理Hibernate执行数据库操作出现“too many connection”的错误

Posted on 2011-11-29 Edited on 2014-07-22 In java

随着代码的不断深入，出现了一些意想不到的错误.如上面所写。

mysql数据库报出了can’t open connection , …….. too many connection 等等错误。

但是我使用的是Spring 管理Hibernate执行相关操作。我们都知道Spring 在执行Hibernate相关操作完成时会自动关闭连接。 比如执行这样的操作：this.getHibernateTemplate().update(msg);

我也知道如果我们这样执行：

    Session mySession = getSession();
             Query query = mySession.createQuery(hql);
            query.setFirstResult(start);
            query.setMaxResults(count);
            @SuppressWarnings("unchecked")
            List<Message> msgs = query.list();
             mySession.close();

需要自己关闭Session.我关闭了Session之后，Hibnerate一次可以执行超过8次的链接。但是，一旦频繁请求时依然会出现文首的错误。
这是为什么呢？
大致是这样的，Session 上面还有一个SessionFactory，而SessionFactory是负责管理Session的。我们虽然调用了 session.close()
但是没有真正关闭该Session，为了彻底关闭该Session交出使用权，我们需要使用

    this.getSessionFactory().close()；//关闭sessionFactory

这样就彻底关闭该Session了。
好了，现在程序性能提升不少了，我在自己电脑上至少是已经不能刷爆程序了。
如果说得哪里不对，请指正，因为本人也在学习之中！

## 解决IE不兼容addEventListener

Posted on 2011-11-28 Edited on 2014-07-22 In 编程之美

OH，IE太多不爽了，js有一些不能兼容。addEventLister就是一个。还好现在IE9已经支持addEventListener了。

在IE里面使用的是attachEvent().,比如同样地绑定一个事件。在IE下面和其他非IE内核下面就是这样的：

    attachEvent('click',myfunction);   //第一个参数为需要绑定的动作，第二个参数为绑定的事件，这是在IE下面

    addEventListener('click',myfunction，false); //前两个参数与attachEvent一样，第三个参数为异步还是同步调用，false为异步。而我们通常选择false.

我们可以采用下面的方法实现兼容IE浏览器。如果某个对象节点支持addEventListener()方法。则使用该方法，如果不支持该方法，说嘛浏览器为IE，则调用attachEvent()方法。

    if(tr.addEventListener){
           tr.addEventListener("click", handleCheckboxClick, false);
     }else{
          tr.attachEvent("click",handleCheckboxClick);
      }   //tr为对象节点。

    好了，试试吧，看看是不是已经可以了！

## 解决Hibernate只执行8次数据库操作

Posted on 2011-11-26 Edited on 2014-07-22 In 我说

嗯，原因是这样的，今天下午在写一个获取某个类别下文章数量的时候，需要为每个目录都执行查询，但是我发现一个问题，Hibernate只会执行8次操作，之后就停在那里了，也不会返回数据。

噢，真是恼火，最终在百度上找到了解决办法，原因是这样了，因为我每次执行操作的数据库查询的时候没有关闭Session，因此导致出现了问题。

同志你只要加上这样这样一句话：

    session.close()；

好了，再试试，已经搞定了!