lbom

小江西

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  18 随笔 :: 21 文章 :: 69 评论 :: 0 Trackbacks

2009年5月5日 #

昨日年终总结会,公司总裁给出IT产业未来发展的几个新趋势,值得我们这些从事软件工作的人员沉思,现对他的发言摘录如下:
1)管理虚拟化:有形的组织型管理和虚拟的IT流程管理相结合管理模式;
2)制造虚拟化:由生产线工人和由程序控制的机器人相结合的生产模式;
3)渠道虚拟化:由实体销售店和虚拟的网上销售相结合的渠道管理模式;
4)服务虚拟化:实体保养维修和远程诊断,软件更新相结合的服务模式;
5)组织虚拟化:垂直的组织机构和横向的项目型组织机构相结合的企业组织模式。
posted @ 2014-01-24 22:28 lbom 阅读(276) | 评论 (0)编辑 收藏

今天,花费1个小时,研究了一下在Windows下,使用Telent登录至UNIX的脚本,现将其贴下,以供下次使用(tt.bat)

 

 

@echo off
echo set sh=WScript.CreateObject("WScript.Shell") >telnet_tmp.vbs

echo WScript.Sleep 3000 >>telnet_tmp.vbs
rem ----------------UNIX IPAddress
echo sh.SendKeys "open 10.0.18.100{ENTER}" >>telnet_tmp.vbs

echo WScript.Sleep 3000 >>telnet_tmp.vbs
rem ----------------userID
echo sh.SendKeys "root{ENTER}" >>telnet_tmp.vbs

echo WScript.Sleep 3000 >>telnet_tmp.vbs
rem ----------------password
echo sh.SendKeys "root{ENTER}" >>telnet_tmp.vbs

echo WScript.Sleep 3000 >>telnet_tmp.vbs

echo sh.SendKeys "ls {ENTER}">>telnet_tmp.vbs

start telnet

cscript //nologo telnet_tmp.vbs

rem del telnet_tmp.vbs

 

posted @ 2011-10-10 16:02 lbom 阅读(3985) | 评论 (1)编辑 收藏

1)启动LiveWriter客户端

2)添加Blog帐户:

image image

3)设置日志类型:

image

4)连接测试

posted @ 2010-09-25 18:02 lbom 阅读(300) | 评论 (0)编辑 收藏

很久没有动手写WebService了,这次,借项目间隙,对系统进行一个小改造,将一部分功能使用WS进行封装,为下一步异构系统集成打下基础。

但在WS化时,由于日久生疏,一个小小的WS化变动,却花了整整好几天时间!为此,狠下以来,将其过程进行记录,以便下次参考。

 

WS整体流程:

clip_image001

以下分别介绍:

1、设计和实现WebService服务端功能组件,用于统一处理针对本应用系统所需进行WebService化的逻辑实现。并将系统逻辑处理中的对象转成序列化后的String对象,以符合WebService交互标准。

clip_image002

2、根据SBPApi.java,生成WSDL等:通过Eclipse右键菜单中的WebService-->Create Web Service项。完成后,会在web目录下建立wsdl目录和SBPApi.wsdl,在WEB-INF目录下建立(改写)server-config.wsdd等文件,并完成对web.xml的修改。其操作流程示如下:

clip_image003

3、根据SBPApi.wsdl,生成WebService客户端开发包和部署文件:

1)为不影响已有项目,可另建java Web项目;

2)将wsdl目录复制至新项目对应的web目录下;

3)通过eclipse已提供的webService插件(右键)功能,生成客户端开发包所各文件。此时,所生成的文件与服务端对象文件结构一至。

clip_image004

4)调整关联引用文件,将其调整至客户端开发包,从而避免与服务器端的引用路径重复而引发不便,并将服务器SDK中已有文件删除。

clip_image005

5)建立客户端的快速使用代理SBPClient.java,对WebService服务端交互工作的SBPApiSoapBindingStub.java进行客户端封装,并根据服务端中交互对象进行反向工程,其示例结构如下:

clip_image006

6)将clientApi下的所有文件打包后,加入测试项目进行测试。此时,因客户端所使用的服务端对象未包含在WebService客户端开发包中,因此需要将服务端对象也一同打包。

7)测试。

