プロキシ環境でpipコマンドを使う@Mac

1. NTLM認証できないようなので、Cntlmサーバを立てる。

http://cntlm.sourceforge.net/

2. 環境変数のセット

Cntlmサーバの情報をプロキシ環境変数にセットする。

export HTTP_PROXY=http://ユーザ:パスワード@ホスト名:ポート
export HTTPS_PROXY=http://ユーザ:パスワード@ホスト名:ポート

3. proxyオプションをつけて、pipコマンドを実行する

Cntlmサーバの情報をproxyオプションに指定してpipコマンドを実行する。

sudo pip --proxy=http://ユーザ:パスワード@ホスト名:ポート install パッケージ名

【JJUGナイトセミナー Javaクラウドプラットフォーム大特集】のまとめ

イベントの存在を知った時点でキャンセル待ち100名超えだったので、残念ながら参加できませんでしたが、さっそく資料が公開されていたので、リンクをまとめてみました。 各社のエバンジェリストが一同に会していて、中々豪華なイベントですね。

togetter

http://togetter.com/li/953063

AWS版のSpringBoot?「AWS Elastic Beanstalk」と「AWS Lambda」のご紹介/株式会社ソラコム 片山さん

IBM Bluemix(PaaS)で、手軽なJavaウェブアプリケーションの開発環境構築/日本アイ・ビー・エム株式会社 宋さん

  • スライド

    まだ

Introduction to Cloud Foundry/Pivotal 槙さん

Google Cloud Platformで作るJava PaaS環境/大日本印刷株式会社 田丸さん

Heroku Javaで12-Factor App/Salesforce 岡本さん

heroku localコマンドでローカルで動作するのは知らなかった。あとで試してみます。

Microsoft Azure/Microsoft 寺田さん

Oracle Java Cloud Service

OpenShiftでかんたんDocker PaaS/Red Hat 木村さん

Mavenのテストでデバッグする方法

個々のJUnitの実行時には発生せず、Mavenテストでプロジェクト全体のJUnitをまとめて実行した場合のみ再現するエラーがあった。 そこで、MavenテストをEclipseからデバッグ実行し、Javaファイルにブレークポイントを張ったが、止まってくれない。。。

Mavenテストをデバッグするには、以下の方法が必要らしい。

1. Maven buildからtestを実行

mvn test -Dmaven.surefire.debug

2. リモートJavaアプリケーションで上記のプロセスにリモートデバッグ

接続先は、localhost:5005。

3. ブレークポイントを張る

1,2ができた状態でJavaファイルにブレークポイントを張るとちゃんと止まってくれる。

参考

mvn testした時だってEclipseデバッグしたい!! http://cynipe.hateblo.jp/entry/20090226/1235630326

ヤマダ電機でホントにMac Book Airを安く買えました。

Mac Book Airのお得な購入方法を探すと、ヤマダ電機だけは値引きしてくれるって記事がいくつか出てきましたが、その噂はホントでした。

店頭に表示されてる価格・ポイントの割合は他の量販店と同じでしたが(11インチ価格 10,2800円・ポイント付与5%)、安くならないですがって販売員の人に聞いたら、確かに値引きしてくれました(値引き 5,000円・ポイント付与10%)。

MyBatis-Springを試してみました。

MyBatis単独の場合と違ってSpring側でコネクションを管理してくれるので、直接SqlSessionを使って管理する必要がありません。

アプリケーション開発者側では、SpringがインジェクションしてくれたMapperインターフェースを通してDB操作を行うだけで完結できます。

トランザクションはMyBatisに限らずですが、@Transactionalアノテーションメソッドに付与することで、Spring側で管理してくれます。

参考

サンプルコード

勉強メモとして作ったサンプルコード。

https://github.com/momotaro-lucy/mybatis_spring_sample

公式サイト

Spring連携版についてもMyBatisと同様に公式サイトが用意されています。 http://mybatis.github.io/spring/ja/getting-started.html

メモ

セットアップ

開発するMavenプロジェクトに、MyBatis-Springへの依存関係を付与します。

<dependency>
 <groupId>org.mybatis</groupId>
  <artifactId>mybatis-spring</artifactId>
  <version>1.2.3</version>
</dependency>

MyBatis-SpringはもちろんMyBatisやSpringフレームワーク自体に依存関係を持っていますが、Maven上の指定がprovidedとなっているため、 Eclipse経由などでJavaアプリケーションとしてそのまま実行する場合は、MyBatisやSpringフレームワーク自体にも依存関係を付与する必要があります。

