Spring Roo

最近新規でプロジェクトを作ってなかったので、Spring、Maven、JDBCの設定など大分忘れている。

いつも、新規で作成するときは時間がかかってしまうし、まあ、似たような構成のテンプレートなんてそこらへんに落ちてる空問題ないといえば問題ないがやっぱりいけてない。

そこで今回チャレンジしてみたのが「Spring Roo」。

http://www.springsource.org/spring-roo/

CUIでコマンドを叩けば、ソースを生成してくれるという優れもの。

DBの設定ファイルを生成してくれたり、DBのテーブルからCURDのscaffoldしてくれたり、Mongoの設定してくれたり、web mvcの構成の設定をしてくれたり、至れりつくせり。結構こんな作業は、いままで作ったプロジェクトからコピーして移植したりする必要もないし、一から作る必要もない。

とりあえずは環境作成からやる。

http://www.atmarkit.co.jp/fjava/rensai4/springroo01/02.html

http://d.hatena.ne.jp/ousttrue/20111127/1323792915

問題発生。。。

cygwin上で設定していたのだが、どうやらcygwinでは動かない様子。。。

だったら、IDE上で使う。。。

 

カテゴリー:その他

redmine でのメールの設定

redmineのメール機能が動いていないことに気がついて、設定してみることにした。

お約束通り、redmineのサイト「http://redmine.jp/」で調べる。

なにやら以下の設定ファイルを記載することでけるらしい。

/config/configuration.yml

production:
__delivery_method: :smtp
__smtp_settings:
____# tls: true
____address: "smtp.gmail.com"
____port: '587'
____domain: "smtp.gmail.com"
____authentication: :plain
____user_name: "xxxx@xxxxx"
____password: "xxxxxx"

※_はスペース

ここでhttpdを再起動でOKのはず。

が、設定が反映されない。。。rubyのモジュールはapacheの再起動と同時に再起動されるとどっかにかかれてたが。。。はて。。

ここからいろいろログ漁ったり、smtpの設定を変えてみたり、sendmailの設定に変更したり、だだはまり。。。

で気がついた。今回redmineはインストーラを配布しているBitNami「http://bitnami.org/ja/stack/redmine」のを使ってインストールしたのでそこえおじゃますると、しっかり記載されてた。再起動するためのスクリプトが準備してあった。それを実行したら設定ファイルが反映され、うまく送信された。

 

カテゴリー:その他

ファイアウォールの設定

今までファイアウォールについて勉強したことは一度もないかもしれない。

なんとなくwebの記事読んだり、windowのコントロールパネルで見たりぐらいかな。

どこかのタイミングで一通りの知識をつけないといけないなあ。

Linuxでファイアウォールといえばiptablesで割りと簡単に制御できるみたい。

# vi /etc/sysconfig/iptables

ここから↓

# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 81 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

ここまで↑

斜線の部分でポートを開放している。ポートの開放は簡単。最初だからここまで。

カテゴリー:centos

Springのコンポーネントスキャンについて

Springをフレームワークとして使用したwarをtomcat上に展開したときに少しはまったのでメモ。
もともと、別のwarファイルが展開されている同じサーバ上で別のwarを展開しようとしたのだがtomcatがうまく起動しない。
エラーは以下のような感じ。beanが読み込めないと。ビルドも通ってるし、classファイルも問題なくできている。
でも、なぜかエラー。。。
で、もともとあったwarファイルを削除してみたり、classファイルを削除してみたりしながら、検証してみた。
結論から言うと、Springのバグでしょ。。。
<context:component-scan base-package=”*” />
を使って自動コンポーネントスキャンをしているのだが、こいつが、tomcatのパス以下のクラスを勝手にスキャンしてbeanをSpring上に展開しようする。今回のケースだと上記のように「base-package=”*”」で定義すると、A.warとB.warがあった場合、Aのコンテキストを生成するときに、Bのクラスファイルまでスキャンしてしまう。逆もしかり。tomcatのパス以下をスキャンしているから。だが、Aのコンテキストの生成するときに解決できるクラスはA以下にいるクラスファイルだけなので、Bのクラスをスキャンして読み込まれても結局クラス解決できないって落ち。無駄な時間をすごしてしまった。対応策としては、base-package=”*”→base-package=”A.*”として、Aのコンテキストを生成するときはAのパッケージのみスキャンするようにする。解決。

2012-03-22 08:22:23,984 [DEBUG] DefaultListableBeanFactory getBeanNamesForType – Ignoring bean class loading failure for bean ‘postApi’
org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [connection.action.PostApi] for bean with name ‘postApi’ defined in file [/usr/share/tomcat6/.jenkins/jobs/Connection/workspace/target/Connection/WEB-INF/classes/connection/action/PostApi.class]; nested exception is java.lang.ClassNotFoundException: connection.action.PostApi
at org.springframework.beans.factory.support.AbstractBeanFactory.resolveBeanClass(AbstractBeanFactory.java:1262)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.predictBeanType(AbstractAutowireCapableBeanFactory.java:576)
at org.springframework.beans.factory.support.AbstractBeanFactory.isFactoryBean(AbstractBeanFactory.java:1331)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanNamesForType(DefaultListableBeanFactory.java:317)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:396)
at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:612)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:446)
at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:384)
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:283)
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:111)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3972)

