2014年5月6日火曜日

Tomcat + My SQL on Windows 初歩の初歩

My SQLインスール for Windows

世の中にはXAMPPという便利なツールがあるみたいですが、上記ですでにTomcatインストールしている ので、My SQLだけ単独でインストールします。ちなみに以下がXAMPPのサイト

https://www.apachefriends.org/jp/index.html

My SQLをインストールします。以下のサイトが参考になりますが、インストールの ところはかなり変わっています。

http://www.kkaneko.com/rinkou/mysql/mysqlinstall.html

Oracle eDelivery とかでMy SQLでSearchしてからインストールしなくてはいけません。 "MySQL Installer 5.6.18.0 Package"をダウンロードしましょう。

ダウンロードしたZIPを回答して、インストーラーを起動します。

途中にLogin/Password聞かれるところでなぜかエラーになるけどそのままインストール を続けます。

インストールが終わるとWindowsのプログラムにCommand Line Clientというのができる のでそれで操作できます

http://www.kkaneko.com/rinkou/mysql/command.html
mysql->mysql> CREATE DATABASE testdb DEFAULT CHARACTER SET cp932 COLLATE cp932_japanese_ci;
mysql> use testdb;
mysql> CREATE TABLE commodity (
    ->           type INTEGER primary key not null,
    ->           name VARCHAR(32) not null,
    ->           price INTEGER );
mysql> INSERT INTO commodity VALUES( 1, 'apple', 50 );
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO commodity VALUES( 2, 'orange', 20 );
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO commodity VALUES( 3, 'strawberry', 100 );
Query OK, 1 row affected (0.00 sec)

mysql> SELECT * FROM commodity;
+------+------------+-------+
| type | name       | price |
+------+------------+-------+
|    1 | apple      |    50 |
|    2 | orange     |    20 |
|    3 | strawberry |   100 |
+------+------------+-------+
3 rows in set (0.00 sec)

ServletとMySQLの接続

Databaseと接続するためにはコネクタをインストールする必要があります。 コネクタはそれぞれにデータベースによって異なります。ここでは、以下の ページより、My SQLのコネクタをインストールしてください。

http://www-jp.mysql.com/products/connector/
1. JDBC Driver for MySQL (Connector/J)を選択
2. platform independentを選択
3. mysql-connector-java-5.1.30.zipをダウンロード
4. 解凍したフォルダを適当な場所に置く C:\Program Files\Java\mysql-connector-java-5.1.30
5.jarファイルをTomcatのフォルダに置く C:\hoge\apache-tomcat-7.0.53\lib

Servletを以下のように記述すれば、先ほどのCommodityからデータを取得する ことが可能。

@WebServlet("/HelloMySQL")
public class HelloMySQL extends HttpServlet {
 private static final long serialVersionUID = 1L;

 final private static String DBNAME = "testdb"; // Database Name
 
 final private static String USER = "XXXXX"; // user name for DB.
 
 final private static String PASS = "XXXXX"; // password for DB.
 
 final private static String JDBCDriver = "com.mysql.jdbc.Driver";
 
 final private static String DBURL = "jdbc:mysql://localhost/" + DBNAME;

 /**
  * @see HttpServlet#HttpServlet()
  */
 public HelloMySQL() {
  super();
  // TODO Auto-generated constructor stub
 }

 /**
  * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
  *      response)
  */
 protected void doGet(HttpServletRequest request,
   HttpServletResponse response) throws ServletException, IOException {
  // TODO Auto-generated method stub
  Connection conn = connect();
  if (conn != null) {
   Statement stmt = null;
   ResultSet rs = null;
   try {
    conn.setReadOnly(true);
    stmt = conn.createStatement();
    rs = stmt.executeQuery("select * from commodity");
    String resString = "commodity: ";
    while (rs.next()) {
     resString += rs.getString("name") + ", ";
    }
    response.getWriter().write(resString);
   } catch (SQLException e) {
    e.printStackTrace();
   } finally {
    if (rs != null) {
     try {
      rs.close();
     } catch (SQLException e) {
      e.printStackTrace();
     }
    }
    if (stmt != null) {
     try {
      stmt.close();
     } catch (SQLException e) {
      e.printStackTrace();
     }
    }
    disconnect(conn);
   }
  } else {
   response.getWriter().write("Hello, My SQL not connected!");
  }
 }
 
 private Connection connect() {
  Connection conn = null;
  try {
   Class.forName(JDBCDriver).newInstance();
   System.setProperty("jdbc.driver",JDBCDriver);
  }
  catch (Exception e) {
   e.printStackTrace();
   return null;
  }
  
  try {
   conn = DriverManager.getConnection(DBURL, USER, PASS);
  } catch (SQLException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
   return null;
  }
  return conn;  
 }
 
