itstarting:IT进行时

想自己所想,做自己所爱

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  28 随笔 :: 3 文章 :: 55 评论 :: 0 Trackbacks

2006年6月30日 #

     摘要: Buffalo是一个前后贯通的完整的Ajax框架,目前最新的版本是2.0.1,其主页是:
http://buffalo.sourceforge.net/,可通过该页面找到下载。
不过该版本自2007年来就没有更新了,有点遗憾,不管怎样,一出来就关注到了,早前通读过代码,是个好作品。
上周开始用了些零碎的时间,重新评估并进行了深入的研究,其目的在于通过深度掌握某个优秀的贯穿前后端的AJAX框架,以提高自己的整体认知感。

Buffalo最有价值之初,个人感觉有两点:
1、后端实现了较为完整的基于xml的xml<->object序列化反序列化协议;
2、前端提供了适配协议的调用封装和响应解析机制,并基于回调机制提供编码API。
  阅读全文
posted @ 2010-01-12 14:38 IT进行时 阅读(3006) | 评论 (0)编辑 收藏

经过几个晚上的奋战,Hadoop-0.20.1+Ubuntu9.10实战终于出炉。

目录:
一、环境准备 1
二、安装JDK6 1
三、配置SSH 2
四、安装配置hadoop 4
4.1下载及安装 4
4.2配置 4
4.2.1配置$HADOOP_HOME/conf/hadoop-env.sh 4
4.2.2配置$HADOOP_HOME/conf/core-site.xml 4
4.2.3配置$HADOOP_HOME/conf/mapred-site.xml 5
4.2.4格式化namenode 5
4.3启动及验证 5
五、跑第一个wordcount例子 7
4.1准备工作 7
4.2运行例子 8
4.3看结果 11
4.4在eclipse中调试/运行 12
4.5分析代码 15
六、改进的wordcount例子 17
参考 23
FAQ 23
1、xxx is not in the sudoers file解决方法 23
2、/etc/sudoers is mode 0640, should be 0440怎么回事? 24
3、如何增加ubuntu的SWAP空间? 24
4、bin/hadoop dfs到底有哪些命令? 25

原文和文档我放在了javaeye,这里给个链接吧:
http://itstarting.javaeye.com/blog/520985
posted @ 2009-12-15 22:46 IT进行时 阅读(1702) | 评论 (1)编辑 收藏

 

               1JDK安装配置

    选用最新的版本6.0.

    打开终端,执行以下命令:

        sudo apt-get install sun-java6-jdk

    按照提示做就是了。

    配置JAVA环境变量:

        sudo gedit /etc/environment

       在其中添加如下两行:

        CLASSPATH=.:/usr/lib/jvm/java-6-sun/lib

        JAVA_HOME=/usr/lib/jvm/java-6-sun

    执行命令:sudo gedit /etc/jvm,在最前面加入:

       /usr/lib/jvm/java-6-sun

               2Tomcat安装配置

    还是喜欢经典的Tomcat5.5,http://tomcat.apache.org去下载。

    文件为:apache-tomcat-5.5.28.zip

    解压缩:

    unzip /home/zhengxq/下载/apache-tomcat-5.5.28.zip -d $HOME/java

               3Eclipse安装配置

    下载最新的版本,并解压缩:

    zhengxq@zhengxq-desktop:~$ tar zxf $HOME/下载/eclipse-java-galileo-SR1-linux-gtk.tar.gz -C $HOME/java

    此时直接通过$HOME/java/eclipse/eclipse即可启动。

    Tomcat插件是必须的,下载并解压缩到eclipse/plugins下,重启eclipse即可。

    下面是高级篇:)。为了建立更方便的导航,可以这样:

    1、在/usr/bin目录下创建一个启动脚本eclipse

    sudo gedit /usr/bin/eclipse

   
然后在该文件中添加以下内容:

    #!/bin/sh
    export MOZILLA_FIVE_HOME="/usr/lib/mozilla/"
    export ECLIPSE_HOME="/home/zhengxq/java/eclipse"
    $ECLIPSE_HOME/eclipse $*

    2
、让修改该脚本的权限,让它变成可执行:

    sudo chmod +x /usr/bin/eclipse

    3
、在桌面或者gnome菜单中添加eclipse启动图标
   
1)在桌面或者启动面板上添加图标:
   
在桌面(右键单击桌面->创建启动器)或面板(右键单击面板->添加到面板 ->定制应用程序启动器)上创建一个新的启动器,然后添加下列数据:
   
名称:Eclipse Platform
   
命令:eclipse
   
图标: /home/zhengxq/java/eclipse/icon.xpm
   
2)在Applications(应用程序)菜单上添加一个图标
   
用文本编辑器在/usr/share/applications目录里新建一个名为eclipse.desktop的启动器,如下面的命令:
    sudo gedit /usr/share/applications/eclipse.desktop
   
然后在文件中添加下列内容:

[Desktop Entry]
Encoding=UTF-8
Name=Eclipse Platform
Comment=Eclipse IDE
Exec=eclipse
Icon=/home/zhengxq/java/eclipse/icon.xpm
Terminal=false
StartupNotify=true
Type=Application
Categories=Application;Development;

    保存文件,此时即可通过双击桌面eclipse的图标来运行eclipse

    注意: Type=Application后面绝对不能有空格,否则出不来可别抓狂。

posted @ 2009-12-15 22:44 IT进行时 阅读(2160) | 评论 (1)编辑 收藏

——IT 进行时(Email & MSN:zhengxianquan AT hotmail.com)

说在前面的话: 作为一名技术人员,喜欢通过自己的实战去学习,也养成了写学习笔记的习惯。个人做企业应用更多,也涉及TB级别的非结构化数据,对于Hadoop倒是第一次接触,分布式计算总归有用武之地。但这个笔记只能说是自己的盲学,就是简单的看看。

