跳到主要內容

發表文章

使用Apache Http Server進行Proxy和LoadB alance

環境概述 OS:Linux Apache Http Server:2.2.21 安裝可以使用rpm或是抓source下來compile,建議前者 rpm –ivh apache-http-xxx.rpm 這裡請注意一下安裝的版本 http.conf 參數設定 Proxy < VirtualHost *:80>      ProxyPass targetPath fromPath | fromUrl < VirtualHost/>  範例如下 < VirtualHost *:80>      ProxyPass /app http://DomainName或IP:8888/app      ProxyPassReverse /app http://DomainName或IP:8888/app < VirtualHost/> 上述的參數設定為,將某主機的http通訊協定下的Web application(app),對應到本台Web Server的app下。這樣的Proxy架構的設定對企業內的Web應用程式相當有用處,若是遇到Web Application Server掛點只需要修改Proxy對應,不需要動到dns等等,是個滿便宜的Proxy架構設定喔。﹝不過要注意Web Application要注意redirectc和forward等的撰寫,盡量不要有絕對IP的出現﹞

MQ PCF API簡介

可以透過該API管理QMGR MQAgent.java--- package cgw.mq.admin; import cgw.mq.bean.MQManageBean; import com.ibm.mq.MQEnvironment; import com.ibm.mq.MQException; import com.ibm.mq.pcf.PCFMessageAgent; public class MQAgent { private PCFMessageAgent agent; public MQAgent(MQManageBean bean ,int ccsid){ //MQEnvironment.CCSID = ccsid; try { PCFMessageAgent agent = new PCFMessageAgent(bean.getMqm_ip(),bean.getMqm_port(),bean.getAdmin_channel()); } catch (MQException e) { e.printStackTrace(); } agent.setCharacterSet(ccsid); } public PCFMessageAgent getAgent() { return agent; } public void close() throws MQException{ agent.disconnect(); } } MQManageBean.java--- package cgw.mq.bean; public class MQManageBean { private String mqm_ip; private int mqm_port; private String admin_channel; public String getAdmin_channel() { return admin_channel; } public void setAdmin_channel(String admin_channel) { this.admin_channel = admin_channel; } public String getMqm_ip() {...

利用Asprise OCR辨識PDF中的條碼

http://asprise.com/product/ocr/index.php?lang=java 這個API還滿不錯用的,它可以直接辨識PDF中的條碼,不過Free的版本跟文件似乎有些不一樣,底下是辨識PDF文件的條碼步驟: 1.下載Asprise OCR v4.0 for Java,http://asprise.com/product/ocr/download.php?lang=java,以及AspriseJavaPDF-free.jar,http://asprise.com/product/javapdf/util.php 2.有Developer Guide手冊可以參考一下,把AspriseOCR.dll、DevIL.dll及ILU.dll放在LIBRARY(如Window/system32或是project的lib) 3.程式碼如下 OCR ocr = new OCR(); PDFReader pdfreader = new PDFReader(new File("d:\\lunch.pdf")); pdfreader.open(); int pageCount = pdfreader.getNumberOfPages(); // PDFToImage pdfToImage = new PDFToImage("D:\\lunch.pdf"); pdfreader.close(); PDFToImage pdfToImage = new PDFToImage("D:\\lunch.pdf"); for(int j=1;j BufferedImage img = pdfToImage.getImage(j); String text=ocr.recognizeBarcode(img); //Vector v = ocr.recognizeBarcodes(img); System.out.println(text); } 一頁是多個條碼時,可以用Vector就可以了,滿方便的不過不用錢的每...

XEN on CentOS

最近因為我申請的開發機器下來了,就玩玩之前沒測完的XEN,先說一下我機器的配備應該算是很高檔. CPU---QC * 2 ---共8核 RAM---12GB 硬碟----3顆1T 有三台(呵呵很酷喔而且還只拿來開發) 回到正題,上次XEN少了Window,這次給他補足了順便紀錄一下遇到的一些問題 1.要在XEN安裝Window系列,Intel CPU要具備VT,AMD要具備AMD-V如何確認呢 cat /proc/cpuinfo | grep flags 看看有沒有VMX的項目,有就可以安裝. p.s這裡還要注意一點若是CPU有註明有VT或是AMD-V可是下該指令沒有的話就請確認核心有沒有開啟(SuSe 11.1就沒有) 2.強烈建議使用CentOS5.2進行,OpenSuSe我分別裝了10.1 - 10.3及11統統不行在XEN裡裝Window,CentOS5.2很順。 3.網路設定問題 a.希望外部可以直接連到虛擬機器(domainU),安裝CentOS時先不要在實體網路卡上設定任何IP,但實體線路可以插上去,然後再安裝CentOS,起動虛擬機器管理員(是圖形介面),連接並建立一新的DomainU,依據所需進行設定,到了Host network設定時請選擇第二項shard physical network,就一路安裝下去囉..安裝好DomainU的作業環境,然後再設定網路卡的IP(DomainU的)應該就可以囉. ※這裡可以把DomainO(CentOS)的網路卡當做一個HUB來看就不難理解他不用設IP了,可是不要問我原因我也不知道 b.希望走DHCP方式同a步驟,到Host network請選擇第一項virtual network後面步驟就一樣了,可是要外部連到這台機器時,則要在DominO(CentOS)上利用iptables進行囉 4.可以使用virt-clone進行複製好用喔

IReport中的條碼類別BcImage

最近有一個繳費單的專案,需要列印條碼,因為IReport本身就有提供列印條碼的功能,所以就用IReport設計繳費單然後再用Jasperreport API寫批次程式去產生PDF,資料量大概3000多筆(頁)拆成幾個檔案,可是就發生了一個問題居然發生部分繳費單的條碼有問題,看了一下程式研判是Race Condition因為程式採用的是多執行緒,若是依序個別產生是不會有問題,但是同時執行的時候就會亂掉,而且都錯在條碼,令我覺得很奇怪,後來我查了一下發現it.businesslogic.ireport.barcode.BcImage 類別我猜是這裡的問題,就先加上synchronized重新編譯在去執行,嘿嘿條碼就對了,做了一下壓測也正常,程式碼如下,不過這樣事不是對了可能還要仔細查查看。 public class BcImage { private static net.sourceforge.barbecue.Barcode bc = null; public synchronized static net.sourceforge.barbecue.Barcode getBarcode() { return bc; } public synchronized static BufferedImage getBarcodeImage(int type, Object aText, boolean showText, boolean checkSum) { return getBarcodeImage(type, aText, showText, checkSum,"",0,0); } public synchronized static BufferedImage getBarcodeImage(int type, Object aText, boolean showText, boolean checkSum, String applicationIdentifier, int width, int height) { // 2of7, 3of9, Bookland, Codabar, Code128,...

IReport透過寫程式自訂功能

IReport是透過SQL進行資料的取得,所以很多邏輯都需要靠SQL來進行,有時候只是要進行一個資料的對應大部分都是透過join table進行,或是需要另一資料來源時就需要特別客製化應用程式等等,假如IReport可以呼叫Java程式那就非常之完美了,舉個例子說 原本在IReport中的SQL為 select a.name,b.className,c.countryName,a.telephone from student a ,class b,country c where a.id = b.id and a.id=c.id 若是b 跟 c不再同一個資料來源怎麼辦? 步驟 1.寫一隻Java程式可以連到其他資料來源,並把它包成jar檔案 2.將該jar檔案放在IReport的lib下 3.透過SQL去呼叫如 select name,test.ClassUtils.getClassName(id),test.CountryUtils.getCountry(countryId),test.TranUtils.translate(telephone) from student 這樣就可以了若是在搭配scriptlet方式進行那就真的很Power. P.S 應用程式使用時也只要把jar放在classpath也可以喔~~

玩玩DES及RSA

最近有個需求,就是希望能把儲存在文字檔中的密碼,增加一些安全機制,想說之前(參考JavaWorld@TW的一些資料)有玩過一下下DES及RSA說不定可以試試看,流程大概先產生一把KEY(DES)或是一對KEY(RSA),使用KEY針對資料進行加密,加過密的文字有可能會是非法字元,所以用BASE64進行encode或是decode,應用程式要使用加個密的資料,需要兩個要素第一個就是key,另外就是API,缺一不可(盡量防止Developer). DES部分 DESGenerator import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectOutputStream; import java.security.NoSuchAlgorithmException; import java.security.NoSuchProviderException; import java.security.SecureRandom; import java.security.spec.InvalidKeySpecException; import javax.crypto.KeyGenerator; import javax.crypto.SecretKey; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.DESKeySpec; import entiebank.utils.Utils; public class DESKeyGenerator { public static void genDESKey(String keyFileName,String alg){ try { KeyGenerator kpg = KeyGenerator.getInstance(alg); //TODO Default alg maybe can change //SecureRandom random = SecureRandom.getInstance("SHA1PRNG","SU...