Archive for the 未分类 Category

Tomcat管理自定义的线程的关闭与启动

Monday, December 27th, 2010 | Permalink

如果希望在tomcat服务器启动时启动自己定义的线程如webgame的socket监听线程,关闭tomcat服务器是关闭这个线程。我们就需要自定一个Servlet或者是Listener来管理自己的线程。
管理的方式主要是在Servlet的init方法中启动自定义的线程,而在destroy方法中进行关闭。
如果使用Listener来管理的话就需要分别在contextInitialized与contextDestroyed方法中来处理自定义线程的启动与关闭。
下面我们通过具体代码来讲解具体的应用,我的demo使用的是Listener方式管理。
1.自定义一个Listener类。

public class ServerSocketListener implements ServletContextListener {
private ServerMain s;

public void contextInitialized(ServletContextEvent event) {
s = new ServerMain();
s.startServer();
}
//tomcat关闭时,关闭线程,释放端口
public void contextDestroyed(ServletContextEvent event) {
s.stopServer();//停止线程
System.exit(0);//关闭当前的jvm
}
}

2.在web.xml中配置这个监听。

Socket服务随web启动而启动
com.eunut.servlet.ServerSocketListener


就这样就可以通过tomcat的启动与关闭来控制你自定的线程随着应用服务器的操作味儿关闭或启动。

ubuntu下tomcat安装并添加自启动

Sunday, December 19th, 2010 | Permalink

安装个tomcat用了一天的时间这是郁闷,之前的安装总是随着ssh等链接工具的算开而断开,在网上搜索多方法,进行疯狂的实验,结果都是以失败告终,最后跑的老外的网站上逛了一圈,发现了一个操作步骤比较全的处理方法,其实这个方法之前也有试验过,结果是大家转载的过程中,造成有些步骤不是很准确,特此翻译过来做个备份,也希望能给遇到同样问题的人一个帮助。
1.安装Tomcat

使用如下命令下载tomcat linux版本。
wget http://apache.mirrors.timporter.net/tomcat/tomcat-6/v6.0.20/bin/apache-tomcat-6.0.20.tar.gz

使用 ‘tar’ 命令解压压缩包:
tar -xzvf apache-tomcat-6.0.20.tar.gz
执行如下命令将解压出文件移到 /usr/local/ 并命名为tomcat
sudo mv apache-tomcat-6.0.20 /usr/local/tomcat

创建tomcat的自启动文件:
sudo vi /etc/init.d/tomcat
添加如下脚本到tomcat中:
# Tomcat auto-start
#
# description: Auto-starts tomcat
# processname: tomcat
# pidfile: /var/run/tomcat.pid

export JAVA_HOME=/usr/lib/jvm/java-6-sun #更改为适当的java_home路径

case $1 in
start)
sh /usr/local/tomcat/bin/startup.sh
;;
stop)
sh /usr/local/tomcat/bin/shutdown.sh
;;
restart)
sh /usr/local/tomcat/bin/shutdown.sh
sh /usr/local/tomcat/bin/startup.sh
;;
esac
exit 0
If you installed OpenJDK instead of Sun Microsystem’s Java, the export JAVA_HOME line should read:
export JAVA_HOME=/usr/lib/jvm/java-6-openjdk
Now make the script executable:
sudo chmod +x /etc/init.d/tomcat
Finally, create symbolic links in the startup folders:
sudo ln -s /etc/init.d/tomcat /etc/rc1.d/K99tomcat
sudo ln -s /etc/init.d/tomcat /etc/rc2.d/S99tomcat
到此为止你的tomcat就会随着你的系统启动而启动,关闭而关闭。

在接下来的操作中你就可以使用 start, stop, or restart, 如下:
sudo /etc/init.d/tomcat start
sudo /etc/init.d/tomcat stop
sudo /etc/init.d/tomcat restart
来控制你的tomcat启动/关闭/重启

Ubuntu下通过Sun网站提供的自解压包进行手动的安装

Wednesday, December 15th, 2010 | Permalink

通过Sun网站提供的自解压包进行手动的安装

这种方式显然有它的好处: 可自由选择JDK版本,能进行灵活的配置。其实JDK的配置是很简单的:能让系统找到JDK所在的目录(JAVA_HOME),以便调用其目录中bin目录下的相关命令脚本。

在此以Ubuntu7.10系统,Sun JDK 6.0 update 4为例说明一下具体的安装方式:

2.1. 从Sun站点下载jdk 6.0.4的Linux自解压文件 jdk-6u4-linux-i586.bin;

2.2. 安装配置

