顯示具有 Java 標籤的文章。 顯示所有文章
顯示具有 Java 標籤的文章。 顯示所有文章

2017年5月16日 星期二

牛亞真,周志湖 - 可完全取代Java的Scala

前幾年知道了Scala,最近又因為各種理由而想要學習它所以買了這本書來加快學習。起先是對其「函式式程式語言」的模式感到好奇。之後又聽聞它在平行運算上有不錯的表現,因此更加深了想要了解的欲望。

本書由對岸的兩名學者所撰,不過我一開始沒注意到,因為買的時候只翻看前面幾章,只對Scala做基本的介紹時看起來還ok。只是後面感覺有些頭痛。因為除了兩岸用語不太一樣的關係,大陸學者有時概念與描述欠缺節奏與一致性的問題,還有不知道為什麼不認真學一下UML而畫出十分詭異的圖這幾點讓我感到似曾相似,立馬就確認了是對岸的作品。

本書的標題很誇大。或許也很貼切。Scala或許可以完全取代Java。但Java也可以完全取代Scala。最近在下看到一個blog描寫了該格主對這類新技術的看法。他認為學一個完全可以用舊技術進行的東西,成本效益實在很可憎。這也或多或少改變在下對Scala的看法。

以語言的角度來看。如果已經掌握好Java的話,確實沒有必要朝Scala走去。畢盡Java的社群還是遠大於Scala;Scala能做到的事Java也做的到。Scala中針對平行運算的Actor其實Java也有,只是控制起來比較需要技巧一點。由於在下對自己的控制技巧蠻有自信的,因此Actor對在下而言魅力有限。其他特性老實說確實也非Scala不可。不過Scala還是有它的擁護者。在下也不便多說了。如果我看到它更有魅力的一面,會再投入多一點。

回到這本書吧。

本書作為Scala的學習本,個人覺得勉勉強強。如果您手上沒有任何Scala的東西可以看的話,它算是足夠的入門讀物,大概就是60分。中、後段有些跳tone的介紹不用執著,看看就好。

2014年3月26日 星期三

Apache CXF 關log (disable logging)

最近用CXF做WS,CXF把訊息全寫到catalina裡面,使得catalina非常龐大。我看了很煩。
而官網介紹的方法有夠麻煩,網路上的解法又不work。

因此,萬念俱灰下,我發現改cxf-beans.xml就好了。(不確定是不是用Eclipse + Dynamic Web + CXF才會有此設定檔)

打開此檔,把

jaxws:features>
bean class="org.apache.cxf.feature.LoggingFeature" />
/jaxws:features>

去掉就ok了。

============

其實我以前也解過一次CXF關log的情形。但記得不是在這裡........

2013年8月5日 星期一

Spring拿Bean的幾種做法

Spring拿Bean的幾種做法:

1. 自動裝載
 在成員參數前加上@Autowired宣告;Spring會試著找到適合該成員參數類型的Bean並賦值。
 缺點是自動裝載必須符合一些條件才能裝載成功。這些條件在下還沒有完全瞭解,因此先不在此說明。不過大抵就是你的bean必須要經由Spring的configuration下去取,Spring才會幫你把物件放進去。你也可以參考底下的討論:
https://stackoverflow.com/questions/19896870/why-is-my-spring-autowired-field-null

2. 從Spring配置中取得
建立ClassPathXmlApplicationContext,再用配置中的名稱從getBean方法取出Bean的實例。
ApplicationContext appctx = new ClassPathXmlApplicationContext("applicationContext.xml");
MyDAO myDAO= (MyDAO)appctx.getBean("myDaoBean");
 缺點有二:首先必須知道配置檔的位置。其次,必須是配置檔中的Bean;即,自動裝載的不適用。