カテゴリー:その他

muninでmysqlを監視

muninでmysqlを監視する。mysqlは負荷がかかりやすいので。

munin-nodeがインストールされているサーバで作業する。

ますはapacheの設定を変更

# vi /etc/httpd/conf.d/munin.conf

に以下を設定

LoadModule status_module modules/mod_status.so

ExtendedStatus On

<Location /server-status>
SetHandler server-status
Order Deny,Allow
Deny from all1
Allow from 127.0.0.1
Allow from localhost
</Location>

設定したら、apacheの再起動。

つぎに、munin-nodeの設定

# vi /etc/munin/plugin-conf.d/munin-node

に以下を設定

[mysql*]
env.mysqlopts -u lawyerseek -plawyerseek
env.mysqladmin /usr/bin/mysqladmin

次に、munin-nodeのプラグインを有効にする。どうやら、リンクを張ることで認識してくれるらしい。
# ln -s /usr/share/munin/plugins/mysql_bytes /etc/munin/plugins/mysql_bytes
# ln -s /usr/share/munin/plugins/mysql_innodb /etc/munin/plugins/mysql_innodb
# ln -s /usr/share/munin/plugins/mysql_queries /etc/munin/plugins/mysql_queries
# ln -s /usr/share/munin/plugins/mysql_slowqueries /etc/munin/plugins/mysql_slowqueries
# ln -s /usr/share/munin/plugins/mysql_threads /etc/munin/plugins/mysql_threads

設定したら、munin-nodeを再起動する。

/etc/init.d/munin-node restart

以上
カテゴリー:その他

AccessでMySqlでリンク

MySqlのデータをGUIで更新するツールですが、意外とExcelとかから貼り付けができるツールが見当たらない。(知らないだけ?)
Accessでリンクマネージャで使えばいけるのでリンクしてみた。そこで文字化けしたのが以下で対応できる。

ODBCの詳細設定で文字セットの設定を以下に設定するとOK。

Initial Statement:set names cp932
Chatacter Set:cp932

カテゴリー:その他

MySqlの文字コード

OracleDBからMySqlにデータを移行したことろ文字化けしている。
しまった。文字コードの設定をしていなかったことを思い出した。。。

MySqlにログインして文字コードを調査。

>show variables like ‘character_set%’;

+————————–+—————————————-
| Variable_name | Value
+————————–+—————————————-
| character_set_client | cp932
| character_set_connection | cp932
| character_set_database | latin1
| character_set_filesystem | binary
| character_set_results | cp932
| character_set_server | latin1
| character_set_system | utf8
| character_sets_dir | C:\Program Files\MySQL\MySQL Server 5.5
+————————–+—————————————-

思ったとおり、「latin1」になっている。
「utf8」に変更しないと。

すでにデータを突っ込んでいるので先ずはデータをファイルにダンプする。

#mysqldump -u [ユーザ] -p[パスワード] lawyerseek –default-character-set=latin1 > dump.sql
※「–default-character-set=latin1」を指定しないとファイルにn出力した時点で文字化けしてしまう。

出力したファイルをテキストエディタで開き「latin1」を「utf8」に置換する。

次にMySqlの設定を変更する。

C:\Program Files\MySQL\MySQL Server 5.5\my.ini

※Linuxは「/etc/my.cnf」にある。

を開き、以下のように文字コードの設定を追加する。

※Windowsの場合はなぜか、my.iniを「C:\Windows」以下にも配置しない反映されない。

[client]
default-character-set=utf8

[mysqld]
character_set_server=utf8

MySqlを再起動する。

# net mysql stop

#net mysql start

※Linuxは「/etc/init.d/mysqld restart」でOK。

文字コード間違って作成されているデータベースを削除する。
>drop database lawyerseek;

文字コードを指定してデータベースを再作成
>create database lawyerseek default character set utf8;

先ほどバックアップして、文字コードの置換を行ったダンプファイルを読み込む。

>mysql -u lawyerseek -plawyerseek lawyerseek < _dump.sql

これで文字コードが直っているはず。

カテゴリー:その他

MySqlのログ出力

今運用しているサイトをOracleDBからMySqlへのリプレイスすることにした。
こないだまではrubyで作成されたサイトをjavaに置換していたりとなんとま効率の悪いこと。。。
でも、勉強にはなりますから。
テーブルの構造等はほとんどかえずにリプレイスを行ったが、SQLの構文が少し異なっている部分があり
エラーが出るので、ログの解析。そのときのメモ。

>show variables like ‘log’;
で設定の確認。
+———————————+————————
| Variable_name | Value
+———————————+————————
| log | ON
+———————————+————————

「log=ON」になっていなかった場合は

>set global log = ‘ON’;

で設定変更。

>show variables like ‘general_log_file’;

+——————+———————-
| Variable_name | Value
+——————+———————-
| general_log_file | C:\ProgramData\MySQL\
+——————+———————-

に設定されているファイルに実行されたSQLが出力される。

