MySQL 使用教程

2015-05-10 MySQL

关于 MySQL

MySQL 是最流行的开源数据库。

本文简明的讲解了 MySQL 如何下载安装到使用的整个过程。


Help&Manual 使用教程

2015-05-08 Help&Manual

关于 Help&Manual

Help&Manual 一个所见即所得的帮助文件制作工具,支持打印功能。还可以用来制作非常专业的使用手册、HTML页面及RTF、PDF 格式的文件。值得一提的是,它的OLE链接功能十分强大,支持26种文件格式,而且还支持未定义的某些文件格式的文本、图形、声音、动画的链接,真可谓无所不能。

该软件现在能够完美支持中文。

注意: 该软件是收费的,但可以下载试用


Spring singleton bean 与 prototype bean 的依赖

2015-05-07 Spring

Spring支持不同的scope。不同scope在使用上是有差异的,比如singleton与prototype。

问题背景

我们知道,Spring bean 默认的 scope 是 singleton(单例),但有些场景(比如多线程)需要每次调用都生成一个实例, 此时 scope 就应该设为 prototype。如:



MINA 实现聊天功能

2015-04-12 MINA

在《MINA 快速入门》一文中,我们介绍了如何利用 MINA 快速构建一个 Time Server(时间服务器)。在《Netty 实现聊天功能》一文,我们也介绍了如何用 Netty 实现聊天功能。由于 MINA 和 Netty 是同一个作者,架构类似,如果你掌握其中一个,学习另外一个也不是难事。现在我们就用 MINA 来实现聊天功能。

##准备

  • JDK 7+
  • Maven 3.2.x
  • MINA 2.x
  • Eclipse 4.x

Java switch 语句使用 String 参数

2015-04-10 Java

当我尝试在 switch 语句使用 String 参数时(注意ctrType为字符串)

	switch (ctrType) {
	case "01" : 
		exceptionType = "读FC参数数据";
		break;
	case "03" :
		exceptionType = "读FC保存的当前表计数据";
		break;
	default:
		exceptionType = "未知控制码:"+ctrType;
	}

MINA 快速入门

2015-04-04 MINA

Apache MINA 是一个网络应用的框架,可以帮助用户开发的高性能、高扩展性的网络应用程序。它通过 Java NIO 提供了一个抽象的事件驱动的异步 API 用在不同传输协议上,比如 TCP/IP 和 UDP/IP 等。

本教程介绍了如何构建基于 MINA 的应用的过程。这个教程介绍的是构建一个 Time Server(时间服务器)。


如何查看 JAR 包的源代码

2015-04-02 Java

Java 项目的编译文件经常被打包成 JAR(Java Archive,Java 归档文件)文件,当然,作为学习,有时候也非常想看到这个 JAR 被打包前的源代码是怎么样的。 下面提供几种查看 JAR 包的源代码方式。

##环境

  • JDK 7+
  • Maven 3.2.x
  • Eclipse 4.x

Java 注释规范详解

2015-04-01 Java

在 Java 的编写过程中我们需要对一些程序进行注释,除了自己方便阅读,更为别人更好理解自己的程序,所以我们需要进行一些注释,可以是编程思路或者是程序的作用,总而言之就是方便自己他人更好的阅读。

##注释类型

Java 有两类注释: implementation comments(实现注释)和 documentation comments(文档注释)。 实现注释常见于 C++,使用 /*...*/,和 //。文档注释 (也称为”doc comments”) 是 Java 独有的,使用 /**...*/。文档注释可以通过 javadoc 工具转成 HTML 文件。



使用 Eclipse 优化工具 Optimizer for Eclipse

2015-03-19 Eclipse

##Optimizer for Eclipse 介绍

官网: http://zeroturnaround.com/free/optimizer-for-eclipse/

顾名思义,Optimizer for Eclipse 这个插件主要是解决 Eclipse 性能优化问题:

###1.低内存分配

较低的最小堆大小不断将导致 JVM 分配额外的内存。当你没有足够的内存,垃圾收集频繁的 JVM 会减慢你的体验。

###2.慢类验证

类在 Eclipse 执行验证类和插件类显著减慢 JVM 的启动。

###3.大索引和历史

随着时间的推移,Eclipse 会生成一个庞大的历史和索引文件缓存。这些文件在 RAM 和 SSD 硬盘使 Eclipse 迟缓,反应迟钝。


在 Tomcat 里面部署 Web 项目的几种方式

2015-03-14 Tomcat