<dependency>
 <groupId>org.mybatis</groupId>
  <artifactId>mybatis-spring</artifactId>
  <version>1.2.3</version>
</dependency>
<!-- MyBatis -->
<dependency>
 <groupId>org.mybatis</groupId>
  <artifactId>mybatis</artifactId>
  <version>3.3.0</version>
</dependency>
<!-- Spring -->
<dependency>
 <groupId>org.springframework</groupId>
  <artifactId>spring-context</artifactId>
  <version>3.2.13.RELEASE</version>
</dependency>
<dependency>
 <groupId>org.springframework</groupId>
  <artifactId>spring-jdbc</artifactId>
  <version>3.2.13.RELEASE</version>
</dependency>
<dependency>
 <groupId>org.springframework.batch</groupId>
  <artifactId>spring-batch-infrastructure</artifactId>
  <version>3.0.4.RELEASE</version>
</dependency>

メモ

ApplicationContext.xmlを作成します。

Springの設定ファイル ApplicationContext.xmlにデータソース・SqlSessionFactory・Mapperの設定を記述します。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:p="http://www.springframework.org/schema/p"
    xmlns:c="http://www.springframework.org/schema/c"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd">
    <!-- データソースの設定 -->
   <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
      <property name="driverClassName" value="org.postgresql.Driver"/>
      <property name="url" value="jdbc:postgresql://localhost:5432/mybatis_spring_sample" />
      <property name="username" value="mybatis_sample_user" />
      <property name="password" value="mybatis_sample_password" />
   </bean>

    <!-- SqlSessionFactoryの設定 -->
   <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean" >
      <property name="dataSource" ref="dataSource"/>
   </bean>
   
   <!-- Mapperインターフェースの登録 -->
   <bean id="SampleMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
      <property name="mapperInterface" value="jp.momotaro_lucy.sample.mybatis_spring.mapper.SampleMapper" />
      <property name="sqlSessionFactory" ref="sqlSessionFactory" />
    </bean>

    <context:annotation-config />
    <context:component-scan base-package="jp.momotaro_lucy.sample.mybatis_spring" />
</beans>

Mapperインターフェースが複数存在する場合は、パッケージ単位での指定も可能です。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:p="http://www.springframework.org/schema/p"
    xmlns:c="http://www.springframework.org/schema/c"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:mybatis="http://mybatis.org/schema/mybatis-spring"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd
        http://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring.xsd">
    <!-- データソースの設定 -->
   <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
      <property name="driverClassName" value="org.postgresql.Driver"/>
      <property name="url" value="jdbc:postgresql://localhost:5432/mybatis_spring_sample" />
      <property name="username" value="imart" />
      <property name="password" value="imart" />
   </bean>

    <!-- SqlSessionFactoryの設定 -->
   <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean" >
      <property name="dataSource" ref="dataSource"/>
   </bean>
   
   <!-- Mapperインターフェースが配置されたパッケージの設定 -->
   <mybatis:scan base-package="jp.momotaro_lucy.sample.mybatis_spring.mapper" />

    <context:annotation-config />
    <context:component-scan base-package="jp.momotaro_lucy.sample.mybatis_spring" />
</beans>

Mapperインターフェースを作成します。

ApplicationContext.xmlで指定したMapperクラスを作成します。

https://mybatis.github.io/spring/ja/mappers.html

public interface SampleMapper {
  
  @Insert("insert into mybatis_sample_table (item_cd, item_name, item_comment) values(#{itemCd}, #{itemName}, #{itemComment})")
  public void insert(SampleModel model);

  @Select("select item_cd as itemCd, item_name as itemName, item_comment as itemComment from mybatis_sample_table where item_cd = #{itemCd}")
  public SampleModel select(String itemCd);
  
  @Update("update mybatis_sample_table set item_name = #{itemName}, item_comment = #{itemComment} where item_cd = #{itemCd}")
  public void update(SampleModel model);
}

ORマッパーの呼び出し側の実装を作成します。

SpringがインジェクションしたMapperインターフェースを操作するだけでSQLが実行されます。 @Transactionalのアテーションをメソッドに付与することで、実行中のトランザクションがない場合はSpringフレームワーク側で勝手にトランザクションを張ってくれます。

https://mybatis.github.io/spring/ja/transactions.html

@Service
public class SampleExecuter {
  
  @Autowired
  SampleMapper mapper;
  
