部落客廣告聯播

2010年3月10日 星期三

JBOSS 5.1上使用EJB2與META-INF/jboss.xml的關係

(web client & java client)
1. 沒設定jboss.xml,則用 Object objRef = ctx.lookup("the-ejb-name"); 取得home
2. 若有設定jboss.xml裡的jndi,則會把把Bean綁到global JNDI, 用 Object objRef = ctx.lookup("xx/the-jndi-name"); 取得home

3. jboss.xml範例
<?xml version="1.0"?>
<jboss xmlns:xs="http://www.jboss.org/j2ee/schema"
xs:schemaLocation=
"http://www.jboss.org/j2ee/schema jboss_5_0.xsd"
version="5.0"> 
<!-- 把Bean綁到global JNDI ,
取得用Object objRef = ctx.lookup("ejb/the-jndi-name"); -->
   <enterprise-beans>
      <session>
         <ejb-name>the-ejb-name</ejb-name>
         <jndi-name>ejb/the-jndi-namer</jndi-name>
      </session>
   </enterprise-beans>

</jboss>

JBoss 5.1上WebApp叫用EJB2錯誤...

由於工作需要需要學EJB2,便想在JBoss 5.1上作測試,但遇到在
JBOSS 5上的web app呼叫EJB2 SessionBean,出錯:
javax.ejb.EJBException: Invalid invocation,
check your deployment packaging, method=public .....


1. 下列文章指出在jboss 4的解決設定方法:
http://forums.sun.com/thread.jspa?threadID=557629
http://www.javaworld.com.tw/roller/secretguest0824/entry/
jboss_ejb_%E9%96%8B%E7%99%BC%E6%B3%A8%E6%84%8F%E4%
BA%8B%E9%A0%85%E6%95%B4%E7%90%86_ejb2_0

http://xmh517.javaeye.com/blog/209056

2. 下列文章指出 此問題應該是 classloader策略造成的問題:
http://daivd.tao.jdon.com/jivejdon/thread/35659

3. 下列文章指出 jboss 5上的web程式設定classloader策略的方法:
http://community.jboss.org/wiki/useJBossWebClassLoaderinJboss5

所以我們要做的就是在WAR的web-inf下新增一個 jboss-classloading.xml檔案,讓其classloading path domain能與EJB的domain區隔開來,其內容為:

<?xml version="1.0" encoding="UTF-8"?>
<classloading xmlns="urn:jboss:classloading:1.0"
name="ejb01_web.war"
domain="DefaultDomain"
parent-domain="Ignored"
export-all="NON_EMPTY"
import-all="true">
</classloading>

這篇不關技術~

今天在ZDNet看到一篇報導:
[看HTC被蘋果告] 前昇陽CEO提跟蘋果、微軟交手侵權內幕
撇開技術好壞不講,某些大公司財大氣粗總是拿法律來嚇人,
看了這篇文章覺的:
Jonathan Schwartz幹得好~

(以上純屬小弟個人觀點..)

2010年3月7日 星期日

JavaMail 郵件附檔中文檔名亂碼解決

JavaMail 郵件附檔中文檔名亂碼解決方法~
請參考:
http://www.javaworld.com.tw/jute/post/view?bid=6&id=200880&sty=3

重點在49行的:
mbp2.setFileName(MimeUtility.encodeText(fds.getName(), 
"MS950", "B"));

2010年2月7日 星期日

2010年1月11日 星期一

JSF/Facelet中使用JSTL

在JSF內使用Facelet並要使用JSTL,要注意:

JSTL的URI是 http://java.sun.com/jstl/core,
不能寫成http://java.sun.com/jsp/jstl/core

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd
"><html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:a4j="http://richfaces.org/a4j"
xmlns:rich="http://richfaces.org/rich" 
xmlns:c="http://java.sun.com/jstl/core">
.....(略)

2010年1月3日 星期日

Apache HttpClient 4.x版

新的HttpClient 4.x版(API)在使用上與舊有的3.x版似乎有很大的差異,例如HTTP Post表單資料要設定form parameter時的用法:








//HttpClient 3.x
//......
HttpPost post = new HttpPost( URL );
post.getParams().setParameter("input1", "val1");
HttpResponse response=httpClient.execute(post);
//.....


//HttpClient 4.x
//......
HttpPost post = new HttpPost( URL );
List formparams = new ArrayList();
formparams.add(new BasicNameValuePair( "input1", "val1" ));
UrlEncodedFormEntity postEntity =
new UrlEncodedFormEntity(formparams, "UTF-8");
post.setEntity(postEntity);
HttpResponse response=httpClient.execute(post);
//.....


