haoweishow Blog

ESB/Java

格式化Java代码

背景


  • 产品中一个核心模块,会根据配置文件生成运行时的java代码(一个完整的java类)。
  • 自动生成的java类,没有对其进行格式化。
  • 排错时不方便阅读,代码量小还好,代码多的话,很难看清楚里面的逻辑,因此每次都是把代码拷贝到eclipse里面格式之后再看。

过程


  • 搜索到这个文章,How to use the eclipse code formatter from your code,自备梯子.
  • 作者是通过eclipse的formatter组件实现代码的格式化.
  • 按照文章的描述逐步实现,引入eclipse的10个jar包,可以实现代码的格式化.
  • 但是引入10个jar到项目中,过于复杂.
  • 该文章的评论中有人提到jastyle.

实现

  • 下载jastyle的源码,并导入到eclipse工程中,当然也可以直接下载jar包使用.下图是导入到ecipse里的源码,可以看到代码还是很精简独立的.
  • 该模块的Main.java是格式化java代码的入口类.
  • 从中抽取出格式化单个java文件函数,测试代码:
TestJavaFormat.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
package net.barenca.jastyle;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.Reader;

public class TestJavaFormat {
  public static void main(String[] args) throws IOException {
      String fileName = "C:/share/javaworkspace/jar/src/Test.java";
      Reader in = new BufferedReader(new FileReader(fileName));
      String tmpFileName = fileName + ".tmp";
      File file = new File(tmpFileName);
      file.delete();
      PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter(tmpFileName)));

      
      //开始对文件进行格式化
      ASFormatter formatter = new ASFormatter();
      formatter.setJavaStyle();
      ASStreamIterator streamIterator = new ASStreamIterator(in);
      formatter.init(streamIterator);
      while (formatter.hasMoreLines()) {
          out.println(formatter.nextLine().toString());
      }

      
      out.flush();
      out.close();
      in.close();

      
      new File(fileName).renameTo(new File(fileName + ".orig"));
      new File(tmpFileName).renameTo(new File(fileName));
  }
}

部署octopress

背景


  • 操作系统:MacOS 10.9.4
  • 已有域名:haoweishow.com

安装


安装octopress

1
2
3
4
5
cd /Users/haoweishow/Documents   
git clone git://github.com/imathis/octopress.git octopress
cd /Users/haoweishow/Documents/octopress  
bundle update
rake install

设置github信息

1
2
rake setup_github_pages
输入:git@github.com:haoweishow/haoweishow.github.io.git

设置域名信息

1
echo ‘haoweishow.com' >> source/CNAME

发布


创建文章

1
2
alias rake='noglob rake'  #使rake命令支持[和]符号
rake new_post['title']

提交文章

1
2
rake generate
rake deploy               #将文章部署到github服务器上

提交源码

1
2
3
git add .
git commit -m "xxxx"
git push origin source    #将本地代码提交至github

测试


  • 在本地服务器上预览页面
  • 启动本地服务
    rake preview
  • 访问本地页面
    http://localhost:4000

DB2启动失败(SQL5043N)

背景


操作系统: CentOS 6
数据库版本:db2_v101_linuxia32_expc
数据库实例名称:esbinst
实例用户名称:esbinst
数据库安装成功
数据库实例创建成功

问题


执行db2start命令,启动数据库报错如下:
SQL5043N Support for one or more communications protocols failed to start successfully. However, core database manager functionality started successfully.
执行netstat -na|grep 50000,返回空。

排查


在实例用户的目录中查看日志
home/esbinst/sqllib/db2dump/db2diag.0.log
存在如下的内容:
2014-07-07-11.45.59.454360-240 E365892G529 LEVEL: Error
PID : 25807 TID : 3025136496 PROC : db2sysc
INSTANCE: esbinst NODE : 000
HOSTNAME: localhost.localdomain
EDUID : 1 EDUNAME: db2sysc
FUNCTION: DB2 UDB, common communication, sqlcctcpconnmgr, probe:50
MESSAGE : ADM7006E The SVCENAME DBM configuration parameter was not configured. Update the SVCENAME configuration parameter using the service name defined in the TCP/IP services file.

解决


Step1:
db2 update dbm cfg using SVCENAME esbinst
Step2: 在文件/etc/services的末尾添加,或者修改为下面的格式: esbinst 50000/tcp

Rake Deploy Failed

过程


1.按照octopress.org网站上的说明,本地安装完成,并成功部署到github上;
2. 访问http://haoweishow.com可以看到部署的页面; 3. 但是在通过safari访问repo,在网页上增加了README.md的文件,提交成功;
4. 然后本地修改其它配置,通过reke deploy的时候出现下面的错误 To git@github.com:haoweishow/haoweishow.github.io.git
! [rejected] master -> master (non-fast-forward)
error: failed to push some refs to ‘git@github.com:haoweishow/ haoweishow.github.io.git’
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: ‘git pull …’) before pushing again.
hint: See the ‘Note about fast-forwards’ in ‘git push –help’ for details.

解决


在stackoverflow.com上找到解决方法;
需要修改项目中Rakefile文件的内容:
原始内容:system “git push origin #{deploy_branch}”
改后内容:system “git push origin +#{deploy_branch}” 多个+号;
再次执行rake deploy,至此,我的问题解决,项目可以deploy到github,回头再将+号去掉;