2012年1月5日

Java Cache System JCS(一) 使用方法

摘要: JCS 是JAVA 中缓存的一种实现,支持将数据缓存到内存或硬盘中,支持设置缓存对象的有效时长。使用时需要用到以下几个jar包:commons-collections-2.1.1.jarcommons-lang.2.3.jarcommons-logging-1.0.4.jarconcurrent-1.3.2.jarjcs-1.3.jarslf4j-api.jar定义实现了Serializable 接口的存储对象类:public class UserInfo implements Serializable{ private String username; private St... 阅读全文

posted @ 2012-01-05 18:09 心笑峰 阅读(4332) 评论(0) 推荐(0) 编辑

OF 同步异步问题的改进

摘要: 之前的一篇文章中提到过OF中的同步异步问题,这里针对文章最后描述的两个缺点做些改进。 这里提供一个公共的专门用于处理S2S通信问题的IQ类S2SDataManager。 可以提供多种接口:1.阻塞等待固定时长;2.阻塞等待,并在接收到结果或超时后继续;3.发送后直接返回;4.发送后直接返回,提供回调接口。 public class S2SDataManager implements IQResultListener{ private XMPPServer server; private RoutingTable routing; private long timeout=... 阅读全文

posted @ 2012-01-05 17:18 心笑峰 阅读(202) 评论(0) 推荐(0) 编辑

MySQL Event

摘要: Event 是MySQL 5.1 以后支持的一个功能,类似于oracle 中的JOB 或 MSSQL 中的任务。就是按照指定的周期和频率运行指定语句的功能。 查看event_scheduler 是否启用:select @@event_scheduler / show variables like '%event_scheduler%' 如果为OFF / 0 ,使用以下语句开启:set GLOBAL event_scheduler =1 创建一个event : create event event_myevent on schedule every 1 minuteon comp 阅读全文

posted @ 2012-01-05 16:08 心笑峰 阅读(184) 评论(0) 推荐(1) 编辑

MySQL 动态SQL

摘要: /**申明一个变量保存sql语句**/declare v_sql varchar(500);/** 初始化v_sql **/set v_sql ='call P_myprocedure(?)';/** 准备要动态执行的语句 **/set @exesql =v_sql;/** 准备参数 **/set @param = 100;/** 准备执行 **/prepare stm from @exesql;/** 执行语句,并传入准备的参数。execute stm using @param; 阅读全文

posted @ 2012-01-05 15:47 心笑峰 阅读(196) 评论(0) 推荐(0) 编辑

2011年12月23日

MySQL FEDERATED 存储引擎

摘要: MySQL中针对不同的功能需求提供了不同的存储引擎。所谓的存储引擎也就是MySQL下特定接口的具体实现。 FEDERATED是其中一个专门针对远程数据库的实现。一般情况下在本地数据库中建表会在数据库目录中生成相应的表定义文件,并同时生成相应的数据文件。但通过FEDERATED引擎创建的表只是在本地有表定义文件,数据文件则存在于远程数据库中(这一点很重要)。 通过这个引擎可以实现类似Oracle 下DBLINK的远程数据访问功能。 使用show engines 命令查看数据库是否已支持FEDERATED引擎: Support 的值有以下几个: YES支持并开启DEFAUL... 阅读全文

posted @ 2011-12-23 12:34 心笑峰 阅读(5156) 评论(0) 推荐(0) 编辑

2011年12月22日

一个S2S通信中的同步、异步问题的解决

摘要: 最近在搞Openfire S2S时遇到了一个数据通信时的同步与异步问题。具体描述如下: OF中的基本通信结构如下: 客户端与服务器的通信是同步的,服务器与服务器之间的通信却是异步的:客户端发送一个请求后就会阻塞一段时间,等待服务器的响应;服务器之间则采用消息通知的方式异步交流数据。 所以会出现下面这种情况: 客户端发送消息给服务器A,消息经入口路由到相应的功能模块进行处理,而此时需要从B服务器中获取一些额外的数据,比如验证发送上来的账号是否在另外的服务器有注册。一般情况下数据在本地的话就直接查找处理再给用户返回就行,但在其它服务器时直接返回就会出现结果错误或不完整,不返回则造成客户端超时。 . 阅读全文

posted @ 2011-12-22 17:57 心笑峰 阅读(610) 评论(0) 推荐(0) 编辑

2011年12月20日

DelayQueue 队列

摘要: DelayQueue----一种有序队列,特点就是只有在队列中的元素到期后才能取出。 1.内存中哪些对象到了超时时间,需要从内存中清除出去。 2.服务器连接中有哪些连接很长时间未操作,需要关闭这些连接 3.任务中有哪些到了执行时间,该进行调度了。简单的方法就是写一个线程不断去检查每一项是否到了时间,但这种方法在队列中的元素非常多的情况下会不准确或太耗费性能,用DelayQueue可完美地解决这个问题。 马上就要过年了,每次回老家都要悲催地去镇上人挤人的网吧上网。下面就拿这个做个例子: 假设镇上开了一家无限大的网吧,每人交一块钱可以上一分钟网(过年时的网吧坑爹程度差不多就这样); 网吧比较老式. 阅读全文

posted @ 2011-12-20 17:14 心笑峰 阅读(299) 评论(0) 推荐(0) 编辑

2011年12月19日

同步、异步、阻塞、非阻塞---我的理解

摘要: 同步、异步、阻塞、非阻塞,涉及到一个问题的两个层面。一个是操作operation/Thread/process 层面,另一个是kernal层面。所有的阻塞、非阻塞都在针对同步的情况下才有效。 同步与异步最大区别在于是否需要底层的响应才能执行下去。 阻塞与非阻塞的区别在于是否能立即返回响应。 一个比较形象的例子如下: 同步-阻塞:我去钓鱼,抛线之后一直站在岸上盯着鱼竿有动静后才拉杆。 同步-非阻塞:我去捕鱼,拿一个大网捞一下,有没有鱼立马可以看出来,不用等,直接再捞。 异步-阻塞:java中的异步IO,其实取这个名字与上面的例子没多大关系,实在是因为java中使用reactor模式阻塞监听... 阅读全文

posted @ 2011-12-19 21:21 心笑峰 阅读(270) 评论(0) 推荐(0) 编辑

2011年12月13日

Openfire Could not locate home

摘要: Openfire 开发环境搭建时容易出现Couldnotlocatehome 异常,主要由XMPPServer.java中以下代码引起:private void initialize() FileNotFoundException{ locateOpenfire(); ......}private void locateOpenfire() throws FileNotFoundException{ String jiveConfigName = "conf" + File.separator + "openfire.xml"; // First... 阅读全文

posted @ 2011-12-13 12:38 心笑峰 阅读(3939) 评论(1) 推荐(0) 编辑

2011年12月8日

Openfire Monitoring/jinglenodes plugin error

摘要: 运行Openfire 后出现以下报错:Error loading plugin: C:\Program Files\Openfire\plugins\monitoring java.lang.NoClassDefFoundError: org/picocontainer/MutablePicoContainer at java.lang.Class.getDeclaredConstructors0(Native Method) at java.lang.Class.privateGetDeclaredConstructors(Unknown Source) at java.lang.Cl... 阅读全文

posted @ 2011-12-08 17:07 心笑峰 阅读(2186) 评论(0) 推荐(0) 编辑

2011年12月2日

Openfire S2S 连接建立与消息发送

摘要: 发送给其它服务器的消息由@domain 部分区分,在进入到服务器路由后在RoutingTableImpl.routePacket(Packet packet) 中与发送给本地服务器的消息分离。public void routePacket(JID jid,......){ boolean routed = false; if(serverName.equals(jid.getDomain())){ routed = routeToLocalDomain(jid,packet,fromServer); } else if(jid.getDomain().contain... 阅读全文

posted @ 2011-12-02 12:54 心笑峰 阅读(1240) 评论(0) 推荐(0) 编辑

2011年12月1日

Openfire S2S 监听与消息处理

摘要: Openfire中Server to Server 连接默认使用5269 端口,在管理员后台的Server-->Server Settings --> Server to Server 页面有相应的配置项。首先看Service Enable 项: 在用户选择了 Enabled 填写监听端口 提交后在jsp页面里调用的是ConnectionManager相应的方法:ConnectionManager connectionManager = XMPPServer.getInstance().getConnectionManager(); connectionManager.enable 阅读全文

posted @ 2011-12-01 19:18 心笑峰 阅读(1576) 评论(0) 推荐(0) 编辑

2011年11月27日

erlang socket

摘要: 目标是验证“将客户端连接的socket绑定到一个gen_server后,发送到socket 的消息将由gen_server的handle_info/2 处理”。 接收客户端socket 连接的server:-module("myserver"). -export([start/2],[stop/0]). start()-> %%监听端口 {ok,ListenSocket}=gen_tcp:listen(1234,[binary,{packet,4}, {reuseaddr,true}, {active,true}]), %%获取客户端链接 {ok,Socket} =. 阅读全文

posted @ 2011-11-27 17:03 心笑峰 阅读(3272) 评论(0) 推荐(0) 编辑

2011年11月11日

JAVASwing GridBagLayout 布局

摘要: 用GridBagLayout可实现复杂可控的布局。 以一个输入框为例: final JTextField username = new JTextField(); final JTextField password = new JTextField(); JPanel regist = new JPanel(); regist.setLayout(new GridBagLayout()); regist.add(new JLabel("username:"), new... 阅读全文

posted @ 2011-11-11 19:02 心笑峰 阅读(1985) 评论(0) 推荐(0) 编辑

2011年11月10日

HotWheels

摘要: 启动过程: make run1 run1在MakeFile中的定义: run1: compile erl $(LOCAL_OPTS) -name $(NODE) -s janus startjanus.erl内容:start() -> start([]).start([]) -> start(8081);start([Port]) when is_atom(Port) -> start(list_to_integer(atom_to_list(Port)));start(Port) when is_integer(Port) -> inets:start(),... 阅读全文

posted @ 2011-11-10 20:22 心笑峰 阅读(455) 评论(0) 推荐(0) 编辑

JAVA Timer and task

摘要: JAVA里面有时候需要定期地处理某些任务,例如:定期地查询数据库提取数据;定期地清理超时数据;定期地将内存中数据存到数据库。 一种方法是自己写线程,自己控制。另一种方法就是利用java.util.Timer 和 java.util.TimerTask 来实现。下面就以一个将队列中数据定期存入数据库的例子展示这种用法:import java.util.TimerTask;import java.util.Timer;public class Myservice{ private Queue<String> logs = new LinkedBlockingQueue<Strin 阅读全文

posted @ 2011-11-10 17:36 心笑峰 阅读(7160) 评论(0) 推荐(0) 编辑

Openfire MultiUserChat 多用户聊天 ---消息发送

摘要: 创建好了Chat room 后就可以通过邀请或用户主动加入的方式添加成员。过程与创建聊天室的相似,不用点在于聊天室已存在,不需要再重新创建,只需将当前用户加入即可。用户发送聊天消息是直接发送给Chat room 的,再由Chat Room转发给所有用户。详细时序图如下: 阅读全文

posted @ 2011-11-10 12:00 心笑峰 阅读(1836) 评论(0) 推荐(0) 编辑

2011年11月8日

Openfire MultiUserChat 多用户聊天 ---创建聊天室

摘要: 用户发送查询iq消息后,再发送presence消息创建聊天室:<presence id="8Li34-12" to="roomname@conference.myserver/clientA"> <x xmlns="http://jabber.org/protocol/muc"></x> </presence> 处理的时序图如下:1. 用户发送的presence 消息被路由到ChatService中处理。2.ChatService中保存有一张本地聊天室中所有用户的视图,如果用户之前已经加 阅读全文

posted @ 2011-11-08 21:10 心笑峰 阅读(8520) 评论(0) 推荐(0) 编辑

2011年11月3日

JAVA 随机字符串

摘要: public class StringUtils{ private static Random randGen = new Random(); private static char[] letters =("0123456789abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ").toCharArray(); //获取指定长度的随机字符串 public static String randomString(int len){ if(len<1){ ... 阅读全文

posted @ 2011-11-03 20:28 心笑峰 阅读(202) 评论(0) 推荐(0) 编辑

2011年10月25日

erlang debug 调试

摘要: erlang 提供了一个debugger 调试工具,可以用来单步调试自己的代码。可以在shell 中输入im() 或 debugger:start() 来调出。首先打开的是一个Monitor 窗口:在这里可以选择要调试的代码:选择Module--> Interpret。注意调试的文件必须要通过debug_info 的方式进行编译: c(module.erl,debug_info)点击后出现第二个窗口IntepretDialog:可以在Directories中选择调试文件所在目录,在右侧Files中选择要调试的代码文件。选择后在Monitor 窗口中就会出现选择的文件,可以双击打开View 阅读全文

posted @ 2011-10-25 21:30 心笑峰 阅读(4900) 评论(0) 推荐(0) 编辑

导航