Keywords:Hadoop; HDFS; 学习笔记

目录:
1. 准备工作 2
1.1. Supported Platforms 2
1.2. Hadoop需要的基础东西 2
1.3. 安装Cygwin注意事项 2
2. 单机上配置过程 3
2.1. 配置SSH 3
2.1.1. 配置服务 3
2.1.2. 启动Cygwin sshd服务 4
2.1.3. Setup authorization keys 5
2.2. 修订/配置/conf/core-site.xml 7
2.3. 修订/配置/conf/mapred-site.xml 9
2.4. 修订/配置\conf\masters和slaves 9
2.5. 修订/配置\conf\hadoop-env.sh 9
2.6. 其他数据节点类似,重复即可 10
3. 格式化及启动 10
3.1. 启动命令 10
3.2. 如何验证启动成功 11
4. 使用及开发 12
4.1. 常用命令行使用方法 12
4.2. 可以通过浏览器访问 15
5. FAQ 16
5.1. 为什么启动不了? 16
5.2. 配置文件可能导致的问题 17
5.3. JobTracker一直有问题? 19
5.4. 如何验证配置并启动成功? 19
6. 常用命令 20
7. 参考 21

地址:http://itstarting.javaeye.com/blog/513659
posted @ 2009-12-15 22:43 IT进行时 阅读(2022) | 评论 (1)编辑 收藏

Aalst提出了工作流有20种基本模式。

如果不知道的可参考《Workflow Patterns-2002》

 工作流20种基本模式的理解(当然了,后人陆续扩展、变化,模式数量不断变化,但万变不离其宗,可从这些基本模式看起)

 

下面是我的初步分析:

模式名称

模式关键字

模式说明

Basic Control Patterns

Sequence

Sequence

1

Parallel Split

AND Split

2

Synchronization

AND Join

3

Exclusive Choice

XOR Split

4

Simple Merge

XOR Join

5

ADVANCED BRANCHING AND SYNCHRONIZATION PATTERNS

Multiple Choice

OR Split

6

Synchronizing Merge

AND Join

7

Multi-merge

OR Join(+Multi)

8

Discriminator

OR Join(+Reset/Ignore)

9

N-out-of-M-join

OR Join(+Multi M)

9aN分支,M聚合即可

STRUCTURAL PATTERNS 

Arbitrary Cycles[自由循环]

XOR Split

10

Implicit Termination

Multi(OR/AND) Split End

11

PATTERNS INVOLVING MULTIPLE INSTANCES

MI without synchronization

Runtime independent thread by condition

12,在运行期创建独立实例(线程、程序等)

MI with a priori known design time knowledge

Design time priori Instance

13,设计期多实例,且需全部完成

MI with a priori known runtime knowledge

Runtime multi Instance by condition/free

14,运行期可基于条件创建多实例

MI with no a priori runtime knowledge

Runtime multi Instance free by people

15,运行期可手工随意创建多实例

STATE-BASED PATTERNS 

Deferred Choice

XOR Split(By choice)

16,“推着走”流程,或基于既定条件分支

Interleaved Parallel Routing

OR Split + OR Join, Parallel

17,多分支聚合,分支执行顺序由运行期确定

Milestone

Wait by Milestone

18,在“里程碑”节点等待

CANCELLATION PATTERNS   

Cancel Activity

Cancel in specified Activity

19,在指定的活动取消

Cancel Case

Cancel Anywhere/Anytime

20,任意时候可取消


可以看到,其实很多是类似的,这为下一步的工作流引擎需求、设计打下基础。

抛砖引玉,供大家参考。

posted @ 2009-12-15 22:38 IT进行时 阅读(1649) | 评论 (0)编辑 收藏

1、基于现成的某个Style进行针对性的开发(这个开发说白了就是结合自己论文格式的要求不停的重复:修改<->验证),保存为自己的Style(如“郑式.ens”);
2、把Style文件(如“郑式.ens”)放到\EndNote9\Styles目录下;
3、重新启用EndNote;
4、打开Open Style Manager…
5、选中我的Style(如“郑式.ens”),此时通过选中“郑氏”启用样式:
 

 

附上样式文件,适合浙大硕士论文的编写要求(其他学校是否符合,未知):/Files/itstarting/zheng.rar

posted @ 2009-08-31 23:14 IT进行时 阅读(496) | 评论 (0)编辑 收藏

     摘要: 无论是商业化的还是开源的Portal产品,符合国际标准规范是必不可少的要求。有的Portal可能不支持WSRP(Web Services for Remote Portlets),但必须符合JSR-168标准。比较突出的开源Portal主要有JBoss Portal、Apache Jetspeet-2,Liferay Portal,还有两个属于欧洲的非美产品eXo Platform和GridSph...  阅读全文
posted @ 2009-04-15 13:19 IT进行时 阅读(980) | 评论 (0)编辑 收藏

Q:WORD莫名其妙的所有引用(如Endnote和插入PPT对象)都变成了域代码,怎么办?
A:工具->选项->视图;“域代码”,把它前面的对勾去掉即可!
备注:我居然尝试了一次一个一个选择“切换域代码”,累死了不说,居然重新打开又这样,晕死。

参考:http://zhidao.baidu.com/question/75336298.html
posted @ 2009-04-12 21:55 IT进行时 阅读(1605) | 评论 (1)编辑 收藏

AIX下用nmon进行监控和分析实战

nmon从这里下载:
http://www.ibm.com/developerworks/wikis/display/Wikiptype/nmonanalyser

