Mavenプロジェクトにライブラリを追加してみる
TweetPosted on Tuesday Jan 21, 2014 at 07:51AM in Technology
何をするの?
EclipseからMavenを使ってライブラリを追加してみます。
環境
- Eclipse Kelper SR1
- OS X 10.9.1
- ここで作ったプロジェクトが対象
Commons Langを追加してみる
何がうれしいの
Commons Langのサイトに限らずJavaで書かれたライブラリのWebサイト等をみるとこういう表記を見かける事が有ります
ここに書かれた表記をpom.xmlに追記すれば、自動的にjarファイルをダウンロードしてきてプロジェクトの設定を更新してくれます。依存関係があったり数が多かったりすると自力でjarファイルを集めるのはとても大変なのですが、少しコピペするだけで済むのはすごくうれしい。
pom.xmlを編集する
まずEclipseでpom.xmlを開いてpom.xmlタブをクリックします
pom.xmlが表示されます
既にあるdependency要素の直後に、Commons Langのサイトに書いてあった内容を追記します(選択部分)。
保存すると右下の処理中インジケータが動き出します。処理が終わったらMaven Dependenciesを開いてみると
追加されていますね。自分でダウンロードしてゴニョゴニョとやるよりもだいぶ楽です。
参考文献
Tags: eclipse
JUnitを動かしてみる
TweetPosted on Tuesday Jan 21, 2014 at 07:48AM in Technology
何をするの?
EclipseからJUnitテストを動かしてみます
環境
- Eclipse Kelper SR1
- OS X 10.9.1
- ここで作ったプロジェクトが対象
JUnitの設定
プロジェクトのプロパティを開いて、Java Build Pathを選ぶと何故かテスト用ディレクトリがおかしな事になっています。×印がついています。missingだそうです。
どうもディレクトリが無いようなので作ります。こんな感じ
作ったらプロジェクトをリフレッシュ
再度Java Build Pathを見てみましょう。×印が消えました。
テストを書いてみる
テストクラスを作る
jbatchのところで作ったクラスを対象にテストを書いてみましょう。右クリックしてNew→Otherを選びます
junitと検索すると現れるJUnit Test Caseを選んでNext
Source Folderは先ほど作ったテスト用のディレクトリに変更し、その他必要事項を入れてFinish
OK
テストクラスができました。
走らせてみる
メニューからRunを選びます
JUnit Testを選んでOKを押します
失敗なのが切ないですが動きましたね。Shift+Cmd+F11がショートカットなので使うと楽です。
参考文献
Tags: eclipse
軽いUMLエディタ「Umlet」を使ってみる
TweetPosted on Tuesday Jan 21, 2014 at 07:45AM in Technology
何をするの?
Javaで作られたUMLエディタUmletでUMLダイアグラムを書いてみます
環境
- Umlet 12.2
- Oracle JRE7 u51
- OS X 10.9.1
Eclipseプラグイン版も存在するようですが、私はスタンドアロン版のumlet_12.2.zipというやつを取ってきました。
起動してみる
zipを展開してumlet.shを叩くと立ち上がります。
クラス図を描いてみる
クラスを一つ描いてみる
- 画面右上の部分にあるSimpleClassを画面左側にドラッグして持っていきます
- 右下のPropertiesの部分を編集してクラスの名前を変えたりメンバを追加していきます。編集するとリアルタイムで反映されます
他のツールと異なり非常にシンプルですがその分軽いです。
関連を描いてみる
-
もう一つクラスを作ります
-
画面右上にある集約をダブルクリックします ちなみに画面左側でもダブルクリックでオブジェクトをコピーできます
-
画面左に新しく集約が作られます
-
マウスで位置と長さを調節します
-
カーディナリティを入れてみます
-
ltの<を一つ追加してコンポジションに変えてみます
<の数で端の形が変わります。
2つで継承
1つで矢印
0でただの線
Exportしてみる
どうやるの?
FileメニューからExport as...を選ぶと出来ます
PDF出力してみる
まあ普通ですね
日本語をPDF出力してみる
こんなのをPDFにすると
うーん何故か日本語が消えてしまいます
日本語をPNG出力してみる
PNGだと大丈夫
日本語をSVG出力してみる
SVGでもOKですね
その他
- 矩形選択はCmd+ドラッグ
- 折れ線は線の上の何も無いところでドラッグ
クラス図の他は?
いろいろ描けるみたいです。
参考文献
Tags: uml
ロール、DB、権限、テーブルを定義してみる
TweetPosted on Tuesday Jan 21, 2014 at 07:42AM in Technology
環境
- PostgreSQL 9.2.6
- CentOS 6.5
- ここに書いた作業をした後
何をするの?
- ロールの定義
- データベースの作成
- 権限の割当
- テーブルの作成
ロールの定義
どんなロールが必要か?
こんなものだろうか
- 何でもできるスーパーユーザ
- データベースを作ったりは出来ないが、テーブルの読み書きとDDLも流せる人力メンテ用のユーザ
- テーブルの読み書きできるけどDDLは流せないアプリ用のユーザ
スーパーユーザでログインする
別に作らなくてもインストールしただけでpostgresというユーザが用意されている。こうするとログインできる
sudo -i -u postgres psql
createuserコマンドのオプション
- -P
- 作成と同時にパスワードを設定する
- -e
- 作成時に実行されるSQL文を表示する
- -S
- 非スーパーユーザにする(デフォルト)。スーパーユーザにする場合は -s
人力メンテ用のユーザを作る
sudo -i -u postgres createuser -P -e -S kyle
アプリ用のユーザを作る
sudo -i -u postgres createuser -P -e -S wildfly
ユーザ一覧を見る
$ sudo -i -u postgres sh -c "psql -c 'select * from pg_shadow'" usename | usesysid | usecreatedb | usesuper | usecatupd | userepl | passwd | valuntil | useconfig ----------+----------+-------------+----------+-----------+---------+-------------------------------------+----------+----------- postgres | 10 | t | t | t | t | | | kyle | 16384 | f | f | f | f | *** | | wildfly | 16385 | f | f | f | f | *** | | (3 行) $
テーブル単位とか細かい権限制御は別のコマンドを使うのだろう。
データベースの作成
オーナーを指定して作成する
ここでは人力メンテ用のユーザをオーナーにしてデータベースを作ってみましょう。
echo create database articles owner kyle encoding \'UTF8\' TEMPLATE template0 | sudo -i -u postgres psql
データベース一覧を見る
sudo -i -u postgres sh -c "psql -c '\l'"
出来てますね。
$ sudo -i -u postgres sh -c "psql -c '\l'" データベース一覧 名前 | 所有者 | エンコーディング | 照合順序 | Ctype(変換演算子) | アクセス権 -----------+----------+------------------+----------+-------------------+----------------------- articles | kyle | UTF8 | C | C | postgres | postgres | SQL_ASCII | C | C | template0 | postgres | SQL_ASCII | C | C | =c/postgres + | | | | | postgres=CTc/postgres template1 | postgres | SQL_ASCII | C | C | =c/postgres + | | | | | postgres=CTc/postgres (4 行) $
データベースを削除する
sudo -i -u postgres sh -c "psql -c 'drop database articles'"
権限の割当
いったんpublicスキーマの権限を全て剥奪する
sudo -i -u postgres sh -c "psql articles -c 'REVOKE ALL ON schema public FROM public'"
kyleはDDLを流せるようにする
sudo -i -u postgres sh -c "psql articles -c 'GRANT ALL ON schema public TO kyle'"
wildflyはCRUDのみ許可する
sudo -i -u postgres sh -c "psql articles -c 'GRANT USAGE ON schema public TO wildfly'" sudo -i -u postgres sh -c "psql articles -c 'grant select, insert, update, delete on all tables in schema public to wildfly'" sudo -i -u postgres sh -c "psql articles -c 'GRANT SELECT, UPDATE ON ALL SEQUENCES IN SCHEMA public TO wildfly'"
テーブルの作成
psqlコマンドでログインしてみる
psql articles
テーブル一覧を見る
\d
テーブルを作る
CREATE TABLE test_table ( id bigint NOT NULL, description character varying(128) NOT NULL, name character varying(128) UNIQUE NOT NULL, seq integer UNIQUE NOT NULL, created timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP, updated timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (id) );
テーブル定義を見る
\d test_table
その他
DDLのダンプ
sudo -i -u postgres sh -c "pg_dump --schema-only articles" > dumped.sql
アプリ用ユーザからログインしてみる
sudo -i -u wildfly psql articles
psql実行中にデータベースを切り替える
\c hogedb
\c hogedb hogeuser
ユーザをスーパーユーザにする
ALTER ROLE kyle WITH CREATEROLE SUPERUSER
やってみる
kyle-no-MacBook:~ kyle$ psql -U postgres Password for user postgres: psql (9.2.4) Type "help" for help. postgres=# ALTER ROLE kyle WITH CREATEROLE SUPERUSER; ALTER ROLE
kyle-no-MacBook:~ kyle$ psql Password: psql (9.2.4) Type "help" for help. kyle=#
プロンプトが変わった。
ユーザを非スーパーユーザにする
kyle-no-MacBook:~ kyle$ psql Password: psql (9.2.4) Type "help" for help. kyle=# ALTER ROLE kyle WITH CREATEROLE NOSUPERUSER; ALTER ROLE kyle=# \q
kyle-no-MacBook:~ kyle$ psql Password: psql (9.2.4) Type "help" for help. kyle=>
プロンプトが元に戻った。
参考文献
- database - How to configure postgresql for the first time? - Stack Overflow
- createuser
- データベースの作成 - データベースの作成 - PostgreSQLの使い方
- psqlプログラムサンプル集
- データベース作成 postgres編|たは。(∩∀`*)
- STUDIO WING .lib: PostgreSQL:テーブルを作成 CREATE TABLE
- インデックスの作成 - インデックスの作成 - PostgreSQLの使い方
- 文字列型の使い分け — Let's Postgres
- UNIXコマンド - su
- 権限の追加 - ロール(ユーザー)の作成 - PostgreSQLの使い方
- postgresql - Why is a new user allowed to create a table? - Database Administrators Stack Exchange
- PostgreSQLスキルアップノート
- PostgreSQLでの「¥c」コマンドによる接続先データベースの変更方法 - r_nobuホームページ
- sql - GRANT SELECT privilege to ALL sequences using one statement - Stack Overflow
Tags: postgres
ProjectStageをJNDIで設定する
TweetPosted on Tuesday Jan 21, 2014 at 07:39AM in Technology
環境
- WildFly 8.0.0CR1
何をするの?
JSFのProjectStageをJNDIから取得するように設定してみます。このProjectStageというのはJSFエンジンに与えるパラメータの一種で、値としてはPRODUCTION(本番稼働フェーズ)、DEVELOPMENT(開発フェーズ)などが定義されています。開発フェーズではDEVELOPMENTにしておくと、問題発生時にデバッグのための情報が多く吐き出されたり、本番稼働フェーズではPRODUCTIONにしておくと、パフォーマンスが向上したりします。
基本的にはweb.xmlに定義するのですが、web.xmlに直接書いてしまうと本番稼働時にPRODUCTIONに変更したい、となったときに若干面倒です。そこでこの値をJNDIから取得するようにしてみます。
JNDIの設定
jboss-cliを起動
wildflyのbinディレクトリ内に存在するCLIの管理コンソールです。GlassFishのasadminに相当すると思われます。Windowsではjboss-cli.bat、Unix系ではjboss-cli.shを使って起動します。起動するとこんな感じになります
$ ./jboss-cli.sh You are disconnected at the moment. Type 'connect' to connect to the server or 'help' for the list of supported commands. [disconnected /]
接続
connect とコマンドを打つとAPサーバに接続するようです
[disconnected /] connect [standalone@localhost:9990 /]
JNDIエントリを新規作成
新たにJNDIエントリを追加するときはこれ。java:/env/jsf/ProjectStageがキー、Developmentが値になります
/subsystem=naming/binding=java\:\/env\/jsf\/ProjectStage/:add(binding-type=simple,value=Development,class=java.lang.String)
こういう感じにsuccessと出ればOK
[standalone@localhost:9990 /] /subsystem=naming/binding=java\:\/env\/jsf\/ProjectStage/:add(binding-type=simple,value=Development,class=java.lang.String) {"outcome" => "success"} [standalone@localhost:9990 /]
JNDIエントリを更新
既に作ったエントリを更新する場合はこんな感じ。java:/env/jsf/ProjectStageをUnitTestに変更する例はこちら
/subsystem=naming/binding=java\:\/env\/jsf\/ProjectStage/:write-attribute(name=value,value=UnitTest)
JNDIエントリを確認
こんな感じ。一番右側のvalueというところに設定した値が出ています
[standalone@localhost:9990 /] ls /subsystem=naming/binding=java\:\/env\/jsf\/ProjectStage binding-type=simple cache=undefined class=java.lang.String environment=undefined lookup=undefined module=undefined type=undefined value=UnitTest [standalone@localhost:9990 /]
JNDIエントリの一覧
[standalone@localhost:9990 /] ls /subsystem=naming/binding java:/env/jsf/ProjectStage [standalone@localhost:9990 /]
まだ1つだけしか無いようですね
JNDIエントリを参照するJSFアプリを作ってみる
プロジェクトを作る
ここまでに述べた通りJNDIエントリは作成してあるものとします。ここに書いたのと同じ要領で空っぽのJavaEE7プロジェクトを作ります。プロジェクトの設定でCDIを有効にしておきます。これをやると空のbeans.xmlが作成されます。
web.xmlを作る
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> <servlet> <servlet-name>Faces Servlet</servlet-name> <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>Faces Servlet</servlet-name> <url-pattern>*.xhtml</url-pattern> </servlet-mapping> <resource-ref> <res-ref-name>jsf/ProjectStage</res-ref-name> <res-type>java.lang.String</res-type> </resource-ref> </web-app>
jboss-web.xmlを作る
<?xml version="1.0" encoding="UTF-8"?> <jboss-web> <resource-ref> <res-ref-name>jsf/ProjectStage</res-ref-name> <res-type>java.lang.String</res-type> <jndi-name>java:/env/jsf/ProjectStage</jndi-name> </resource-ref> </jboss-web>
CDI管理Beanを作る
package psjndi; import javax.enterprise.context.RequestScoped; import javax.faces.context.FacesContext; import javax.inject.Named; @Named @RequestScoped public class TestBean { public String getProjectStage() { return FacesContext.getCurrentInstance().getApplication().getProjectStage().toString(); } }
XHTMLを作る
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:ui="http://java.sun.com/jsf/facelets"> <h:head></h:head> <body> #{testBean.projectStage} </body> </html>
資源の配置場所を確認
上記の資源たちの配置はこんな感じになります。beans.xmlも存在する事を確認してください。
確認したらデプロイしてみます。
アクセスしてみる
JNDIに設定した通りDevelopmentと表示されます。
ProjectStageを変更してみる
jboss-cliから変更してみる
UnitTestに変更してみます。
[standalone@localhost:9990 /] /subsystem=naming/binding=java\:\/env\/jsf\/ProjectStage/:write-attribute(name=value,value=UnitTest) { "outcome" => "success", "response-headers" => { "operation-requires-reload" => true, "process-state" => "reload-required" } } [standalone@localhost:9990 /]
アプリにアクセスしてみる
これだけやってブラウザをリロードしてもDevelopmentのままです。まあoperation-requires-reloadとか言っているので再起動なりの作業が必要なのでしょう。そこで再起動かけてみます。Servers窓からWildFlyの右クリックメニューを表示してRestartを選びます。再起動したら再度リロードしてみます。 アプリの資源を一切触る事無く変更することができました。
ProjectStage一覧
- Development
- UnitTest
- SystemTest
- Production
Productionに近づくほど例外とかの詳細度が低くなっていきパフォーマンスが向上するらしい。うろ覚えですが、速くなる他にも、キャッシュとかの挙動が変わったりJSFが自動で用意するJavaScriptが差し替えられていたりしたような記憶が有ります。おそらくDevelopmentではデバッグしやすいJavaScriptが送られたりするのでしょう。
参考文献
Tags: jsf