3. 從應用中現存的Bean中找實例
呼叫ContextLoader的getCurrentWebApplicationContext方法,再用Bean的名稱從getBean取實例。
WebApplicationContext wappctx = ContextLoader.getCurrentWebApplicationContext();
wappctx.getBean("myDaoBean");
 缺點有二:必須確保Bean在取用時已被讀入、要知道Bean的一些資訊(名稱或類型);如果Bean是用程式中宣告的方式讀入的,若未決定名稱,則Spring會自行命名,因此你要自己把名字找出來,或是用類型找到所需的實例。


在下的經驗短潛,歡迎大家提供意見。

2013年3月15日 星期五

Deploying Axis web service fail on eclipse

如題。最近在下因為工作需求,要來用用axis的web service了。server端、client端都用上了。

client端的使用還算順利。使用eclipse的工具就能把client的類別建立起來了。網路上資料一堆,需要的可以自行去找。

問題就發生在server端。

server端的做法用工具也很簡單。比如:大笨鳥的私房菜 就有介紹。

不知道何,透過工具建server端時,無論怎麼建立,最後都會卡在部署(deployment)的時候。

一開始,在下以為是網路的問題,因為錯誤訊息為HTTP 500、connect timeout。由於jackmis目前人在大陸的關係(是的,翻牆來寫這篇),因此心想可能什麼東西被偉大的長城擋下來了。於是在下試著『讓eclipse翻牆』;但是一點效果也沒有。

後來在翻牆軟體上看到請求的http request竟然是打向本機;這表示網路沒有問題,因為是連本機;而是本機一支註冊Web service的服務(axis提供的)竟然出現內部錯誤(HTTP 500)。

這很鳥...應該不是我的問題。

上網找了很多,有的寫說Axis的jar要調整,但大多都是問了卻沒下文。很煩,我試了4、5hr。

最後只好用個人覺得最笨的方法...

在下目前用的eclipse是4.x版。我記得舊版是ok的,以前在下實作過。因此我上eclipse官網抓了個3.5.1版,和前面分享的  大笨鳥大大範例中的一樣。

然後就ok了。

在3.5.1產生出來的設定可以直接COPY到4.x版去用。

雖然上面寫的解法有點半調整。但也不失為一招。
絕望而找到這篇草書的開發人員呀,請接受這小小的賤招吧。

若有大大知道更完整的解法,請不吝分享。

共勉之

20130319
今天又發現無法建立webservice。幾經測試後決定在VM裡建立「溫室」來做開發環境。但是在建立開發環境時,我發現到真相應該是防毒軟體的防火牆...

2011年5月12日 星期四

Memo: Java Programming with Performance in mind

This memo make a comment on "Java Programming with Performance in mind"

The only problem is I don't know when this article published. Because some people tell me, the String object in newly JDK is improved, therefore some issue may already adjust.

1. Primitive is fast then Object
2. String is slow, use StringBuilder when no synchronization needs, use StringBuffer when requiring synchronization.
3. Some JDK object will do some work then return copies, if you need the copiess' service, you should use that copies instead of requiring another return from object.
4. choose the right collection
(sec) ArrayList LinkedList HashSet HashMap Vector Hashtable
Add 0.11 0.23 0.63 0.62 0.11 0.37
Get 0.01 160 0.03 0.07 0.01 0.06
Delete 5.52 0.02 0.13 0.13 5.57 0.08

Vector and Hashtable is synchronized by default. ArrayList can be synchronized by using Collections.synchronizedList( new ArrayList()).
5. System.arraycopy is fast then your code
6. Arrays.equals(), fill(), sort() is fast then your code
7. try is not free, throw is expensive; good logic is fast then exceptions
8. thread synchronization: synchronized only for critical section
9. writing to console window: hidding console when not needed
10. Accessing SQL DB using JDBC: tip> use PreparedStatement, combining related SQL in a single JDBC transaction.
11. perceived performance: byte code reduction> remove unused code, compressed Jar file, obfuscate

2009年1月20日 星期二

Building socket connection within a timeout second

網路上已經有一些文章說明了作法,本文也只是一個整理而已。
在java 1.4之後,可以使用以下方式達成:
Socket tmpSocket = new Socket();
tmpSocket.bind(null);
tmpSocket.connect(new InetSocketAddress(ip, port), iniTimeout);
tmpSocket.setSoTimeout(workTimeout);