4、开发环境:Eclipse3.3.1.1 + JDK1.5.06 + Apache Axis version: 1.4

posted @ 2010-04-02 15:45 lbom 阅读(2151) | 评论 (4)编辑 收藏

在一次基于多线程的编码测试中,发现继承Runnable接口的线程实现类在运行时并未按预计启动多线程,经分析和比较后,找出问题所现,现将其记录下来,以供分享。

Java中,多线程编程中的线程编写,有两种方式,即扩展Thread基类或继承Runnable接口;例如:

public class T extends Thread {

public void run() {

……

}

}

public class R implements Runnable {

public void run() {

……

}

}

对于扩展Thread的实现类T,可以使用T.start()来启动此线程;如

public static void main(String[] args) {

Thread t = new T();

t.start();

}

但对于继承Runnable接口的实现类R,因接口中并没有提供直接启动线程的start()方法,只有一个线程主逻辑运行的run()方法。此时,如执行run(),会因为R.run()只是作为此线程实现类的一个方法,并未在主线程之外,启动另一个线程,从而导致R.run()阻断主线程继续向下执行;并未达到多线程运行的目的。

错误启动代码如下:

public static void main(String[] args) {

R r = new R();

r.run();

}

那么,如何使用另外线程来启动继承Runnable接口的实现类呢?以下就是它的正确的使用方式:

public static void main(String[] args) {

R r = new R();

Thread t = new Thread(r);

t.start();

}

此时,需注意,在主线程执行时,需等待子线程执行,否则,当主线程结束后,子线程也将结束。

posted @ 2010-03-10 16:48 lbom 阅读(1569) | 评论 (2)编辑 收藏

需求:

系统A与系统B分别部署在不同域的两台服务器中,但它们的身份都统一在身份认证服务器中;身份认证信息以Session方式存贮于各自系统中,并辅以cookie进行使用。

当用户在A系统登录后,访问B系统时,由于是跨域访问,导致身份信息不能正确的传递到B系统中,从而致使用户需在B系统中重新登录。

clip_image001[6]

解决方案:

处理这类跨域访问时,我们最先使用从B系统向C通过HttpRequest(类AJAX请求)的方式获取身份信息,此方式好处是同步处理,方便用使用;但其限制诸多,如需设置信任站点、用户访问确认等,甚至,在对应用服务器作了一次安全升级后,根本无法访问了。因此,需另行开辟途径,于是,在同事建议下,我们使用IFrame内嵌跨域验证网页,来解决此问题。

1、原理设计:用户在访问B系统时,先使用一内置的iframe,并将iframe的src指向身份认证服务器系统代理验证接口;如果用户已经在A系统中进行过登录,即A域了中已存在着身份认证信息后,身份认证服务器中也将具有其身份信息将其附带着身份认证信息后重定向访问B系统代理接口;B系统代理验证接口在接收到由A系统传递而来的身份认证信息后,通过身份认证服务器验证后,在B系统所在域重建身份认证信息。

2、实现逻辑贴码:

1)B系统代理验证接口:

(1)IFrame逻辑贴码:

clip_image002[6]

(2)JS检测是否通过认证逻辑贴码:

clip_image003[6]

2)身份认证服务器端接口(JSP):

clip_image004[6]

3、注意事项:

1)由于身份认证中心使用cookie作为身份标识,因此,需要用户在浏览器中允许使用cookie的设置;

2)由于在iframe中进行跨域重定向,因此需在IE安全中的跨域浏览子框架项设为启用:

clip_image005[6]

4、源码文件:

……

posted @ 2010-02-08 17:55 lbom 阅读(3461) | 评论 (3)编辑 收藏

在windows下进行j2ee项目开发和部署时,常需要对系统存在问题进行更深入的分析。由此,实时的javacore就是分析的最佳方式之一。但如何以最方便直接的方式产生javacore文件,就是这项工作必需做的准备工作了。

1、通过dos窗口,进入至jdk安装目录下的bin目录中;

2、运行jconsole.exe,并设置信息输出的目标文件,以便于分析,否则将直接输出至屏幕上;

image

3、连接正在运行的目标jvm;

image

4、连接后的jconsole如下:

image

5、通过通过Ctrl+Break组合键,产生javacore至指定文件中。

6、下一步就是对所产生的javacore文件进行具体的分析和使用了。

