blogspot.com-GA4

顯示包含「java」標籤的文章。顯示所有文章
顯示包含「java」標籤的文章。顯示所有文章

星期日, 7月 06, 2025

Springboot Jasypt 設定application yaml 無法解密問題處理

使用版本 Springboot3.5.0

引用版本
  <dependency>
    <groupid>com.github.ulisesbocchio</groupid>
    <artifactid>jasypt-spring-boot-starter</artifactid>
    <version>3.0.5</version>
  </dependency>


啟用加密功能application run

import com.ulisesbocchio.jasyptspringboot.annotation.EnableEncryptableProperties;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@EnableEncryptableProperties // 啟用 Jasypt 加密功能
public class YourApplication {

  public static void main(String[] args) {
    SpringApplication.run(YourApplication.class, args);
  }
}


在application.properties 中設定
jasypt.encryptor.password=your_secret_password
spring.datasource.password=pwd

在YAML中設定
jasypt:
   encryptor:
     password: your_secret_password
spring:
  datasource:
    password: ENC(C/q1R8y***************aWFEnVZ0rg==)

注意在此如果用env 設定

name: spring.datasource.password
value: ENC(C/q1R8y***************aWFEnVZ0rg==)


用以上的方式設定時,在啟動時發現密碼並無法生效,可能是因替換參數時無法啟動解密,改用以下 YAML設定環境變數替代

application.properties值
jasypt.encryptor.password=${DB_PASS}

在YAML中設定
name: DB_PASS
value: ENC(C/q1R8y***************aWFEnVZ0rg==)

星期四, 7月 25, 2013

《Java 開發者的函數式程式設計》(Functional Programming for Java Developers)

這幾天網路上看到的
以前就看到過這本書,但是一直很可惜沒有買到
不過現在看到JAVA的名人有寫了一些文章
就先記下來摟!!

Functional Programming for Java Developers, Part1 - A Preliminary Study
http://openhome.cc/eGossip/Blog/FunctionalProgrammingforJavaDevelopers1.html

Java 開發者的函數式程式設計(1)初探函數式程式設計
Java 開發者的函數式程式設計(2)代數資料型態
Java 開發者的函數式程式設計(3)List 處理模式 

星期一, 8月 16, 2010

用語法 lock table

lock table 語法
CallableStatement cstmt = sb.pg.con.prepareCall("LOCK TABLE tx005 IN SHARE MODE");
cstmt.execute();
cstmt = sb.pg.con.prepareCall("LOCK TABLE tx007 IN SHARE MODE");
cstmt.execute();


限制筆數
CallableStatement cstmt = pg.con.prepareCall("set rowcount 3");
cstmt.execute();

星期二, 3月 16, 2010

java新手犯的錯可讓人啼笑皆非~~String 比對

最近工作接到了某個公司的派遣~~真的遇到了以下的錯誤,
而這在Java語法裡面是有代表著不同的意義。

String的 三種比對 = =、equals、compareTo
1. = = 這種比對方式在其他語言中可以直接用來做字串的比對,
但是在Java中這樣的比對是用來檢查,引用關聯記憶體使用的物件是否相同,
所以當 new 兩個String時,這樣的比對馬上就出問題了

2. equals 這個方法才是Java正確的字串比對方式,而對於物件需要做比對時,也是使用此方式,而數字是用 = =

3. compareTo 這種方式是用來做字串的比對大小時使用的,可不是用來比對是否相等,但是居然還是有看到有人拿來做比對用,雖然是可以,但我個人還是非常不建議這樣子用


這是我目前看到有新手用了 1.3種方法來做比對,
雖然第3種方法可以,但在比對相同情形下還是不建議使用,
另外有Comarator 物件可以用來做比對排序

星期三, 12月 30, 2009

jQuery Ajax 表單中文問題

1. 傳值url內容亂碼 使用 encodeURIComponent

// javascript
var uri="http://w3schools.com/my test.asp?name=ståle&car=saab";
document.write(encodeURIComponent(uri));