4.x似乎在資料結構與使用上繁雜許多,除此之外,還有許多不同之處,詳見
http://hc.apache.org/httpcomponents-client/tutorial/html/
然而在4.x版本如上使用3.x的寫法,跑得起來嗎?答案是可以,但是非常不幸的某些加進去的parameter會不見(到底是被其他parameter覆蓋掉還是內部運作時被誤刪掉不得而知), 所以建議使用4.x版還是參照著4.x的文件內的寫法來使用才好.....

2009年12月11日 星期五

WebApp從tomcat遷移到jboss的data source問題

最近將WebApp從tomcat包成war檔移到jboss上,但卻履出現deploy failed失敗訊息,
後來發現是data source問題,若web.xml裡面有<resource-ref>參考到資料來源的話,
就要多一個jboss-web.xml設定jndi連結,詳細請參考:
JBoss deployment failure - missing resource-ref element in web.xml
How to configure the Jira DataSource on JBoss

2009年11月18日 星期三

JPA 使用annotation設定self join結構的Entity bean

請參考:
http://detailfocused.blogspot.com/2009/05/jpa-self-join-table.html

JPA/hibernate 使用MySQL讓資料為UTF-8 encoding

使用JPA/hibernate時若要讓預設資料庫的encoding為utf-8,並預設engine為innodb,則設定my.cnf在[mysqld]區段加上:
default-character-set=utf8
default-collation=utf8_general_ci
default-storage-engine=innodb
另外,Datasource JDBC url要加上
?characterEncoding=UTF-8&useUnicode=true&connectionCollation=utf8_general_ci&characterSetResults=utf8

2009年10月15日 星期四

Liferay Portal繁體中文翻譯外掛

Liferay Portal是一套功能相當齊全的open source portal server,
但國內似乎不是很多人用,
然而其內附的介面中文翻譯說真的是辭不達意容易令人造成誤解(或不解),
我猜應該是外國人用翻譯軟體做的。
今小弟重新整理了zh_TW的中文翻譯,並做成了外掛,放在這裡,
歡迎有需要的人下載使用。

安裝方法 -
將此 WAR 檔案放到 ${liferay_home_dir}/deploy 後,
Liferay portal會自動進行安裝,
待安裝完後,請刪除Tomcat的Work內的所有檔案,重啟Tomcat。

關於如何使用Plug-in SDK 來修改語言 properties可參考:
http://wikis.sun.com/display/websynergy/
Customizing+Language.properties+using+hooks+plugin

2009年10月6日 星期二

OpenSSO安裝問題

將OpenSSO WAR檔上到了tomcat,開啟Web介面執行第一次設定時,
使用簡易設定(使用內建OpenDS)會發生NullPointException,
tomcat console會出現「@BASE_DIR@\install.log找不到檔案路徑」訊息,
經百般找尋解決方法,發現到windows 控制台設定地區選項先改為英語-美國,
確認後重啟tomcat,開啟Opensso Web介面,再次執行配置就OK了,
接著再次將地區選項設回來
,即可正常使用。

問題在於內建的OpenDS在叫用java的KeyTool工具產生金鑰時,
若我們當前使用者設定的地區非為英文語系者,則Keytool產生的提示訊息非為英文語系,
則此時便會無法正常產生金鑰,便會導致此失敗~~


詳請見:
http://markmail.org/message/5ne5lcjzoezxarlz#query:Error%20while%20attempting%20to%20generate%20a%20self-signed%20certificate%20ads-certificate%20in%20the%20trust%20store%20file%20config%2Fads-truststore%3A%20KeyStoreException%28Multi-prompt%20didn%27t%20match+page:1+mid:sjwepz5abub4nbmp+state:results

2009年9月18日 星期五

啟用tomcat內建之HTTPS

1. 到 %JAVA_HOME%\bin目錄, 執行:
keytool -genkey -alias tomcat -keyalg RSA
輸入keystore密碼: **********
您的名字與姓氏是什麼?
[Unknown]: Lili.Wang
您的組織單位名稱是什麼?
[Unknown]: myCompany
您的組織名稱是什麼?
[Unknown]: myCompany
您所在的城市或區域名稱是什麼?
[Unknown]: Taipei
您所在的州或省份名稱是什麼?
[Unknown]: Taiwan
該單位的兩字母國家代碼是什麼
[Unknown]: TW
CN=Lili.Wang, OU=myCompany, O=myCompany, L=Taipei, ST=Taiwan, C=TW正確嗎?
[否]: y

輸入的主密碼
(如果和 keystore 密碼相同,按回車): {{直接按enter}}

2. 編輯 tomcat 的conf\server.xml找到下面區段,取消註解,並加上紅字部分,紅字雙引號內的值與第一步的密碼要相同
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true" keystorePass="**********"
clientAuth="false" sslProtocol="TLS" />

3. 重啟Tomcat

4. 開啟瀏覽器 https://localhost:8443 ,測試是否成功

(P.S. 要注意的是如果用admin1身份執行tomcat,則就要以admin1登入執行
keytool -genkey指令)