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

2017年12月16日 星期六

【AWS & RDB & EC2】讓已經存在的EC2上的專案存取新建立的RDB instance

這實在是很矛盾的一件事,但RDS DB可以讓外界(非AWS的環境)存取,可是自己內部的EC2要連線卻需要設定層層關卡。

(據說,這是安全需要。其實RDS DB都有對外部連線設下層層保護,並不是單純的只靠帳號密碼和Endpoint而已。反而是內部的雲端伺服器群可能會有安全疑慮,所以反而要層層把關。)



如果沒有特別選擇,其實AWS會自動把使用者建立一組default的VPC。(不知道什麼是VPC的人就比較尷尬,因為我不知道怎麼精準正確的解釋。就先假設它是種為了使用者設計的「沙箱式」的防火牆,在這牆內的任何AWS雲端虛擬主機都可以視為在同一個子網域中。──解釋的很爛。)

官方標準Guide文件「Create VPL Connect RDS DB」並沒有提到這點,就好像它們也不會說「虛擬機建好以後不能修改VPC」。──VPC的內容可以隨意修改,Instance的各項設定也可以隨意修改,唯獨一旦指定VPC,除非Instance整個刪除否則這項設定不會再更動。


所以某些情況下,建立了一組EC2虛擬主機後也在上面安裝了資料庫的人,可能會想要改用AWS RDS DB服務,這時可能就會碰到不知從何下手的困擾。

幸運的是:建立EC2時即使沒有新建VPC,系統也會幫忙設定一組VPC,而且這組VPC內的設定一應俱全。有Subnet、也有SecurityGroup。而且在新建RDS DB Instance時也可以選用這組PVC。

所以如果想要讓EC2可以存取使用RDS DB,只要找到這組VPC即可。

(這組VPC的名稱也可以修改,修改後就可以快速找到相對的Subnet和SecurityGroup,然後進行修改。)

(修改的原則跟新建時的原則並沒有太多不同。所以可以參考剩下的官方文件、將剩餘步驟改成「修改現有EC2 Instance」和「新建RDS DB並使用現有VPC」即可。)

2017年12月11日 星期一

【AWS & RDB】設定中文語系