1、准备
  1)用root用户登录到系统中
  2)建目录:#mkdir /nmon/script
  3)确定版本:#oslevel,以便确定用哪个脚本,我是用530
        # oslevel -s
            5300-09-01-0847
  4)把nmon12e_aix530用ftp上传到/nmon/script
  5)执行授权命令:#chmod +x nmon12e_aix530

2、使用
 1)直接使用:
 ./nmon/nmon12e_aix536 -f -N -m /nmon/log -s 30 -c 2880
 表示:
  -f 按标准格式输出文件:<hostname>_YYYYMMDD_HHMM.nmon
  -N include NFS sections
  -m 切换到路径去保存日志文件
  -s 每隔n秒抽样一次,这里为30
  -c 取出多少个抽样数量,这里为2880,即监控=2880*(30/60/60)=24小时
   根据小时计算这个数字的公式为:c=h*3600/s,比如要监控10小时,每隔30秒采样一次,则c=10*3600/30=1200
 
  2)用crontab定期使用:
 A、执行命令:#crontab -e
 B、在最后一行添加如下命令:
  0 8 * * 1,2,3,4,5 /nmon/script/nmon12e_aix530 -f -N -m /nmon/log -s 30 -c 1200
 表示:
  周一到周五,从早上08点开始,监控10个小时(到18:00整为止),输出到/nmon/log

3、分析
  1)会在/tmp/nmon生成*.nmon的文件把它下载到你的电脑上
  2)打开nmon analyser v339.xls,把宏的安全性设成最低,打开下载好的*.nmon文件。
     并且保存为一个文件,生成的是视图模式的,非常直观!


参考:
附录一:crontab参数:
参考:http://tech.ddvip.com/2008-11/122629526990895.html
     f1 f2 f3 f4 f5 program
minute  hour  day_of_month  month  weekday  command这些字段接收以下值:
minute 0 到 59
hour 0 到 23
day_of_month 1 到 31
month 1 到 12
weekday 0 到 6(星期天到星期六)

 其中f1 是表示分钟,f2 表示小时,f3 表示一个月份中的第几日,f4 表示月份,f5 表示一个星期中的第几天。program 表示要执行的程序。
   当 f1 为 * 时表示每分钟都要执行 program,f2 为 * 时表示每小时都要执行程序,其馀类推
   当 f1 为 a-b 时表示从第 a 分钟到第 b 分钟这段时间内要执行,f2 为 a-b 时表示从第 a 到第 b 小时都要执行,其馀类推
   当 f1 为 */n 时表示每 n 分钟个时间间隔执行一次,f2 为 */n 表示每 n 小时个时间间隔执行一次,其馀类推
   当 f1 为 a, b, c,... 时表示第 a, b, c,... 分钟要执行,f2 为 a, b, c,... 时表示第 a, b, c...个小时要执行,其馀类推


附录二:nmon参数:
参考http://www.ibm.com/developerworks/wikis/display/Wikiptype/nmonanalyser
nmon:
-f            spreadsheet output format [note: default -s300 -c288]
           Output file is <hostname>_YYYYMMDD_HHMM.nmon

        -F <filename>  same as -f but user supplied filename
-c <number>    number of snapshots
-d      requests disk service and wait times (DISKSERV and DISKWAIT)
-i <percent>   Ignore processes using less than this amount of CPU when generating TOP section – useful for reducing data volumes
-g <filename> file containing disk group definitions
-l <dpl>  number of hdisks per sheet - defaults to 150, maximum 250.  See notes
-m <dir>    NMON changes to this directory before saving the file
-r <runname>   goes into spreadsheet file [default hostname]
-s <seconds>   interval between snap shots
-x   capacity planning (15 mins for 1 day = -fdt -s900 -c96) 
 -t           include top processes in the output
-T           as –t plus saves command line arguments in UARG section
-A          include data for async I/O (PROCAIO) sections
-D prevents DISK sections being produced (useful when Disk Groups are being used because there are too many hdisks to process)
-E          stops ESS sections being produced (necessary when Disk Groups are being used because there are too many vpaths to process)
-J  prevents JFS sections being produced (prevents Excel errors when you have more than 255 filesystems)
-L includes LARGEPAGE section
-N include NFS sections
-S include WLM sections with subclasses
-W include WLM sections without subclasses
-Y include SUMMARY section (very efficient alternative to –t if PID level data is not required)

        example: nmon_aix51 -F asterix.nmon -r Test1 -s6 -c12

posted @ 2009-02-19 20:24 IT进行时 阅读(25071) | 评论 (4)编辑 收藏

解决连接池泄漏步骤

登录weblogic console,  %Domain% -> Services -> JDBC -> Connection Pools -> jdbc/ioa

 

Configuration -> Connection, 点开Advanced Options, 修改以下配置项状态:

 

配置项名称

默认值

修改为

说明

Enable Connection Leak Profiling

禁用

启用

开启连接池泄漏的监控。

Enable Connection Profiling

禁用

启用

开启连接池监控。

Inactive Connection Timeout

0

100

连接在指定时间内(单位:秒)没有活动的话,WebLogic会将之释放并回收到连接池。

 

    以上配置项修改后不影响在跑的应用,不需要重启服务器或应用(配置项前没有黄色小图标 <!--[if !vml]--><!--[endif]-->WebLogic很明确的告诉我们这个配置是不需要重启的),所以大可放心设置。只是启用监控后会对性能有一些影响,具体影响会有多大,我没有测试过,但开启这些设置只是暂时的,得到日志后我们就可以把配置还原会默认值。

在没有解决连接池泄漏问题之前,如果没有请求时连接池将一直保持为0,不会再有连接池满造成请求无法响应的问题,我们也不用担心再挨客户骂,也为我们解决问题争取了宝贵到时间。

 

       好了,下面才是关键。

 

       过一段时间后,在bea\user_projects\domains\%domainname%\%servername%目录下,打开%servername%.log,查找,"A JDBC pool connection leak was detected",如果WebLogic已经监控到有连接池泄漏的话,就可以找到以下日志,并且很清楚的告诉我们在哪一个类的哪行代码创建了连接,但没有关闭(注意红色加粗字体):


 