1.直接把项目复制到 Tomcat 安装目录的 webapps 目录中,这是最简单的一种Tomcat项目部署的方法,也是初学者最常用的方法。

2.在 Tomcat 安装目录的 conf 文件夹,修改配置文件 server.xml,在<host></host>之间插入如下语句。

<Context path="/emsc" docBase="D:\emsc" debug="0" privileged="true"></Context>

其中,docBase 为设置项目的路径。

将 path 设为 “/” ,则以无项目名称形式部署、访问

3.在 conf 目录中,在Catalina\localhost(此处需要注意目录的大小写)目录下新建一个XML文件,任意命名,只要和当前文件中的文件名不重复即可,代码如下。

<Context path="/emsc" docBase="D:\emsc" debug="0" privileged="true"></Context>

Netty 实现聊天功能

2015-03-01 Netty

Netty 是一个 Java NIO 客户端服务器框架,使用它可以快速简单地开发网络应用程序,比如服务器和客户端的协议。Netty 大大简化了网络程序的开发过程比如 TCP 和 UDP 的 socket 服务的开发。更多关于 Netty 的知识,可以参阅《Netty 4.x 用户指南》(https://github.com/waylau/netty-4-user-guide

下面,就基于 Netty 快速实现一个聊天小程序。

准备

  • JDK 7+
  • Maven 3.2.x
  • Netty 4.x
  • Eclipse 4.x


使用 Google Gmail 邮箱服务

2015-02-27 Gmail

总所周知,Google 的大部分服务在华已经被墙,其中也包括 Gmail 。为了收取 Gmail 的邮件,也是要进行一番折腾的。当然,你可以施展各种翻墙技能(文章最后会提供一堆的翻墙方法)。如果不想折腾,只是想收发 Gmail 的邮件,下面的方法更加简单

##修改 hosts

将如下内容加入hosts之后(位置一般在C:\Windows\System32\drivers\etc\hosts)。

173.194.65.108 imap.gmail.com 
173.194.65.108 pop.gmail.com 
173.194.193.108 smtp.gmail.com 

##使用第三方邮箱客户端收发邮件

可以使用 outlook,FOXMAIL 等客户端软件,设置的你 Gmail 邮箱账号,就能收发邮件了。

##附录:翻墙技能

##参考


Gradle 2.3 发布

2015-02-27 Gradle

2月16日,Gradle 团队发布了 2.3。可以在 http://gradle.org/downloads 进行下载。

此版本的 Gradle 带来了一些漂亮的新功能来管理依赖和 IDE 的支持,以及对一些核心插件的改进。

期待已久的特性–具有访问 metadata artifacts 的能力 如 ivy.xml 和 pom.xml ,这个 Gradle 提供相关依赖解决。使用 Artifact Query API,你现在可以直接访问这些原始 metadata artifacts。这将对于生成一个脱机存储库是非常有用的,可以用来检查文件的 metadata,以及更多。

对于 Gradle IDE 的支持在不断提高, Gradle 2.3 通过在 IDE 插件修复大量 bug 而带来增强的 Gradle 工具 API 。值得注意的是,这个版本通过 eclipse-wtp 插件 带来更好的集成的 Eclipse Web Tools Platform 。

一如既往,这个 Gradle 发布受益于大量的社会贡献。这些包括对 antlr的大幅增强,比较了应用插件和工具,以及许多错误修复和改进。

更多关于 Gradle 的知识,可以关注 https://github.com/waylau/Gradle-2-User-Guide, 这里提供了最新的 Gradle 的中文翻译。

##参考:


突破 URL 传值限制

2015-02-13 Web

##问题

window.location = url 方法 当传值url 太长时,服务器无法正常接收。

比如下面,当 rowsData 数据量过大时,服务器请求失败。

window.location='rest/files/excel/easyui-datagird?fileName=' + fileName + '&columns='+columns2+'&rowsData='+rowsData;

##原因

使用浏览器发送 GET 请求会受浏览器 URL 长度的限制。而 window.location.href 就是 GET 请求。



使用 Apache POI 处理 Microsoft Office 文档

2015-01-25 POI

##POI 概述

Apache POI 项目的使命是创造和维护 Java API 操纵各种格式的文件,其中包括基于 Office Open XML 标准(OOXML)和微软的OLE 2 Compound Document 格式(OLE2)。总之,你可以使用 Java 读写 MS Excel 文件。此外,您可以使用 Java 读取和写入 MS Word 和 MS PowerPoint 文件。Apache POI 是你的 Java Excel 解决方案(用于Excel 97-2008)。包含了一个完整的 API 用于移植其他 OOXML 和OLE2 格式。

OLE2 文件包括了 Microsoft Office 文件,比如 XLS, DOC, PPT 以及 MFC 的序列化 API 为基础的文件格式。项目提供 OLE2 Filesystem (POIFS)OLE2 Document Properties (HPSF) 等 API。

Office OpenXML Format 是 Microsoft Office 2007 和 2008 中新的基于 XML 的标准。包括 XLSX, DOCX 和 PPTX。该项目提供了一个低级别的 API 使用 openxml4j来支持 Open Packaging Conventions(开放打包约定)。

针对每个 现存的 MS Office 模块组件,试图提供一个共同的高级别 Java api 给 OLE2 和 OOXML 文档格式。Excel (SS=HSSF+XSSF) Word (HWPF+XWPF),PowerPoint (HSLF+XSLF),Outlook (HSMF), Visio (HDGF), TNEF (HMEF), 和 Publisher (HPBF).

该项目尽可能与其他项目合作提供此功能。比如:Cocoon提供 HSSF 的序列化;与Open Office.org合作处理 XLS 格式;和 Tika/ Lucene提供格式解释器。


调试异步加载页面中的js文件

2015-01-17 JavaScript

问题

在使用 EasyUI 时,采用了异步加载 div 页面的方式,来优化页面的性能。但是在浏览器 debug 时,发现 div 页面中的 js 文件是不可见的,即无法断点调试。

比如,我自己写了一个 entMgt 的模块 div页面,里面引用了 entMgt.js

但是 debug ,却见不到该 js 文件

解决

就是在需要调试的 js 文件顶部加一行代码:

//# sourceURL=entMgt.js

搞定

参考引用

  • https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Errors/Deprecated_source_map_pragma?utm_source=mozilla&utm_medium=firefox-console-errors&utm_campaign=default


Spirng 4 、Hibernate 4 事务管理

2015-01-03 Spring Hibernate

建议将 Hibernate SessionFactory 交给 Spring 进行事务管理,在 applicationContext.xml 里面配置

<bean id="sessionFactory"
	class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
	<!-- 数据源 -->
	<property name="dataSource" ref="dataSource" />

	<!-- hibernate的相关属性配置 -->
	<property name="hibernateProperties">
		<props>
		...
</bean>

<!-- 定义事务管理 -->
<bean id="transactionManager"
	class="org.springframework.orm.hibernate4.HibernateTransactionManager">
	<property name="sessionFactory" ref="sessionFactory" />
	<!-- 自动扫描实体对象 com.waylau.entity 的包结构中存放实体类 -->
	<property name="packagesToScan" value="com.waylau.entity" />
</bean>

使用 SessionFactory

@Autowired
private SessionFactory sessionFactory;
 
public Session getSession() {
    return sessionFactory.getCurrentSession();
}



在 Jersey 2 使用 Spring 4

2014-12-30 Spring Jersey

Jersey 提供对 Spring DI 的扩展。使得 Jersey 在使用 Spring bean 时 就像是 JAX-RS 的组件 (比如 资源和提供者) 并且允许 Spring 注入 Jersey 管理的组件中。比如:

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import org.springframework.stereotype.Component;

@Component
@Path("/")
public class SomeResource {

    @Transactional
    @GET
    public void updateResource() {
        // ...
    }
}

详见《Jersey 2.x 用户指南》 Chapter 22. Spring DI 使用 Spring 注入



Maven 编码相关问题

2014-12-27 Maven

问题:

[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!

没有指定编码,只能按照平台的默认编码进行拷贝。

解决:

<project> 
    ... 
        <properties> 
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
        </properties> 
    ... 
</project>

Tomcat Maven Plugin使用

2014-12-26 Tomcat

Apache Tomcat 的 Maven 插件提供了 goal,实现将 Apache Tomcat servlet 容器整合进 WAR 项目。你可以通过 Apache Maven 运行 WAR 项目而无需部署 WAR 文件到 Apache Tomcat 的实例。


新的RBAC:基于资源的权限管理(Resource-Based Access Control)

2014-12-25 Shiro

本文讨论以角色概念进行的权限管理策略及主要以基于角色的机制进行权限管理是远远不够的。同时将讨论一种更好的权限管理方式。

What is a Role? 什么是角色

当说到程序的权限管理时,人们往往想到角色这一概念。角色是代表一系列行为或责任的实体,用于限定你在软件系统中能做什么、不能做什么。用户帐号往往与角色相关联,因此,一个用户在软件系统中能“做”什么取决于与之关联的各个角色。

例如,一个用户以关联了”项目管理员”角色的帐号登录系统,那这个用户就可以做项目管理员能做的所有事情――如列出项目中的应用、管理项目组成员、产生项目报表等。

从这个意义上来说,角色更多的是一种行为的概念:它表示用户能在系统中进行的操作。



Activiti 5.17.0 发布

2014-12-19 Activiti

##Activiti 5.17.0

Activiti 5.17.0 发布 (2014-12-18),此版本值得关注的亮点:

  • 我们介绍了一个完全测试和全新的 Async executor (异步执行器),它取代旧的Job executor。新的异步执行程序使用更少的数据库查询来执行异步工作并拥有更好的性能。默认 Activiti 引擎仍然使用旧的工作执行者,所以你必须显式地选择的新的异步执行器通过在流程引擎配置设置 asyncExecutorEnabled 属性。更多细节可以查看的用户指南高级功能章节。
  • Activiti Modeler 完全修正,使用 Angular JS 实现。这是捐赠的Alfresco Activiti BPMN 编辑器,该编辑器的Alfresco Activiti Enterprise版本的一部分提供。新的 Angular JS Activiti Modeler 是 LGPL 许可。注意,一些对话框还没有移植到新的 Activiti Modeler 中,但你还会发现很多新的功能,包括 Mule 和 Camel 任务,能够给专用网关定义一个顺序流命令。真的很感激任何帮助和添加的新特性。
  • 用户指南修订了 AsciiDoc 的重写


用 GitHub、Markdown 和 GitBook 写开源书

2014-12-11 GitHub GitBook

之前一直是在 GitHub 上写开源书(见:http://www.waylau.com/books/)但,由于 GitHub 本身的目录结构并不一定符合阅读的习惯,而且没有提供 pdf , ePUB, MOBI 等格式的转换下载。很多同学也还是习惯离线看文档。GitBook 就是解决这一问题。

GitBook 让你在保持在 GitHub 的书写习惯外,稍加配置,就能自动发布到GitBook 上,形成界面漂亮的电子书了(支持 html, pdf , ePUB, MOBI 等)。


使用 GitBook 写开源书

2014-12-11 GitBook

GitBook 让你在保持 使用 Markdown 的书写习惯外,稍加配置,就能自动发布到 GitBook 上,形成界面漂亮的各种电子书了(支持 html, pdf , ePUB, MOBI 等)。

##Installation 安装

安装 Nodejs

gitbook 的安装需要 Nodejs,下载地址为 http://nodejs.cn/download/

安装 gitbook

gitbook 1.x 时执行:

$ npm install gitbook -g

而从 gitbook 2.x 开始,执行下面新的命令语句:

$ npm install gitbook-cli -g

##Usage 1 用法一 使用模板快速开始

https://github.com/waylau/gitbook 这是个快速开始 GitBook 的模板项目,根据项目的结构,稍作修改,就能生成自己的电子书。

###Checkout the repository 检出模板项目

$ git clone https://github.com/waylau/gitbook.git

执行 Maven 编译的 jar,找不到相关的 依赖的类--使用 maven-assembly-plugin 解决

2014-11-28 Maven

##问题:执行 jar 找不到依赖的类

用 Maven 编译完成后 ,生产了 ui-compressor-1.0.0.jar, 此时执行

java -cp target/ui-compressor-1.0.0.jar com.waylau.uicompressor.App

提示下面找不到依赖的包:

Exception in thread "main" java.lang.NoClassDefFoundError: org/mozilla/javascrip
t/ErrorReporter
        at java.lang.Class.getDeclaredMethods0(Native Method)
        at java.lang.Class.privateGetDeclaredMethods(Class.java:2442)
        at java.lang.Class.getMethod0(Class.java:2685)
        at java.lang.Class.getMethod(Class.java:1620)
        at sun.launcher.LauncherHelper.getMainMethod(LauncherHelper.java:492)
        at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:484)

Caused by: java.lang.ClassNotFoundException: org.mozilla.javascript.ErrorReporte
r
        at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
        ... 6 more

Way Lau

Software Engineer and Full Stack Developer, now work and live in Shenzhen, China. Detail

Donate

See the list of Donors.