posted @ 2009-12-10 15:00 lbom 阅读(2334) | 评论 (2)编辑 收藏

某日,公司进行年度一次的体检!

在连续查出10个脂肪肝后,医生对第11个进来检查的人说:“等会,我们的B超机好像出问题了,等检修后再进行”

这是一个真实的事件,我们这些IT行业的从业人员,多坐少动,压力大,时间长,导致体质差的边医生都怀疑机器了!

唉!

posted @ 2009-10-29 15:32 lbom 阅读(322) | 评论 (0)编辑 收藏

一、项目建立及应用实现

1、建立J2ME项目

clip_image001

2、在完成开发后,进入Application Descriptor编辑界面

clip_image002

3、因默认情况下,Application Descriptor文件中未定义MIDlet启动对象,因此需使用EditPlus或记事本等文本编辑器,编辑Application Descriptor文件(位于项目根目录下),并添加以下项目,如:

clip_image003

4、运行Application Descriptor编辑界面中的Lanuch as enumlated Java ME JAD,进行测试

clip_image004

5、在步骤4之后,会在项目根目录下的.mtj.tmp中生成LaunchFromJAD子目录,其中的worm.jad和worm.jar即是手机程序的安装文件

clip_image005

6、将worm.jad和worm.jar复制至手机中,运行worm.jad进行安装后,即可使用

二、问题分析:

1、如报【文件不完整】错误,则检查worm.jad中的项目是否完整。在Eclipse中使用Lanuch as enumlated Java ME JAD测试通过,并自动生成的此文件,一般都是完整的,不需作任何修改。

2、如报【版本错误】,则检查您在Eclipse中使用的的模拟器版本是否是您手机所支持的,出现此错误后,将模拟器版本调低试试。其位置如下

clip_image006

三、开发环境:

1、java JDK1.6.0_10;

2、EclipseV3.3.1.1;

3、sun公司J2ME-WTK开发包:sun_java_wireless_toolkit-2_5_2-ml-windows.exe

4、Eclipse移动应用开发包:eclipseme.feature_1.7.9_site.zip

posted @ 2009-10-15 17:50 lbom 阅读(1447) | 评论 (0)编辑 收藏

 

 

消息中心产品简介

产品简介

XXX产品框架中,我们根据产品发展规划和业务领域需要,使用基于JMS技术,通过应用WEBService,开发了消息中心中间件(简称MC)。通过消息中间件,我们可以实现各系统间的异步数据交换和事务处理、执行不需前台使用人员干预的如后台业务和数据同步工作,也可用来处理一些受到安全和其它一些因素制约,导致无法直接通过数据库或应用系统进行处理的受限业务。

消息中心中间件,包括消息总线和消息客户端两部分:消息客户端负责业务类消息实例的产生、发送消息实例到消息总线、接收从消息总线转发而来的消息实例、将收到的消息实例交由其载体应用系统进行与之对应的业务处理等活动;消息总线负责接收从消息客户端产生并发送而来的消息实例、消息重建、根据消息配置进行消息实例重建,将重建后的消息实例转发至对应的消息客户端等活动。

消息客户端与XXX各应用系统集成在一起,并通过应用系统开放WEBService端口进行消息的发送和接收等,从而避免单独部署和发布所带来的困难和额外资源消耗。消息总线可单独部署,也可和消息客户端一样,与XXX应用系统集成部署,在XXX产品框架下,有且只需要一套消息总线即可满足需要。消息配置中心,其作用包括配置和管理消息中心各组成部分的部署方式和访问信息,以此将消息中心各部有机的联系起来;同时,各消息业务应用,也使用配置文件进行配置化管理,并与消息中心各组成部分进行关联配置,从而形成一个统一且开放的整体;其它的如性能优化处理、日志记录等也在配置中心进行配置和管理。

应用现状

在消息中间件V1.0版本开发完成后,我们即将其投入实用。在XXX各分子系统这近一年时间的运行和使用过程中,消息中心很好的完成了预定任务,其可靠性、可扩展性和适用性得到很好的验证。以此为据,通过使用消息中心,开发出基于消息中心的客户化应用和业务活动也在持续的增加中,到现在为止,已经有包括网络检测、信息同步、配置更新、电子目录树更新、权限同步等诸多应用是基于消息中心应用开发,并很好的使用在XXX各分子系统的测试和内网正式环境中。