2008-5-22 上午114720 CST       Warning     JDBC                A JDBC pool connection leak was detected. A connection leak occurs when a connection obtained from the pool was not closed explicitly by calling close() and then was disposed by the garbage collector and returned to the connection pool. The following stack trace at create shows where the leaked connection was created. Stack trace at connection create:

       at weblogic.jdbc.wrapper.PoolConnection.init(PoolConnection.java:75)

       at weblogic.jdbc.pool.Driver.allocateConnection(Driver.java:254)

       at weblogic.jdbc.pool.Driver.connect(Driver.java:84)

       at weblogic.jdbc.jts.Driver.getNonTxConnection(Driver.java:546)

       at weblogic.jdbc.jts.Driver.connect(Driver.java:140)

       at weblogic.jdbc.common.internal.RmiDataSource.getConnection(RmiDataSource.java:344)

       at com.cp.fw.dao.BaseDAO.getConnection(BaseDAO.java:78)

       at com.cp.fw.dao.dataset.DataSetOp.init(DataSetOp.java:78)

       at com.cp.fw.dao.dataset.DataSetOp.<init>(DataSetOp.java:45)

       at com.cp.ia.util.WorkFlowUtil.getNextWrokFlowId(WorkFlowUtil.java:93)

       at

 

……

      

 

       另外一种方法:

WebLogic Console,展开 %DomainName% -> Servers -> %ServerName%,选到Logging – Server页,在页面最下方点击 "View server log",同样查找 "A JDBC pool connection leak was detected",也可以找到同样的日志。

 

WebLogic对于日志事件的说明:

 

Message ID

BEA-001074

Subsystem

JDBC

Message

A JDBC pool connection leak was detected. A

connection leak occurs when a connection obtained

from the pool was not closed explicitly by calling

close() and then was disposed by the garbage

collector and returned to the connection pool. The

following stack trace at create shows where the

leaked connection was created.  Stack trace at

connection create:

Detail

A JDBC pool connection leak was detected. A

connection leak occurs when a connection obtained

from the pool was not closed explicitly by calling

close() and then was disposed by the garbage

collector and returned to the connection pool. A

stack trace is printed indicating where the leaked

connection was created.

Cause

A JDBC pool connection leak was detected. A

connection leak occurs when a connection obtained

from the pool was not closed explicitly by calling

close() and then was disposed by the garbage

collector and returned to the connection pool. A

stack trace is printed indicating where the leaked

connection was created.

Action

Close the connection appropriately.



原文:http://blog.csdn.net/esky2000/archive/2008/07/22/2689929.aspx
posted @ 2008-11-13 00:41 IT进行时 阅读(1949) | 评论 (0)编辑 收藏

 

ActiveMQ 5.0的文档实在是太少了,尤其是集成Spring2.x方面更少。

        下面是配置方面的心得:
        一、服务器端配置:

 总体参考官方网站进行整合,差点害死人,不停的出现各种配置错误,后来经过google查询各种邮件列表,才发现xsd使用不当。        

<?xml version="1.0" encoding="UTF-8"?>
<beans 
  
xmlns="http://www.springframework.org/schema/beans" 
  xmlns:amq
="http://activemq.org/config/1.0"
  xmlns:xsi
="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation
="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
  http://activemq.org/config/1.0 http://activemq.apache.org/schema/core/activemq-core-5.0.0.xsd"
>


</beans>

这个才是正确的,两点:

1、去掉:

<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

2、用这个而不是那个:

这个:

           http://activemq.apache.org/schema/core/activemq-core-5.0.0.xsd

那个:     
     http://activemq.apache.org/snapshot-schema/activemq-core-5.0-SNAPSHOT.xsd


        完整的配置如下:        
        applicationContext-activeMQ.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans 
  
xmlns="http://www.springframework.org/schema/beans" 
  xmlns:amq
="http://activemq.org/config/1.0"
  xmlns:xsi
="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation
="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
  http://activemq.org/config/1.0 http://activemq.apache.org/schema/core/activemq-core-5.0.0.xsd"
>

  
<amq:broker useJmx="true" persistent="true"> 
    
<amq:persistenceAdapter> 
        
<amq:jdbcPersistenceAdapter dataSource="#mysql-ds"/> 
      
</amq:persistenceAdapter> 
    
<amq:transportConnectors> 
       
<amq:transportConnector uri="tcp://localhost:0"/> 
    
</amq:transportConnectors> 
   
</amq:broker>
  
  
<!-- MySql DataSource Setup -->
  
<bean id="mysql-ds" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
    
<property name="url" value="jdbc:mysql://localhost/activemq?relaxAutoCommit=true"/>
    
<property name="username" value="activemq"/>
    
<property name="password" value="activemq"/>
    
<!--
    <property name="poolPreparedStatements" value="true"/>
-->
  
</bean>
</beans>


        二、web.xml配置: 

    <!--activeMQ-->
    
<context-param>
        
<param-name>contextConfigLocation</param-name>
        
<param-value>
            /WEB-INF/applicationContext-activeMQ.xml 
            /WEB-INF/applicationContext-jms.xml 
        
</param-value>
    
</context-param>

    
<listener>
        
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    
</listener>



        三、客户端配置此处仅供参考,还未曾具体实战确认):
        applicationContext-jms.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans 
  
xmlns="http://www.springframework.org/schema/beans" 
  xmlns:amq
="http://activemq.org/config/1.0"
  xmlns:xsi
