PageRank



轉移公告

計劃把 http://blog.hoamon.info/ 文章全部轉移至 http://www.hoamon.info/blog/ 這裡,而本 Blogger 站台的文章近 500 篇,我預計在 2014-12-31 前移轉完畢,完成後 http://blog.hoamon.info/ 將只作代轉服務,一律把舊連結如 http://blog.hoamon.info/index.html 轉成 http://www.hoamon.info/blog/index.html ,敬請舊雨新知互相走告。

新文章只發佈在 http://www.hoamon.info/blog/

何岳峰 敬上
顯示具有 java 標籤的文章。 顯示所有文章
顯示具有 java 標籤的文章。 顯示所有文章

2012年9月18日 星期二

Tomcat6 + JSP + JNDI + Oracle 設定

朋友公司最近想要接個案子:『在 AWS 上面架一個 JSP 網站,而且指定資料庫須用 Oracle DB 』。

用 Oracle DB 不是難事,拿信用卡註冊進去就有了,跑一個小時最低收你 0.17 美金(約臺幣 6 元),很多人都付得起。麻煩的是朋友及我都不是熟 JAVA 及 Oracle 的人。因為我們愛用 Open Source (奇怪 JAVA 明明就是 Open Source 呀! 怎麼我直覺不是呢???)。

為此,我找了高中同學 K ,他可是名門正派(資工背景)出身,從 C , Delphi , VisualBasic , JAVA , .Net 一路走來的程式設計師。而且他幫客戶開發時,多半是採用 Oracle 或是 SQL Server 的資料庫。於是一拍即合。

那我要幹麼呢? 也不是作個牽溝仔怎麼簡單的工作就結束了。 K 只熟 Windows ,而那個 AWS EC2 是要跑 Linux 的。所以我的工作就是搞定 Linux 上的 Http 伺服器( Apache or Nginx )、 AP 伺服器( Tomcat6 ) 及 JNDI Container (其實,我一直想不懂這 JAVA 或物件導向的術語)。

在 AWS 上租用 Oracle DB 是即用即付的,所以我想要在本機先測試 Tomcat6, JNDI 設定成功後再送上去。

我的作法是在本機的 VirtualBox Windows 上裝一個 Oracle 11g express (因 Oracle 沒出 Ubuntu 版),再作一個 1521 port 的 forward ,下載 sqlplus, basic 套件,測試連線正常:

$ sqlplus test/test@//localhost/XE

第一個 test 表帳號,第二個表密碼,最後面的 XE 表資料庫實例的名稱,預設是 XE 。能看到 SQL> 提示就表示可連線 Oracle 11g 了。

安裝 Tomcat6 非常簡單,在 Ubuntu 中打上 apt-get install tomcat6 就夠了。接下來去抓 Oracle 的 jdbc driver: ojdbc6.jar ,置入 /usr/share/java 目錄。然後修改 tomcat6 設定檔:

# /etc/tomcat6/catalina.properties
common.loader=${catalina.base}/lib,${catalina.base}/lib/*.jar,${catalina.home}/lib,${catalina.home}/lib/*.jar,/var/lib/tomcat6/common/classes,/var/lib/tomcat6/common/*.jar,/usr/share/java/*.jar

# /etc/tomcat6/content.xml

<Context>
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
    <Resource name="jdbc/OracleDB" auth="Container"
    type="javax.sql.DataSource" driverClassName="oracle.jdbc.OracleDriver"
    url="jdbc:oracle:thin:@localhost:1521:XE"
    username="test" password="test" maxActive="20" maxIdle="10"
maxWait="-1"/>
</Context>

# /var/lib/tomcat6/webapps/MyApps/WEB-INF/web.xml

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
    <display-name>My Web Application</display-name>
    <description>
        A application for test.
    </description>
    <resource-ref>
        <description>Oracle Datasource example</description>
        <res-ref-name>jdbc/OracleDB</res-ref-name>
        <res-type>javax.sql.DataSource</res-type>
        <res-auth>Container</res-auth>
    </resource-ref>
</web-app>

然後在 /var/lib/tomcat6/webapps/MyApps/ 放入一個 test_oracle.jsp 程式:


<%@ page import="java.sql.*" %>
<%@ page import="javax.sql.*" %>
<%@ page import="javax.naming.*" %>
<%@ page language="java" contentType="text/html;charset=UTF8" %>
<%
Connection con = null;
Context initContext = new InitialContext();
Context envContext  = (Context)initContext.lookup("java:/comp/env");
DataSource ds = (DataSource)envContext.lookup("jdbc/OracleDB");
try {
    con = ds.getConnection();
    if(!con.isClosed()){
        out.println("與 Oracle db 有連線!!\n<br/>");
    }
    con.close();
} catch (SQLException sqle) {
    out.println("sqle = "+sqle);
} finally {
    con = null;
}
%>

最後到瀏覽器去觀看 http://localhost:8080/MyApps/test_oracle.jsp 網頁,有看到『與 Oracle db 有連線!! 』那就成功了。


2009年4月22日 星期三

Does IBM Merge Sun? No, but Oracle will.


引自:http://www.techcrunch.com/wp-content/uploads/2009/04/oracle-sun.png


事實上, IBM 買 Sun ,就產品線而言,只有一個 Java 對它是值錢的,其他的 Sparc CPU, Solaris OS 對 IBM 而言,都是「無用的」,因為它光是整合自己的資產都花了不少心力了,何況還要拿一個架構幾乎不同的東西來研究,雖然就 Solaris 來說,它比 AIX 好用,但又如何! IBM 自己也在發展 Linux 呀,何必再拿 Solaris 上架。

至於 MySQL 方面,雖然它與 DB2 有互補效應,不過,我認為這些原本用 MySQL 的網站,就算將來搞大了, MySQL 撐不住時,要它換 DB2 ,它們也不見得願意,換 PostgreSQL 的可能性都還會比 DB2 Express-C 高點。

事實上,除了一起推廣 Java 外, IBM 與 SUN 根本就是彼此的大對頭,像是:
Sparc V.S Power
Solaris V.S AIX
NetBeans V.S Eclipse(還故意叫「日蝕」)
PostgreSQL + MySQL V.S DB2
GlassFish V.S Websphere
只可惜在規模上, SUN 遠遠不如 IBM 。

所以 IBM 實際上是拿 65 億美金買了 Java (事實上, Java 也是 Sun 在紐約證交所的代號)。日前因收購消息, Java 的市值也差不多來到 60~70 億美元附近。

然而,事情沒那麼簡單,以 IBM 這個企業巨人而言,出此招絕不是只有在技術面上考量而已,還有策略。

當 IBM 叫囂要買下 SUN 的同時,其實就算後來沒買到,這都已經讓 IBM 得利了。怎麼說,先說說買下 SUN 的情況, IBM 將完全掌握 Java ,雖然它本身是 Open Source 軟體,但未來 IBM 絕對可控制 Java 語言的方向; 但在沒買下的情況中, IBM 也會有所收獲,因為它對那些 SUN 原有客戶及潛在客戶喊話:「現在買 SUN 的機器是沒有保證的,因為我可以花錢讓你們買的機器沒有未來擴充性。」

我認為這購併真是 IBM 的高招呀! 不過,我想 SUN 應該早就明白這一點了,所以它在2004年即努力地將過去的成果拼命 Open Source 化,讓客戶認知 - 使用它們的產品就算公司倒了,也能繼續運作下去,不過是少了塊 Logo 而已。

直到昨天,我都還認為 SUN 應該就這麼倒下去了吧!因為它們拒絕了 IBM 的購併提議。然而,昨天出現了大逆轉: Oracle 加入戰局了。

Oracle 打算拿出 74 億美金併購 SUN ,而這一點也經 SUN 董事會同意了,現下只等股東會開會通過, SUN 就成了 Oracle 的一份子。相較於 IBM 花 65 億只買下 Java , Orcale 用 74 億買 MySQL, Sparc, Solaris,Java 就顯得非常划算了。

一直以來(從學會 vi 開始),我對 SUN 的產品(除了 Java)都非常有好感, 因為 Bill Joy 是 SUN 的四位創辦人之一,而他的成就改變了我這一生使用電腦的方式 - 總是在 Escapse。

最近也裝了 OpenSolaris 2008.11 ,雖然在使用習慣上,還是離 Ubuntu 有一段距離,但它有個耀眼的功能,是我非常欣賞的,而這功能對「不使用版本控制器的人」來說,可算是「殺手級應用」。那就是「時間軸」功能。在 OpenSolaris 中,啟動「時間軸」功能後,則你在 ZFS 磁區中的所有檔案都會被作快照,所以當你想找出兩天前被你誤刪的檔案就非常簡單啦。詳情請見ZFS snapshot visualization in GNOME

= 後記 =
果然在 IBM 的併購策略下, SUN 的硬體市佔率掉了

2007年4月13日 星期五

Eclipse + PyDev

一直以來,都是用 Vim 作編輯的:寫網頁、 Perl 、 Python 、 shell script 、設定檔…,但學弟妹們還不會用 Vim 就要求他們拿來寫 Python ,這有點為難。對很多人來說,「鍵盤」絕對是「沒有生產力」可言的。

那如果不用 Vim 的話,那麼我的第二選擇會是 Eclipse ,因為它是 open source ,是 IBM 拱的,可以跨平台,也適合拿來寫網頁、 Latex 、 Python 、 PHP ...。

寫了一份簡單講義教他們如何在 Windows 上搞定 Eclipse + PyDev 。結果自己在 Ubuntu 平台上卻搞不定 Eclipse + Subclipse ,問題是出在我使用 Gnu 的 Java Run Time ,而它在 ssl key 的部份會發生無法接受過長的 ssl 憑證,卡在這裡非常久,試著安裝 javahl 函式庫,但我不知道到那裡改設定( Eclipse 的選項實在太多了,雖然我現在終於知道要到那裡改了),所以我放棄了 Gnu 的 jre ,改用 sun 出的 j2se sdk 。裝完後,在啟動 eclipse 前,先作如下設定

export JAVA_HOME=/usr/local/jdk1.6.0_01
export PATH=$JAVA_HOEE/jre:$JAVA_HOME/bin:$PATH
export CLASSPATH=$JAVA_HOME/lib

即可。

我打算給 Eclipse 一個機會,讓我在跑 Python 程式時能更有效率,編輯的部份當然還是得靠 VIM 了。

2007年3月10日 星期六

JavaScript ≠ Java

回應阿西摩的分享誌: JavaScript ≠ Java

題目是對了。javascript的確不等於java,就像java不等於javascript一樣。

但java比javascript高級??這就有問題了。這就像是拿xx比芭樂一樣。

你會拿java applet來作表單,然後在裡面作資料驗證嗎?是有這個可能(需加密的登入表單,如網路郵局的表單),但全世界有99%(這是不精確的形容詞,表示很多而已)的程式師是拿javascript來作。

javascript可以拿作寫桌面程式嗎?現在可能還沒有人拿它直接來作整個桌面程式,只有拿來作桌面程式中的一個小元件,像是檢查使用者輸入指令(javascript sheel),但將來網頁應用程式當道時,又會有多少桌面程式留下來?java跨平台又如何,一堆動態語言(python、perl、ruby、php)都跨平台,連javascript也跨平台(請不要拿Jscript來說,那是微軟自己玩爽的),不只是活在瀏覽器,也可以活在伺服端。

阿西摩只是一個良好的 java 程設師,不是一個良好的 javascript 程設師,因此他的立場不中立。而我不是一個良好的 javascript 程設師,但我卻不妄言 javascript 劣於 java ,所以這應是包含態度的問題。

2006年11月21日 星期二

LifeType的JUpload模組問題

JUpload模組是為了使上傳檔案更便利所設定了,它用起來就像系統裡的「檔案管理員/檔案總管」程式,可以同時選定多個檔案上傳。

然而,我的個人電腦在昇級到Fedora Core 5後,這個JUpload模組失效了,原本一直以為是j2re的版本問題,所以一直在找1.4版的安裝程式,因為java.com的程式已昇級到1.5了所以很難找,但找到後裝了卻會讓我的 firefox崩潰,於是改了方向,去下載新版的JUpload程式。但一樣是不行。十分不爽。

慢慢地在找問題的過程中,我知道了java程式的 log檔位置,也知道是錯在那裡了。原因在於我的電腦不允許java applet去讀取我的檔案系統,這是權限的設定問題。所以我到了javaworld討論區查了一下,權限該到那裡改,幸運地查到 java.policy檔案的設定方法。

在我的電腦裡,java.policy是在 /opt/jre1.5.0_06/lib/security 中,修改的方式是在這個檔案中的 grant 區塊裡加入:

permission java.io.FilePermission "<>", "read";

這樣即可。


當然,你要讓java applet能讀你系統中的任何檔案,你就要有心裡準備,準備什麼?別抓奇怪的java applet程式來玩,當心你的資料外洩。

最後,我的心情由「不爽」到「高興」。
Related Posts Plugin for WordPress, Blogger...