Entity Bean 需要实现 Serializable 否则 。。

服务端异常
23:53:29,131 ERROR [org.jboss.as.ejb3] (Remoting “wslhkpc” task-7) JBAS014248: 消息 Channel ID 3367520a (inbound) of Remoting connection 34916e44 to /127.0.0.1:62015 里的频道 org.jboss.remoting3.remote.InboundMessage$3@345c347c 上的异常: java.io.IOException: Stream is closed
at org.xnio.streams.BufferPipeOutputStream.closed(BufferPipeOutputStream.java:62) [xnio-api-3.0.10.GA-redhat-1.jar:3.0.10.GA-redhat-1]
at org.xnio.streams.BufferPipeOutputStream.checkClosed(BufferPipeOutputStream.java:68) [xnio-api-3.0.10.GA-redhat-1.jar:3.0.10.GA-redhat-1]
at org.xnio.streams.BufferPipeOutputStream.write(BufferPipeOutputStream.java:94) [xnio-api-3.0.10.GA-redhat-1.jar:3.0.10.GA-redhat-1]
at org.jboss.remoting3.remote.OutboundMessage.write(OutboundMessage.java:270) [jboss-remoting-3.3.1.Final-redhat-1.jar:3.3.1.Final-redhat-1]
at java.io.DataOutputStream.write(DataOutputStream.java:107) [rt.jar:1.8.0_11]
at org.jboss.as.ejb3.remote.protocol.AbstractMessageHandler$1.write(AbstractMessageHandler.java:217)
at org.jboss.marshalling.OutputStreamByteOutput.write(OutputStreamByteOutput.java:52) [jboss-marshalling-1.4.6.Final-redhat-1.jar:1.4.6.Final-redhat-1]
at org.jboss.marshalling.SimpleDataOutput.shallowFlush(SimpleDataOutput.java:353) [jboss-marshalling-1.4.6.Final-redhat-1.jar:1.4.6.Final-redhat-1]
at org.jboss.marshalling.river.RiverMarshaller.writeString(RiverMarshaller.java:1509)
at org.jboss.marshalling.river.RiverMarshaller.writeNewSerializableClass(RiverMarshaller.java:1415)
at org.jboss.marshalling.river.RiverMarshaller.writeNewClass(RiverMarshaller.java:1345)
at org.jboss.marshalling.river.RiverMarshaller.writeClass(RiverMarshaller.java:1199)
at org.jboss.marshalling.river.RiverMarshaller.writeNewSerializableClass(RiverMarshaller.java:1438)
at org.jboss.marshalling.river.RiverMarshaller.writeSerializableClass(RiverMarshaller.java:1398)
at org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:884)
at org.jboss.marshalling.AbstractObjectOutput.writeObject(AbstractObjectOutput.java:58) [jboss-marshalling-1.4.6.Final-redhat-1.jar:1.4.6.Final-redhat-1]
at org.jboss.marshalling.AbstractMarshaller.writeObject(AbstractMarshaller.java:111) [jboss-marshalling-1.4.6.Final-redhat-1.jar:1.4.6.Final-redhat-1]
at org.jboss.as.ejb3.remote.protocol.AbstractMessageHandler.writeException(AbstractMessageHandler.java:112)
at org.jboss.as.ejb3.remote.protocol.versionone.MethodInvocationMessageHandler.processMessage(MethodInvocationMessageHandler.java:166)
at org.jboss.as.ejb3.remote.protocol.versionone.VersionOneProtocolChannelReceiver.handleMessage(VersionOneProtocolChannelReceiver.java:160)
at org.jboss.remoting3.remote.RemoteConnectionChannel$5.run(RemoteConnectionChannel.java:452) [jboss-remoting-3.3.1.Final-redhat-1.jar:3.3.1.Final-redhat-1]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [rt.jar:1.8.0_11]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [rt.jar:1.8.0_11]
at java.lang.Thread.run(Thread.java:745) [rt.jar:1.8.0_11]
Caused by: an exception which occurred:
in object java.io.EOFException@5a234c92

客户端异常
Exception in thread “main” java.lang.IllegalStateException: EJBCLIENT000025: No EJB receiver available for handling [appName:, moduleName:TestEJB, distinctName:] combination for invocation context org.jboss.ejb.client.EJBClientInvocationContext@69a3d1d
at org.jboss.ejb.client.EJBClientContext.requireEJBReceiver(EJBClientContext.java:735)
at org.jboss.ejb.client.ReceiverInterceptor.handleInvocation(ReceiverInterceptor.java:116)
at org.jboss.ejb.client.EJBClientInvocationContext.sendRequest(EJBClientInvocationContext.java:183)
at org.jboss.ejb.client.EJBClientInvocationContext.retryRequest(EJBClientInvocationContext.java:208)
at org.jboss.ejb.client.EJBInvocationHandler.sendRequestWithPossibleRetries(EJBInvocationHandler.java:256)
at org.jboss.ejb.client.EJBInvocationHandler.sendRequestWithPossibleRetries(EJBInvocationHandler.java:265)
at org.jboss.ejb.client.EJBInvocationHandler.doInvoke(EJBInvocationHandler.java:198)
at org.jboss.ejb.client.EJBInvocationHandler.doInvoke(EJBInvocationHandler.java:181)
at org.jboss.ejb.client.EJBInvocationHandler.invoke(EJBInvocationHandler.java:144)
at com.sun.proxy.$Proxy3.createCabin(Unknown Source)
at client.ClientTest.date(ClientTest.java:155)
at client.ClientTest.main(ClientTest.java:28)