在1.3以前的作法大至上都是把Socket的連結做在Thread裡面,然後超過限定的時間就砍掉,詳細作法麻煩參考以下連結:
http://www.jguru.com/faq/view.jsp?EID=735679
https://lists.spline.inf.fu-berlin.de/lurker/message/20020611.154904.8f2a919c.nl.html

2008年6月18日 星期三

Authentication of JMeter's testing plan

JMeter一二三事
JMeter是純java的測試工具,常用來做壓力測試。
前言參考:http://blog.pixnet.net/catyku/post/14721791
這位大大已經把基本的功能演練過一次。但是,大大的功能沒有提到最重要的"驗證"這一塊。因為新手總是比較腦殘一點,所以身為腦殘的過來人,就讓小弟介紹如何驗證吧!
驗證測試結果
在您建立的《執行緒群組》→右鍵→《新增》→《驗證》→《驗證回覆》
然後在右邊視窗裡填入正確時預期會出現的字眼。於是,未來在測試時,若沒有通過這個檢查,就會被認為是失敗的測試結果了!

驗證的方式還有更多種,還請各位自己玩看看喔!

不附圖了...因為會吃照片的空間QQ
網路貧民呀...

2008年6月12日 星期四

Securing Web Service with SSL (support jdk 1.3)

在上一篇的文章裡,小弟搞定了WebService基本的使用方式。
然而,為了所謂的"安全需求"(這很重要,只是他X的為什麼要用SSL),所以希望能用SSL技術來達成。

何謂SSL?
它就是指加密通道技術(這個譯名最近好像不用了?)。技術正如其名,就是利用憑證技術把傳輸的通道加密起來。如下:
======受加密保護======
某甲 <-----DATA的安全通道-----> 某乙
======受加密保護======
雖然稱它加密了通道,但事實上加密的還是被傳輸的資訊。這個技術已經愈來愈普及,所以技術上很成熟,能很容易的使用。一個網站如果使用了SSL,那麼你會看到它的連接方式成變成https://,而不是常見的http://了。
Java的SSL
當小弟使用java的URL類別去連接https,馬上就丟出了例外(exception)。上網查了一堆文章,全都在介紹JSSE。但是,JSSE只適用於以往的Java 1.1、1.2(可能還有1.3)版,之後的JSSE其實已經被整進Java裡面了,無須額外安裝或是下載jar檔。
更不需要設什麼安全提供,如:
System.setProperty("java.protocol.handler.pkgs", "com.sun.net.ssl.internal.www.protocol"); Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
一切的一切就只是讓你的jre信任SSL的憑證鍊即可。信任的方法很簡單,在你的jre\lib\security底下有一個cacerts檔。用keytool把SSL的憑證鍊中的每個憑證加進來,就算達到信任了!指令為:
keytool -import -keystore cacerts -file <憑證檔> -alias <給這個資訊任意名稱>
cacerts的預設密碼是changeit。
使用前,可以先copy一份cacerts作為備份。
Web Service混搭SSL
之後,再用Web Service直接去用URL類別連接https就不會有exception了!可喜可賀!(如右上圖)
共勉之
其他參見:

2008年6月6日 星期五

Eclipse, The Service implementation selected is invalid

今天在測Eclipse的WebService精靈時,發生:

The Service implementation selected is invalid

的問題。之前建過很多次,都沒有這種問題。且建立的service內容也很單純,應該沒有什麼特別需要調整的才對。

上網找過才發現,class的名稱,第一個英文字母要大寫...

底下是我找到的文章。我與這個po文者有相同的疑問...要第一個英文字母大寫...是必要的嗎?有何原因咧...

這一切是個謎呀...歡迎各位朋友指教...

http://dev.eclipse.org/newslists/news.eclipse.webtools/msg16254.html



http://dev.eclipse.org/newslists/news.eclipse.webtools/msg16258.html