ついでに、スロークエリの設定もしておく。
レスポンスに問題があるSQLが出力される。

>show variables like ‘log_slow_queries’;
で設定の確認。
+———————+——————————-
| Variable_name | Value
+———————+——————————-
| log_slow_queries | ON
+———————+——————————-

「log_slow_queries=ON」になっていなかった場合は

>set global log_slow_queries = ‘ON’;

スロークエリを出力する閾値を1秒に設定する。

>show variables like ‘long_query_time’;
で設定の確認。
+—————–+———–+
| Variable_name | Value |
+—————–+———–+
| long_query_time | 10.000000 |
+—————–+———–+

>set global long_query_time = 1;

>show variables like ‘slow_query_log_file’;

+———————+——————-
| Variable_name | Value
+———————+——————-
| slow_query_log_file | C:\ProgramData\MyS
+———————+——————-

に設定されているファイルにスロークエリが出力される。

今回は上記設定をクエリから行ったが、常時同じ設定にするのであれば
my.cnfを修正する。

カテゴリー:その他

muninのインストール

先日リリースしたサーバを監視するためmuninをインストールします。
muninは他の監視ツールより高機能で導入も簡単とのこと。
今回、監視ツールを初めて使うので他との比較はできませんが。。。

まずは、yumインストールをしたいのでmuninがyumインストールできるEPELリポジトリを追加する。

# rpm -ivh http://download.fedora.redhat.com/pub/epel/6/i386/epel-release-6-5.noarch.rpm

※サーバ機は、CENTOS6系なので、上記のrpmファイルにてリポジトリをインストール。
CENTOS5系の場合は、別5系のrpmがある。最初は、間違って5系のrpmでリポジトリを追加してしまいmuninのインストールで失敗していました。。。
一日かかってやっと気が付き、5系のリポジトリをアンインストールして、6系のリポジトリに入れなおしたらうまくいった。

epelのリポジトリの確認
# yum list installed | grep epel
epelのリポジトリ削除
# yum erase epel-release.noarch

次は、muninとmunin-nodeをyumインストール
# yum –enablerepo=epel -y install munin munin-node

次はmuninの設定
# vi /etc/munin/munin.conf

以下で監視するサーバの設定をおこなう。「[SampleInfo]」の部分がmuninのTOPページのリンクになる。

# a simple host tree
[SampleInfo]
address 127.0.0.1
use_node_name yes

次は、監視される側の設定。監視されるホスト名を設定する。

また、munin-nodeサーバにアクセスする親サーバのIPアドレスに対して許可設定をする。

# vi /etc/munin/munin-node.conf


# Set this if the client doesn't report the correct hostname when
# telnetting to localhost, port 4949
host_name sample.com

# A list of addresses that are allowed to connect.  This must be a
# regular expression, since Net::Server does not understand CIDR-style
# network notation unless the perl module Net::CIDR is installed.  You
# may repeat the allow line as many times as you’d like
allow ^116\.80\.16\.202$

次にmuninを再起動する。設定を変更した場合は再起動しないと反映されない。
# /etc/init.d/munin-node restart

アパッチも再起動。
# apachectl -k graceful

ポートの開閉確認。一応、muninで使用しているポートが正しく開かれているか確認。
nmap localhost -p 4949

つきに以下のコマンドで起動設定を確認
# chkconfig –list munin-node

マシン起動時にmunin-nodeも起動するように設定
# chkconfig munin-node on

エラーなどのログは以下から参照する。
# ls /var/log/munin/

カテゴリー:その他

Oracleのリスナについて

WindowsのローカルマシンにオラクルDBを入れているのだが、データを参照するときはいつも「Oracle Sql Developer」を使っている。
サーバ機もにオラクルDBを入れているが、そのデータを参照する場合は、ターミナルでsqlplusを使って参照している。

でいつもは「Oracle Sql Developer」でローカルのオラクルDBを参照しているところ、なにを思ったのかコマンドプロンプトでsqlplus叩いてみた。

# sqlplus system/system@XE

>>>> ORA-12154: TNS: 指定された接続識別子を解決できませんでした

え・・・

な~ぜ~。。。

# tnsping localhost
→サーバのオラクルリスナーが起動しているか?OK。
# lsnrctl status
→クライアントのオラクルリスナーが起動しているか?OK。
# lsnrctl services
→リスナー「XE」の設定はちゃんとあるか?OK。
→oracle\product\10.2.0\server\NETWORK\ADMIN\tnsnames.oraにもちゃんとあるか?OK。
# lsnrctl stop
→停止。権限の問題で直接コマンドはたたけないのでコントロールパネルのサービスから停止する。
# lsnrctl start
→開始。権限の問題で直接コマンドはたたけないのでコントロールパネルのサービスから開始する。

んんんんんんん。問題が見当たらない・・・・。

# sqlplus system/system@XE
↑こいつがいけないのか。。。でもサーバ機ではこのコマンドで通る。。。
でも、やっぱ怪しい。

# sqlplus system/system@localhost:1521/XE

に変更してみる。通った。「localhost:1521」って指定しないといけなかったけ。
俺の環境の問題か?今度時間があれば調べよう。

カテゴリー:その他