 private void disconnect(Connection conn) {
  try {
   conn.close();
  } catch (SQLException e) {
   e.printStackTrace();
  }
 }

2014年2月23日日曜日

AWS Android SDK

AWSのAndroid SDKを使ってみたので、少し記述しておきます。

まずAndroidから使うためには、ACCESS KEYを取得する必要が
あります。ACCESS KEYを取得するには、IAMというサービスで
ユーザを作ることで可能となります。














ここでユーザを作成した時に、必要なパーミッションを追加して下さい。
今回は、S3に読み書きしたいので、"AmazonS3FullAccess"を使いました。

ACCESS KEYを使った後はAmazonのSDKを取得するのですが、
これはAmazonのサイトから取得して下さい。

http://aws.amazon.com/jp/sdkforandroid/

アプリ側にはJarを追加するだけです。

今回は、新しく追加されたTransferManagerについて記述しておきます。
TransferManagerはS3の操作でよくやる、UploadとDownloadを簡単に
やってくれるものです。

http://docs.aws.amazon.com/AWSAndroidSDK/latest/javadoc/

例えば以下のコードでDownloadが可能です。

public void download(final String bucketName, final String key, final String path,
    final long size) {
    Runnable task = new Runnable() {
        @Override
        public void run() {
            try {
                File file = new File(path);
                Download download = mTransferManager.download(bucketName, key, file);
                TransferProgressListener progressListener = new TransferProgressListener(
                mNotifier, size);
                download.addProgressListener(progressListener);
                download.waitForCompletion();
                download.removeProgressListener(progressListener);
                mNotifier.notifyDownloaded(path);
            } catch (Exception e) {
                mNotifier.notifyError(e.getMessage());
            }
        }
    };
    mExecutor.submit(task);
}
}

2014年1月3日金曜日

Facebookアプリ作成の初歩ではまったこと

AWS EC2を使ってFacebookアプリを作りました。ここでのFacebookアプリとは
AWS EC2にWeb Appを作成し、そのWeb AppをFacebookアプリとして登録
するという一般的なものです。

自分以外のアカウントでは動作しないという状況になったので、その時に問題
の原因をシェアします。

原因は、Sandbox Modeにあります。Defaultでは、これになっていることがある
ので要注意です。Sandbox Modeの場合はFacebook Developerでないとアプリ
を動作させれないようです。Sandbox Modeを無効にしておく必要があります。


Sandobox Modeを無効にするとFacebookアプリはHTTPSで接続する必要
があります。(最近そうなったらしい。でも普通に考えればそりゃそうだよね)

Amazon EC2 ApacheでHTTPSをセットアップを以下のようにしたのでメモ
代わりに書いておきます。ただ、以下の内容は、事前にApacheを立ち上げた
後の作業です。

1. EC2のConsoleで、現在のインスタンスにわりあてているSecurity Groupに
HTTPSを足してください


2. EC2の既存のインスタンスにログインして、mod_sslをインストール

# sudo yum install mod_ssl

3. サーバーの秘密鍵の作成

# cd /etc/pki/tls/certs
# sudo make server.key
# sudo openssl rsa -in server.key -out server.key

4. サーバー証明書の作成

# sudo make server.crt
# sudo mv /etc/pki/tls/certs/server.key /etc/pki/tls/private

5. /etc/httpd/conf.d/ssl.conf で <Virtual Host> と </Virtual Host> の間に以下を記述。
以下のように書き換えます。

#SSLCertificateFile /etc/pki/tls/certs/localhost.crt SSLCertificateFile /etc/pki/tls/certs/server.crt

#SSLCertificateKeyFile /etc/pki/tls/private/localhost.key SSLCertificateKeyFile /etc/pki/tls/private/server.key


$sudo service httpd restart

って感じで、HTTPSにしたら普通にアプリがみんなの環境で動作するようになりました(祝)

2014年1月1日水曜日

Amazon EC2のインスタンス上げた後にすること

自分のためのメモ

1. Private Keyを適当なところに置く

2. chmod 600 xxx.pem

3. ssh configに以下を書いておく。AmazonのDNSのはいろいろあるからワイルドカード使っておくと便利

Host *.compute.amazonaws.com
User ec2-user
Port 22
IdentityFile ~/.ssh/xxxx.pem

3. ssh xxxx.compute.amazonaws.com でログイン

4. sudo yum -y install httpd

5. sudo service httpd start

6. sudo yum -y install emacs