————-
出现原因:Entity Bean 必须实现 Serializable

jboss eap 6.3 mysql数据源错误提示 JBAS010441

配置mysql数据源出现错误提示:
failure description: “JBAS010441: Failed to load module for driver
中文日志是无法加载模块

环境是jboss eap 6.3

网上找了n种答案,虽然不是我的问题,还是列举一下
答案1,说是版本问题,要mysql-5.1.30一下的
答案2,配置问题 eap的配置跟老版本的不太一样,得用modules
反正大家配置都差不多怎么都出不来,

我这里最后是因为这个:

看jboss自带的module.xml木有这行,去掉就好使了!!

ejb3 javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter,

ejb里面报异常 javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter,

其实就是个很简单的错误,需要引用jboss-client.jar 重点是合适的版本!
网上随便下了个jboss-client4.jar的包,一直报这个异常,其实就是缺少类

从jboss里复制一个新版本出来就好用了

mq5.9 运行异常

运行直接异常

java.lang.IllegalStateException: LifecycleProcessor not initialized – call ‘refresh’ before invoking lifecycle methods via the context:

百思不得其解,直到看到这篇
http://zhidao.baidu.com/question/367406581580356204.html

说是计算机名不不能有-和下划线_,发现这台电脑确实有下划线,觉得不会这么邪门吧。
改后重启,好了。。。。。给跪了

hibernate误区总结

回忆初学的时候开发hibernate有n多误区,大概列列以后想到再更新

1.性能误区
当我们调试的时候经常发现打印hql是n+1个查询,于是觉得1个查询比n+1个执行效率要高,特别是在初学调试的时候没开启二级缓存很明显。
其实,随着二级缓存的使用,和更多的并发,使用原生方法性能会优化很多。
当然也可以用hql和自定义的缓存策略。

2.一对多可能出现的错误
could not initialize proxy – no Session
一对多的时候设置FetchType.LAZY可能出现
网上解释有:
不使用LAZY,这个不太靠谱就不说了,而且产生连表查询,可能影响性能

靠谱的方式是web.xml设置OpenSessionInViewFilter
同时需要注意的还有要用 Hibernate 管理session
使用 SessionFactory.getCurrentSession 而不是 openSession
使用后不用手动关闭sessin,Hibernate会自己控制。
否则自己关闭了session就会报no Session的错误

同时 junit4中使用lazy测试也是可以的,不需要web.xml的OpenSessionInViewFilter配置

其他的想到再补

mongoDB ide试用

找了下ide工具
mongoVUE 1.6.9 和 Robomongo 0.8
mongoVUE 没连上,用ssh账号都没连上,而且连接过程没进度条,直接阻塞了ui线程,卡住了。
可能是配置问题,但印象很不好。

Robomongo 用ssh账号连上了,没到1.0的版本,有的地方没有按钮直接用文字代替了,不过不影响使用。登录过程也没卡住,印象很好,给个好评

Robomongo 0.8.4RC
Robomongo 0.8.4RC

angularjs post 数据格式

没太理解为毛angularjs里post数据用的json格式。。。
网上也有修改方案:
修改原来的app.js 增加:

var [你的app名字]= angular.module('[你的app名字]=', ['ngRoute','[你的controller名字]='],function($httpProvider) {
// Use x-www-form-urlencoded Content-Type
$httpProvider.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=utf-8';

/**
* The workhorse; converts an object to x-www-form-urlencoded serialization.
* @param {Object} obj
* @return {String}
*/
var param = function(obj) {
var query = '', name, value, fullSubName, subName, subValue, innerObj, i;

for(name in obj) {
value = obj[name];

if(value instanceof Array) {
for(i=0; i);

awk入门

参考文章
http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2858470.html
笔记:
1、$1 列号,可以选择输出哪列
#last -n 5 | awk ‘{print $1}’ //打印第一列
root
root
root
dmtsai
root

2、分隔符
cat /etc/passwd|awk -F ‘:’ ‘{print $1}’|awk -F ‘a’ ‘{print $1}’
默认空格分隔,没有的话可以-F设置别的分隔符

3、设置多列输出格式
last -n 5 | awk ‘{print $1″:”$2}’

4、在原来数据前增加内容,如标题
cat /etc/passwd |awk -F ‘:’ ‘BEGIN {print “name,shell”} {print $1″,”$7} END {print “blue,/bin/nosh”}’

name,shell
原来结果集...
blue,/bin/nosh

5、搜索
awk -F: ‘/root/’ /etc/passwd
其中两个”/”不能去掉,支持正则表达式

6、内置变量
ARGC 命令行参数个数
ARGV 命令行参数排列
ENVIRON 支持队列中系统环境变量的使用
FILENAME awk浏览的文件名
FNR 浏览文件的记录数
FS 设置输入域分隔符,等价于命令行 -F选项
NF 浏览记录的域的个数
NR 已读的记录数
OFS 输出域分隔符
ORS 输出记录分隔符
RS 控制记录分隔符

#awk -F ‘:’ ‘{print “filename:” FILENAME “,linenumber:” NR “,columns:” NF “,linecontent:”$0}’ /etc/passwd
filename:/etc/passwd,linenumber:1,columns:7,linecontent:root:x:0:0:root:/root:/bin/bash
filename:/etc/passwd,linenumber:2,columns:7,linecontent:daemon:x:1:1:daemon:/usr/sbin:/bin/sh
filename:/etc/passwd,linenumber:3,columns:7,linecontent:bin:x:2:2:bin:/bin:/bin/sh
filename:/etc/passwd,linenumber:4,columns:7,linecontent:sys:x:3:3:sys:/dev:/bin/sh

能显示,结果是第几行,有多少列这种信息。

7、printf
awk -F ‘:’ ‘{printf(“filename:%10s,linenumber:%s,columns:%s,linecontent:%s\n”,FILENAME,NR,NF,$0)}’ /etc/passwd
格式化字符串,c的风格

8、变量叠加
awk ‘{count++;print $0;} END{print “user count is “, count}’ /etc/passwd
root:x:0:0:root:/root:/bin/bash
……
user count is 40

带初始化

awk ‘BEGIN {count=0;print “[start]user count is “, count} {count=count+1;print $0;} END{print “[end]user count is “, count}’ /etc/passwd
[start]user count is 0
root:x:0:0:root:/root:/bin/bash

[end]user count is 40

叠加某个字段
ls -l |awk ‘BEGIN {size=0;} {size=size+$5;} END{print “[end]size is “, size}’
[end]size is 8657198

变量运算
ls -l |awk ‘BEGIN {size=0;} {size=size+$5;} END{print “[end]size is “, size/1024/1024,”M”}’
[end]size is 8.25889 M

8、if条件

ls -l |awk ‘BEGIN {size=0;print “[start]size is “, size} {if($5!=4096){size=size+$5;}} END{print “[end]size is “, size/1024/1024,”M”}’
[end]size is 8.22339 M

9、循环语句

awk中的循环语句同样借鉴于C语言,支持while、do/while、for、break、continue,这些关键字的语义和C语言中的语义完全相同。

10、数组
awk -F ‘:’ ‘BEGIN {count=0;} {name[count] = $1;count++;}; END{for (i = 0; i < NR; i++) print i, name[i]}' /etc/passwd

crontab 定时运行

*  *  *  *  *  command
分 时 日 月 周 命令
第1列表示分钟1~59 每分钟用*或者 */1表示
第2列表示小时1~23(0表示0点)
第3列表示日期1~31
第4列表示月份1~12
第5列标识号星期0~6(0表示星期天)
第6列要运行的命令


centos中分钟用 * 不使用 */1
“, “逗号分隔代表几或几
比如 1,2 * * * * 每小时 第一分钟第二分钟各执行一次
“-“减号代表几到几
比如 1-10 * * * * 每小时 第一分钟第十分钟每分钟执行一次
“/”间隔时间
比如1-10/2 * * * * 每小时 第一分钟第十分钟每2分钟执行一次

crontab最小执行单位是分钟

缓存设计笔记

http://robbinfan.com/blog/38/orm-cache-sumup
http://www.cnblogs.com/dotey/archive/2013/03/08/2949153.html

看了下这两篇介绍缓存设计的文章。
第一篇主要以ORM的角度说,表设计粒度尽量细致,然后通过主键缓存能让效率发挥的更好。
然后发现当初我们的误区是:
在Hibernate里发现人家缓存机制吧查询转成N+1个sql,然后被吓住了, 然后就开始研究怎么写hql了,以为能优化效率
。。。多愚蠢,这样就浪费缓存机制了,而且还连表了,开发时数据小没啥问题,数据多了就瞎了。

第二篇主要的意思是
把条件查询放一个索引表中,查询id,然后再通过id查询缓存中的单元内容。
其中把id列表也缓存起来,如[1,2,3,4,5…100]用于分页。这个如果更新频率高就不太合适了,或者查询条件复杂
我觉得查询复杂的话是不是还是搜索引擎比较合适,然后搜索引擎查出来的id再去索引查单元内容。