cd /usr/local/lib
sudo cp /home/jdk-6u4-linux-i586.bin ./
sudo chmod +x jdk-6u4-linux-i586.bin
sudo ./jdk-6u4-linux-i586.bin
执行最后一步命令后便在当前目录下多了一个“jdk1.6.0_04“的目录,里面是jdk-6u4-linux-i586.bin解压后JDK的全部文件;
由于Ununtu本身带了gij的JVM实现,所以当你在Terminal输入: “java -version”时会显示:
java version “1.5.0”
gij (GNU libgcj) version 4.2.1 (Ubuntu 4.2.1-5ubuntu5)
的相关信息。也就是系统中有两个JVM实现,而且gij JVM还被其它的Ubuntu工具或软件使用;所以这种情况下就得使用 Debian提供的“update-alternatives“工具来完成程序多版本实现的选择了:
sudo update-alternatives –display java
发现系统只列举了gij JVM;因为jdk6是通过手动解压安装的。
现在输入下面的两行命令:
sudo update-alternatives –install /usr/bin/java java /usr/local/lib/jdk1.6.0_04/bin/java 60
sudo update-alternatives –install /usr/bin/java java /usr/bin/gij-4.2 40
注意1,2行尾的60,40是优先级;现在把JDK6设为了首选;
输入: ls -l /etc/alternatives/java 发现JVM已经指向了jdk6的解压目录:
lrwxrwxrwx 1 root root 35 2008-01-25 17:55 /etc/alternatives/java -> /usr/local/lib/jdk1.6.0_04/bin/java

cd /usr/bin
sudo cp java java.bak
sudo ln -sf /etc/alternatives/java .

现在再执行:
java -version

java version “1.6.0_04”
Java(TM) SE Runtime Environment (build 1.6.0_04-b12)
Java HotSpot(TM) Client VM (build 10.0-b19, mixed mode, sharing)

若想变更JVM实现,输入:
sudo update-alternatives –config java
进行配置;

2. 3. 设置环境变量

在/etc/profile中加入如下的内容:

JAVA_HOME=/usr/local/lib/jdk1.6.0_04
JRE_HOME=/usr/local/lib/jdk1.6.0_04/jre
CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib
export JAVA_HOME JRE_HOME CLASSPATH

okey, JDK安装配置完成。

oracle 检查被锁的表及解锁

Monday, November 22nd, 2010 | Permalink

转载 oracle 检查被锁的表及解锁 收藏

处理方法一 :

检查那个表被锁
select sess.sid,sess.serial#, lo.oracle_username,lo.os_user_name,ao.object_name,lo.locked_mode
from v$locked_object lo,dba_objects ao,v$session sess
where ao.object_id = lo.object_id
and lo.session_id = sess.sid;

解锁

alter system kill session ‘273,45’;

处理方法二 :

找到你要杀掉的那个SESSION, 并记下paddr

SELECT sid, username, paddr, status FROM v$session WHERE username = ‘JCUSER’ and sid=上面查出来的sid;

找到这个SESSION所对应的spid

SELECT ADDR,PID,SPID,USERNAME,SERIAL#,TERMINAL FROM v$process WHERE addr = ‘上面的PADDR’;

杀掉spid所标识的那个进程

orakill sid spid

原文来源:http://tech.e800.com.cn/articles/2009/710/1247207067745_1.html

Social WebGame的可能

Thursday, September 9th, 2010 | Permalink

社交游戏目前已经进行的如火如荼,随着市场的竞争越来越激烈,社交游戏的局限也越来越明显。

  1. 游戏质量偏低。
  2. 产品持续粘性低。
  3. 逻辑简单趣味性低。
  4. 还没有充分利用社交用户的复杂关系网。

。。。
迫于市场的压力,社交正向高复杂、高质量、高逻辑趣味性发展,这样的最后结果就接近于webgame,而又有区别于webgame 的新形势,使Social WebGame(SWG)成为新的可能。

删除某个文件夹下的所有同名文件命令

Monday, July 5th, 2010 | Permalink

del D:\workspace\xxx\Thumbs.db /f/s/q/a

几个有用的js脚本

Saturday, May 8th, 2010 | Permalink

用javascript对中文的unicode编码和反编码


function unicode(s){
var len=s.length;
var rs="";
for(var i=0;i<len;i++){
var k=s.substring(i,i+1);
rs+="&#"+s.charCodeAt(i)+";";
}
return rs;
}

function runicode(s){
var k=s.split(";");
var rs="";
for(i=0;i<k.length;i++){
var m=k.replace(/&#/,"");
rs+=String.fromCharCode(m);
}
return rs;
}
alert(unicode("我是一头猪"));//我是一头猪
alert(runicode("我是一头猪"));

图像尺寸加载后修改,以适应页面宽度


function foo(){
var k=document.all;
for(var i=0;i500){ //500是最大宽度
var height=Math.ceil(k.height*500/k.width);
k.height=height;
k.width="500";
}
}
}
}





一个倒计时功能,5分种提醒,0秒自动提交


<!--
var time="3600";
var atime="300"; //定义时间
var etime="0";
function count(){
setTimeout("count()",1000); //1000毫秒=1秒加载一次计数
document.form1.rest.value=format(Math.floor(time/60))+"分:"+format(time%60)+"秒";
time--;
if(time==atime){
alert("还剩5分钟");
}
if(time==etime-1){
alert("时间到,已经自动提交");
document.form1.submit();
}
}

function format(time){
var len=time.toString().length;
for(i="0";i

一个简单的计算器