="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation
="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
  http://activemq.org/config/1.0 http://activemq.apache.org/schema/core/activemq-core-5.0.0.xsd"
>
  
<!-- ActiveMQ destinations to use  -->
  
<amq:queue id="destination"  physicalName="org.apache.activemq.spring.Test.spring.embedded"/>

  
<!-- JMS ConnectionFactory to use, configuring the embedded broker using XML -->
  
<amq:connectionFactory id="jmsFactory" brokerURL="vm://localhost"/>  
  
<!-- Spring JMS Template -->
  
<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
    
<property name="connectionFactory">
      
<!-- lets wrap in a pool to avoid creating a connection per send -->
      
<bean class="org.springframework.jms.connection.SingleConnectionFactory">
        
<property name="targetConnectionFactory">
          
<ref bean="jmsFactory" />
        
</property>
      
</bean>
    
</property>
    
<property name="messageConverter">
        
<ref bean="dynamicMessageConverter"/>
    
</property>
  
</bean>
  
  
<bean id="dynamicMessageConverter" class="com.tuanzi.message.mq.impl.DynamicMessageConverter"/>  

  
<bean id="consumerJmsTemplate" class="org.springframework.jms.core.JmsTemplate">
    
<property name="connectionFactory">
        
<ref bean="jmsFactory"/>
    
</property>
    
<property name="messageConverter">
        
<ref bean="dynamicMessageConverter"/>
    
</property>
    
<property name="receiveTimeout">
        
<value>10000</value>
    
</property>
  
</bean>

  
<!-- a sample POJO which uses a Spring JmsTemplate -->
  
<bean id="simpleMessageProducer" class="com.tuanzi.message.mq.impl.SimpleMessageProducer">
    
<property name="jmsTemplate">
      
<ref bean="jmsTemplate"></ref>
    
</property>
    
<property name="destination">
      
<ref bean="destination" />
    
</property>
  
</bean>

  
<!-- a sample POJO consumer -->
  
<bean id="simpleMessageConsumer" class="com.tuanzi.message.mq.impl.SimpleMessageConsumer">
    
<property name="jmsTemplate" ref="consumerJmsTemplate"/>
    
<property name="destination" ref="destination"/>
  
</bean>
</beans>


    TODO:
    1、客户端的配置需要实战后进行进一步的确认、更新;
    2、后期视情况增加一篇《Spring2.x与ActiveMQ5.0成功集成的心得(实战篇)》


    主要参考:

http://activemq.apache.org/spring-support.html

http://activemq.apache.org/xml-reference.html

posted @ 2008-01-20 23:41 IT进行时 阅读(3430) | 评论 (3)编辑 收藏

ORA-00600是Oracle的内部错误。何谓内部错误,就是Oracle也认为是uncheck的错误了。

我是在执行查询时出现了这样的提示,用的是9.2.0.1版本,我查了好长时间,当时的第一反应就是:完了,Oracle的BUG,要打补丁了。

后来找到了一个论坛,这里:http://oracle.ittoolbox.com/groups/technical-functional/oracle-db-l/ora-00600-internal-error-code-arguments-20084-50364303-23-50364303-23-325619?cv=expanded#。有高人指点,终于解决了。


我的解决方法很简单,变更了一个参数:
STAR_TRANSFORMATION_ENABLED从原来的TRUE改为FALSE。

只能知其然不知其所以然了。
posted @ 2007-08-31 09:29 IT进行时 阅读(23242) | 评论 (6)编辑 收藏

jmagick是什么?不用我说了吧。

jmagick的安装(基于windows),精简版步骤:
1、下载jmagick-win-5.5.7-Q8.zip,并把jmagick.jar放到应用的lib下,jmagick.dll拷贝到SYSTEM32下;
2、安装ImageMagick-5.5.7-Q8-windows-dll.exe软件
3、重新启动机器
麻烦点,但对图片的处理能力,确实超乎想象的(不过用6.2.6版本频频出现JVM Crach,吓死)

jmagick的使用,我只用了图片缩放,还可以。
代码如下:
   System.setProperty("jmagick.systemclassloader", "no");//这个没什么好说的,照办就是了
   ImageInfo info = new ImageInfo(fromFileName);
   MagickImage fromImage = new MagickImage(info);
   Dimension dim = fromImage.getDimension();
   double w = dim.getWidth();
   double h = dim.getHeight();
   int toHeight = (int)(h*toWidth/w);//按宽度比例缩放
      
   MagickImage toImage = fromImage.scaleImage(toWidth, toHeight);//缩放操作
   toImage.setFileName(toFileName);//设置输出的文件名
   toImage.writeImage(info); //保存


过程中发现最新版本的诸多问题,要么NoClassDefFoundError要么Can't find dependent libraries,简直不胜其烦。

后来降级到5.5.7,就好了,说明IT人唯最新版本是从的想法不一定正确。

说心里话,过程中曾经出现过多次JVM crach,现在还有心理阴影。
posted @ 2007-07-26 12:53 IT进行时 阅读(5809) | 评论 (4)编辑 收藏

    对于开发和实施人员来说,也许大家经常会碰到这样的对话:

    实施工程师:系统有问题了,是哪里哪里(省略字若干+若干界面截图)
    开发工程师:不可能,我这边还原了整个环境,包括数据库、代码和中间件……
    实施工程师:这边是weblogic,你那边是?
    开发工程师:我的是Tomcat,但Tomcat和weblogic的差异呢,不知道……

    然后就没有结果,因为我们的个人电脑真的无法或者难以承受weblogic或者websphere之重。

    怎么办呢,其实我们可以用远程调试的方法:
   
    三步配置远程调试:
    一、对于TOMCAT:
      1、打开catalina.bat,并加入:
        SET CATALINA_OPTS=-server -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5555
      2、配置Eclipse,如下图(此时Port与上面的address一致,是5555):

 
    3、如果Tocat已经起来(注意,可能在另外的机器上),那点击debug,即可进行与本地服务一样的调试过程。

    二、对于Weblogic:
      1、打开startWebLogic.cmd,并调整执行java命令的地方:
%JAVA_HOME%\bin\java %JAVA_VM% %MEM_ARGS% %JAVA_OPTIONS% -Dweblogic.Name=%SERVER_NAME% -Dweblogic.ProductionModeEnabled=%PRODUCTION_MODE% -Djava.security.policy="%WL_HOME%\server\lib\weblogic.policy" weblogic.Server
调整为
@REM ORG : %JAVA_HOME%\bin\java %JAVA_VM% %MEM_ARGS% %JAVA_OPTIONS% -Dweblogic.Name=%SERVER_NAME% -Dweblogic.ProductionModeEnabled=%PRODUCTION_MODE% -Djava.security.policy="%WL_HOME%\server\lib\weblogic.policy" weblogic.Server
@REM Surport Remote Debug :
set JAVA_DEBUG=-Xdebug -Xnoagent -Xrunjdwp:transport=dt_Socket,address=4000,server=y,suspend=n
%JAVA_HOME%\bin\java %JAVA_VM% %JAVA_DEBUG% %MEM_ARGS% %JAVA_OPTIONS% -Dweblogic.Name=%SERVER_NAME% -Dweblogic.ProductionModeEnabled=%PRODUCTION_MODE% -Djava.security.policy="%WL_HOME%\server\lib\weblogic.policy" weblogic.Server
      2、其他配置类似Tomcat,如下:
    
    3、同样,如果weblogic已经起来(注意,我上面的例子就是weblogic不在本机上,而在于另外的机器上),那点击debug,即可进行与本地服务一样的调试过程,如下:

    大家也许会问:这样调试会不会影响客户使用?当然会影响,如果一旦hit了断点,则整个应用会被挂起。那怎么样才能尽可能的进行调试呢?方法还是有的:
    1、如果是tomcat,重新复制一份tomcat,修改一下端口,然后起来后调试,此时整个环境都类似了,调试起来非常方便;
    2、如果是weblogic,重新建立一个新的domain即可,互不干扰;
    3、如果是websphere,呵呵,没试过,留给大家的作业。

    原理?好奇的人还会问,其实就是jdwp(Java(tm) Debug Wire Protocol),有兴趣就google一下吧。

posted @ 2007-06-13 16:22 IT进行时 阅读(2331) | 评论 (4)编辑 收藏

     摘要: 以前公司购买过eWebEditor,功能应该还是不错的,但即便到了现在,也还仅是一个IE only的版本,无法满足现在差异化的需求。故前段时间下了最新的FCKeditor2.3.3版本下来(当然了,连带java的integration),demo来看看,发现有几个地方非常不爽:1、上载的文件,只能放在URL可及的地方(如默认只能放到嵌入应用路径的/UserFiles/下);2、没有明确的上载视频的...  阅读全文
posted @ 2007-03-11 20:20 IT进行时 阅读(6854) | 评论 (12)编辑 收藏

此类话题已经很多,可以参考的文档也不少,我是参考这个blog的文档做的:
http://blogger.org.cn/blog/blog.asp?name=lhwork

1)环境和版本:
Apache2.0.59+Tomcat5.5.15(两个),一开始用的是Tomcat5.0.28,一直有问题(在后面总结),就升级到5.5去做试验了,冤枉5.0.28兄弟了:)

步骤小结为:
1、安装(忽略);
2、配置Tomcat:
   1)第一个Tomcat:
      A.启用jvmRoute      
    <!-- You should set jvmRoute to support load-balancing via AJP ie :-->
    <Engine name="Standalone" defaultHost="localhost" jvmRoute="tomcat1">          
    <!-- Define the top level container in our container hierarchy
    <Engine name="Catalina" defaultHost="localhost">-->
      B.启用原来禁用的Cluster设置
      
        <Cluster className="org.apache.catalina.cluster.tcp.SimpleTcpCluster"
                 managerClassName="org.apache.catalina.cluster.session.DeltaManager"
                 expireSessionsOnShutdown="false"
                 useDirtyFlag="true"
                 notifyListenersOnReplication="true">

            <Membership
                className="org.apache.catalina.cluster.mcast.McastService"
                mcastBindAddress="127.0.0.1"
                mcastAddr="224.1.2.3"
                mcastPort="2525"
                mcastFrequency="500"
                mcastDropTime="3000"/>

            <Receiver
                className="org.apache.catalina.cluster.tcp.ReplicationListener"
                tcpListenAddress="auto"
                tcpListenPort="4001"
                tcpSelectorTimeout="100"
                tcpThreadCount="6"/>

            <Sender
                className="org.apache.catalina.cluster.tcp.ReplicationTransmitter"
                replicationMode="pooled"
                ackTimeout="15000"/>

            <Valve className="org.apache.catalina.cluster.tcp.ReplicationValve"
                   filter=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.htm;.*\.html;.*\.css;.*\.txt;"/>
                  
            <Deployer className="org.apache.catalina.cluster.deploy.FarmWarDeployer"
                      tempDir="/tmp/war-temp/"
                      deployDir="/tmp/war-deploy/"
                      watchDir="/tmp/war-listen/"
                      watchEnabled="false"/>
                     
            <ClusterListener className="org.apache.catalina.cluster.session.ClusterSessionListener"/>
        </Cluster>
      C.搞定
   2)配置第二个Tomcat(要注意端口冲突了):
      A.变更端口
      <Server port="8005" shutdown="SHUTDOWN">
      =》
      <Server port="8004" shutdown="SHUTDOWN">
      B.变更端口
      <Connector port="8009"
               enableLookups="false" redirectPort="8443" protocol="AJP/1.3" />
      =》
      <Connector port="9009"
               enableLookups="false" redirectPort="8443" protocol="AJP/1.3" />
      C.启用jvmRoute      
    <!-- You should set jvmRoute to support load-balancing via AJP ie :-->
    <Engine name="Standalone" defaultHost="localhost" jvmRoute="tomcat2">          
    <!-- Define the top level container in our container hierarchy
    <Engine name="Catalina" defaultHost="localhost">-->
      D.启用原来禁用的Cluster设置      
        <Cluster className="org.apache.catalina.cluster.tcp.SimpleTcpCluster"
                 managerClassName="org.apache.catalina.cluster.session.DeltaManager"
                 expireSessionsOnShutdown="false"
                 useDirtyFlag="true"
                 notifyListenersOnReplication="true">

            <Membership
                className="org.apache.catalina.cluster.mcast.McastService"
                mcastBindAddress="127.0.0.1"
                mcastAddr="224.1.2.3"
                mcastPort="2525"
                mcastFrequency="500"
                mcastDropTime="3000"/>

            <Receiver
                className="org.apache.catalina.cluster.tcp.ReplicationListener"
                tcpListenAddress="auto"
                tcpListenPort="4002"
                tcpSelectorTimeout="100"
                tcpThreadCount="6"/>

            <Sender
                className="org.apache.catalina.cluster.tcp.ReplicationTransmitter"
                replicationMode="pooled"
                ackTimeout="15000"/>

            <Valve className="org.apache.catalina.cluster.tcp.ReplicationValve"
                   filter=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.htm;.*\.html;.*\.css;.*\.txt;"/>
                  
            <Deployer className="org.apache.catalina.cluster.deploy.FarmWarDeployer"
                      tempDir="/tmp/war-temp/"
                      deployDir="/tmp/war-deploy/"
                      watchDir="/tmp/war-listen/"
                      watchEnabled="false"/>
                     
            <ClusterListener className="org.apache.catalina.cluster.session.ClusterSessionListener"/>
        </Cluster>
      E.搞定