// 接收內容設定編碼需用 UTF-8


2. 接收 Servlet傳值 jQuery接收內容
※ JSP頁面部份可視,頁面編碼

// servlet
response.setCharacterEncoding("UTF-8");
java.io.PrintWriter out = response.getWriter();

// javascript接收 轉碼
.....
success: function(msg){
alert( unescape(msg) );
}
....

星期三, 12月 23, 2009

InputStream 轉出 String

把InputStream內的 Strung 串流轉出

InputStream is = blob.getBinaryStream();
if (is != null) {
String line;
BufferedReader reader = new BufferedReader(new InputStreamReader(is, "Big5"));
while ((line = reader.readLine()) != null) {
sb.append(line).append("\n");
}
}

System.out.println(sb.toString());

星期一, 12月 07, 2009

java數字格式化

1. import="java.text.NumberFormat"

2. NumberFormat numberFormat = NumberFormat.getInstance();

3.numberFormat.format(orderForm.getOrderMaster().getTotalamt());

完成

星期四, 11月 12, 2009

(轉)javaMail編碼

javaMail編碼 2007-03-05 下午 09:15

郵件頭(參見RFC822,RFC2047)只能包含US-ASCII字元。郵件頭中任何包含
非US-ASCII字元的部分必須進行編碼,使其只包含US- ASCII字元。所以使用
java mail發送中文郵件必須經過編碼,否則別人收到你的郵件只能是亂碼一堆。
不過使用java mail 包的解決方法 很簡單,用它自帶的MimeUtility工具中encode
開頭的方法(如encodeText)對中文資訊進行編碼就可以了。

例子:

MimeMessage mimeMsg = new MimeMessage(mailSession);

//讓javamail決定用什?方式來編碼 ,編碼內容的字元集是系統字元集
mimeMsg.setSubject( MimeUtility.encodeText( Subject) );

//使用指定的base64方式編碼,並指定編碼內容的字元集是gb2312

mimeMsg.setSubject( MimeUtility.encodeText( Subject,"gb2312","B"));

通常對郵件頭的編碼方式有2種,一種是base64方式編碼,一種是QP
(quoted-printable)方式編碼,javamail根據具體情況來選擇編碼方式。

如"txt測試”編碼後內容如下:

=?GBK?Q?Txt=B2=E2=CA=D4

裏面有個=?GBK?Q?,GBK表示的是內容的字元集,?Q?表示的是以QP方式編
碼的,後面緊跟的才是編碼後的中文字元。所以用MimeUtility工具編碼後的資
訊裏包含了編碼方式的資訊。

郵件的正文也要進行編碼,但它不能用MimeUtility裏的方法來編碼。郵件正文
的編碼方式的資訊是要放在Content-Transfer- Encoding這個郵件頭參數中的,而
MimeUtility裏面的方法是將編碼方式的資訊放在編碼後的正文內容中。所以如
果你對正文也用 MimeUtility進行處理,那?其他郵件程式就不會正常顯示你編
碼的郵件,因?其他郵件軟體如outlook,foxmail只會根據
Content-Transfer-Encoding這個裏面的資訊來對郵件正文進行解碼。

其實,郵件正文部分的編碼javamail已經自動幫你做了,當你發送郵件的時候,
它會自己決定編碼方式,並把編碼方式的資訊放入Content- Transfer-Encoding這
個郵件頭參數中,然後再發送。所以你所要做的就是直接把郵件正文的內容放入
郵件中就可以了。

對郵件正文的編碼方式比較多,包括了base64和QP方式,還有一些如7bit,8bit
等等,因?javamail自動?郵件正文編碼,所以我就不一一祥敘了。

例子:

//處理郵件正文

MimeBodyPart mbp=new MimeBodyPart();
if ( ContentType() == null || ContentType.equals(""))
mbp.setText( Content );
else
mbp.setContent( Content, Content );

解碼