  public static void main(String args[]){
    ConfigurableApplicationContext appContext = new FileSystemXmlApplicationContext("src/main/resources/applicationContext.xml");
    SampleExecuter executer = appContext.getBean(SampleExecuter.class);
    executer.execute();
    appContext.close();
  }
  
  @Transactional
  public void execute(){
    // 登録
    SampleModel model = new SampleModel();
    model.setItemCd(UUID.randomUUID().toString());
    model.setItemName(UUID.randomUUID().toString());
    model.setItemComment(UUID.randomUUID().toString());
    mapper.insert(model);
    System.out.println("Insert Data");
    System.out.println("itemCd : " + model.getItemCd());
    System.out.println("itemName : " + model.getItemName());
    System.out.println("itemComment : " + model.getItemComment());
    System.out.println("");
    
    // 更新
    model.setItemName(UUID.randomUUID().toString());
    model.setItemComment(UUID.randomUUID().toString());
    mapper.update(model);
    System.out.println("Update Data");
    System.out.println("itemCd : " + model.getItemCd());
    System.out.println("itemName : " + model.getItemName());
    System.out.println("itemComment : " + model.getItemComment());
    System.out.println("");
    
    SampleModel result2 = mapper.select(model.getItemCd());
    System.out.println("Select Data2");
    System.out.println("itemCd : " + result2.getItemCd());
    System.out.println("itemName : " + result2.getItemName());
    System.out.println("itemComment : " + result2.getItemComment());
  }

}

MyBatis3.xを試してみました。

MyBatis3.xを試してみました。

仕事でSpring MVC + MyBatis 3.xを使う必要が出てきて、久しぶりに触ったので、自分用にサンプルとメモを残します。

以前はSpringとMyBatis 2.xのフレームワークだったのですが、数年が経ってバージョンアップしたようです。

ちなみに、今回はSpringによるラッパーフレームワークは使わず、MyBatis 3.xのみで動かしてみました。

サンプルコード

勉強メモとして作ったサンプルコード。

https://github.com/momotaro-lucy/mybatis_sample

参考

公式サイト

MyBatisの公式サイトが素直にわかりやすいのですが、チュートリアル的なものが弱く、そのまま動かして試してみるには辛かったです。

https://mybatis.github.io/mybatis-3/ja/getting-started.html

書籍

MyBatisを専門に扱った日本語書籍はないと思いますが、こちらのSpringの入門本にMyBatis 2.xと3.xの両方が解説されており、わかりやすいです。

Spring3入門 ――Javaフレームワーク・より良い設計とアーキテクチャ

Spring3入門 ――Javaフレームワーク・より良い設計とアーキテクチャ

メモ

MyBatisは、SQLを記述するタイプのORマッパーで、 テーブルとオブジェクトのマッピングというより、SQLとオブジェクトとのマッピングを作っていくイメージ。

  1. SQLマッピングさせるためのエンティティクラスの作成

    SQLとやり取りさせるエンティティクラスを定義します。カラム名のフィールドとセッター・ゲッターを定義したただのBeanで問題なし。

    1で作成するSQLに記述するバインドフィールドとフィールド名が一致する必要あり。

  2. SQLはMapper XML ファイルに記述する。

    Mapper XML ファイルには、SQLマッピングするエンティティクラスの指定を行う。

    注意点としては、SQLから取得できるカラム名がエンティティクラスのフィールド名と一致しないと自動でバインドしてもらえない。アンダーバーでつないでいるとカラム名とキャメルケースのフィールド名を自動でバインドしてくれなかった。

    上記のようなマッピングJPAアノテーションで記述しても効かない。

  3. Mapper インターフェイスに定義したSQLに対応するメソッドを定義する。

    XMLで定義したSQLにひもづくメソッドを定義する。

    XMLでパラメータ・戻り値の型定義を行っていますが、こちらのインターフェースで重複して定義が必要みたい?

    むしろ、こちらのインターフェースにSQLアノテーションで記述して、XMLを廃することもできるみたい。

wkhtmltopdfに対するJavaのラッパーライブラリ「wkhtml4java」を公開しました。

Web画面のPDF出力ツール wkhtmltopdfに対するJavaのラッパーライブラリ「wkhtml4java」を公開しました。

github.com

コマンドラインからwkhtmltopdfを実行するのではなく、JavaAPIを呼び出すだけでPDFを出力することが可能です。

基本的には、Webアプリケーション内で自画面のPDF出力(帳票出力)をユースケースとして想定しています。

以下のサイトから動作とサンプルコードを確認できます。

https://wkhtml4javaweb.herokuapp.com/