markdown4jで遊ぶ
TweetPosted on Wednesday Jan 22, 2014 at 01:28PM in Technology
環境
- markdown4j 2.2
- WildFly 8.0.0CR1
- Oracle JDK7u51
何をするの?
markdown4jで遊びます。とりあえずサンプルとかありがちなのを動かしてみてどんな感じのhtmlが生成されるか見てみます。
実験用画面も置いておきます
準備
pom.xml
mavenで取ってこれるのでここにあるdependencyを追加します
実験用画面
JSFで画面を作ります
CDI管理Bean
import java.io.IOException; import java.io.Serializable; import javax.enterprise.context.SessionScoped; import javax.inject.Named; import org.markdown4j.Markdown4jProcessor; @Named @SessionScoped public class MarkdownBean implements Serializable { String body; String md; public String getMd() { return md; } public void setMd(String md) { this.md = md; } public String getBody() { return body; } public void setBody(String body) { this.body = body; } public void process() throws IOException { md = new Markdown4jProcessor().process(body); } }
Faceletsページ
<!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> <h:form> <h:inputTextarea value="#{markdownBean.body}" cols="80" rows="5" id="input" /> <br /> <h:commandButton action="#{markdownBean.process()}" value="process"> <f:ajax execute="input" render="md md2" /> </h:commandButton> <div> <h:outputText value="#{markdownBean.md}" id="md" /> </div> <hr /> <div> <h:outputText value="#{markdownBean.md}" id="md2" escape="false" /> </div> </h:form> </body> </html>
動かしてみる
遊ぶ
markdown4jのページにあるサンプル
最後の方は外部サービス連携みたいですが便利ですね
さらに遊ぶ
# 見出し1 ## 見出し2 段落1ああああああああああああああああああああああああああああああああああああああああああああああああああ 段落2 [リンク](http://www.google.com/) ![画像](/jboss_community.png) ``` java class hoge{ private int hoge; private int hoge2; } ```
参考文献
Tags: markdown
CLIからデプロイしてみる
TweetPosted on Tuesday Jan 21, 2014 at 04:18PM in Technology
環境
- WildFly8.0.0CR1
- Eclipse Kelper SR1
デプロイするWARファイルの準備
WARファイルを作る
対象のプロジェクトを選んで右クリック→Export→WAR file
Web projectとDestnationを埋めてFinish
中身を見てみる
kyle-no-MacBook:~ kyle$ jar tvf ~/JavaEE7Prac.war Picked up _JAVA_OPTIONS: -Dfile.encoding=UTF-8 105 Mon Jan 20 13:28:12 JST 2014 META-INF/MANIFEST.MF 0 Sat Jan 18 21:56:20 JST 2014 META-INF/ 0 Thu Jan 16 15:04:08 JST 2014 META-INF/maven/ 0 Thu Jan 16 15:04:08 JST 2014 META-INF/maven/com.example/ 0 Thu Jan 16 15:04:08 JST 2014 META-INF/maven/com.example/JavaEE7Prac/ 232 Mon Jan 20 18:07:00 JST 2014 META-INF/maven/com.example/JavaEE7Prac/pom.properties 897 Mon Jan 20 18:07:00 JST 2014 META-INF/maven/com.example/JavaEE7Prac/pom.xml 0 Sat Jan 18 21:53:56 JST 2014 WEB-INF/ 0 Sat Jan 18 21:56:12 JST 2014 WEB-INF/classes/ 0 Sat Jan 18 21:56:20 JST 2014 WEB-INF/classes/META-INF/ 0 Sat Jan 18 21:47:46 JST 2014 WEB-INF/classes/META-INF/batch-jobs/ 183 Sat Jan 18 21:50:40 JST 2014 WEB-INF/classes/META-INF/batch-jobs/job001.xml 0 Thu Jan 16 15:09:30 JST 2014 WEB-INF/classes/com/ 0 Mon Jan 20 17:00:08 JST 2014 WEB-INF/classes/com/example/ 678 Mon Jan 20 13:28:16 JST 2014 WEB-INF/classes/com/example/TestBatchlet.class 1413 Mon Jan 20 13:28:16 JST 2014 WEB-INF/classes/com/example/TestServlet.class 252 Sat Jan 18 21:53:56 JST 2014 WEB-INF/beans.xml 0 Thu Jan 16 15:51:56 JST 2014 WEB-INF/lib/ 385091 Mon Jan 20 13:28:12 JST 2014 WEB-INF/lib/commons-lang3-3.2.1.jar 540 Mon Jan 20 16:58:00 JST 2014 WEB-INF/web.xml kyle-no-MacBook:~ kyle$
大丈夫そうですね。jarファイルとかもちゃんと入ってる。
デプロイしてみる
CLIからデプロイ
$ sudo -i -u wildfly /usr/local/wildfly/bin/jboss-cli.sh [disconnected /] connect [standalone@localhost:9990 /] deploy /tmp/JavaEE7Prac.war [standalone@localhost:9990 /]
アクセスしてみる
大丈夫そうですね
デプロイされたアプリ一覧を表示
[standalone@localhost:9990 /] ls deployment JavaEE7Prac.war postgresql-9.3-1100.jdbc41.jar [standalone@localhost:9990 /]
CLIからアンデプロイ
[standalone@localhost:9990 /] undeploy JavaEE7Prac.war [standalone@localhost:9990 /]
[standalone@localhost:9990 /] ls deployment postgresql-9.3-1100.jdbc41.jar [standalone@localhost:9990 /]
消えましたね。アクセスしても消えています
$JBOSS_HOME/standalone/log/server.logを見てみる
2014-01-21 15:45:59,294 INFO [org.jboss.as.repository] (management-handler-thread - 8) JBAS014900: Content added at location /usr/local/wildfly/standalone/data/content/81/8f5b7155a35cc08acfd55f279cd7bab40e5972/content 2014-01-21 15:45:59,305 INFO [org.jboss.as.server.deployment] (MSC service thread 1-4) JBAS015876: Starting deployment of "JavaEE7Prac.war" (runtime-name: "JavaEE7Prac.war") 2014-01-21 15:46:00,445 INFO [org.jboss.weld.deployer] (MSC service thread 1-3) JBAS016002: Processing weld deployment JavaEE7Prac.war 2014-01-21 15:46:01,027 INFO [org.hibernate.validator.internal.util.Version] (MSC service thread 1-3) HV000001: Hibernate Validator 5.0.2.Final 2014-01-21 15:46:01,941 INFO [org.jboss.weld.deployer] (MSC service thread 1-1) JBAS016005: Starting Services for CDI deployment: JavaEE7Prac.war 2014-01-21 15:46:02,535 INFO [org.jboss.weld.Version] (MSC service thread 1-1) WELD-000900: 2.1.1 (Final) 2014-01-21 15:46:02,593 INFO [org.jboss.weld.deployer] (MSC service thread 1-1) JBAS016008: Starting weld service for deployment JavaEE7Prac.war 2014-01-21 15:46:05,880 INFO [javax.enterprise.resource.webcontainer.jsf.config] (MSC service thread 1-4) Initializing Mojarra 2.2.4-jbossorg-1 20131017-1524 for context '/JavaEE7Prac' 2014-01-21 15:46:07,412 INFO [org.wildfly.extension.undertow] (MSC service thread 1-4) JBAS017534: Register web context: /JavaEE7Prac 2014-01-21 15:46:07,590 INFO [org.jboss.as.server] (management-handler-thread - 8) JBAS018559: Deployed "JavaEE7Prac.war" (runtime-name : "JavaEE7Prac.war") 2014-01-21 15:46:38,643 INFO [stdout] (batch-batch - 1) Hello JSR352 2014-01-21 15:47:14,605 INFO [stdout] (batch-batch - 3) Hello JSR352 2014-01-21 15:47:27,235 INFO [stdout] (batch-batch - 5) Hello JSR352 2014-01-21 15:47:27,389 INFO [stdout] (batch-batch - 7) Hello JSR352 2014-01-21 15:51:30,933 INFO [org.wildfly.extension.undertow] (MSC service thread 1-4) JBAS017535: Unregister web context: /JavaEE7Prac 2014-01-21 15:51:30,956 INFO [org.jboss.weld.deployer] (MSC service thread 1-3) JBAS016009: Stopping weld service for deployment JavaEE7Prac.war 2014-01-21 15:51:30,992 INFO [org.jboss.as.server.deployment] (MSC service thread 1-2) JBAS015877: Stopped deployment JavaEE7Prac.war (runtime-name: JavaEE7Prac.war) in 65ms 2014-01-21 15:51:31,088 INFO [org.jboss.as.repository] (management-handler-thread - 15) JBAS014901: Content removed from location /usr/local/wildfly/standalone/data/content/81/8f5b7155a35cc08acfd55f279cd7bab40e5972/content 2014-01-21 15:51:31,089 INFO [org.jboss.as.server] (management-handler-thread - 15) JBAS018558: Undeployed "JavaEE7Prac.war" (runtime-name: "JavaEE7Prac.war")
特に問題なさげですね。
上書きデプロイをワンライナーで
sudo -i -u wildfly /usr/local/wildfly/bin/jboss-cli.sh --connect "deploy /tmp/JavaEE7Prac.war --force JavaEE7Prac.war"
参考文献
Tags: wildfly
ダンプしてリストアしてみる
TweetPosted on Tuesday Jan 21, 2014 at 02:32PM in Technology
何をするの?
手元の端末で作ったDBを別のマシン上のPostgreSQLにリストアしてみます
環境
- ダンプ環境
- PostgreSQL 9.2.4 @ OS X 10.9.1
- リストア環境
- PostgreSQL 9.2.6 @ CentOS 6.5
テスト用のDBを作る
作成用SQL
一応日本語が化けるのとか心配なので日本語も入れてみます
create database testdb001 owner kyle encoding 'UTF8' TEMPLATE template0; \c testdb001 create table hogetable (id bigint, hogecol varchar(255)); insert into hogetable values (1, 'hoge111'); insert into hogetable values (2, 'ほげ222');
流す
何故かpsqlのプロンプトに日本語をコピペすると文字化けしてしまうのでヒアドキュメント経由で食わせます
kyle-no-MacBook:prepare kyle$ psql <<EOF > create database testdb001 owner kyle encoding 'UTF8' TEMPLATE template0; > \c testdb001 > create table hogetable (id bigint, hogecol varchar(255)); > insert into hogetable values (1, 'hoge111'); > insert into hogetable values (2, 'ほげ222'); > EOF CREATE DATABASE You are now connected to database "testdb001" as user "kyle". CREATE TABLE INSERT 0 1 INSERT 0 1 kyle-no-MacBook:prepare kyle$
ちゃんと入ったか確認してみましょう
kyle-no-MacBook:prepare kyle$ psql testdb001 psql (9.2.4) Type "help" for help. testdb001=# select * from hogetable ; id | hogecol ----+--------- 1 | hoge111 2 | ほげ222 (2 rows) testdb001=#
大丈夫そうですね。
ダンプ
もっとも柔軟だそうなのでcustom形式にします。このコマンドで
pg_dump -F c testdb001 > testdb001.dump
実行してみる
kyle-no-MacBook:~ kyle$ pg_dump -F c testdb001 > testdb001.dump kyle-no-MacBook:~ kyle$ ls -l testdb001.dump -rw-r--r--+ 1 kyle staff 2106 1 21 13:37 testdb001.dump kyle-no-MacBook:~ kyle$
こいつをscpか何かでリストア環境に持っていきます
リストア
このコマンドでいってみる
pg_restore -v -C -d postgres -j 2 testdb001.dump
- -v
- 進捗状況を詳細表示
- -C
- リストアの前にデータベースを作成する
- -d postgres
- 接続時のDBにpostgresを使う。-Cを同時に指定している場合,データのリストア先ではない。リストア先のDB名はダンプファイルに含まれるものが使われる.-Cを同時に指定していない場合は,データのリストア先になる.
- -j 2
- 2パラで同時実行。この場合入力はパイプではだめらしい
スーパーユーザで実行するならこう
sudo -u postgres sh -c "pg_restore -v -C -d postgres -j 2 testdb001.dump"
ダンプファイルをpostgresユーザが読めるところに置いて実行
$ cp testdb001.dump /tmp $ cd /tmp $ sudo -u postgres sh -c "pg_restore -v -C -d postgres -j 2 testdb001.dump" pg_restore: リストアのためにデータベースに接続しています pg_restore: 2183 ENCODING ENCODING を処理しています pg_restore: 2184 STDSTRINGS STDSTRINGS を処理しています pg_restore: 2185 DATABASE testdb001 を処理しています pg_restore: DATABASE testdb001を作成しています pg_restore: 新しいデータベース"testdb001"に接続しています pg_restore: データベース"testdb001"にユーザ"postgres"で接続しています pg_restore: 5 SCHEMA public を処理しています pg_restore: SCHEMA publicを作成しています pg_restore: 2186 COMMENT SCHEMA public を処理しています pg_restore: COMMENT SCHEMA publicを作成しています pg_restore: 2187 ACL public を処理しています pg_restore: 169 EXTENSION plpgsql を処理しています pg_restore: EXTENSION plpgsqlを作成しています pg_restore: 2188 COMMENT EXTENSION plpgsql を処理しています pg_restore: COMMENT EXTENSION plpgsqlを作成しています pg_restore: 168 TABLE hogetable を処理しています pg_restore: TABLE hogetableを作成しています pg_restore: メインの並列ループに入ります pg_restore: 項目 2180 TABLE DATA hogetable に着手します pg_restore: テーブル"hogetable"のデータをリストアしています pg_restore: 項目 2180 TABLE DATA hogetable を完了しました pg_restore: メインの並列ループを終了します pg_restore: DATABASE testdb001用の所有者と権限を設定しています pg_restore: SCHEMA public用の所有者と権限を設定しています pg_restore: COMMENT SCHEMA public用の所有者と権限を設定しています pg_restore: ACL public用の所有者と権限を設定しています pg_restore: EXTENSION plpgsql用の所有者と権限を設定しています pg_restore: COMMENT EXTENSION plpgsql用の所有者と権限を設定しています pg_restore: TABLE hogetable用の所有者と権限を設定しています pg_restore: TABLE DATA hogetable用の所有者と権限を設定しています $ echo $? 0 $
確認してみましょう
$ psql testdb001 psql (9.2.6) "help" でヘルプを表示します. testdb001=> \d リレーションの一覧 スキーマ | 名前 | 型 | 所有者 ----------+-----------+----------+-------- public | hogetable | テーブル | kyle (1 行) testdb001=> select * from hogetable ; id | hogecol ----+--------- 1 | hoge111 2 | ほげ222 (2 行) testdb001=>
権限とかスキーマが若干不安ですがデータは移っているようですね。
参考文献
Tags: postgres
PUTメソッドとmod_jkについて調べる
TweetPosted on Tuesday Jan 21, 2014 at 09:34AM in Technology
環境
- さくらVPS 1G
- CentOS 6.5
- Apache 2.2.15
- mod_jk設定済み
$ /usr/sbin/httpd -v Server version: Apache/2.2.15 (Unix) Server built: Aug 13 2013 17:29:28 $
GETを送ってみる
全部APサーバに飛ばす設定にしているのでAPサーバのウェルカム画面的なものが返る。
$ curl -v http://localhost:80/ -X GET * About to connect() to localhost port 80 (#0) * Trying 127.0.0.1... connected * Connected to localhost (127.0.0.1) port 80 (#0) > GET / HTTP/1.1 > User-Agent: curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.14.0.0 zlib/1.2.3 libidn/1.18 libssh2/1.4.2 > Host: localhost > Accept: */* > < HTTP/1.1 200 OK < Date: Tue, 21 Jan 2014 00:28:59 GMT < Server: Apache/2.2.15 (CentOS) < Last-Modified: Sun, 22 Dec 2013 06:12:49 GMT < Content-Length: 2417 < Connection: close < Content-Type: text/html; charset=UTF-8 < <!-- ~ JBoss, Home of Professional Open Source. ~ Copyright (c) 2011, Red Hat, Inc., and individual contributors ~ as indicated by the @author tags. See the copyright.txt file in the ...
PUTを送ってみる
デフォルトで拒否されるっぽい
$ curl -v http://localhost:80/ -X PUT * About to connect() to localhost port 80 (#0) * Trying 127.0.0.1... connected * Connected to localhost (127.0.0.1) port 80 (#0) > PUT / HTTP/1.1 > User-Agent: curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.14.0.0 zlib/1.2.3 libidn/1.18 libssh2/1.4.2 > Host: localhost > Accept: */* > < HTTP/1.1 405 Method Not Allowed < Date: Mon, 20 Jan 2014 23:55:11 GMT < Server: Apache/2.2.15 (CentOS) < Content-Length: 83 < Connection: close < Content-Type: text/html; charset=UTF-8 < * Closing connection #0 <html><head><title>Error</title></head><body>405 - Method Not Allowed</body></html>
インストールしてからmod_jkでAPサーバに全リクエスト飛ばす設定をした他は、何も設定変更していないのだけど拒否されている。PUTも飛ぶのかと思っていたけど違うようだ。
他のメソッドも試してみる
PUT, DELETE, OPTIONSは405
$ curl -LI http://localhost:80/ -X GET -o /dev/null -w '%{http_code}\n' -s 200 $ curl -LI http://localhost:80/ -X POST -o /dev/null -w '%{http_code}\n' -s 200 $ curl -LI http://localhost:80/ -X PUT -o /dev/null -w '%{http_code}\n' -s 405 $ curl -LI http://localhost:80/ -X DELETE -o /dev/null -w '%{http_code}\n' -s 405 $ curl -LI http://localhost:80/ -X OPTIONS -o /dev/null -w '%{http_code}\n' -s 405 $
知らなかった。そういえば少し前に脆弱性が報告されていたような。そのせいでApache側でデフォルトオフになったのだろうか。mod_jkの設定がどうのというよりそもそもApacheで受け付けない設定になっている感じ。
許可するには?
そもそも最近のApacheでは全面的にオフになっていて、[7]によると何やらモジュールの有効化などが必要らしい。何か大変そうなので今回はここまでにしておく。
参考文献
- Issue with HTTP methods (DELETE,PUT) not being accepted (returning 405 Method not allowed) (Apache Users)
- Re: Issue with HTTP methods (DELETE,PUT) not being accepted (returning 405 Method not allowed) (Apache Users)
- Tomcat + Apache mod_jk PUT gives 405 (Tomcat forum at JavaRanch)
- [Tomcat-users] mod_jk PUT request-method returns 405 Error - Grokbase
- Agile Testing: Configuring Apache 2 and Tomcat 5.5 with mod_jk
- cURLでHTTPステータスコードだけを取得する - Qiita [キータ]
- PUTやDELETEを使うために - PukiWiki
Tags: apache
JPQLをorm.xmlに書いてみる
TweetPosted on Tuesday Jan 21, 2014 at 08:04AM in Technology
何をするの?
JPQLをorm.xmlに書いて動かしてみます。
環境
- WildFly8.0.0CR1
- Eclipse Kepler SR1
- PostgreSQL 9.2.4
- Oracle JDK7u51
準備
これの続きです。
orm.xmlに書いたクエリを動かしてみる
orm.xmlを作る
src/main/java/META-INFの下に作ります。右クリックメニューからNew→JPA ORM Mapping File
場所を確かめてFinish
出来たら開きましょう
クエリを書く
named-queryを書いてみます。エンティティに直書きしてたのとほとんど同じです。違うのはidで逆順ソートかけてるとこだけです
<?xml version="1.0" encoding="UTF-8"?> <entity-mappings version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence/orm" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence/orm http://xmlns.jcp.org/xml/ns/persistence/orm_2_1.xsd"> <named-query name="findHogeEntityAllDesc"> <query> SELECT e FROM HogeEntity e ORDER BY e.id DESC </query> </named-query> </entity-mappings>
この書き方だと < とか > をエスケープしないといけないのが面倒くさいですが、こういう感じで書くとそのまま書けます。
Daoにメソッドを追加
findAllDesc()を追加します
package com.example.dao; import java.util.Date; import java.util.List; import javax.inject.Named; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import javax.transaction.Transactional; import com.example.entity.HogeEntity; @Named public class HogeEntityDao { @PersistenceContext private EntityManager em; @Transactional public void save() { HogeEntity e = new HogeEntity(); e.setHogeDate(new Date()); em.persist(e); } public List<HogeEntity> findAll() { return em.createNamedQuery("findHogeEntityAll", HogeEntity.class).getResultList(); } public List<HogeEntity> findAllDesc() { return em.createNamedQuery("findHogeEntityAllDesc", HogeEntity.class).getResultList(); } }
サーブレットから呼び出すメソッドを変更
package com.example.servlet; import java.io.IOException; import java.io.Writer; import javax.inject.Inject; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.example.dao.HogeEntityDao; import com.example.entity.HogeEntity; @WebServlet("/HogeServlet") public class HogeServlet extends HttpServlet { private static final long serialVersionUID = 1L; @Inject HogeEntityDao dao; public HogeServlet() { super(); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { dao.save(); try (Writer w = response.getWriter()) { // for (HogeEntity e : dao.findAll()) { for (HogeEntity e : dao.findAllDesc()) { w.write("id=" + e.getId() + ", hogeDate=" + e.getHogeDate() + "\n"); } } } }
動かしてみる
逆順になりました。改行とかも自由なので、やっぱりクエリはエンティティのアノテーション内に書くよりorm.xmlに書いた方が良い気がします。
Tags: jpa