Tomcat7 使用 DataSource(MySQL)

之前比較好命有 JBoss 可以用,現在只有 Tomcat ,有些預設沒開的功能就要想辦法整合進來了,這陣子弄了些有的沒的,趕快記錄一下,免得忘記。

1) 在 Tomcat 下設定

到 $tomcat安裝路徑/conf/context.xml 新增 DataSource 的設定。

context.xml

2) 記得下載 mysql-connector.jar 放到 $tomcat安裝路徑/lib 底下。

3) 重新啟動 Tomcat 就應該可以看到有無連上 MySQL 。

4) 程式碼就可以透過 JNDI 用 jdbc/TestDB (上面設定檔替 DataSource 取的名稱)拿到 DataSource。

Eclipse 整合 Tomcat 遇到問題

但是從 Eclipse 下直接啟動 Tomcat 就會發現一直拿不到 DaraSource,是因為 Eclipse 開啓 Tomcat 時,會用預設的設定檔去覆蓋 Tomcat 的設定檔造成的。

其中一個解法是,直接修改 $eclipse使用的workspace/Servers/Tomcat/context.xml,把上一段做的變動改寫過來即可。

但這樣 Tomcat 和 Eclipse 會有兩個 context.xml (Don't Repeat Yourself),而用 Eclipse 啟動又會覆寫 Tomcat 原本的 context.xml (容易讓人搞不清楚到底以哪個為準)。所以就用了下面的做法。

綁定專案設定

直接修改 $project路徑/WebContent/META-INF/context.xml,把上一段做的變動改寫過來即可。Tomcat 再載入專案時就會加上專案裡新增的 DataSource。

這樣做之後接手的人,只需要部署 war 檔,不用特別到 Tomcat 下做設定,比較符合我個人開發專案的習慣。

Nexus 4 倒地不起

我的四兒子在 2014 過年的時候陣亡了,行動上網上到一半死當,然後重開機後就卡死在四個小球的開機畫面(原生的 Android 4.4.2),當初嘗試了:

  • 刷原廠 Android 4.4.2 > 卡在開機畫面
  • 刷原廠 Android 4.3 > 卡在開機畫面
  • 刷原廠 Android 4.2.2 > 開機有點久但可以開機
四兒子是活過來了,但手機訊號一直是零格,點進去看發現 baseband 版本是 unknown,IMEI 也變成 unknown 了,爬了國外跟對岸的文,發現也有人跟我有一樣狀況,但都沒有解答,唯二看到比較有可能回復的,一個是掏寶有把一個 box 可以重新刷板子,另外 XDA 有篇要自己改 ROM / Script 。難度太高我就放棄了。基本上這台就變成 Nexus Touch 了...

最近手機又掛了,爬文依舊沒有解答,但有問題的人變多了,但 Google 屌,完全沒有要處理的態度,又嘗試了以下的排列組合:
  • 刷原廠 Android 4.4.4 > 卡在開機畫面
  • 刷原廠 Android 4.4.3 > 卡在開機畫面
  • 刷原廠 Android 4.4.2 > 卡在開機畫面
  • 刷原廠 Android 4.3 > 卡在開機畫面
  • 刷原廠 Android 4.4.4 +Baseband 2.0.1700.48 > 卡在開機畫面
  • 刷原廠 Android 4.4.3 +Baseband 2.0.1700.48 > 卡在開機畫面
  • 刷原廠 Android 4.4.2 +Baseband 2.0.1700.48 > 卡在開機畫面
  • 刷原廠 Android 4.3 +Baseband 2.0.1700.48 > 卡在開機畫面
  • 刷 cyanogenmod 11 SNAPSHOT M8 > 卡在開機畫面
  • 刷 paranoidandroid 4.42 > 卡在開機畫面
  • 刷 paranoidandroid 4.2 > 卡在開機畫面

最後還是刷原廠 4.2.2 就又活了,但還是沒有訊號...

寫了文件如下,等到之後有新的原廠 ROM 再來試看看...

Java Mail 用 SMTP 透過 Amazon SES (Simple Email Service) 寄信

本文主要是說明 如何用 JavaMail 透過 Amazon SES 寄信 。

有時候需要一個穩定的 SMTP 主機來幫忙寄訊息,除了自己架主機和透過 Gmail 以外,Amazon 也有一個雲端服務叫做 Amazon SES (Simple Email Service) 可以利用。玩了一下,在考慮不想付費的情況下:

  • 一開啟服務後你就有了一個測試環境(Sandbox),每天可以免費寄200封信給你登記並"通過認證的收件人"。
    • 通過認證的收信人就是,Amazon 會寄封認證信給該收件人,該收件人點信中連結回覆就算通過認證了(就跟一般網站認證很像)。
  • 申請並通過 SES Production Access 後,每天可以免費寄2000封信給"任意收件人"。

程式碼很短但事前步驟有點小多,筆記一下怕以後要用到時又會忘掉。

參考

事前準備

  1. 註冊 Amazon Web Service 帳號。
  2. 取得 Sandbox 環境或是更進一步取得 SES Production Access 環境。
    1. Sandbox 環境
      1. 到 SES 主控台,進入 Verified Senders>Email Addresses>Verify a New Email Address 登記測試環境下要用來測試的收件人。
      2. 收件人通過認證後,就可以直接透過SES 主控台,進入 Verified Senders>Email Addresses>Send a Test Email 來寄信。
    2. SES Production Access 環境
      1. 如果你每天想要寄超過200封信,或是有寄給陌生人的需求,就要填寫表格申請轉換至 SES Production Access,審核結果會在24小時內完成。
  3. 通過前面兩個步驟後,就可以透過 Web Console, AWS SDK 來寄送,但若是用 SMTP 來寄信,必須要到 SES 主控台,進入 SMTP Settings>Create My SMTP Credentials 建立一組帳號密碼。

參考

程式碼

提醒!!

  • 記得專案要 include Java Mail 的 jar 檔。
  • 記得去 SES 主控台建立 SMTP Credentials 取得帳號密碼。

我按官方這篇 Sending an Email Through the Amazon SES SMTP Interface with Java 會發生 java.lang.SecurityException: Access to default session denied ,所以改了一個自己的版本如下:

參考