3、配置apache:
   1)修订conf/httpd.conf      
      #add by zhengxq
      LoadModule jk2_module modules/mod_jk2.so
   2)新增worders2.properties并放到conf下
      [shm]
info=Scoreboard. Requried for reconfiguration and status with multiprocess servers.
file=anon

# Defines a load balancer named lb. Use even if you only have one machine.
[lb:lb]
worker=ajp13:tomcat1
worker=ajp13:tomcat2

# Example socket channel, override port and host.
[channel.socket:localhost:9009]
port=9009
host=127.0.0.1

# define the worker
[ajp13:localhost:9009]
channel=channel.socket:localhost:9009
group=lb

# Example socket channel, override port and host.
[channel.socket:localhost:8009]
port=8009
host=127.0.0.1

# define the worker
[ajp13:localhost:8009]
channel=channel.socket:localhost:8009
group=lb

# Map the Tomcat examples webapp to the Web server uri space
[uri:/clusterapp/*]
group=lb
      3)搞定

3.测试程序,请参考上述参考文档,如下:
<%@ page contentType="text/html; charset=GBK" import="java.util.*"%>
<html><head><title>Cluster App Test</title></head>
<body>
Server Info: <%out.print(request.getLocalAddr() + " : " + request.getLocalPort());%>
<%
out.println("<br> ID " + session.getId());

// 如果有新的 Session 属性设置
String dataName = request.getParameter("dataName");
if (dataName != null && dataName.length() > 0) {
  String dataValue = request.getParameter("dataValue");
  session.setAttribute(dataName, dataValue);
}

out.print("<b>Session 列表</b>");

Enumeration e = session.getAttributeNames();
while (e.hasMoreElements()) {
  String name = (String)e.nextElement();
  String value = session.getAttribute(name).toString();
  out.println( name + " = " + value);
  }
%>
<form action="index.jsp" method="POST">
  名称:<input type=text size=20 name="dataName">
  <br>
  值:<input type=text size=20 name="dataValue">
  <br>
  <input type=submit>
  </form>
</body>
</html>



   所需要注意的是:
   1、测试应用的web.xml必须加上:<distributable/>
   2、我搞了很久,发现三个东西起来后,可以访问,但只能做到负载均衡,不能session复制,这点我重复配置了一次,就是不行,郁闷之下找了tomcat的邮件列表,这样做:
      1)测试广播是否正常
         A. download this jar
            http://cvs.apache.org/~fhanik/tomcat-replication.jar

         B. Open two terminals 
            a) Terminal one run
               java -cp tomcat-replication.jar MCaster 239.255.10.10 2525 Terminal1
            b) Terminal two run
               java -cp tomcat-replication.jar MCaster 239.255.10.10 2525 Terminal2
         发现结果如下:
         C:\>java -cp tomcat-replication.jar MCaster 224.1.2.3 2525 Terminal1
Usage MCaster [address port message]
BEGIN TO RECEIVE
SENT:Terminal11
SENT:Terminal12
SENT:Terminal13
SENT:Terminal14
SENT:Terminal15
SENT:Terminal16
SENT:Terminal17
SENT:Terminal18

         表明广播有问题,气死了,难怪Tomcat总是在启动的时候提示:
         信息: Manager [/clusterapp]: skipping state transfer. No members active in cluster group.

      后来终于发现猫腻,必须注意在server.xml的<Cluster ..<Membership里面加上mcastBindAddress="127.0.0.1"。
       
为什么呢?很简单,因为我安装了VPN,这家伙会设置一个虚拟网卡,导致绑定失败(没地方责怪了,只好让它垫背)?!这是通过邮件列表里面所描述的多网卡绑定问题举一反三得到的判断。具体请参考:http://www.servlets.com/archive/servlet/ReadMsg?msgId=475067&listName=tomcat-user

      


posted @ 2007-03-07 10:51 IT进行时 阅读(7262) | 评论 (5)编辑 收藏

xsl的新版本(1.1)已经在这个月发布,请看:
http://www.w3.org/TR/2006/PR-xsl11-20061006/


这样,XML在数据交换和表现层面的地位,势必进一步呈现。

xforms是基于XML发展起来的声称为“下一代的表单(form)”,有一定广告色彩,但现在正在受到越来越多厂商的支持(如IBM正在热推的forms产品,且多家浏览器厂商已经明确支持xforms)。

其架构如下:


关注中,也请大家关注了。





参考文章:
http://www.xml.com/pub/a/2005/02/09/xforms.html?page=2&x-showcontent=off&x-order=date
http://www.ws.org.tw/ws/xml_family_show.jsp?TOP_NUM=3&num=8
posted @ 2006-10-11 10:49 IT进行时 阅读(1420) | 评论 (1)编辑 收藏

对于MySQL,还是菜鸟。
近期做个东西,写了一个MySQL 的存储过程,其中涉及Cursor的使用,如下:

CREATE PROCEDURE `justifyGroupNum`()
    NOT DETERMINISTIC
    SQL SECURITY DEFINER
    COMMENT ''
BEGIN
/*how to run:call justifyGroupNum()*/
DECLARE p_group_id int;
declare p_num int;
declare stopFlag int;
DECLARE cursor_name CURSOR
  FOR select c_group_id,count(*) as num
      from `t_group_member`
      where c_valid in (3,4)
      group by c_group_id;
DECLARE CONTINUE HANDLER FOR NOT FOUND set stopFlag=1;

OPEN cursor_name;
REPEAT
FETCH cursor_name INTO p_group_id,p_num;
  begin
       update t_groupinfo set c_member_number=p_num where c_group_id=p_group_id;
  end;
UNTIL stopFlag = 1
END REPEAT;
CLOSE cursor_name;
END;

关注点有:
1、注意设置游标的countinue handler:DECLARE CONTINUE HANDLER FOR NOT FOUND set stopFlag=1;
2、注意REPEAT和UTILE [停止条件] END REPEAT的使用,否则不会循环;
3、怎样RUN?输入并执行:call justifyGroupNum()

posted @ 2006-10-10 11:49 IT进行时 阅读(5283) | 评论 (3)编辑 收藏

     摘要: 从形势来看,如果应用不使用 Spring 就感觉有点落伍——说法有点别扭:好像有点过。诚然, Spring 给我们带来了太多的好处,以至于几乎大部分的产品都以声称能够整合 Spring 为荣, Mule 也不能免俗:) 从官方来看, mule 与 spring ...  阅读全文