问题出现、描述、分析与处理记录

问题出现

在XXX系统正式接入外网后,通过对业务进行跟踪,发现外网用户(系统)所产生的消息实例无法正常的到达指定的消息总线及消息客户端。最主要的体现是权限同步消息应用无法正常完成的问题,导致外网用户权限未得到及时更新。对此过程中消息中心所涉及部分进行分析发现:所有的权限同步消息实例在产生后,不能正常的将此消息实例发送至消息总线,分析失败原因,只有一种,那就是”connect time out”。从此信息可看出,应该是外网系统所发出的消息无法通过WEBService送达指定的消息总线接收端所至。但从内网发出的同一类消息,其发送和接收却又都是正常的。

分析过程记录

1、先分析我们系统的整体部署方式,如下图所示:

根据外网用户可正常登录和访问系统,并可通过系统准确及时的发出执行指令操作,完成其所需的业务活动来看,网络方面和系统和硬件方面都不存在问题。

2、在外网环境下,直接进行各消息客户端和消息总线的服务的检测,所发请求都能够正确的到达指定目标,WEBService的响应也正常且正确,也就是说,各应用系统加载的消息服务运行也正常。

3、根据本次检测需要,另行开发消息中心专用检测工具,为本次和今后的行的消息中心检测和问题分析,作好更充分的准备。

4、通过检测工具,发现,外网环境下,消息客户端和消息总线之间不能够联通,从而找到问题所出:即不知是何原因,导致外网消息与外网的消息总线间联络不通!

5、对外网用户消息产生和发送的过程和逻辑实现进行分析:我们发现,为了满足应用系统外网访问的需要,我们对消息系统配置信息中服务地址的ServerName进行了伪处理,即在运行时,根据用户浏览器的请求头来判断用户使用的是哪一个WEB服务器地址,并将此地址动态的代替消息配置中的各ServerName信息,从而保证各使用用户只能够访问其指定的WEB服务器,从而避免因WEB服务器的不匹配而影响其访问速度、处理效率等故障的发生。此方式已在我部门多套同时服务于内外网络的系统中得到可靠的验证。

那么,会不会因为ServerName在动态解释过程中,因多并发情况下,因后访问者将前访问者的ServerName改写而导致错误的解释,即将不同网络用户的消息地址进行张冠李戴而导致消息无法正常发送呢?

分析消息中心各部分WEBService生成和使用机制:因系统的并发性要求较高,在高峰期其在线用户可达3000人,并发用户在300以上,且系统稳定性要求极高。为提高系统的性能和稳定性,在系统启动时即将消息中心各部的WEBService连接进行创建和缓存,以提升消息中心资源利用率,并提升其访问性能。

当存在多网络用户访问时,可能因消息中心存贮的WEBService连接并不是其用户所使用的那个网络的WEBService服务地址,此时,消息肯定是无法送达至此用户所需要的目标的。因此,报”connect time out”错误就成必然的了。

既然已找到问题的可能原因,我们立即进行着手分析和解决:根据部署要求,我们对对消息服务连接服务进行了升级,即将服务请求进行分类处理和实现,并在消息配置中对所使用的部署方式、代理实现后,交由测试人员进行部署和测试。

测试结果:令人失望的是,此问题依然存在!在通过外网WEB服务器访问的系统,其消息还是无法发送至消息总线。由此得知,此种分析方向是错误的!

至此,好像已经走入了死区,能想到的方式都已经想到了,但问题到底出在哪呢?

问题解决

在一次与同事聊天的过程中,忽然想到一个问题,那就是:我们的消息的产生和应用都是由应用系统和与之集成在一起的消息客户端自动产生和处理的,此过程中完全不受人工干预和影响。而应用系统是部署在应用服务器中,WEB服务器仅是用来处理用户的HTTP请求à将此请求转发至对应的应用服务器后à将应用服务器的响应返回给用户。

在此过程中WEB服务器并未对用户业的http请求进行过任何业务上的处理!那么,问题会不会出在WEB服务器端呢?检查一下消息中心的配置不管是使用ServerName还是写死IP和域名,我们的消息中心配置的地址都是指向WEB服务器。而在应用系统发现消息时,其所在位置是应用服务器。而应用服务器是无法直接访问部署于外网IP中的WEB服务器的,当然,消息无法发送至目标就成为必然了。

