MINA 快速入门
2015-04-04 MINAApache MINA 是一个网络应用的框架,可以帮助用户开发的高性能、高扩展性的网络应用程序。它通过 Java NIO 提供了一个抽象的事件驱动的异步 API 用在不同传输协议上,比如 TCP/IP 和 UDP/IP 等。
本教程介绍了如何构建基于 MINA 的应用的过程。这个教程介绍的是构建一个 Time Server(时间服务器)。
Apache MINA 是一个网络应用的框架,可以帮助用户开发的高性能、高扩展性的网络应用程序。它通过 Java NIO 提供了一个抽象的事件驱动的异步 API 用在不同传输协议上,比如 TCP/IP 和 UDP/IP 等。
本教程介绍了如何构建基于 MINA 的应用的过程。这个教程介绍的是构建一个 Time Server(时间服务器)。
Java 项目的编译文件经常被打包成 JAR(Java Archive,Java 归档文件)文件,当然,作为学习,有时候也非常想看到这个 JAR 被打包前的源代码是怎么样的。 下面提供几种查看 JAR 包的源代码方式。
##环境
在 Java 的编写过程中我们需要对一些程序进行注释,除了自己方便阅读,更为别人更好理解自己的程序,所以我们需要进行一些注释,可以是编程思路或者是程序的作用,总而言之就是方便自己他人更好的阅读。
##注释类型
Java 有两类注释: implementation comments(实现注释)和 documentation comments(文档注释)。 实现注释常见于 C++,使用 /*...*/
,和 //
。文档注释 (也称为”doc comments”) 是 Java 独有的,使用 /**...*/
。文档注释可以通过 javadoc 工具转成 HTML 文件。
上一次我们用 Netty 快速实现了一个 Java 聊天程序(见http://www.waylau.com/netty-chat/)。现在,我们要做下修改,加入 WebSocket 的支持,使它可以在浏览器里进行文本聊天。
##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 迟缓,反应迟钝。
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 是一个 Java NIO 客户端服务器框架,使用它可以快速简单地开发网络应用程序,比如服务器和客户端的协议。Netty 大大简化了网络程序的开发过程比如 TCP 和 UDP 的 socket 服务的开发。更多关于 Netty 的知识,可以参阅《Netty 4.x 用户指南》(https://github.com/waylau/netty-4-user-guide)
下面,就基于 Netty 快速实现一个聊天小程序。
总所周知,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 邮箱账号,就能收发邮件了。
##附录:翻墙技能
##参考
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 的中文翻译。
##参考:
##问题
window.location = url 方法 当传值url 太长时,服务器无法正常接收。
比如下面,当 rowsData 数据量过大时,服务器请求失败。
window.location='rest/files/excel/easyui-datagird?fileName=' + fileName + '&columns='+columns2+'&rowsData='+rowsData;
##原因
使用浏览器发送 GET 请求会受浏览器 URL 长度的限制。而 window.location.href 就是 GET 请求。
##注册 微软账号
http://www.microsoft.com/zh-cn/account/default.aspx
##下载、安装 Azure RemoteApp 客户端
根据你的系统进行如下选型
##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提供格式解释器。
在使用 EasyUI 时,采用了异步加载 div 页面的方式,来优化页面的性能。但是在浏览器 debug 时,发现 div 页面中的 js 文件是不可见的,即无法断点调试。
比如,我自己写了一个 entMgt 的模块 div页面,里面引用了 entMgt.js
但是 debug ,却见不到该 js 文件
就是在需要调试的 js 文件顶部加一行代码:
//# sourceURL=entMgt.js
搞定
##问题
在 Eclipse 中 Debug Maven 项目出现“Source not found”,无法定位到断点的源码位置。
##原因
Eclipse 中 Debug 时未关联上源码,所以找不见
建议将 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();
}
##问题
在 eclipse 中开发 Maven web 项目时出现 @Override must override a superclass method
问题
##原因:
是 JDK 版本过低不支持 @Override
注解导致的,提高版本到 1.5 之后(不含1.5)就可以了。
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() {
// ...
}
}
新建了 mysql 数据库,使用 root 远程访问数据库,无法访问
##问题:
ERROR 1130: Host '192.168.11.104' is not allowed to connect to this MySQL server...
##原因:
用户 root 没有远程访问的权限
问题:
[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>
Apache Tomcat 的 Maven 插件提供了 goal,实现将 Apache Tomcat servlet 容器整合进 WAR 项目。你可以通过 Apache Maven 运行 WAR 项目而无需部署 WAR 文件到 Apache Tomcat 的实例。
本文讨论以角色概念进行的权限管理策略及主要以基于角色的机制进行权限管理是远远不够的。同时将讨论一种更好的权限管理方式。
当说到程序的权限管理时,人们往往想到角色这一概念。角色是代表一系列行为或责任的实体,用于限定你在软件系统中能做什么、不能做什么。用户帐号往往与角色相关联,因此,一个用户在软件系统中能“做”什么取决于与之关联的各个角色。
例如,一个用户以关联了”项目管理员”角色的帐号登录系统,那这个用户就可以做项目管理员能做的所有事情――如列出项目中的应用、管理项目组成员、产生项目报表等。
从这个意义上来说,角色更多的是一种行为的概念:它表示用户能在系统中进行的操作。
##一、 SVN 服务器下载、安装
###1. 关于 Subversion 1.8.11 Apache Subversion 1.8.11 发布说明
http://mail-archives.apache.org/mod_mbox/subversion-dev/201412.mbox/%[email protected]%3E
###2. 兼容性问题 Apache Subversion 1.8.x 兼容性说明
##Activiti 5.17.0
Activiti 5.17.0 发布 (2014-12-18),此版本值得关注的亮点:
##下载和安装
###activiti下载:
本例子版本:activiti-5.16.4.zip
http://www.activiti.org/download.html
###JDK 下载 JDK 6+
本例子版本:jdk7
http://www.oracle.com/technetwork/java/javase/downloads/index.htm
之前一直是在 GitHub 上写开源书(见:http://www.waylau.com/books/)但,由于 GitHub 本身的目录结构并不一定符合阅读的习惯,而且没有提供 pdf , ePUB, MOBI 等格式的转换下载。很多同学也还是习惯离线看文档。GitBook 就是解决这一问题。
GitBook 让你在保持在 GitHub 的书写习惯外,稍加配置,就能自动发布到GitBook 上,形成界面漂亮的电子书了(支持 html, pdf , ePUB, MOBI 等)。
GitBook 让你在保持 使用 Markdown 的书写习惯外,稍加配置,就能自动发布到 GitBook 上,形成界面漂亮的各种电子书了(支持 html, pdf , ePUB, MOBI 等)。
##Installation 安装
gitbook 的安装需要 Nodejs,下载地址为 http://nodejs.cn/download/
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
##问题:执行 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
A theme for Jekyll to build a personal blog. Seehttps://github.com/waylau/jekyll-theme-blog
##Screenshots
##Demo
You can see the theme running on my blog.
本文介绍了如何通过 Jersey 框架优美的在 Java 实现了 REST 的 API。CRUD 的 操作存储在 MySQL 中
之前介绍了《用 VPN Gate 翻墙科学上网》,通过安装客户端,方便实现 VPN 的连接。如果 你爱折腾,也可以手动设置 VPN 。这样的连接 更加稳定。
##中国行政区划(administrative division)
分为几个级别(government level/level);宪法(Constitution)规定了三个级别(de jure level),但实际上有五个级别(de facto level/practical level)——33个省级(province/province-level region/province-level division)、333个地区级(prefecture/prefecture-level region/prefecture-level division/second-level division)【非宪法区划】、2862个县级(county/county-level region/county-level division)、41636个乡级(township/township-level region/township-level division)及无数村级(village/village-level region/village-level division)【非宪法区划】行政区。各个级别又有不同名称,下面加以详细讨论【具体数字以2005年统计数据为准】。
这个示例应用程序展示了如何使用 WebSocket, Golang 和 jQuery 创建一个简单的web聊天应用程序。这个示例的源代码在 https://github.com/waylau/goChat 。
HTML5 在 web 页面使用 video 元素呈现视频。但 HTML5 视频并不是最终的解决方案,它不能在所有的浏览器工作。你知道 HTML5 视频真的在网上工作吗? 你担心 HMTL5 视频兼容性吗? 看看这篇文章的建议和解决方案如何最大化 HMTL5 视频兼容性。
HTML5 的到来之前,每个视频的播放都需要通过 web 浏览器中通过第三方浏览器插件。最初我们亲眼目睹 RealPlayer,接着是 Windows Media Player 和 QuickTime, 现在是 Flash,这是目前主导的插件,播放大量的网络视频。