AWS上有「建立資料庫虛擬機」的服務。(就是一個只有資料庫,除此以外啥都沒有的虛擬機。

(簡單使用過了以後的想法是:)XAMPP這樣的軟體或組站法很興盛,所以大家可能會習慣(以為)把資料庫和服務供應器架在一起是件好事,但其實服務不一定會只有一套,例如「後台」和「前台」可以分開成兩套供應器,而且只要資料庫還活著、服務供應器隨時可以整個打掉重新架構。


比較值得一提的是:AWS上的資料庫預設都不支援中文,因為語系設為latin,所以需要調整。

調整的方式是設定RDB Instance所接受的ParameterGroup。

如果沒有自己進行過「新增ParameterGroup」,那RDB Instance會自動幫使用者設為「預設/default」,這組Group內的參數都不能修改。──所以要自己新增一組後,再到Instance下去修改ParamterGroup的「指向」。


怎麼編寫自己的ParameterGroup?建議參考一下default的內容。到(左邊的面板中)ParamterGroup中把deault group打開,(這個default的名稱並不是絕對的,可能大家的名字都不一樣,所以就一律稱為default就好。)可以看到所有的參數被條列呈現。

用「char」做關鍵字,就可以看到有那些跟語系有關的選項。將參數名稱記錄下來、然後在自己新增的group中用手動輸入的方式輸入,就可以有這個屬性。


但是修改RDB Instance的ParamterGroup設定,需要決定「要即刻生效」還是「等排程」,即使選了「即刻生效」,似乎還是要用「Reboot」以後才會讓設定生效,這是比較奇怪的地方。


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

AWS的RDB在使用上跟一般SQL幾乎沒有什麼不同。

要指定連線的帳號密碼、用的Driver也是標準SQL Driver。

只是連線用DB Name會在設定Instance時決定,連線用網址(無IP)會在設定完後的Instance詳細資料內用「Endpoint」的名稱顯示。(挺奇妙的命名邏輯。)

2017年11月29日 星期三

【XAMPP】修改正式網站的首頁,或新增服務 (Windows環境)

1.怎麼將Tomcat下的Java專案新增到Apache中讓外部的網址可以找到它。
2.怎麼修改XAMPP的預設首頁服務。



XAMPP是一套軟體,可以幫助下載的人快速安裝好Apache+MySQL+Tomcat。同時MySQL還附帶phpMyAdmin這套視覺化的管理工具。

問題是XAMPP是預設給PHP設計族群使用的工具,裏頭的Tomcat也是「預設」執行PHP,這並不是什麼「問題」,但這導致在網路上關於它的資訊或討論就很少是針對Java族群。



以單純的在Apache上新增一個PHP Service來說,只要把整個PHP專案資料夾複製到XAMPP下的「htdocs」資料夾即可。(注意!為什麼Apache會自動去htdocs下找網站首頁?這也是個「學問」。)

雖然Java專案一樣只要把專案複製到Tomcat的webapps下,重新啟動的時候Tomcat就會自動執行這個專案,但用瀏覽器時只有在「http://localhost/」下才可以找到這個專案,用IP或外部網址其實找不到。

因為在Apache和Tomcat之間是用一種叫做AJP的方式溝通......完全不知道這是什麼,只知道AJP有兩大系列(是不是只有這兩種?我不肯定!):mod_jk和mod_proxy_ajp。

一個標準的Apache其實並不包含這些模組,必須要自己去下載模組後安裝(其實只是把檔案複製貼上)到Apache中,並且寫「一卡車」的AJP設定檔,並且在設定檔中寫明了「Apache要怎麼去Tomcat中找到專案」。──XAMPP的好處就是幫使用者省去了這個步驟。(否則安裝Apache並不難。)

接著我們只需要搞懂XAMPP使用的是哪種版本的AJP協定。最標準的作法是到Apache下的module資料夾去找,這兩個模組其實就是檔案名稱,有模組的檔案名稱就表示這個Apache使用了哪一個模組。

(講精準一點來說,我這是預設安裝並架設Apache+Tomcat環境的老兄不會很多事的下載兩套版本的檔案,如果他真的這樣做了,那就只能從設定檔去看他幫Apache選擇使用了哪套,如果他又很多事的兩套都寫了AJP設定檔,那就只能去找看看Apache內部的設定檔「httpd.conf」中指示了會載入哪一套協定。)

XAMPP使用的是mod_proxy_ajp。(如果要尋找額外的資源,可以用這個方式更精準地找到資訊。)



「Localhost」在Server上(疑似)為「127.0.0.1」這個IP的默認。所以要將Tomcat中的Java專案新增到Apache中,必須要用「http://127.0.0.1/[專案名稱]」這樣的方式寫入設定檔。

(XAMPP中)設定檔名稱為「httpd_ajp.conf」。

設定檔的寫法是...

「ProxyPass "/[專案名稱]" "http://127.0.0.1/[專案名稱]"」和「ProxyPassReverse "/[專案名稱]" "http://127.0.0.1/[專案名稱]"」。──1.新增完建議重開Apache。2.「ProxyPassReverse」似乎可以不用加。


完成以上步驟只是讓Apache可以搜尋到Tomcat中的Java專案。

接著到htdoc中找到「index.php」,把裡面的「header('Location: '.$uri.'/dashboard/');」這段程式碼的「dashboard」改成專案名稱,接著應該就可以順利在首頁找到預期看到的專案了。

2017年9月8日 星期五

【J2EE】如何設計「Server要固定執行的工作」:ServletContextListener、Timer和TimerTask

ServletContextListener是種生命週期監視器。

寫好以後要在web.xml中用「<listener><listener-class>[ServletContextListener實作物件]</listener-class></listener>這組標籤完成設定。

裏頭主要有兩組介面, 「contextDestroyed(ServletContextEvent arg0)」和「contextInitialized(ServletContextEvent arg0)」,前者會在Server關閉或重開時被呼叫執行,後者則是啟動時被呼叫執行。


一般來說,要設定「Server要固定執行的工作」,要先使用這組功能在Server啟動時設定Timer的Schedule。

TimerTask就好像是「工作」的內容,Timer就是固定執行的時段,使用ServletContextListener就是將這兩者啟動並結合。(似乎也可以用一般Request的方式啟動,程式功能上完全沒問題。)


 Timer物件宣告方式很簡單。TimerTask是個抽象介面,但就是個Runnable。

 兩者都取得宣告後,Timer有組函數「schedule(TimerTask arg0, Date arg1, long arg2)」和「schedule(TimerTask arg0, long arg1, long arg2)」,這分別可以設定「TimerTask」(要執行的工作內容)、「Date」(具體啟動的日期),還有「距離現在多少毫秒後啟動」和「多少毫秒後重複執行」。

(「距離現在多少毫秒後啟動」又被稱為「DelayTime」。)

2017年8月27日 星期日

【J2EE】Tomcat設定與管理和Java 1.8的使用

怎麼在Eclipse中匯入Java SDK 1.8的方法應該算很基本,而且本篇不打算太集中在分享怎麼解決問題.......而是說明「你可能碰到了什麼問題」。



Java1.8在Tomcat7上無法正常使用,所以會有需要將自己的測試環境升級為Tomcat8。但其實現在都已經走到了Tomcat9了,就連Tomcat8都有8.0和8.5的分別。

如果下載時,下載到了8.5,但新增Server設定時卻選擇了8.0,很可能會有Version不符合的問題。(正確的訊息顯示為:「Unknown version of Tomcat was specified.」)


要使用Java 1.8,除了要有1.8的compiler外,個別專案的「Project facets」內的「Java」參數後面的設定也要有1.8的選項。

如果「Project facets」內的「Java」參數後面的設定根本沒有1.8可以選擇,那就表示目前設定的Server是Tomcat 7以下。

在下面這個視窗中選擇「Add」...(會開啟下一個視窗。)



 如果這裡頭的選項沒有「Apache Tomcat v8.0」,那就表示下載的Eclipse需要某些外掛。

不要因為自己下載的是官網最新版本就一定有內建這個外掛......因為沒有。


但外掛的部分解答版本就比較混亂。

最標準的解法就是下載「Eclipse Tomcat Plugin」,但這很可能手中使用的Eclipse版本已經安裝了,也就是說這個外掛有問題、所以需要尋求更近一級的解答。

接著一樣是要下載外掛「Eclipse JST Server Adapter」。

但這個外掛很奇妙的地方是它會針對不同的Eclipse版本推出獨立的外掛(有相同的主名稱、卻有不同的子名稱),所以要花點時間力氣找一下。




大致上就這樣。

2017年8月24日 星期四

【J2EE】新建專案發現沒有web.xml

這似乎是某個版本(Servlet 3.0)以後的J2EE才具備的功能。

新機制似乎是可以將web.xml改用annotation.java的方式實現,但以後有空再研究。

反正在專案上點右鍵、選擇「Java EE Tools」、再選擇「Generate Deployment Descriptor Stub」,就可以產生web.xml。

2017年8月23日 星期三

【J2EE TomCat】執行專案顯示404

注意!

下面寫的是指專案環境剛剛建好、還沒有實質上寫過任何一行程式碼的情況下就碰到404。

如果有額外使用什麼框架,例如Spring或Struct,這些步驟非常有可能一點意義也沒有。



這個問題可以統整成幾個步驟...

1.TomCat沒有正常啟動。

先在「Servers」(視窗)內找到正在使用的TomCat Server項目,然後在項目上點選右鍵選擇「Properties」。會看到下面這樣的視窗...注意「Location」後面的路徑,如果沒有指向Servers,就按一下「Switch Location」、接著「Apply」並「OK」離開這個視窗。




再回到「Servers」,點選Server項目後打開下面的視窗。
注意看到「ServerLocations」,如果沒有在第二項「Use Tomcat installation」,那應該就是問題所在了。


有時候「ServerLocation」會整個鎖起來,這是因為沒有把「Servers」中的Server項目徹底暫停。(必要的時候可能還必須刪除。然後重跑一次Define流程。)


2.設定完卻忘了把舊的設定刪除。

注意!如果步驟1不管用,可能要到這裡來把項目刪除。(不然重建就一點意義也沒有了。)
 



3.忘了指定正確的JSP「Runtimes」環境。(也不一定是專指JSP,反正某個需要設定Runtimes的地方設定錯誤。)


這步驟相較之下簡單,就是「Runtimes」中的Server選項沒打勾,所以有檔案無法正確編譯、也就無法執行。(「Runtimes」在畫面最右邊。)