既然已经找到问题,那就动手,将消息中心的配置信息指向应用服务器后,重启应用系统后测试,问题果然解决!

通过应用服务器进行后台自动处理的,进行HTTPWEBService活动,其目标必需是它能够访问的有效地址!这个问题在以前也曾经碰到过,只是由于时间隔得太久,且这些场景应用出现太少,而导致再次发生。

补充与心得

1、    基于应用系统或后台自动触发的一些业务逻辑,如其中存在着系统间相互访问或远程调用等,必需以应用系统自身为根,进行连接测试;通过外层包装或其它代理,进行访问时,必需先剥离过外层包装或其它代理后,再进行连接测试,并以测试结果,作为决策的依据!此举适用于各类系统的架构设计和逻辑实现过程中。

2、    基于中间件产品应用,及时开发与之配套的检测和使用工具,是一件必不可少的工作,此举将为后期的实施和问题分析节省大量的工作量。

posted @ 2009-10-07 17:06 lbom 阅读(1465) | 评论 (0)编辑 收藏

    几天前,偶尔和邻居聊天,她说要去买顶蚊帐过夏,不由的也动了心。是啊,在小时候,那家不是用蚊帐来保证漫长夏的良好睡眠呢!现在随着科技发达,家家户户,特别是城市住户都已经将蚊帐扔掉而改用蚊香或蚊片了。
    于是等夫人下班回家,和其商量,却是死活不同意,理由如下:1)影响卧室美观;2)挤占空间;3)拆洗不便。。。。。。
    没办法,为了达到目的,我只得绞尽脑汁,想出各种理由,以期望能够说服夫人:
    1)身体牌:我对蚊香有过敏,因此,在夏天,我们是不能点蚊香的;再说,各种灭蚊产品其主要成份都有毒性,不管其含量多少,都对身体无益。
    2)经济牌:在重庆,一年有6个月的夏天,以每晚一片灭蚊片计算,一年下来,加上电热灭蚊器最少需要投入120元以上才能保证夏季无忧,三四年下来,就可以买个较好的蚊帐了;再说,灭蚊片用久后,还得防止蚊子产生的抗药性;但使用蚊帐却不需要用电,一年下来,其电费也能节约不少,还可防止可能因电热灭蚊器散热不良而导致的用电风险的发生;
    3)环保牌:在卧室支个蚊帐,即温馨又浪漫,还无灭蚊产品的各类化学合成的气味,最环保不过了;
    4)卫生牌:在床上支个蚊帐,将有效的减少灰尘降落,也免了蜘蛛等小虫在晚间不意间打扰我们的安眠,多好的一件事!
    。。。。。。
    啰啰嗦嗦,直说的口干舌燥,并许下一堆好处之后,终于换来老婆的点头。于是二话不说,拉上夫人,直奔商场,在东挑西比之后,买下一款合意的落地式蚊帐。
    至此,我的环保蚊帐计划就此实现!
 
    所以,回归和怀旧,并不都是倒退!
