More Related Content What's hot (14)
アプリケーション性能管理(APM)ツールの新世代 「AppDynamics」のご紹介 – OpenStack最新情報セミナー 2015年7月 アプリケーション性能管理(APM)ツールの新世代 「AppDynamics」のご紹介 – OpenStack最新情報セミナー 2015年7月
VirtualTech Japan Inc. ?
アプリケーション性能管理(APM)ツールの新世代 「AppDynamics」のご紹介
講師:内田 雅彦(AppDynamics)
企業システムが、モバイル?フロント そして クラウド?ファーストへと大きく舵をきる中、ユーザー環境、オン?プレミス、そしてハイブリッド基盤など複雑な連携の監視と運用管理が求められています。 AppDynamicsは、その基盤上で動作するアプリケーション群を End-to-Endで可視化し、性能監視、運用管理の工数と負担を大幅に軽減します。 また、アプリケーション開発時には性能チューニングや品質管理の迅速化に大きく貢献します。世界1,800社以上の大企業で採用された次世代APMツールが、本年より日本市場で本格展開を開始します。
本セッションでは、AppDynamicsがサポートする環境、開発局面での利用価値、運用局面での効果などについて、実機デモを交えてご紹介します
トランクベース开発を活用して爆速に开発した话 トランクベース开発を活用して爆速に开発した话
Tier_IV ?
2021/03/31に行われました「自動運転の自動運転以外のこと(Web/SRE/AI教習所)」ミートアップの資料です?
GitFlowで開発していたチームがどのようにトランクベース開発を取り入れていったかをご紹介します。
まじめに!できる!尝罢 まじめに!できる!尝罢
Akabane Hiroyuki ?
YPAC::Asia2012で行われるLTthon用に作成したLT(ライトニングトーク)のやり方/作り方の資料です。
http://ltthon-yapc2012.hachiojipm.org/howto2.htmlこちらのスライド版です。
认証/认可が実现する安全で高速分析可能な分析処理基盘 认証/认可が実现する安全で高速分析可能な分析処理基盘
Masahiro Kiura ?
分析処理基盤において、データの民主化?マルチテナント化を進めるためにはいくつかのハードルがあります。そのハードルの一つに、データリスクを低減するための認証?認可の実現が挙げられます。
本講演では、ドワンゴが分析処理基盤の認証?認可機構を一新した内容とポイント、またそれらの認証?認可機構をベースとし、分析処理を数倍から数十倍に高速化した事例を紹介致します。
Similar to 20170708 Ebeanのご紹介(O/Rマッパー勉強会 in 大都会) (20)
Filesystem via MySQL Filesystem via MySQL
Tomoya Kabe ?
On a filesystem that uses database as its backend storage.
The source code is published at https://github.com/limitusus/dbfs
使ってみた!ioMemoryで実現する噂のAtomic write! 使ってみた!ioMemoryで実現する噂のAtomic write!
IIJ ?
MySQL互換データベース環境でioMemoryが実現するAtomic write機能は、画期的な機能といわれていますが、実際のところ効果については謎に包まれています。IIJが検証結果や知見を交えながら、その秘密を徹底解剖します。
(2015年6月10日「db tech showcase」での講演資料を掲載)
はじめての闯笔础 はじめての闯笔础
kawaba ?
JavaDay Tokyo 2015 の講演内容です。
JavaEEが初めての方でもJPAの全体像を理解できます。
※<重要な補足>アップロードした後で気が付いたのですが、一部のアニメーションが、狠狠撸Shareでは再現できないようです。原本ファイルは http://k-webs.jp/download/JPA.pptx からダウンロードできます。
また、Oracle 社でスライド発表を解説記事にリライトした「初めてのJPA-シンプルで使いやすい、Java EEのデータ永続化機能の基本を学ぶ」をhttp://builder.japan.zdnet.com/sp_oracle/weblogic/35067018/ で読むことができます。
20170708 Ebeanのご紹介(O/Rマッパー勉強会 in 大都会)1. 2 0 1 7 - 0 7 - 0 8 O / R マ ッ パ ー 勉 強 会 I N 大 都 会
中 村 壮 一 ( @ K U N S T 1 0 8 0 )
Ebeanのご紹介
1
5. 自己紹介
? 名前: 中村壮一 = くんすと (@kunst1080)
? 普段は #シェル芸 界隈の住人
? 仕事: 受託で小規模なWEBサービスを作ってます
? 2014年~
? Java + Playframework
? 一次開発はほぼ一人で、最近は若手2人と一緒に保守してます
? Ebeanに関しては、ただのユーザーです。
5
19. Ebeanの特徴 – ①設定がシンプル
? プレーンなJavaプロジェクトの場合、
resources ディレクトリに
「ebean.properties」ファイルを置きます。
? (テスト用の設定は「 test-ebean.properties 」)
datasource.default=db
datasource.db.username=sa
datasource.db.password=hogehoge
datasource.db.databaseUrl=jdbc:h2:mem:tests
datasource.db.databaseDriver=org.h2.Driver
# ebean.default=“models.*“ ← ここはお好みで
# ebean.default=“ models.*, tables.*"
19
20. Ebeanの特徴 – ①設定がシンプル
? Play Frameworkで使う場合、
conf/application.conf に
以下のような記述を追加します。
db.default.username=“sa”
db.default.password=“hogehoge”
db.default.url=“jdbc:h2:mem:tests”
db.default.driver=“org.h2.Driver”
# ebean.default=“models.*” ← ここはお好みで
# ebean.default=“models.*, tables.*”
20
22. Ebeanの特徴 – ②Active Recordパターン
? Ruby on RailsのActive Recordのような書き方で
DBアクセスできます。
? 1つのインスタンスがDBの1レコードに対応する
22
23. Ebeanの特徴 – ②Active Recordパターン
? 例えば、こんなModelクラスがあった場合……
@Entity
@Table(name = "user")
public class User extends Model {
public static Model.Finder<Long, User> finder = new Model.Finder<>(User.class);
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
public Long id;
@Constraints.Required
public String name;
public Date birthDay;
}
23
24. Ebeanの特徴 – ②Active Recordパターン
? CRUDはこんな感じでとてもシンプルです。
// Create
User user = new User();
user.name = “hogehoge”;
user.save():
// Read
User user = User.find.byId(1L);
List<User> list = User.find.where()
.eq(“name”, “hogehoge”)
.findList();
24
25. Ebeanの特徴 – ②Active Recordパターン
? CRUDはこんな感じでとてもシンプルです。
// Update
User user = new User();
user.id = 1L;
user.update():
// Delete
User user = new User();
user.id = 1L;
user.delete();
25
26. Ebeanの特徴 – ③セッションレス
? Ebeanにはセッションがありません
? ※トランザクションはあります
? 単純に、IDの情報でデータを操作します。
? このように、検索しなくても登録が可能です。
? 公式サイトには、REST向きの仕様だと書いてありました。
// Update
User user = new User();
user.id = 1L;
user.update():
// Delete
User user = new User();
user.id = 1L;
user.delete();
26
27. Ebeanの特徴 – ④外部SQLも扱える
? SQL文の文字列を渡して検索することもできます。
? そのままでは使いにくいのでライブラリ化しました(後述)
String sql = "select id, name, birth_day from user";
List<User> list2 = Ebean.find(User.class)
.setRawSql(RawSqlBuilder.parse(sql).create())
.findList();
27
30. 実際に使ってみてのレポート - ①拡張したこと
? テキストファイルを読み込むライブラリの作成
「ebean-query-text」
? https://github.com/nkmrs/ebean-query-text
? conf/queries/ 以下に置いたSQL文を利用できる
● conf/queries/sample.sql
select
t1.id,
t1.name,
t2.age
from
user_name t1, user_age t2
where
t1.id = t2.id
30
31. 実際に使ってみてのレポート - ①拡張したこと
? テキストファイルを読み込むライブラリの作成
「ebean-query-text」
? https://github.com/nkmrs/ebean-query-text
? conf/queries/ 以下に置いたSQL文を利用できる
Query<Example1> q = QueryText.getDefault()
.getQuery("example1", Example1.class);
List<Example1> list = q.findList();
31
32. 実際に使ってみてのレポート - ①拡張したこと
? FinderのDecoratorを作成
? byIdの結果をOptionalにする
? 各種検索処理をmix-inできるようにする
? https://github.com/kunst1080/play-java8-
sample/blob/master/app/tables/FindDecorator.java
32
33. /**
* Finderの拡張
*/
public class FindDecorator<ID, TABLE extends BaseTable>
implements Where<TABLE> {
private Model.Finder<ID, TABLE> finder
= new Model.Finder<>(getTableClass());
@SuppressWarnings("unchecked")
private Class<TABLE> getTableClass() {
return (Class<TABLE>) ClassUtil.getSecondArgumentType(getClass());
}
@Override
public ExpressionList<TABLE> where() {
return finder.where();
}
public Optional<TABLE> byId(ID id) {
return Optional.ofNullable(finder.byId(id));
}
}
33
34. public interface Where<TABLE> {
ExpressionList<TABLE> where();
}
public interface Fuzzy<TABLE> extends Where<TABLE> {
default List<TABLE> fuzzy(String value, String... columnNames) {
ExpressionList<TABLE> ex = where();
for (String c : columnNames) {
ex = ex.like(c, "%" + value + "%");
}
return ex.findList();
}
}
public interface All<TABLE> extends Where<TABLE> {
default List<TABLE> all() {
return where().findList();
}
}
34
35. 実際に使ってみてのレポート - ①拡張したこと
? FinderのDecoratorを作成
? byIdの結果をOptionalにする
? 各種検索処理をmix-inできるようにする
// 拡張したFinderのサブクラスを自分用に作成
// 使いたい検索処理をimplementsする
public static class Find extends FindDecorator<Long, T_User>
implements All<T_User>, Fuzzy<T_User> {}
public static Find find = new Find();
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
public Long id;
35
36. 実際に使ってみてのレポート - ②複数DBへの接続
? こんな感じに定義してあげると複数DBへ接続できました
? 設定ファイル
# デフォルトのDB
db.default.username=“sa”
db.default.password=“hogehoge”
db.default.url=“jdbc:h2:mem:app”
db.default.driver=“org.h2.Driver”
# 2つめのDB
db.another.username=“sa”
db.another.password=“hogehoge”
db.another.url=“jdbc:h2:mem:another”
db.another.driver=“org.h2.Driver”
ebean.another = "models.*"
36
37. 実際に使ってみてのレポート - ②複数DBへの接続
? こんな感じに定義してあげると複数DBへ接続できました
? 検索処理
// 以下の書き方で、指定した設定のEbeanServerを取得できます
Ebean.getServer(サーバ名)
// ebean-query-textを使う場合
QueryText.get(“default”).getQuery(“example", User.class)
.findList();
QueryText.get(“another”).getQuery(“example", User.class)
.findList();
37
38. 実際に使ってみてのレポート - ③使うときの注意点
? 情報がほとんど英語
? → 勉強するいい機会! だんだん慣れてきます!
? (自分も情報発信していきますね……)
? SQL文を渡す時、トークンの数が増えてくるとパースに失
敗する
? CAST とか CASE とかを使うとうまくいかない
? → DBは検索だけにして、演算はJavaでやる
38
39. その他、今後検証してみたいこと
? Type safe queies
? こんな風に書けるそうです。安全そう。
? Springとかでの利用
List<Customer> customers =
new QCustomer()
.id.greaterThan(12)
.name.startsWith("Rob")
.findList();
39