Posts tagged: java

配置嵌入式的Activemq服务

activemq提供了嵌入式的服务,即在一个JVM内部使用jms服务。我们用它来做异步发送消息。 JMS自身没有提供异步发送消息的机制,只能同步发送消息。这带来一个问题,比如外部(远端)的JMS服务器因为各种原因无法工作,那么发送消息的应用可能也连带的无法工作,这时消息会丢失。 可以使用activemq的嵌入式的服务,先同步发送消息到本地(嵌入式activemq服务),然后再用一个接收线程接收本地消息,发送到远端的JMS服务,这样即使远端JMS服务失效,消息也不会丢失,当远端服务器恢复后还能继续收到消息。    发送文章为PDF   

星期三 八月 25th, 2010 in , , , | No Comments »

使用BlockingQueue实现简明的JMS连接异常恢复

JMS连接有可能出现异常,对于同步处理(MessageProducer发送或者MessageConsumer调用receive方法)来说,因为是主动调用的,因此可以通过简单的定时重发来重新创建连接。如果是异步接收,即通过实现MessageListener,就比较麻烦,因为是别人回调你的代码。 这里当然需要使用ExceptionListener,来监听jms连接异常。并在异常发生后做一些事情,比如试图恢复连接,如果不能恢复,间隔一段时间再试图连接。 以前做法,是ExceptionListener监听到异常后,在onException方法中设置一个标志对象,另外有一个线程来定时监听这个标志对象,发现异常后做连接的恢复,并重建和注册MessageListener和ExceptionListener到连接。方法比较混乱和复杂。    发送文章为PDF   

星期三 八月 25th, 2010 in , , , | 1 Comment »

通过java concurrent实现定时任务

定时任务有两种: 固定延时的定时任务,即一个任务结束等待固定时间后再执行下一个; 固定频率的定时任务,即任务在固定时常后开始执行。 举个例子,好比列车调度,比如上海到北京的列车,从上海到达北京后,休息10小时再返回,这就相当于固定延时的定时任务;如果从上海出发是下午3点,到达北京后,比如是上午5点,下午3点再返回上海,这就是固定频率的任务。 这里要注意,固定频率定时任务并不会并发,还是用列车调度举例,如果列车晚点,下午4点到北京,固定频率定时任务并不是在下午3点再调度一列新车发往上海,而是延误的列车到京后立即出发返回。而固定延时是即使延误也要休息10小时后再出发。 如果没有java concurrent api,那么就要使用java.util.Timer相关的API,比较繁琐。前者更简明。 日志引用使用BlockingQueue实现简明的JMS连接异常恢复    发送文章为PDF   

星期三 八月 25th, 2010 in , , | No Comments »

多个jmeter命令行实例需要注意的

如果用jmeter通过命令行(无图形界面)执行测试脚本,可参见jmeter最简单使用,并且启动多个jmeter实例,肯定会报地址端口已占用: Waiting for possible shutdown message on port 4445 java.net.BindException: Address already in use         at java.net.PlainDatagramSocketImpl.bind0(Native Method)   这个配置在jmeter的bin目录下,找到jmeter.properties这部分: # If running non-GUI, then JMeter listens on the following port for a shutdown message. # To disable, set the port to 0. #jmeterengine.nongui.port=4445   是用于监听shutdown message的,如果不需要,可以直接设置为0即可。    发送文章为PDF   

星期四 八月 19th, 2010 in , , , | No Comments »

对Java数据流的操作

类似这样的代码: InputStream inputStream = null; try {     inputStream  =file.getInputStream();     byte[] bs = new byte[inputStream.available()];     inputStream.read(bs);     File files = new File("a.log");     OutputStream outputStream = new FileOutputStream(files);     outputStream.write(bs);     outputStream.close(); 肯定是能工作的。但是,把输入流全部读入内存再写入文件流的做法,是不好的。如果是单机程序或者是随手写的小应用问题不大。在服务器端,用于对上传文件的处理,则会造成内存的较大抖动。对内存的时候完全依赖用户上传文件的大小。    发送文章为PDF   

星期二 八月 17th, 2010 in , , | No Comments »

jmeter最简单使用

jmeter是apache jakarta项目下的测试工具,见: http://jakarta.apache.org/jmeter/ 可以用来做功能测试,负载测试和压力测试。是服务器端开发必备的测试工具。以前写过比较完整的文档,没有放在博客上,早就遗失了。最近做测试,要写多个日志记录基本的使用。 下载jmeter: http://jakarta.apache.org/site/downloads/downloads_jmeter.cgi 安装很简单,解压缩即可。jmeter是java编写的,因此要在运行jmeter之前确保已经安装jre。 运行jmeter,可以有图形方式和命令行方式。先说图形方式。在windows下: 双击jmeterw.cmd即可。 日志引用多个jmeter命令行实例需要注意的使用jmeter做http post文件上传    发送文章为PDF   

星期二 八月 17th, 2010 in , , , , | No Comments »

使用java concurrent处理并发需求

java5开始,增加了concurrent api,用于并发处理。比如起多个线程并发从网络上下载图片,然后在本地显示。 这里写个简单的代码,来说明如何使用concurrent api提供的线程连接池。 运行结果类似这样: start do 1 task … >>main thread end. start do 2 task … start do 1 finished. start do 3 task … start do 2 finished. start do 3 finished. 这里的task1到task3,都做的同样的事情,让它所属的线程休眠2000ms: private static void doSomething(int id) {     System.out.println("start do " + id + " task …");     try { [...]

星期一 八月 16th, 2010 in , , | No Comments »

java处理简单的文件格式转换

一个需求是将其他格式文件转换为png格式,这样才能被iphone使用,据说iphone能在程序中加载的只有png格式。 代码很简单,无需使用imagemagick这样的重量级工具。 File file = new File("c:\\b.png"); BufferedImage image=ImageIO.read(file); File pngFile=new File("c:\\b1.png"); ImageIO.write(image, "PNG", pngFile);    发送文章为PDF   

星期一 三月 22nd, 2010 in , , | No Comments »

JavaME SDK 3.0不支持Windows7 x64

前两天成功的在win7 32位系统下安装了eclipse+mtj+javame sdk3.0的。虽然在javame sdk的官方网站只列出支持windows xp和vista 32位系统。 因此这回没多想,直接在windows7 x64下面安装了javame sdk3,没有任何报错。 然后安装了eclipse 64位系统和mtj,结果配置javame的时候,就是找不到javame设备。 到网上查了一下,可以下结论了,确实不支持。    发送文章为PDF   

星期四 三月 11th, 2010 in , , | No Comments »

gwt的客户端日志

gwt将java代码(客户端部分)编译为javascript代码。如果需要做调试,首先需要通过开发模式(development mode)启动应用,然后,需要在代码中: GWT.log(“hello,中文。”,null); 然后,就可以在不重启应用的情况下,看到:    发送文章为PDF   

星期二 十二月 29th, 2009 in , , | No Comments »