posted @ 2009-05-26 09:43 lbom 阅读(288) | 评论 (0)编辑 收藏

        在一周前,项目组碰到一个大问题:NTKO Office Activex控件在上传文件及提交页面信息时,其提交的页面元素输入中文值变成了无法识别的、也不属于已知编码中的任何一种编码格式的乱码;但在NTKO Office Activex控件包装项目组提供的的测试项目中,此问题并未出现,因此判断是项目兼容性所导致。
       在项目组功能开发员和控件包装组成员进行近一周的努力后,也未解决此问题。最后,此问题交由我来做最后分析和处理。
       经过三天时间对问题项目的分拆、组装、分析、测试后,终于找到问题所出,现将此过程进行记录,以备参考:
        1)以控件包装组测试项目为基准,建立项目级测试项目,并保证在此测试项目中不存在兼容性问题;
        2)检测web.xml:将问题项目的web.xml代替测试项目中的web.xml,未出现兼容性问题,从而排除因web.xml的差异而导致的兼容性;
        3)测试问题项目中的项目依赖:将问题项目的项目依赖关系复制至测试项目中,发现兼容性问题未出现,从而排除项目依赖导致的兼容性;
        4)检测支持包:将问题项目中的支持包(各jar)代替测试项目中的支持包,未出现兼容性问题,从而排除因支持包的差异导致的兼容性,也就排除了各servers,servlet,listener等导致的兼容性问题;
        5)检测js支撑:将问题项目中的所有相关js文件取出,代替测试项目中的相关js文件,未出现兼容性问题,从而排除因js支持文件的差异导致的兼容性;
        6)检测css支撑:将问题项目中的所有相关css文件取出,代替测试项目中的相关js文件,未出现兼容性问题,从而排除因css支持文件的差异导致的兼容性;
        7)检测tld,xml文件:将问题项目中的tld,xml文件取出,代替测试项目中的tld,xml文件,未出现兼容性问题,从而排除因tld,xml的差异导致的兼容性;
        8)至此,正常解决的兼容性措施都已用完,还是未找到问题所出!如何办?
        9)开始使用非正常手段进行排查:
            <1>对比检查.project和.classes未发现异常,从而排除基本项目配置导致的兼容性;
            <2>将问题项目的web项目设置文件(.settings)代替测试项目的web项目设置文件(.settings),问题出现了!继续排队分析,发现问题出现在文件org.eclipse.wst.common.component中,
问题项目的设置为:
                                    <?xml version="1.0" encoding="UTF-8"?>
                                    <project-modules id="moduleCoreId" project-version="1.5.0">
                                       <wb-module deploy-name="XXX_IC">
                                       <wb-resource deploy-path="/" source-path="/web"/>
                                       <wb-resource deploy-path="/WEB-INF/classes" source-path="/src"/>
                                       <wb-resource deploy-path="/WEB-INF/classes" source-path="/test"/>
                                       <property name="java-output-path" value="build/classes"/>
                                       <property name="context-root" value="XXX_IC"/>
                                   </wb-module>
                                   </project-modules>
测试项目设置为:
                                    <?xml version="1.0" encoding="UTF-8"?>
                                    <project-modules id="moduleCoreId" project-version="1.5.0">
                                       <wb-module deploy-name="test">
                                       <wb-resource deploy-path="/" source-path="/web"/>
                                       <wb-resource deploy-path="/WEB-INF/classes" source-path="/src"/>
                                       <wb-resource deploy-path="/WEB-INF/classes" source-path="/test"/>
                                       <property name="java-output-path" value="build/classes"/>
                                       <property name="context-root" value="test"/>
                                   </wb-module>
                                   </project-modules>
且无论如何修改"XXX_IC",都会导致兼容性出现,最后没办法,将下划线"_"去掉,奇迹出现了。
        原来NTKO Office Activex控件在提交数据时,是通过scoket模拟Http进行文件和页面元素的提供,如提交的页URL完整路径中包含了"_"等字符时,将导致无法识别,从而导致兼容性的产生。
posted @ 2009-05-15 22:13 lbom 阅读(1500) | 评论 (2)编辑 收藏

 

从小到大,椰子已经吃过很多次了,但在这些吃椰子有经历中,我只知道一种吃法:开孔à插吸管à喝椰汁à丢椰壳à完事!

       但在今天,事情有了些变化,于是产生的椰子的第二种吃法。

我和夫人在散步时,顺便准备到超市买点水果,看到水果区的椰子又大又好且正在打特价。心中一动,就挑了个大的,买回家准备细细品尝一番。在按通常吃法吸光椰子中的水汁后,突然想起,我们平时很喜欢吃超市中的一种叫椰角小吃的,又甜又韧很有嚼劲,但椰角是长大哪的呢?不会是椰子树上的另一种产品吧!看着椰子开口的硬壳下面的白色软组织,我们就突发奇想,这白色软组织会不会就是那椰角呢?

说动就动,先用刀将空椰子壳砍开,发现其内层确实是一层约0.8cm厚的白色果肉。小心的切下一小块尝一尝,味道淡淡的,很有韧劲,确实就是那椰角的源料。这就是我发现的椰子的第二种吃法了。

在生活中有很多事:你没经历,就不会想到;当你想不到时,美好的事情就可能错过!
    这就是生活。

                                                                                    2009/5/5

posted @ 2009-05-05 22:31 lbom 阅读(2345) | 评论 (2)编辑 收藏