javamail包中的MimeUtility工具中也提供了對郵件資訊解碼的方法,都是以
decode開頭的一些方法(如decodeText)

例子:

String Subject = mimemsg.getSubject();
String ChSubject = MimeUtility.decodeText(Subject);

對於base64和QP編碼後資訊,decode* 方法能將他們正確的解碼,但是,如果
指定的字元集不對,那?javamail就會出現錯誤,不能正確地將其解碼。

如有的郵件系統將”txt測試”編碼後如下:

=?x-unkown?Q?Txt=B2=E2=CA=D4

這裏指定的字元集是x-unknown,是非明確的字元集,javamail就不能正確的處
理了,但是”測試”這兩個中文字還是按照gbk字元集編碼的,所以你可以手工
的將編碼方式資訊改正確,再用decode*方法來解碼。

例子:

if ( str.indexOf("=?x-unknown?") >=0 ){
str = str.replaceAll("x-unknown","gbk" ); // 將編碼方式的資訊由x-unkown改?
gbk

try{

str = MimeUtility.decodeText( str ); //再重新解碼

}catch( Exception e1){

return str ;

}

decode*方法都是根據在編碼資訊中包含的編碼方式的資訊來解碼,所以decode*
方法對郵件正文解碼是無效的,因?郵件正文中不包含編碼方式的資訊。

同編碼一樣,郵件正文的解碼也是由javamail做了。Javamail根據
Content-Transfer-Encoding裏的資訊,來對郵件的正文解碼。

客戶程式從javamail取得的正文內容字元集?iso-8859-1,所以還要將字元集轉換
一下,例:

String CorrectContent = new String( Content.getbytes("iso-8859-1"),"gb2312");

CorrentContent?正確的郵件正文了

星期一, 11月 09, 2009

native2ascii用法

native2ascii是sun java sdk提供的一個工具。用來將別的文本類文件(比如*.txt,*.ini,*.properties,*.java等等)編碼轉爲Unicode編碼。爲什麽要進行轉碼,原因在於程式的國際化。

用法:native2ascii [-reverse] [-encoding 編碼] [輸入文件 [輸出文件]]

-[options]:表示命令開關,有兩個選項可供選擇
-reverse:將Unicode編碼轉爲本地或者指定編碼,不指定編碼情況下,將轉爲本地編碼。
-encoding encoding_name:轉換爲指定編碼,encoding_name爲編碼名稱。
[inputfile [outputfile]]
inputfile:表示輸入文件全名。
outputfile:輸出檔案名。如果缺少此參數,將輸出到控制臺

星期二, 10月 27, 2009

Java SimpleDateFormat 常用的用法


// 依照設定格式取值
java.util.Date today = new java.util.Date();
java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat ("yyMMdd");
String formatstr = sdf.format(today);

// 將固定字串轉成 Date 格式
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
java.util.Date timeDate = dateFormat.parse(dateString);

// 把 java.util.Date 轉成 java.sql.Date
public static java.sql.Date getSqlDate ( java.util.Date date ) {
if ( date == null ) {
return null;
} else {
return new java.sql.Date ( date.getTime() );
}
}
// Timestamp 轉換方式
preparedStatement.setTimestamp (1, new java.sql.Timestamp(date.getTime())) ;

星期三, 8月 05, 2009

SVN版本控管& CVS 設定

2010/05/22 補充

SVN的安裝在官網上有新的說明


要安裝方便多了
有幾下幾個版本可以進行安裝

Name: Subclipse 1.6.x (Eclipse 3.2+)
URL: http://subclipse.tigris.org/update_1.6.x

Name: Subclipse 1.4.x (Eclipse 3.2+)
URL: http://subclipse.tigris.org/update_1.4.x

Name: Subclipse 1.2.x (Eclipse 3.2+)
URL: http://subclipse.tigris.org/update_1.2.x

Name: Subclipse 1.0.x (Eclipse 3.0/3.1)
URL: http://subclipse.tigris.org/update_1.0.x



SVN安裝步驟:

版本控管說明

在 Eclipse IDE 中
點選 [說明 > 軟體更新> 尋找和安裝 > 搜尋要安裝的新特性 > 新的遠端網站]
輸入
名稱:SubEclipse
URL:http://subclipse.tigris.org/update

按下 [確定 > 完成]
出現搜尋結果後,勾選 SubEclipse 後按下 [下一步 > 點選接受授權後按下一步 > 完成]
開始進行下載,完成後出現驗證視窗點選 [全部安裝] 完成後重新啟動 Eclipse IDE 就完成安裝。

使用:

在 Eclipse IDE 中點選 [視窗 > 顯示視圖 > 其他]
出現顯示視圖對話框後,選擇 [SVN.SVN 檔案庫] 後按下確定。就會在 Eclipse IDE 中。

用 Subversion 跟 Google Code 作版本控制

SVN相關文章介紹




CVS官方網站


1. 下載步驟 : 進入官網的 CVSNT Server 中, 點選 "Server Windows", 再點選 "Free Download Now"

2. 安裝步驟下一步完成


安裝步驟請見官網


Google CVS工具

星期一, 7月 20, 2009

Sun Jcaps簡介 (轉)

Sun Jcaps簡介
SOA(service-oriented Architectures 面向服務的體系架構)
IT和企業應用環境的快速變化,使得SOA成為軟 件發展中最為熱門的話題之一。企業希望利用已有的應用程式來應對當前遇到的業務問題,但是又不能為每個業務都創建合 適的基礎環境,因此要有靈活的基礎架構,以實現企業對業務的快速調整和變化。SOA因為能夠實現這樣的靈活的架構,吸引了全球企業的注意。

Jcaps是什麼?
在 SOA的戰略上,Sun在收購SeeBeyond後於2006年推出了自己的SOA架構“CAPS”(Composite Application Platform Suite,組合應用平臺),SeeBeyond此前作為一個第三方軟體企業具有很強的獨立性,也使得由其產生的Sun CAPS能夠支援包括IBM WebSphere、BEA Weblogic、JBoss等各種主流的中間件平臺。
看似Sun在SOA方面起步較 晚,事實上早在2004年7月的時候,Sun就發佈了綜合性SOA計畫,使得Sun公司的Java企業系統軟體和Sun Java開發工具等產品具有擴展的SOA能力。2005年5月,Sun公司又發佈了名為“SOA Path(SOA路徑)”的SOA實際執行方式,與此前Sun的SOA解決方案計畫組成了完整的體系,給予企業客戶在實施SOA時同時具備強大的靈活性和 安全性。這一S OA的實際執行方式允許企業客戶在SOA技術的整個生命週期內,從概念論證、準備階段,到實際執行等各個關鍵時刻,都可以採用Sun的Java平臺和 SOA執行經驗。20 05年6月,Sun又為那些需要跟蹤和管理Web服務的企業客戶推出了Sun服務註冊(Sun Service Registry)服務,以幫助企業客戶實施SOA治理。
作為JES的一部分,CAPS平臺同樣是開放和共用的。ISV以及所有客戶都可以免費試用,真正“上線”後再買License,而最後實際上只需要付出Licens e的成本。

JCAPS有什麼特色?
Sun CAPS包括了企業開發、部署、管理和監控SOA平臺所需的一切工具。
在Sun並購SeeBeyond之前,Java Enterprise System包括以下5個軟體套件。它們是
Sun Java System Application Platform Suite (應用平臺套件)
Sun Java System Communication Suite (通信套件)
Sun Java System Identity Management Suite(身份認證管理套件)
Sun Java System Availability Suite(可用性套件)
Sun Java System Web Infrastructure Suite(Web基礎架構套件)。
Sun 和SeeBeyond原來各自提供的產品、服務和解決方案具有相當的互補性,重疊部分很少。SeeBeyond原有的Integrated Composite Application Network (ICAN:集成組合應用網路)套件是一個高度集成的套件,它提供了後臺集成、B2B集成、ETL控制資料管理、業務流程管理、工作流、業務活動監控、應 用適配器,以及 一套基於Web服務創建複合應用的圖形開發工具等。並購SeeBeyond之後,Sun將這個ICAN套件重命名為Composite Application Platform Software,即CAPS-組合應用平臺軟體,並將之作為Sun Java System的第六個企業系統套件。這樣,加上與世界上最先進的作業系統Solaris 10的結合,Java Enterprise System就成為了對企業最具吸引力的計算環境,讓系統集成商在其中創建下一代的客戶解決方案。
Sun CAPS的特色是,SeeBeyond業界領先的系統集成技術與Java技術的融合。具體說,就是Sun Java Enterprise System與Java Composite Application Platform Suite的功能的完好結合。CAPS的功能包括有:
端到端的開發工具;
企業正常運行環境的全套元件;
實現與企業傳統系統的全面連接;
創建網路應用最強大的環境。
Sun CAPS的出臺,體現了業界兩大解決方案領導廠商的技術、產品優勢的融和。其重要性在於:Internet的下一波將是傳統應用向服務導向新應用的集 成;CAPS通過下 一代技術和服務的採用,快速地、低成本地去創建和提供新的應用,且不會被鎖定在專利技術之上;CAPS是業界最好的、生產效率最高的新一代解決方案的創建 平臺;通過CAP S,Sun可以快速創建應用於各個行業的解決方案,並將之推向市場。
作為Sun Java Enterprise System的一個元件,Sun CAPS是目前市場上最全面、最高效的應用集成平臺之一,可以滿足靈活應對業務變化和降低總擁有成本的雙重需求。CAPS具有統一性、全面性和標準性,這 三性分別表現在 :它為套件中的所有元件提供一個統一的共用設計、管理和監控環境;為SOA架構提供一個完整的、全面的、可擴展的平臺,包括新應用程式的開發和原有應用程 序的重用;遵循各 類行業標準,包括Java平臺企業版(Java EE)、Java Message Service(JMS)、業務流程執行語言(BPEL)、業務流程建模符號(BPMN)、可擴展標記語言(XML)和Web服務標準等。

Sun的企業計算產品
Enterprise Computing分兩部分Sun Java Enterprise System,Sun Java System Suites。
Sun Java Enterprise System裏面有產品Java Application Platform Suite,Availability Suite,Java Communications Suite,Java Identity Management Suite,Java Web Infrastructure Suite,Composite Application Platform Software也即CAPS(暫時還不能免費下載,您可以和當地的sales聯繫)
Sun Java System Suites裏面有產品Java Enterprise System


Jcaps組成

Integration Products:
Enterprise Service Bus—Sun SeeBeyond eGate Integrator
Business Process Management—Sun SeeBeyond eInsight Business Process Manager
Business-to-Business Integration—Sun SeeBeyond eXchange Integrator
Partner On-Ramping—Sun SeeBeyond eXpressway Integrator
Extract, Transform, and Load—Sun SeeBeyond eTL Integrator
Composite Web Design—Sun SeeBeyond eVision Studio
Enable a Single View Across Applications—Sun SeeBeyond eView Studio
Business Activity Monitoring—Sun SeeBeyond eBAM Studio
Intelligent Adapters—Sun SeeBeyond eWay Intelligent Adapters

Infrastructure Products:
Flexible Platform—Sun Java System Application Server
Easy Portal Creation—Sun Java System Portal Server
Centralized Data Repository—Sun Java System Directory Server Enterprise Editio
Authentication and Authorization—Sun Java System Access Manager

Developer Tools:
Award-winning Tools Platform—The Sun Java Studio Enterprise integrated development environment (IDE)
Web Application Tools—Sun Java Studio Creator

星期三, 6月 24, 2009

Obfuscator 混淆器 - ProGuard(轉)

Obfuscator 混淆器 - ProGuard

快速混淆步驟

1. 開啟GUI

java -jar proguardgui.jar

2. Input/Output:Add input -> 要被混淆的jar
3. Input/Output:Add output -> 混淆過後jar的輸出檔案位置
4. Input/Output:Add library -> 設定相關的library
5. Shrinking:關掉
6. Obfuscation :Options中留下Obfuscate及Flatten package hierarchy就好
7. Optimization:關掉
8. Information:如果是J2ME需開啟Preverify,否則關掉
9. Process:Process

混淆選項

* -dontobfuscate:不混淆
* -printmapping [filename] :輸出名稱轉換的對照表
* -applymapping filename :依對照表轉換名稱
* -obfuscationdictionary filename :自訂用來混淆的辭彙(用預設的a,b,c,..就很好了
* -overloadaggressively : 有些副作用,不管它
* -useuniqueclassmembernames : 讓自動產生的辭彙不會重複,以避免多次混淆時,遇到相同名稱時需要重新命名(不用管它,就讓ProGuard自動改名稱就好)
* -dontusemixedcaseclassnames:不要混合大小寫,建議勾選(有些作業系統會忽略檔名大小寫的差異,而視為相同檔案,如Windows)
* -flattenpackagehierarchy [package_name] :package階層扁平化,統一移到[package_name](不指定package_name時為root package)
* -repackageclasses [package_name] :全部移至一個package,會造成resource無法讀取
* -keepattributes [attribute_name,...]
* -renamesourcefileattribute [string]
* -adaptresourcefilenames [filter]
* -adaptresourcefilecontents [filter]

混淆器列表

* ProGuard freeware,支援Java 1.6
* yGuard freeware,支援Java 1.6
* jode freeware,不支援Java 1.5的部份語法
* The Marvin Obfuscator freeware,僅在Java 1.2, 1.3, 1.4beta上測試過

* RetroGuard 非商業授權

* Smokescreen/Timewindow 15天試用版(混淆器/使用時間限制)
* CodeShield 10天試用
* DashO 14天試用
* JCloak 30天試用
* jobfuscate 無限制試用,但試用版無實際混淆效果
* Zelix KlassMaster 30天試用
* Jshrink

延伸閱讀

* Java程序的加密和反加密
* 运用加密技术保护Java源代码
* Decompiling Java - Protecting Your Source: Strategies for Defeating Decompilers

星期一, 3月 23, 2009

POI 輸出 Excel 檔案 直接讓使用者下載

response.reset() ;
response.setContentType(contenttype);
response.setHeader("Content-Disposition", "attachment;Filename=" + filename + ".xls");

..... 在這邊設定 POI 輸出的 Excel 內容 ......

// 1. 利用網頁的輸出方式,顯示給使用者進行檔案下載的動作
OutputStream os = response.getOutputStream();
workbook.write(os);
os.flush();
os.close();

// 2. 設定輸出模式為檔案輸出,輸出至目錄下
FileOutputStream outfile = new FileOutputStream("/tmp/"+ filename +".xls");
workbook.write(outfile);
outfile.close();

星期二, 1月 20, 2009

ResultSetMetaData 動態抓取SQL中的欄位


rs = dbcon.executeQuery(sql);
// 取得 ResultSetMetaData 物件
ResultSetMetaData rsmd = rs.getMetaData();
// 用 for 回圈將資料集中的欄位依排列列出
for(int i = 1; i <= rsmd.getColumnCount(); i++) {
   out.println(rsmd.getColumnName(i));
}

for(int i = 1; rs.next(); i++) {
   // 用 for 回圈將資料集中對應的欄位名抓出對應的欄位值
   for(int j = 1; j <= rsmd.getColumnCount(); j++){
      out.println(rs.getString(rsmd.getColumnName(j)));
   }
}

星期三, 1月 07, 2009

[JODConverter]word轉pdf心得分享 (轉)

來源:javaworld

官方網站:
http://www.artofsolving.com/opensource/jodconverter

下載地點:
http://www.artofsolving.com/opensource/jodconverter
http://zh.openoffice.org/new/zh_tw/downloads.html

目前版本: JODConverter v2.2.1, OpenOffice v3.0.0

使用需求: JDK1.4以上, 安裝OpenOffice v2.0.3以上

基本簡介:

JODConverter主要的功能是用來做各種檔案的轉換. 目前測試過, Word,Excel,PowerPoint轉PDF都是沒問題的.

因為JODConverter是透過OpenOffice來做轉換, 所以使用前需要先安裝OpenOffice, 並且將OpenOffice的Service啟動, 才可以使用.


使用教學:
Step1: 安裝OpenOffice
Step2: 啟動OpenOffice Service

1 cd C:\Program Files\OpenOffice.org 3\program
2 soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard


Step3:將JODConverter的Jar檔放進專案中的Library, 請檢查你的專案是否包含以下的Jar檔:

jodconverter-2.2.1.jar
jurt-2.3.0.jar
xstream-1.2.2.jar
ridl-2.3.0.jar
commons-io-1.3.1.jar
juh-2.3.0.jar
slf4j-api-1.4.3.jar
unoil-2.3.0.jar
slf4j-jdk14-1.4.3.jar


Step4: 準備一個word檔放在c:/document.doc
Step5: 執行以下程式

import java.io.File;
import com.artofsolving.jodconverter.DocumentConverter;
import com.artofsolving.jodconverter.openoffice.connection.OpenOfficeConnection;
import com.artofsolving.jodconverter.openoffice.connection.SocketOpenOfficeConnection;
import com.artofsolving.jodconverter.openoffice.converter.OpenOfficeDocumentConverter;

public class JodDemo {
public static void main(String[] args) throws Exception {
File inputFile = new File("c:/document.doc");
File outputFile = new File("c:/document.pdf");
// connect to an OpenOffice.org instance running on port 8100
OpenOfficeConnection connection = new SocketOpenOfficeConnection(8100);
connection.connect();
// convert
DocumentConverter converter = new OpenOfficeDocumentConverter(
connection);
converter.convert(inputFile, outputFile);
// close the connection
connection.disconnect();
}
}


程式說明:
程式的部份相當簡潔, 特別要注意的地方是第12行連線的port必須與你啟動OpenOffice的Port相同,
另外JODConverter預設是用副檔名作文件種類的判斷, 所以副檔名必須要正確才行.
如果副檔名比較特別的話, 就必須在convert()的時候強制指定Document Type.

心得:
JODConverter使用起來相當方便, 官網也提供War檔讓JODConverter變成Web Service提供給不同的語言來呼叫.
特別要注意的是, OpenOffice Service並不是ThreadSafe的, 多個Web AP在使用的時候必須要注意.

參考資料:
http://www.artofsolving.com/opensource/jodconverter

星期二, 8月 05, 2008

解 Java class 檔案的 version

轉載 了解 Java class 檔案的 major.minor version
http://hkdennis2k.homeip.net/2007/12/08/%E8%BD%89%E8%BC%89-%E4%BA%86%E8%A7%A3-java-class-%E6%AA%94%E6%A1%88%E7%9A%84-majorminor-version/

每個編譯出來的 class 檔案擋頭都會有編寫 該class 檔案編譯的version 已達到其相容性

星期五, 8月 01, 2008

2008年度 java top 5 技術

Carlos Perez: Top Five Java Technologies to Learn in 2008

完整文章:http://www.theserverside.com/news/thread.tss?thread_id=48270

Posted by: Joseph Ottinger on ? 30, 2008 DIGG
Carlos Perez has posted his list of the top five Java-based technologies to learn in 2008. They are:

* OSGi (a specification for dynamic modules for Java)
* The Java Content Repository spec, first appearing in the JCP in February 2002
* Google Web Toolkit (first released in May, 2006)
* Groovy (first released in May, 2004)
* Cloud computing (a concept designed around the use of virtual servers, or distributed computing without the use of EJB)

Java: 淺談 OSGi 標準-愛德華日誌 (轉)

Java: 淺談 OSGi 標準

參考來源:
愛德華日誌
維基百科

OSGi 起源於1999 年三月,是由一些家用閘道器相關產業廠商所組合而成的組織,目前約有八十餘家廠商加入。包括了 IBM、Sun、BMW、Motorola、Nortel、Nokia、 Philips、Panasonic、Sony、Toshiba、Echelon 等。目前最新的標準是OSGi Specification 3.0。

當初制定OSGi 標準的最主要的目的,是要為遠端的服務提供者 (Service Provider) 與本地端的設備 (Device) 之間提供完整的點對點服務傳送解決方案。因此,OSGi 定義了一個開放性的平台,使得遠端軟體服務供應商所提供的應用程式 及加值服務,能視使用者需求,隨時下載至靠近用戶的閘道器 (Gateway) 上,並且自動安裝執行,而這裡所指的閘道器通常是連接家庭網路(Home Network)、辦公室網路 (Office Network) 與廣域網路間的一個裝置,如機上盒 (Set-top Box;STB)、ADSL數據機、纜線數據機 (Cable Modem)、住宅區閘道器 (Residential Gateway)等。透過這個開放性的平台,不同廠商所開發出的服務軟體及設備都能互相溝通及搭配使用。

在 OSGi 網站上的 FAQ 中,指出 OSGi 應用方向包括:

  • Services in the Home:
    • Communication
    • Information/entertainment
    • Safety and security monitoring
    • Energy management and metering
    • Appliance diagnostics and servicing
    • Telemedicine and healthcare monitoring
  • Services in the Car:
    • Navigation
    • Emergency assistance
    • Mobile commerce
    • Information/entertainment
    • Vehicle diagnostics
    • Location-based services

Again, we see java succeeded in J2ME. We can see many big-name companies in the OSGi member name list which include many companies come from many industries.

最近 OSGi 在軟體業最為人雀躍的發展,莫過於 Eclpise Java IDE 支援 OSGi 標準。這是一個有趣的現象,本來是設計給其他產業的運用,卻在軟體業也有不凡的表現。這也讓我想起 Java 的發展歷史,本來也是為了 embedded 系統而設計,卻意外的在 internet 竄起的年代獲得各方的矚目,更在 enterprise application 中立於不敗之地...

JMXOSGi 在功能上的許多重疊之處,在國外已經有人討論過 (例如 Eclipse Embeds OSGi Based MicroKernelJMX vs. OSGi - The New Flavor of the Eclipse Runtime)。不過我認為重點是:

  1. JMX 本來設計的用途就只為了管理,我們不該把他拿來 (over use) 作為開發應用程式的元件 (那是 EJB 或 JavaBeans 該做的事)。但 OSGi 卻可以!
  2. JMX 多數用於 server 系統中,而 OSGi 卻不限於所開發的應用程式。你可以用它開發 embedded 系統、desktop 程式,甚至是 server 程式。

OSGi 不但提供了與 JMX 相似的容器管理能力,甚至它本身就是一套精密的 Framework。OSGi 採用Micro-Kernel 的架構,可以提供無限延伸的功能。OSGi 的 Bundles 線上更新功能、以及應用程式之微量記憶體執行能力,都是開發應用程式的利基。

OSGi 與 J2EE 在設計上,我覺得完全是兩種思維模式:J2EE 的思維是 build on large scale,OSGi 的思維是 build on dynamic scale。OSGi 以小搏大...

OSGi Resources:

註:

目前我看到與 OSGi 有關的 JSR 為:

  • JSR 8: Open Services Gateway Specification (OSGi)
  • JSR 232: Mobile Operational Management

星期四, 7月 03, 2008

Java VM規格書

http://java.sun.com/docs/books/jvms/second_edition/html/VMSpecTOC.doc.html

此文件為了解整個VM的基礎理論,
如果想要對java語言要更深入了解就必須要先了解他的VM官方白皮書

各種語言都有其VM說明