posted @ 2006-08-29 16:00 IT进行时 阅读(6132) | 评论 (0)编辑 收藏

     摘要: Mule是我比较关注的ESB产品之一。
从关系来看,其实ServiceMix才是我的初恋:)
这个文档是几个月前的一些简要的学习笔记,希望对大家有所帮助。(也算OpenDoc了一回,免得良心上老是被谴责:只进不出)

目前最新的版本是1.3-rc4。  阅读全文
posted @ 2006-08-01 15:06 IT进行时 阅读(2403) | 评论 (3)编辑 收藏

       Mule和ServiceMix都是codehaus.org下的非常优秀的开源项目。现在想来,codehaus.org的势力范围好像已经越来越大:ActiveMQ,XFire,Drools,PicoContainer...再加上Mule和ServiceMix,其代码的优秀、文档的齐备和例子的多样化,足以让Apache们汗颜——咳,跑题了:)

       应该说我最先认识的是ServiceMix,其网址为servicemix.org。等一下,现在登陆上去发现了apache的鸡蛋(apache孵化器标志),完了,被apache用阴招了?果不其然,都旧闻了(请参考http://www.artima.com/forums/flat.jsp?forum=136&thread=125992)。不管怎么运作,首先ServiceMix是一个Java Business Interface (JBI) standard - JSR 208的干净实现,是一个较纯的JBI(JSR208)容器。

       Mule是因为ServiceMix而认识的,因为搜索ServiceMix的时候,有人拿他们做比较。其主页是:mule.codehaus.org。后来逐步了解,才知道Mule的老大Ross Mason认为两者没有太多可比性的原因:Mule不是JBI实现,但可以集成任何JBI容器——这让我想起IBM的两个产品IBM ESB和IBM Message Broker(IBM自称的Advance ESB)。

       当然,在业界两者比较的文章狠多,大家可以参考几个典型点的:
       1)Mule老大Ross Mason和ServiceMix老大James Strachan的口水仗帖子,也非常有助于大家理解两者的价值及其差异:http://docs.codehaus.org/display/SM/How+does+ServiceMix+compare+to+Mule
       2)一个自认为不是专家的专家比较文章:http://www.ctio.noao.edu/~andrew/sm-mule/Mule-v-ServiceMix.html


       自己看吧,原滋原味的肯定比我嚼过的好:)
posted @ 2006-06-30 21:52 IT进行时 阅读(4357) | 评论 (1)编辑 收藏

SOA,ESB,JBI,应该说,这是这两年乃至未来几年最为热门的话题了。

很大,话题真的很大,但我喜欢把这几个概念说在一块:因为我觉得他们在很大时候说的都是一个事情——那就是整合,基于服务的应用整合。

下面是我就这个大话题的第一个开篇杂谈,请参考拙作:http://www.blogjava.net/itstarting/articles/56027.html
posted @ 2006-06-30 21:12 IT进行时 阅读(1713) | 评论 (0)编辑 收藏