Spring Frameworkの今 (2013年版) #jjug_ccc #ccc_r17 #springframework

R1-7 [BOF]
Spring Frameworkの今
(2013年版)
JJUG CCC Fall 2013
2013/11/09
槙 俊明 (@making)
自己紹介
•

@making

•

大手SIerでR&D

•

JJUG幹事

•

金魚本(http://amzn.to/JavaEE6)を一部翻訳

•

http://blog.ik.am

•

公私ともにSpringユーザー
[宣伝] はじめてのBootstrap
•

なぜか畑違いのBootstrap3入門の本書きました

•

11月末 工学社より出版(1900円)
Java EEも好きです!

http://www.slideshare.net/makingx
今日のコンテンツ
•

Spring Frameworkとは

•

最近のSpring Ecosystemを紹介

•

Spring 4の紹介

•

Spring FrameworkによるWebアプリ
のアーキテクチャ

•

Spring Framework or Java EE ?
今日のコンテンツ
前半:最新動向の話

•

Spring Frameworkとは

•

最近のSpring Ecosystemを紹介

•

Spring 4の紹介

•

Spring FrameworkによるWebアプリ

後半:エンタープライズ寄りな話?

のアーキテクチャ
•

Spring Framework or Java EE ?
Spring Frameworkとは
Spring Frameworkとは
•

Javaでエンタープライズ開発するためのオープン
ソースのフルスタックフレームワーク

•

2013年 開発元VMWare → Pivotalにスピンアウト

•

2013年 Springの象徴であるRob Jonsonが退社
→TypeSafeへ

•

安定バージョンは現在3.2.5
Spring Frameworkとは
•

DI x AOPで注目され、重厚なJ2EEのアンチテー
ゼとして2004年に登場
!

!

•

Web(MVC), DataAccess, Security, Batch,
Integration, Mobile, …

•

サブプロジェクトが増え、Java EEより肥大化?
Spring Frameworkとは

•

(基本的な)後方互換性

•

一貫性、対称性のある設計ポリシー
これ重要!
そしてVersion 4へ
•

現在Spring4開発中
•

4.0.0.RC1公開

•

Java8, Java EE 7サポート
(WebSocket等)
Springは今も進化中
Pivotalとは

•

割愛
http://spring.io

公式サイトが
リニューアル!
http://spring.io/guides

サンプルアプリ
学習コンテンツ
多数 (40件)!
STSから簡単にサンプルを試せる
基本的な内容は書籍で

http://bit.ly/Spring3Book
Spring Ecosystemの紹介
Spring Ecosystem
IDE
Spring Tool Suite (STS)
RAD

Starter

Spring Roo
Web

Spring XD

Spring WebFlow

Spring
Security

OAuth

Spring MVC

Spring
Security

Social

Big Data

Security

Spring Data Rest
Spring Mobile

Spring Boot

DataAccess

Spring Hadoop
Batch

Spring Data

MongoDB
Spring Data
JPA

Spring Batch

Enterprise
Integration

Spring
Integration

Core
Spring DI

Spring AOP

Spring TX

Spring Social

Github
Spring Social

Facebook
Spring Social

Twitter
Spring Ecosystem
今日のスコープ

IDE
Spring Tool Suite (STS)

RAD

Starter
Spring Boot

Spring Roo
Web

Spring XD

Spring Data
Rest

Spring WebFlow

Spring
Security
OAuth

Spring MVC

Spring
Security

Spring Mobile

Social

Big Data

Security
DataAccess

Spring Hadoop
Batch

Spring Data

MongoDB
Spring Data
JPA

Spring Batch

Enterprise
Integration

Spring
Integration

Core
Spring DI

Spring AOP

Spring TX

Spring Social

Github
Spring Social

Facebook
Spring Social

Twitter
[参考] 公式のスタック図
http://spring.io/docs
Spring DI x AOP
•

成熟度:★★★ version: 3.2.5.RELEASE

•

Spring Ecosystemのコア

•

JavaConfigサポート(@Configuration, @Bean)
•

•

No XML hell!

JSR-330サポート(@Inject, @Named)
JSR-330によるDI コード例
package sample;	
import javax.inject.Named;	

!
@Named	
public class GreetingService {	
	 public String hello(String message) {	
	 	 return "Hello " + message + "!";	
	 }	
}
package sample;	
import javax.inject.Inject;	

!
public class MyApplication {	
	 @Inject	
	 GreetingService service;	
	 public void run(String message) {	
	 	 System.out.println(service.hello(message));	
	 }	
}
JSR-330によるDI コード例
@Configuration	
@ComponentScan(basePackages = "sample")	
public class AppConfig {	
	 @Bean	
	 MyApplication myApplication() {	
	 	 return new MyApplication();	
	 }	
}

デフォルトでscope=singleton
になるので注意
Google Guiceよりも簡単!

public class EntryPoint {	
	 public static void main(String[] args) {	
	 	 try (GenericApplicationContext context = new
AnnotationConfigApplicationContext(	
	 	 	 	 AppConfig.class);) {	
	 	 	 MyApplication app = context.getBean(MyApplication.class);	
	 	 	 app.run("World!");	
	 	 }	
	 }	
}
Spring MVC
• 成熟度:★★★

version: 3.2.4.RELEASE

• アクションベースな簡易なMVC

Webフレームワーク

• Strutsからの移行も容易
• アノテーションで簡単リクエストマッピング(JAX-RSとほとんど同

じ)
• ControllerとViewが奇麗に分離されるので、色々な出力形式に対応
• RESTもサポート(@RequestBody,

@ResponseBody)

• JavaConfigサポート(web.xmlもなくせる)
コード例
@Controller	
@RequestMapping("users")	
public class UserController {	
	
@Inject	
	
UserService userService;	

!

	
	
	
	
	
	
}

Spring MVCの
Controller

@RequestMapping(value = "list", method = RequestMethod.GET)	
public String list(Model model) {	
	
List<User> users = userService.findAll();	
	
model.addAttribute("users", users);	
	
return "users/list";	
}	

@Service @Transactional	
public class UserServiceImpl implements UserService {	
	
@Inject	
	
UserRepository userRepository;	

!

	
	
	
	

@Override	
public List<User> findAll() {	
	
return userRepository.findAll();	
}	

	
	
	
	
}

@Override	
public void save(User user) {	
	
userRepository.save(user);	
}	

!
コード例
<bean id="viewResolver"	
class="org.springframework.web.servlet.view.InternalResourceViewResolver">	
<property name="prefix" value="/WEB-INF/views/" />	
<property name="suffix" value=".jsp" />	
</bean>

XMLの例を出したが、

<table>	
<tr>	
<th>Name</th><th>Email</th>	
</tr>	
<c:forEach items="${users}" var="user">	
<tr>	
<td><c:out value="${user.name}"></c:out></td>	
<td><c:out value="${user.email}"></c:out></td>	
</tr>	
</c:forEach>	
</table>

JavaConfigでも書ける
コード例(REST版)
@Controller 	
@RequestMapping("users")	
public class UserRestController {	
	 @Inject UserService userService;	

!
	
	
	
	
	

@RequestMapping(method = RequestMethod.GET)	
@ResponseBody	
public List<User> getUsers() {	
	 return userService.findAll();	
}	

!
	
	
	
	
	
	

@RequestMapping(method = RequestMethod.POST)	
@ResponseBody	
public ResponseEntity<User> postUsers(@RequestBody User user) {	
	 userService.save(user);	
	 return new ResponseEntity<User>(user, HttpStatus.CREATED);	
}	

!
	
	
	
	
	
}

@RequestMapping(value = "/{id}", method = RequestMethod.GET)	
@ResponseBody	
public User getUser(@PathVariable("id") Integer id) {	
	 return userService.findOne(id);	
}
実行結果
いろいろなViewに対応
•

Tiles, FreeMarker, Velocityなどの老舗テンプレートエン
ジンから最近人気のものまで各種取り

•

ThymeLeaf (ThymeLeafViewResolver)

•

Mustache (MustacheViewResolver)

•

Handlebars (HandlebarsViewResolver)

•

Scalate (ScalateViewResolver)

えております。
http://www.thymeleaf.org/

ThymeLeaf
<bean class="org.thymeleaf.spring3.view.ThymeleafViewResolver">	
<property name="templateEngine" ref="templateEngine" />	
</bean>	

!
<bean id="templateEngine" class="org.thymeleaf.spring3.SpringTemplateEngine">	
<property name="templateResolver" ref="templateResolver" />	
</bean>	

!
<bean id="templateResolver"	
class="org.thymeleaf.templateresolver.ServletContextTemplateResolver">	
<property name="prefix" value="/WEB-INF/templates/" />	
<property name="suffix" value=".html" />	
<property name="templateMode" value="HTML5" />	
</bean>
<table>	
<tr>	
<th>Name</th>	
<th>Email</th>	
</tr>	
<tr th:each="user : ${users}">	
<td th:text="${user.name}">John</td>	
<td th:text="${user.email}">hoge@example.com</td>	
</tr>	
</table>
http://mustache.github.io/

Mustache
<bean	
class="org.springframework.web.servlet.view.mustache.MustacheViewResolver">	
<property name="prefix" value="/WEB-INF/templates/" />	
<property name="suffix" value=".html" />	
<property name="templateLoader">	
<bean	
class="org.springframework.web.servlet.view.mustache.MustacheTemplateLoader" />	
</property>	
</bean>
<table>	
<tr>	
<th>Name</th>	
<th>Email</th>	
</tr>	
{{#users}}	
<tr>	
<td>{{name}}</td>	
<td>{{email}}</td>	
</tr>	
{{/users}}	
</table>
http://handlebarsjs.com/

Handlebars
<bean	
class="com.github.jknack.handlebars.springmvc.HandlebarsViewResolver">	
<property name="prefix" value="/WEB-INF/templates/" />	
<property name="suffix" value=".hbs" />	
</bean>

<table>	
<tr>	
<th>Name</th>	
<th>Email</th>	
</tr>	
{{#users}}	
<tr>	
<td>{{name}}</td>	
<td>{{email}}</td>	
</tr>	
{{/users}}	
</table>
Spring Security
• 成熟度:★★★

version: 3.1.4.RELEASE

• 設定ファイルベースの認証・認可フレームワーク
• カスタマイズ性も高い
• Form認証、Basic認証、JAAS認証、OpenID認証、LDAP認証、CAS認証・・・
• ユーザー情報は、DB、メモリ、設定ファイル・・・から
• URL認可、アノテーションでメソッド認可、JSPタグ認可
• パスワードエンコード
• SHA-2+ソルト+ストレッチのような汎用アルゴリズムだけでなくBCryptのよ

うなパスワード用アルゴリズムもサポート(BCrypt推奨)
• 3.2からJavaConfigサポート
コード例

•

割愛・・
Spring Security OAuth
• 成熟度:★☆☆

version: 1.0.5.RELEASE

• Spring

SecurityにOAuth1, 2による認証・認可機能を追加

• OAuth

Provider

• grant_type=authorization_code,implicit,refresh_token,

client_credentials, passwordの認証サーバーを設定
ファイルのみで実現
• OAuth

Client

• REST

Clientの拡張
コード例

•

時間がないので略・・

ドキュメント http://projects.spring.io/spring-security-oauth/docs/oauth2.html
サンプルアプリhttps://github.com/spring-projects/spring-security-oauth/tree/
master/samples/oauth2
Spring Data
• 成熟度:★★☆
• データアクセスの抽象化ライブラリ
• オブジェクトマッピング、Repository、Templateを提供
• いろいろなデータストアをサポートするサブプロジェクトからなる
• Spring

Data Commons

• Spring

Data JPA

• Spring

Data MongoDB, Redis, Neo4j, REST, Hadoop, HBase,

Solr, ...
• 各データストアにRepositoryやTemplateを提供してBoilerplateをな

くす
従来のJPAプログラミング
@Entity	
public class Customer {	
	 @Id	
	 @GeneratedValue	
	 private Long id;	
	 private String firstname;	
	 private String lastname;	
// omitted…	
}

毎回同じような
コード・・・→

@Repository	
public class CustomerRepository {	
	
@PersistenceContext EntityManager em;	
	
public Customer findOne(Long id) {	
	
	
return em.find(Customer.class, id);	
	
}	
	
public List<Customer> findAll(int page, int size) {	
	
	
TypedQuery<Customer> query = em	
	
	
	
	
.createQuery("SELECT x FROM Customer x", Customer.class)	
	
	
	
	
.setFirstResult(page * size).setMaxResults(size);	
	
	
return query.getResultList();	
	
}	
	
@Transactional	
	
public Customer save(Customer customer) {	
	
	
if (customer.getId() == null) {	
	
	
	
em.persist(customer);	
	
	
	
return customer;	
	
	
} else {	
	
	
	
return em.merge(customer);	
	
	
}	
	
}	
	
public List<Customer> findByLastname(String lastname) {	
	
	
TypedQuery<Customer> query = em.createQuery(	
	
	
	
	
"SELECT x FROM Customer x WHERE x.lastname = :lastname",	
	
	
	
	
Customer.class).setParameter("lastname", lastname);	
	
	
return query.getResultList();	
	
}	
}
Spring Data JPAを使うと・・
import org.springframework.data.jpa.repository.JpaRepository;	
import org.springframework.data.jpa.repository.Query;	
import org.springframework.data.repository.query.Param;	

!
public interface CustomerRepository extends JpaRepository<Customer, Long> {	
	 @Query("SELECT x FROM Customer x WHERE x.lastname = :lastname")	
	 public List<Customer> findByLastname(@Param("lastname") String lastname);	
}

•

たったこれだけ!

•

CRUD系のメソッド、ページング・ソート処理は自動で
実装される

•

JPAプログラミングの簡素化!
Spring Data REST
•

成熟度:★☆☆ version: 1.1.0.M1

•

Spring DataのRepositoryをREST APIにエクス
ポート(@RestResource)
•

現在はSpringMVCのみサポートしていrが、将
来的にはServlet非依存を目指している

•

HypermediaLinkの作成
コード例
Repositoryにアノテーションをつけるだけで
REST APIとしてExportされる
実行結果

Entityの情報だけでなく
HypermediaLinkも出力される
Spring Boot
•成熟度:☆☆☆

version: 0.5.0-M5

•Springアプリケーションを高速に開発して起動するためのプロ

ジェクト?
•スタンドアローンでアプリケーションを起動できる(java

-jar)

•サーバー組み込み。Traditionalなwar作成も可能
•Groovyも対応
•オススメ設定のautoconfigure群
•色々なpreconfiguredなJavaConfigが用意されており、特定の

条件を満たすと読み込まれる
コード例
import org.springframework.boot.SpringApplication;	
import
org.springframework.boot.autoconfigure.EnableAutoConfiguration;	
import org.springframework.stereotype.Controller;	
import org.springframework.web.bind.annotation.RequestMapping;	
import org.springframework.web.bind.annotation.ResponseBody;	

!
@Controller	
@EnableAutoConfiguration	
public class Application {	

!
	
	
	
	
	

@RequestMapping("/")	
@ResponseBody	
String home() {	
	 return "HelloWorld!";	
}	

!
	
	
	
}

public static void main(String[] args) {	
	 SpringApplication.run(Application.class, args);	
}
速習 Spring Boot
$ brew tap pivotal/tap
$ brew install springboot
$ which spring
/usr/local/bin/spring
$ spring run app.groovy
// app.groovy	
@Controller	
class Application {	
	 @RequestMapping("/")	
	 @ResponseBody	
	 def String hoge() {	
	 	 "HelloWorld!"	
	 }	
}

初回のみ
for Macユーザー

ソースコード全文。import文不要
25分経過?

Spring 4
4.0.0.RC1の新機能
•

Java 8サポート

•

WebSocketサポート

•

さらなるRESTサポート
Java 8サポート
•

Lamada式サポート

•

JSR-310サポート(@DateTimeFormat)
Lambdaサポート
@Inject	
JdbcTemplate jdbcTemplate;	

!

Before

public void foo() {	
	 User user = jdbcTemplate.queryForObject(	
	 	 	 "SELECT userId, userName from User", 	
new RowMapper<User>() {	
	 	 	 	 public User mapRow(java.sql.ResultSet rs, int rowNum)	
	 	 	 	 	 	 throws java.sql.SQLException {	
	 	 	 	 	 return new User(rs.getLong(1), rs.getString(2));	
	 	 	 	 }	
	 	 	 }	
);	 	
}
Lambdaサポート
@Inject	
JdbcTemplate jdbcTemplate;	

!

Before

public void foo() {	
	 User user = jdbcTemplate.queryForObject(	
	 	 	 "SELECT userId, userName from User", 	
new RowMapper<User>() {	
	 	 	 	 public User mapRow(java.sql.ResultSet rs, int rowNum)	
	 	 	 	 	 	 throws java.sql.SQLException {	
	 	 	 	 	 return new User(rs.getLong(1), rs.getString(2));	
	 	 	 	 }	
	 	 	 }	
);	 	
}

After
Lambdaサポート
@Inject	
JdbcTemplate jdbcTemplate;	

!

Before

public void foo() {	
	 User user = jdbcTemplate.queryForObject(	
	 	 	 "SELECT userId, userName from User", 	
new RowMapper<User>() {	
	 	 	 	 public User mapRow(java.sql.ResultSet rs, int rowNum)	
	 	 	 	 	 	 throws java.sql.SQLException {	
	 	 	 	 	 return new User(rs.getLong(1), rs.getString(2));	
	 	 	 	 }	
	 	 	 }	
);	 	
}

After
Lambdaサポート
@Inject	
JdbcTemplate jdbcTemplate;	

!

Before

public void foo() {	
	 User user = jdbcTemplate.queryForObject(	
	 	 	 "SELECT userId, userName from User", 	
new RowMapper<User>() {	
	 	 	 	 public User mapRow(java.sql.ResultSet rs, int rowNum)	
	 	 	 	 	 	 throws java.sql.SQLException {	
	 	 	 	 	 return new User(rs.getLong(1), rs.getString(2));	
	 	 	 	 }	
	 	 	 }	
);	 	
}

SpringにはTemplateパターン+

コールバックな機能が多いので
ラムダ式の恩恵が大きい!

After
JSR-310サポート
WebSocketサポート
• JSR-356
• Java

EE 7に取り込まれる!

• 先日Tomcat7も対応しました(7.0.47)
• 今日ハンズオンもありましたね
JSR-356
import javax.websocket.OnMessage;	
import javax.websocket.server.ServerEndpoint;	

!
@ServerEndpoint("/echo")	
public class EchoEndpoint {	

!
	
	
	
	
}

@OnMessage	
public String echoText(String name) {	
	 return name;	
}
JSR-356
import javax.websocket.OnMessage;	
import javax.websocket.server.ServerEndpoint;	

!
@ServerEndpoint("/echo")	
public class EchoEndpoint {	

!
	
	
	
	
}

@OnMessage	
public String echoText(String name) {	
	 return name;	
}	

一見簡単そう
だがしかし
•

Rossen Stoyanchev氏(Spring MVCのメイン開発者)曰く
•

http://rstoyanchev.github.io/s2gx2013-introwebsocket-spring-framework-4/

•

http://rstoyanchev.github.io/s2gx2013-websocketbrowser-apps-with-spring
http://rstoyanchev.github.io/s2gx2013intro-websocket-spring-framework-4/#29
http://rstoyanchev.github.io/s2gx2013intro-websocket-spring-framework-4/#30
SpringによるWebSocket対応
•

JSR-356だけじゃなく、Tomcat、Jetty独自実装にも対応

•

WebSocketだけでなくレガシーブラウザでもfallbackでき
るようにSockJSに対応

•

ハイレベルなメッセージング仕様のSTOMPに対応
Simple Text Oriented Message Protocol
http://stomp.github.io/
Simpleな例(JSR-356版)
import javax.inject.Inject;	
import javax.websocket.OnMessage;	
import javax.websocket.server.ServerEndpoint;	

!
import org.springframework.web.socket.server.endpoint.SpringConfigurator;	

!
@ServerEndpoint(value = "/echo", configurator = SpringConfigurator.class)	
public class EchoEndpoint {	
	 @Inject	
	 EchoService echoService;	

!
	
	
	
	
}

@OnMessage	
public String echoText(String name) {	
	 return echoService.getMessage(name);	
}
Simpleな例(JSR-356版)
import javax.inject.Inject;	
import javax.websocket.OnMessage;	
import javax.websocket.server.ServerEndpoint;	

!
import org.springframework.web.socket.server.endpoint.SpringConfigurator;	

!
@ServerEndpoint(value = "/echo", configurator = SpringConfigurator.class)	
public class EchoEndpoint {	
	 @Inject	
	 EchoService echoService;	

JSR-356の拡張ポイント

!
	
	
	
	
}

@OnMessage	
public String echoText(String name) {	
	 return echoService.getMessage(name);	
}	

(Tomcatでも動く!)
Simpleな例(JSR-356非依存版)
import org.springframework.web.socket.TextMessage;	
import org.springframework.web.socket.WebSocketSession;	
import org.springframework.web.socket.adapter.TextWebSocketHandlerAdapter;	

!
public class EchoWebSocketHandler extends TextWebSocketHandlerAdapter {	

!
	
	

@Inject	
private EchoService echoService;	

!
	
	
	
	
	
	
}	

@Override	
public void handleTextMessage(WebSocketSession session, TextMessage message)	
	 	 throws Exception {	
	 String echoMessage = echoService.getMessage(message.getPayload());	
	 session.sendMessage(new TextMessage(echoMessage));	
}
Simpleな例(JSR-356非依存版)の
設定ファイル
@Configuration	
@EnableWebMvc	
@EnableWebSocket	
public class WebConfig extends WebMvcConfigurerAdapter implements	
	 	 WebSocketConfigurer {	
	 @Override	
	 public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {	
	 	 registry.addHandler(echoWebSocketHandler(), "/echo");	
	 	 // ...	
	 }	
	 @Bean	
	 public WebSocketHandler echoWebSocketHandler() {	
	 	 return new EchoWebSocketHandler();	
	 }	
	 // ...	
}
Simpleな例(JSR-356非依存版)の
設定ファイル
@Configuration	
@EnableWebMvc	
@EnableWebSocket	
public class WebConfig extends WebMvcConfigurerAdapter implements	
	 	 WebSocketConfigurer {	
	 @Override	
	 public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {	
	 	 registry.addHandler(echoWebSocketHandler(), "/echo");	
	 	 // ...	
	 }	
	 @Bean	
	 public WebSocketHandler echoWebSocketHandler() {	
	 	 return new PerConnectionWebSocketHandler(EchoWebSocketHandler.class);	
	 }	
	 // ...	
}

Decorationパターンを使える
SockJSサポート
@Configuration	
@EnableWebMvc	
@EnableWebSocket	
public class WebConfig extends WebMvcConfigurerAdapter implements	
	 	 WebSocketConfigurer {	
	 @Override	
	 public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {	
	 	 registry.addHandler(echoWebSocketHandler(), "/echo").withSockJS();	
	 	 // ...	
	 }	
	 @Bean	
	 public WebSocketHandler echoWebSocketHandler() {	
	 	 return new EchoWebSocketHandler();	
	 }	
	 // ...	
}

ちょい足し
SockJSクライアント
var ws = new SockJS("ws://localhost:8080/echo");	
!

ws.onopen = function (event) {	
// ...	
};	
!

ws.onmessage = function (event) {	
// ...	
};	
!

ws.onclose = function (event) {	
// ...	
};
STOMP
•

WebSocket上のメッセージングプロトコル
Command
Destination

Body
STOMP対応
import org.springframework.messaging.handler.annotation.MessageMapping;	
import org.springframework.messaging.handler.annotation.SendTo;	
import org.springframework.stereotype.Controller;	

!
@Controller	
public class GreetingController {	

!
	
	
	
	
	
}

@MessageMapping("/greeting")	
@SendTo("/topic/greetings")	
public String greet(String greeting) {	
	 return "[" + new Date().getTime() + "]: " + greeting;	
}
普通のHTTPからのpushできる
import javax.inject.Inject;	

!
import
import
import
import

org.springframework.messaging.simp.SimpMessagingTemplate;	
org.springframework.stereotype.Controller;	
org.springframework.web.bind.annotation.RequestMapping;	
org.springframework.web.bind.annotation.RequestMethod;	

!
@Controller	
public class GreetingController {	
	 @Inject	
	 SimpMessagingTemplate template;	

!
	
	
	
	
	
}

@RequestMapping(value = "/greeting", method = RequestMethod.POST)	
public void greet(String greeting) {	
	 String text = "[" + new Date().getTime() + "]: " + greeting;	
	 template.convertAndSend("/topic/greeting", text);	
}
HTTP用処理とSTOMP用処理の共存
import
import
import
import

org.springframework.messaging.handler.annotation.MessageMapping;	
org.springframework.stereotype.Controller;	
org.springframework.web.bind.annotation.RequestMapping;	
org.springframework.web.bind.annotation.RequestMethod;	

!
@Controller	
public class GreetingController {	

!
	
	
	

@RequestMapping(value = "/greeting", method = RequestMethod.POST)	
public void httpGreet(String text) {	
	 // HTTP用の処理	

	

}	

!
	
	
	

@MessageMapping(value = "/greeting")	
public void stompGreet(String text) {	
	 // STOMP用の処理	

	
}

}
HTTP用処理とSTOMP用処理の共存
import
import
import
import

org.springframework.messaging.handler.annotation.MessageMapping;	
WebSocketにもSpring MVCが使える
org.springframework.stereotype.Controller;	
org.springframework.web.bind.annotation.RequestMapping;	
org.springframework.web.bind.annotation.RequestMethod;	

!
@Controller	
public class GreetingController {	

!
	
	
	

@RequestMapping(value = "/greeting", method = RequestMethod.POST)	
public void httpGreet(String text) {	
	 // HTTP用の処理	

	

}	

!
	
	
	

@MessageMapping(value = "/greeting")	
public void stompGreet(String text) {	
	 // STOMP用の処理	

	
}

}	

@RequestMappingから想起しやすい
Springの良いところ
•

WebSocketにもSpring MVCが使える
•

•

→ 一貫性のある設計

@RequestMappingから想起しやすい
•

→ 対称性のある設計
続きはWebで!

http://rstoyanchev.github.io/s2gx2013-websocketbrowser-apps-with-spring
サンプル
•

https://github.com/rstoyanchev/spring-websocketportfolio

http://assets.spring.io/wp/WebSocketBlogPost.html
さらなるRESTサポート

•

@RestController

•

AsyncRestTemplate

•

Hypermedia Link
今後は
•

JMS 2.0

•

JTA 1.2

•

JPA 2.1

•

Bean Validation 1.1

•

JSR-236 Concurrency Utilities

•

JSR-107 JCache

•

をサポートする予定!
35分経過?

Spring Frameworkによる
Webアプリのアーキテクチャ
Springによる伝統的なWebアプリ
UI & Presentation
Layer

Service Layer

Persistence Layer

Spring DI x AOP

Spring MVC
Bean Validation

Spring
(Tx)

Spring Data JPA
JPA

Spring Security
DB
Browser/Client
最近のWebアプリ
Spring DI x AOP

Spring MVC
Bean Validation

Spring

Spring Data JPA
JPA
最近のWebアプリ
Spring DI x AOP

Spring MVC
Bean Validation

Router

Spring

REST API
Model/
Collection

View
Template

JavaScript Framework
(Backbone.js, Angular.js, Knockout.js, …)

Spring Data JPA
JPA
最近のWebアプリ
Spring DI x AOP

Spring MVC
Bean Validation

Spring

REST API

Spring Data JPA
JPA
Thin化するサーバーサイド

Router

Model/
Collection

View
Template

JavaScript Framework
(Backbone.js, Angular.js, Knockout.js, …)

Rich化するクライアントサイド
Webアプリの雛形を使ってQuick
Start
•

http://bit.ly/SpringTemplate

•

STSのproject template機能でアプリの雛形生成

•

Spring MVC + Spring Data JPA + Spring Security +
Bootstrap3を使用したCRUDアプリが1分でできます

(※ダウンロード時間除く)
Spring Frameworkの今 (2013年版) #jjug_ccc #ccc_r17 #springframework
Spring Frameworkの今 (2013年版) #jjug_ccc #ccc_r17 #springframework
Spring Frameworkの今 (2013年版) #jjug_ccc #ccc_r17 #springframework
STS 3.3.0まででしか動かなかった・・

•

最新のSTS 3.4.0ではTemplateを作れません

•

うちに帰ってMaven Archetype作ります・・・
40分経過?

Spring Framework or Java EE
Springによる伝統的なWebアプリ
UI & Presentation
Layer

Service Layer

Persistence Layer

Spring DI x AOP

Spring MVC
Bean Validation

Spring
(Tx)

Spring Data JPA
JPA

Spring Security
DB
Browser/Client
Java EEによる伝統的なWebアプリ
UI & Presentation
Layer

Service Layer

Persistence Layer

CDI and DI (JSR 299, 330)

JAX-RS
JSF

EJB

JPA

Bean Validation

Apache Shiro?
DB
Browser/Client
Springによる最近のWebアプリ
Spring DI x AOP

Spring MVC
Bean Validation

Router

Spring

REST API
Model/
Collection

View
Template

JavaScript Framework
(Backbone.js, Angular.js, Knockout.js, …)

Spring Data JPA
JPA
ちなみに・・・
•

http://blog.ik.am ぼくのブログもこのアーキテクチャ
REST API
GET /entries/xxx
BackBone.js

Spring MVC

Browser

{“entry_id”:”xxx”,”content”:”Hello”}

http://blog.ik.am/#/entries/193 参照
Java EEによる最近のWebアプリ
CDI and DI (JSR 299, 330)

JAX-RS
Bean Validation

Router

EJB

REST API
Model/
Collection

View
Template

JavaScript Framework
(Backbone.js, Angular.js, Knockout.js, …)

JPA
Java EEによる最近のWebアプリ
CDI and DI (JSR 299, 330)

JAX-RS
Bean Validation

Router

EJB

JPA

REST API
Model/
Collection

View
Template

JavaScript Framework
(Backbone.js, Angular.js, Knockout.js, …)

Java EEでもできるんです
アーキテクチャの違い
•

Spring FrameworkでもJava EEでもアー
キテクチャに大きな違いはない

•

アーキテクチャ的にはどちらを選んでも
よい
アーキテクチャの違い
•

Spring FrameworkでもJava EEでもアー
キテクチャに大きな違いはない

•

アーキテクチャ的にはどちらを選んでも
よい → Java標準に従った方が良い?
既存Springユーザーはどうするか?

• いつJava

EEに移行するの?
いつやるの?
いつやるの?

•今でじゃない
新規Javaユーザーは?

•

正直、Java EE 7で開発すれば良いかな、と思う。
新規Javaユーザーは?

•

正直、Java EE 7で開発すれば良いかな、と思う。

OracleによるGlassFish4の商用サポートは
なくなったのでご注意ください!
だれがこれからSpringを使う?
•

すでにSpring(古いバージョン)を利用しているユーザー

•

Springに関するノウハウがあれば、技術の連続性を考え
て、まだSpringを使い続けると良いと思う。

ただし、Springは新しいバージョン(3.2.x)で
正しい使い方をしましょう
単なるjarのupdateだけならNG
Springの不安
•

Pivotalが将来Springに対する投資を縮小したと
したら、Springを支えるエンジニアが離れ、開発
が停滞するかもしれない。

こういう心配のあるかたはJava EEをオススメします!
Spring FrameworkからJava EEへ
•

今後のWebアプリケーションはThin
Server化し、サーバーサイドはREST API
ベースになっていく?

•

Spring MVCでREST APIを開発するスタ
イルからJAX-RSで開発するスタイルへ移
行していけばよい?
Spring FrameworkからJava EEへ
•

もしくはJAX-RSの拡張仕様としてアクションベースの
フレームワークがSpring MVCベースで策定されれば統
一されるだろう・・(Springも徐々にJSR対応している)
•

Bean Validation (JSR 303)

•

DI (JSR 330)

•

JBatch (JSR 352)

•

WebSocket (JSR 356) など・・・
Java EEの課題
•

1つ1つの仕様(JSF, JAX-RS, EJB, JPA, …)が独立・完結
しているため、組み合わせる際に重複する機能が多い

•

新機能が発表されてから商用利用できるまでに時間がか
かる

•

組み合わせのベストプラクティスがわかりにくい

→ Spring Frameworkはベストプラクティス化が進んで
いる(書籍や意味のあるサンプルなど)
Spring Framework or Java EE個人的まとめ
Javaを

YES

Spring以外のJavaフレーム
ワークにもあてはまるフロー

使っている

だと思う

今

NO

Springを使って
いる
Spring
の将来に不安な
し

新しい機能
を使いたい

Java EE

Spring
アーキテクチャ選定のアンチパターン
•

中途半端なフレームワーク組み合わせ (Spring + JAX-RS(Jersey)など)
•

•

•

コア(DI)にSpring Frameworkを採用するなら、Springで統一
Java EEを選択するなら標準仕様で組み合わせるべき

Bridge(連携ライブラリ)が存在すると、いくつかの問題が起こる
•

機能が制限される

•

バージョンアップしづらくなる

•

学習コストが高い
Spring Frameworkの今 (2013年版) #jjug_ccc #ccc_r17 #springframework
Spring Frameworkの今 (2013年版) #jjug_ccc #ccc_r17 #springframework
まさかのSpring特需?

•

本発表で興味をもっていただけば幸いです
Springを触ってみたいけど・・

•

どこから始めれば良いかわからない・・・

•

日本語情報が少ない・・・

•

業務でつかえるの・・・?
そんなあなたに耳寄りな情報!
宣伝
•

近日中(あと2人月くらい・・)に
Spring Frameworkのベストプラク
ティスガイドライン(日本語、英語)
をGithubで公開予定
宣伝
• 業務でSpring

Frameworkを使うためのノウハウを公開しちゃいます

• アプリケーションのレイヤー化と各レイヤーの実装方法
• DBアクセス
• 入力チェック
• 例外ハンドリング
• ロギング
• メッセージ管理
• ファイルアップロード
• ・・・・

多分公開する
まとめ

•

Springはまだまだ進化中

•

Bootstrap3本がでたら買ってください!
1 of 118

Recommended

最近のSpringFramework2013 #jjug #jsug #SpringFramework by
最近のSpringFramework2013 #jjug #jsug #SpringFramework最近のSpringFramework2013 #jjug #jsug #SpringFramework
最近のSpringFramework2013 #jjug #jsug #SpringFrameworkToshiaki Maki
4K views29 slides
Grails 3.0先取り!? Spring Boot入門ハンズオン #jggug_boot by
Grails 3.0先取り!? Spring Boot入門ハンズオン #jggug_bootGrails 3.0先取り!? Spring Boot入門ハンズオン #jggug_boot
Grails 3.0先取り!? Spring Boot入門ハンズオン #jggug_bootToshiaki Maki
37.3K views157 slides
Spring Bootキャンプ @関ジャバ #kanjava_sbc by
Spring Bootキャンプ @関ジャバ #kanjava_sbcSpring Bootキャンプ @関ジャバ #kanjava_sbc
Spring Bootキャンプ @関ジャバ #kanjava_sbcToshiaki Maki
4.5K views13 slides
Spring Bootで変わる Javaアプリ開発! #jsug by
Spring Bootで変わる Javaアプリ開発! #jsugSpring Bootで変わる Javaアプリ開発! #jsug
Spring Bootで変わる Javaアプリ開発! #jsugToshiaki Maki
54.7K views114 slides
Spring4とSpring Bootで作る次世代Springアプリケーション #jjug #jsug by
Spring4とSpring Bootで作る次世代Springアプリケーション #jjug #jsugSpring4とSpring Bootで作る次世代Springアプリケーション #jjug #jsug
Spring4とSpring Bootで作る次世代Springアプリケーション #jjug #jsugToshiaki Maki
37.2K views199 slides
Spring Boot + Doma + AngularJSで作るERP #jjug_ccc #ccc_r12 by
Spring Boot + Doma + AngularJSで作るERP #jjug_ccc #ccc_r12Spring Boot + Doma + AngularJSで作るERP #jjug_ccc #ccc_r12
Spring Boot + Doma + AngularJSで作るERP #jjug_ccc #ccc_r12学 松崎
19K views64 slides

More Related Content

What's hot

Jsug2015 summer spring適用におけるバッドノウハウとベタープラクティス by
Jsug2015 summer spring適用におけるバッドノウハウとベタープラクティスJsug2015 summer spring適用におけるバッドノウハウとベタープラクティス
Jsug2015 summer spring適用におけるバッドノウハウとベタープラクティスYoichi KIKUCHI
10.3K views148 slides
【Camphor ×サイボウズ】selenium勉強会 by
【Camphor ×サイボウズ】selenium勉強会【Camphor ×サイボウズ】selenium勉強会
【Camphor ×サイボウズ】selenium勉強会Yuki Okada
13K views51 slides
Jsug 20160422 slides by
Jsug 20160422 slidesJsug 20160422 slides
Jsug 20160422 slidesYuichi Hasegawa
5.1K views82 slides
おれおれブログシステムにServiceWorkerを導入してみた #serviceworker by
おれおれブログシステムにServiceWorkerを導入してみた #serviceworkerおれおれブログシステムにServiceWorkerを導入してみた #serviceworker
おれおれブログシステムにServiceWorkerを導入してみた #serviceworkerToshiaki Maki
3.7K views16 slides
SeleniumIDEとSelenium WebDriver × Node.js Seleniumで業務効率化する15分 by
SeleniumIDEとSelenium WebDriver × Node.js Seleniumで業務効率化する15分SeleniumIDEとSelenium WebDriver × Node.js Seleniumで業務効率化する15分
SeleniumIDEとSelenium WebDriver × Node.js Seleniumで業務効率化する15分松田 千尋
11.1K views29 slides
laravel x モバイルアプリ by
laravel x モバイルアプリlaravel x モバイルアプリ
laravel x モバイルアプリMasaki Oshikawa
3.7K views42 slides

What's hot(20)

Jsug2015 summer spring適用におけるバッドノウハウとベタープラクティス by Yoichi KIKUCHI
Jsug2015 summer spring適用におけるバッドノウハウとベタープラクティスJsug2015 summer spring適用におけるバッドノウハウとベタープラクティス
Jsug2015 summer spring適用におけるバッドノウハウとベタープラクティス
Yoichi KIKUCHI10.3K views
【Camphor ×サイボウズ】selenium勉強会 by Yuki Okada
【Camphor ×サイボウズ】selenium勉強会【Camphor ×サイボウズ】selenium勉強会
【Camphor ×サイボウズ】selenium勉強会
Yuki Okada13K views
おれおれブログシステムにServiceWorkerを導入してみた #serviceworker by Toshiaki Maki
おれおれブログシステムにServiceWorkerを導入してみた #serviceworkerおれおれブログシステムにServiceWorkerを導入してみた #serviceworker
おれおれブログシステムにServiceWorkerを導入してみた #serviceworker
Toshiaki Maki3.7K views
SeleniumIDEとSelenium WebDriver × Node.js Seleniumで業務効率化する15分 by 松田 千尋
SeleniumIDEとSelenium WebDriver × Node.js Seleniumで業務効率化する15分SeleniumIDEとSelenium WebDriver × Node.js Seleniumで業務効率化する15分
SeleniumIDEとSelenium WebDriver × Node.js Seleniumで業務効率化する15分
松田 千尋11.1K views
laravel x モバイルアプリ by Masaki Oshikawa
laravel x モバイルアプリlaravel x モバイルアプリ
laravel x モバイルアプリ
Masaki Oshikawa3.7K views
Spring starterによるSpring Boot Starter by Ryosuke Uchitate
Spring starterによるSpring Boot StarterSpring starterによるSpring Boot Starter
Spring starterによるSpring Boot Starter
Ryosuke Uchitate3.1K views
こんなに使える!今どきのAPIドキュメンテーションツール by dcubeio
こんなに使える!今どきのAPIドキュメンテーションツールこんなに使える!今どきのAPIドキュメンテーションツール
こんなに使える!今どきのAPIドキュメンテーションツール
dcubeio25.9K views
【B-1】kintoneでお手軽コールセンター! by Sakae Saito
【B-1】kintoneでお手軽コールセンター!【B-1】kintoneでお手軽コールセンター!
【B-1】kintoneでお手軽コールセンター!
Sakae Saito5K views
Mojoliciousでつくる! Webアプリ入門 by Yusuke Wada
Mojoliciousでつくる! Webアプリ入門Mojoliciousでつくる! Webアプリ入門
Mojoliciousでつくる! Webアプリ入門
Yusuke Wada22.2K views
Spring Framework ふりかえりと4.3新機能 by kimulla
Spring Framework ふりかえりと4.3新機能Spring Framework ふりかえりと4.3新機能
Spring Framework ふりかえりと4.3新機能
kimulla4.1K views
2015年GMOペパボ新卒エンジニア研修 Webオペレーション研修イントロダクション by Takahiro Okumura
2015年GMOペパボ新卒エンジニア研修 Webオペレーション研修イントロダクション2015年GMOペパボ新卒エンジニア研修 Webオペレーション研修イントロダクション
2015年GMOペパボ新卒エンジニア研修 Webオペレーション研修イントロダクション
Takahiro Okumura11.6K views
楽天トラベルとSpring(Spring Day 2016) by Rakuten Group, Inc.
楽天トラベルとSpring(Spring Day 2016)楽天トラベルとSpring(Spring Day 2016)
楽天トラベルとSpring(Spring Day 2016)
Rakuten Group, Inc.14.1K views
Spring Bootをはじめる時にやるべき10のこと by 心 谷本
Spring Bootをはじめる時にやるべき10のことSpring Bootをはじめる時にやるべき10のこと
Spring Bootをはじめる時にやるべき10のこと
心 谷本41.9K views
AzureでLaravel動かしてみた by Keiji Kamebuchi
AzureでLaravel動かしてみたAzureでLaravel動かしてみた
AzureでLaravel動かしてみた
Keiji Kamebuchi4.9K views
第八回 #渋谷Java 最近のjava PaaS事情 by Kazuhiro Serizawa
第八回 #渋谷Java 最近のjava PaaS事情第八回 #渋谷Java 最近のjava PaaS事情
第八回 #渋谷Java 最近のjava PaaS事情
Kazuhiro Serizawa4.9K views

Viewers also liked

Spring Bootハンズオン ~Spring Bootで作る マイクロサービスアーキテクチャ! #jjug_ccc #ccc_r53 by
Spring Bootハンズオン ~Spring Bootで作る マイクロサービスアーキテクチャ! #jjug_ccc #ccc_r53Spring Bootハンズオン ~Spring Bootで作る マイクロサービスアーキテクチャ! #jjug_ccc #ccc_r53
Spring Bootハンズオン ~Spring Bootで作る マイクロサービスアーキテクチャ! #jjug_ccc #ccc_r53Toshiaki Maki
36.1K views123 slides
Springを何となく使ってる人が抑えるべきポイント by
Springを何となく使ってる人が抑えるべきポイントSpringを何となく使ってる人が抑えるべきポイント
Springを何となく使ってる人が抑えるべきポイント土岐 孝平
25.1K views18 slides
ぱぱっと理解するSpring Cloudの基本 by
ぱぱっと理解するSpring Cloudの基本ぱぱっと理解するSpring Cloudの基本
ぱぱっと理解するSpring Cloudの基本kazuki kumagai
19.8K views94 slides
Spring bootで学ぶ初めてのwebアプリ開発 by
Spring bootで学ぶ初めてのwebアプリ開発Spring bootで学ぶ初めてのwebアプリ開発
Spring bootで学ぶ初めてのwebアプリ開発terahide
12.7K views43 slides
Spring.io by
Spring.ioSpring.io
Spring.ioCédric GILLET
767 views47 slides
Cloud Foundy Java Client V 2.0 #cf_tokyo by
Cloud Foundy Java Client V 2.0 #cf_tokyoCloud Foundy Java Client V 2.0 #cf_tokyo
Cloud Foundy Java Client V 2.0 #cf_tokyoToshiaki Maki
2.5K views53 slides

Viewers also liked(20)

Spring Bootハンズオン ~Spring Bootで作る マイクロサービスアーキテクチャ! #jjug_ccc #ccc_r53 by Toshiaki Maki
Spring Bootハンズオン ~Spring Bootで作る マイクロサービスアーキテクチャ! #jjug_ccc #ccc_r53Spring Bootハンズオン ~Spring Bootで作る マイクロサービスアーキテクチャ! #jjug_ccc #ccc_r53
Spring Bootハンズオン ~Spring Bootで作る マイクロサービスアーキテクチャ! #jjug_ccc #ccc_r53
Toshiaki Maki36.1K views
Springを何となく使ってる人が抑えるべきポイント by 土岐 孝平
Springを何となく使ってる人が抑えるべきポイントSpringを何となく使ってる人が抑えるべきポイント
Springを何となく使ってる人が抑えるべきポイント
土岐 孝平25.1K views
ぱぱっと理解するSpring Cloudの基本 by kazuki kumagai
ぱぱっと理解するSpring Cloudの基本ぱぱっと理解するSpring Cloudの基本
ぱぱっと理解するSpring Cloudの基本
kazuki kumagai19.8K views
Spring bootで学ぶ初めてのwebアプリ開発 by terahide
Spring bootで学ぶ初めてのwebアプリ開発Spring bootで学ぶ初めてのwebアプリ開発
Spring bootで学ぶ初めてのwebアプリ開発
terahide12.7K views
Cloud Foundy Java Client V 2.0 #cf_tokyo by Toshiaki Maki
Cloud Foundy Java Client V 2.0 #cf_tokyoCloud Foundy Java Client V 2.0 #cf_tokyo
Cloud Foundy Java Client V 2.0 #cf_tokyo
Toshiaki Maki2.5K views
Concourse CI Meetup Demo by Toshiaki Maki
Concourse CI Meetup DemoConcourse CI Meetup Demo
Concourse CI Meetup Demo
Toshiaki Maki1.5K views
どこよりも早い Spring Boot 1.2 解説 #渋谷Java by Toshiaki Maki
どこよりも早い Spring Boot 1.2 解説 #渋谷Javaどこよりも早い Spring Boot 1.2 解説 #渋谷Java
どこよりも早い Spring Boot 1.2 解説 #渋谷Java
Toshiaki Maki13.3K views
Spring Boot 1.3 News #渋谷Java by Toshiaki Maki
Spring Boot 1.3 News #渋谷JavaSpring Boot 1.3 News #渋谷Java
Spring Boot 1.3 News #渋谷Java
Toshiaki Maki10.1K views
Introduction to Concourse CI #渋谷Java by Toshiaki Maki
Introduction to Concourse CI #渋谷JavaIntroduction to Concourse CI #渋谷Java
Introduction to Concourse CI #渋谷Java
Toshiaki Maki3.9K views
Install Concourse CI with BOSH by Toshiaki Maki
Install Concourse CI with BOSHInstall Concourse CI with BOSH
Install Concourse CI with BOSH
Toshiaki Maki2.3K views
今すぐ始めるCloud Foundry #hackt #hackt_k by Toshiaki Maki
今すぐ始めるCloud Foundry #hackt #hackt_k今すぐ始めるCloud Foundry #hackt #hackt_k
今すぐ始めるCloud Foundry #hackt #hackt_k
Toshiaki Maki11.2K views
SpringOne 2GX 2014 参加報告 & Spring 4.1について #jsug by Toshiaki Maki
SpringOne 2GX 2014 参加報告 & Spring 4.1について #jsugSpringOne 2GX 2014 参加報告 & Spring 4.1について #jsug
SpringOne 2GX 2014 参加報告 & Spring 4.1について #jsug
Toshiaki Maki16.4K views
Short Lived Tasks in Cloud Foundry #cfdtokyo by Toshiaki Maki
Short Lived Tasks in Cloud Foundry #cfdtokyoShort Lived Tasks in Cloud Foundry #cfdtokyo
Short Lived Tasks in Cloud Foundry #cfdtokyo
Toshiaki Maki1.5K views
Implement Service Broker with Spring Boot #cf_tokyo by Toshiaki Maki
Implement Service Broker with Spring Boot #cf_tokyoImplement Service Broker with Spring Boot #cf_tokyo
Implement Service Broker with Spring Boot #cf_tokyo
Toshiaki Maki3.1K views
From Zero to Hero with REST and OAuth2 #jjug by Toshiaki Maki
From Zero to Hero with REST and OAuth2 #jjugFrom Zero to Hero with REST and OAuth2 #jjug
From Zero to Hero with REST and OAuth2 #jjug
Toshiaki Maki3.3K views
Team Support in Concourse CI 2.0 #concourse_tokyo by Toshiaki Maki
Team Support in Concourse CI 2.0 #concourse_tokyoTeam Support in Concourse CI 2.0 #concourse_tokyo
Team Support in Concourse CI 2.0 #concourse_tokyo
Toshiaki Maki2.7K views
REST with Spring Boot #jqfk by Toshiaki Maki
REST with Spring Boot #jqfkREST with Spring Boot #jqfk
REST with Spring Boot #jqfk
Toshiaki Maki10.9K views
Spring bootでweb セキュリティ(ログイン認証)編 by なべ
Spring bootでweb セキュリティ(ログイン認証)編Spring bootでweb セキュリティ(ログイン認証)編
Spring bootでweb セキュリティ(ログイン認証)編
なべ 32.7K views
Spring Cloud Servicesの紹介 #pcf_tokyo by Toshiaki Maki
Spring Cloud Servicesの紹介 #pcf_tokyoSpring Cloud Servicesの紹介 #pcf_tokyo
Spring Cloud Servicesの紹介 #pcf_tokyo
Toshiaki Maki3K views

Similar to Spring Frameworkの今 (2013年版) #jjug_ccc #ccc_r17 #springframework

Knockout を用いた Firefox OS アプリケーションの開発 by
Knockout を用いた Firefox OS アプリケーションの開発Knockout を用いた Firefox OS アプリケーションの開発
Knockout を用いた Firefox OS アプリケーションの開発Kentaro Iizuka
3K views36 slides
scala-kaigi1-sbt by
scala-kaigi1-sbtscala-kaigi1-sbt
scala-kaigi1-sbtKenji Yoshida
5.8K views122 slides
Ext.direct by
Ext.directExt.direct
Ext.directShuhei Aoyama
1.2K views29 slides
ScalaMatsuri 2016 by
ScalaMatsuri 2016ScalaMatsuri 2016
ScalaMatsuri 2016Yoshitaka Fujii
7.1K views151 slides
はじめよう Backbone.js by
はじめよう Backbone.jsはじめよう Backbone.js
はじめよう Backbone.jsHiroki Toyokawa
41.9K views72 slides
Seasarプロジェクト徹底攻略 by
Seasarプロジェクト徹底攻略Seasarプロジェクト徹底攻略
Seasarプロジェクト徹底攻略takezoe
5.2K views36 slides

Similar to Spring Frameworkの今 (2013年版) #jjug_ccc #ccc_r17 #springframework(20)

Knockout を用いた Firefox OS アプリケーションの開発 by Kentaro Iizuka
Knockout を用いた Firefox OS アプリケーションの開発Knockout を用いた Firefox OS アプリケーションの開発
Knockout を用いた Firefox OS アプリケーションの開発
Kentaro Iizuka3K views
はじめよう Backbone.js by Hiroki Toyokawa
はじめよう Backbone.jsはじめよう Backbone.js
はじめよう Backbone.js
Hiroki Toyokawa41.9K views
Seasarプロジェクト徹底攻略 by takezoe
Seasarプロジェクト徹底攻略Seasarプロジェクト徹底攻略
Seasarプロジェクト徹底攻略
takezoe5.2K views
TDC20111031_Groovy_Geb by Nobuhiro Sue
TDC20111031_Groovy_GebTDC20111031_Groovy_Geb
TDC20111031_Groovy_Geb
Nobuhiro Sue677 views
データマイニング+WEB勉強会資料第6回 by Naoyuki Yamada
データマイニング+WEB勉強会資料第6回データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回
Naoyuki Yamada3.6K views
Power Appsで Excel関数を利用する3つの方法 by Nagao Hiroaki
Power Appsで Excel関数を利用する3つの方法Power Appsで Excel関数を利用する3つの方法
Power Appsで Excel関数を利用する3つの方法
Nagao Hiroaki951 views
jQuery Mobile 最新情報 & Tips by yoshikawa_t
jQuery Mobile 最新情報 & TipsjQuery Mobile 最新情報 & Tips
jQuery Mobile 最新情報 & Tips
yoshikawa_t4.9K views
Head toward Java 16 (Night Seminar Edition) by Yuji Kubota
Head toward Java 16 (Night Seminar Edition)Head toward Java 16 (Night Seminar Edition)
Head toward Java 16 (Night Seminar Edition)
Yuji Kubota537 views
Casual convergence by azukiwasher
Casual convergenceCasual convergence
Casual convergence
azukiwasher2.8K views
JRoRの力をJava EE技術を使ってさらに高める10の方法(発動編) by Yoshiharu Hashimoto
JRoRの力をJava EE技術を使ってさらに高める10の方法(発動編)JRoRの力をJava EE技術を使ってさらに高める10の方法(発動編)
JRoRの力をJava EE技術を使ってさらに高める10の方法(発動編)
Yoshiharu Hashimoto1.9K views
Scalaでプログラムを作りました by Tomoharu ASAMI
Scalaでプログラムを作りましたScalaでプログラムを作りました
Scalaでプログラムを作りました
Tomoharu ASAMI5K views
企業におけるSpring@日本springユーザー会20090624 by Yusuke Suzuki
企業におけるSpring@日本springユーザー会20090624企業におけるSpring@日本springユーザー会20090624
企業におけるSpring@日本springユーザー会20090624
Yusuke Suzuki1.9K views
[出張!雲勉 in Tokyo] Swagger で簡単APIドキュメント作成 by Tomoki Oyamatsu
[出張!雲勉 in Tokyo] Swagger で簡単APIドキュメント作成[出張!雲勉 in Tokyo] Swagger で簡単APIドキュメント作成
[出張!雲勉 in Tokyo] Swagger で簡単APIドキュメント作成
Tomoki Oyamatsu988 views
Develop Web Application with Node.js + Express by Akinari Tsugo
Develop Web Application with Node.js + ExpressDevelop Web Application with Node.js + Express
Develop Web Application with Node.js + Express
Akinari Tsugo394 views

More from Toshiaki Maki

From Spring Boot 2.2 to Spring Boot 2.3 #jsug by
From Spring Boot 2.2 to Spring Boot 2.3 #jsugFrom Spring Boot 2.2 to Spring Boot 2.3 #jsug
From Spring Boot 2.2 to Spring Boot 2.3 #jsugToshiaki Maki
2.2K views146 slides
Concourse x Spinnaker #concourse_tokyo by
Concourse x Spinnaker #concourse_tokyoConcourse x Spinnaker #concourse_tokyo
Concourse x Spinnaker #concourse_tokyoToshiaki Maki
3.6K views19 slides
Serverless with Spring Cloud Function, Knative and riff #SpringOneTour #s1t by
Serverless with Spring Cloud Function, Knative and riff #SpringOneTour #s1tServerless with Spring Cloud Function, Knative and riff #SpringOneTour #s1t
Serverless with Spring Cloud Function, Knative and riff #SpringOneTour #s1tToshiaki Maki
5.2K views71 slides
決済システムの内製化への旅 - SpringとPCFで作るクラウドネイティブなシステム開発 #jsug #sf_h1 by
決済システムの内製化への旅 - SpringとPCFで作るクラウドネイティブなシステム開発 #jsug #sf_h1決済システムの内製化への旅 - SpringとPCFで作るクラウドネイティブなシステム開発 #jsug #sf_h1
決済システムの内製化への旅 - SpringとPCFで作るクラウドネイティブなシステム開発 #jsug #sf_h1Toshiaki Maki
36.5K views149 slides
Spring Boot Actuator 2.0 & Micrometer #jjug_ccc #ccc_a1 by
Spring Boot Actuator 2.0 & Micrometer #jjug_ccc #ccc_a1Spring Boot Actuator 2.0 & Micrometer #jjug_ccc #ccc_a1
Spring Boot Actuator 2.0 & Micrometer #jjug_ccc #ccc_a1Toshiaki Maki
12K views64 slides
Spring Boot Actuator 2.0 & Micrometer by
Spring Boot Actuator 2.0 & MicrometerSpring Boot Actuator 2.0 & Micrometer
Spring Boot Actuator 2.0 & MicrometerToshiaki Maki
22.9K views47 slides

More from Toshiaki Maki(20)

From Spring Boot 2.2 to Spring Boot 2.3 #jsug by Toshiaki Maki
From Spring Boot 2.2 to Spring Boot 2.3 #jsugFrom Spring Boot 2.2 to Spring Boot 2.3 #jsug
From Spring Boot 2.2 to Spring Boot 2.3 #jsug
Toshiaki Maki2.2K views
Concourse x Spinnaker #concourse_tokyo by Toshiaki Maki
Concourse x Spinnaker #concourse_tokyoConcourse x Spinnaker #concourse_tokyo
Concourse x Spinnaker #concourse_tokyo
Toshiaki Maki3.6K views
Serverless with Spring Cloud Function, Knative and riff #SpringOneTour #s1t by Toshiaki Maki
Serverless with Spring Cloud Function, Knative and riff #SpringOneTour #s1tServerless with Spring Cloud Function, Knative and riff #SpringOneTour #s1t
Serverless with Spring Cloud Function, Knative and riff #SpringOneTour #s1t
Toshiaki Maki5.2K views
決済システムの内製化への旅 - SpringとPCFで作るクラウドネイティブなシステム開発 #jsug #sf_h1 by Toshiaki Maki
決済システムの内製化への旅 - SpringとPCFで作るクラウドネイティブなシステム開発 #jsug #sf_h1決済システムの内製化への旅 - SpringとPCFで作るクラウドネイティブなシステム開発 #jsug #sf_h1
決済システムの内製化への旅 - SpringとPCFで作るクラウドネイティブなシステム開発 #jsug #sf_h1
Toshiaki Maki36.5K views
Spring Boot Actuator 2.0 & Micrometer #jjug_ccc #ccc_a1 by Toshiaki Maki
Spring Boot Actuator 2.0 & Micrometer #jjug_ccc #ccc_a1Spring Boot Actuator 2.0 & Micrometer #jjug_ccc #ccc_a1
Spring Boot Actuator 2.0 & Micrometer #jjug_ccc #ccc_a1
Toshiaki Maki12K views
Spring Boot Actuator 2.0 & Micrometer by Toshiaki Maki
Spring Boot Actuator 2.0 & MicrometerSpring Boot Actuator 2.0 & Micrometer
Spring Boot Actuator 2.0 & Micrometer
Toshiaki Maki22.9K views
Open Service Broker APIとKubernetes Service Catalog #k8sjp by Toshiaki Maki
Open Service Broker APIとKubernetes Service Catalog #k8sjpOpen Service Broker APIとKubernetes Service Catalog #k8sjp
Open Service Broker APIとKubernetes Service Catalog #k8sjp
Toshiaki Maki8.5K views
Spring Cloud Function & Project riff #jsug by Toshiaki Maki
Spring Cloud Function & Project riff #jsugSpring Cloud Function & Project riff #jsug
Spring Cloud Function & Project riff #jsug
Toshiaki Maki4.2K views
Introduction to Spring WebFlux #jsug #sf_a1 by Toshiaki Maki
Introduction to Spring WebFlux #jsug #sf_a1Introduction to Spring WebFlux #jsug #sf_a1
Introduction to Spring WebFlux #jsug #sf_a1
Toshiaki Maki18.5K views
BOSH / CF Deployment in modern ways #cf_tokyo by Toshiaki Maki
BOSH / CF Deployment in modern ways #cf_tokyoBOSH / CF Deployment in modern ways #cf_tokyo
BOSH / CF Deployment in modern ways #cf_tokyo
Toshiaki Maki4.9K views
Why PCF is the best platform for Spring Boot by Toshiaki Maki
Why PCF is the best platform for Spring BootWhy PCF is the best platform for Spring Boot
Why PCF is the best platform for Spring Boot
Toshiaki Maki7.1K views
Zipkin Components #zipkin_jp by Toshiaki Maki
Zipkin Components #zipkin_jpZipkin Components #zipkin_jp
Zipkin Components #zipkin_jp
Toshiaki Maki3.1K views
マイクロサービスに必要な技術要素はすべてSpring Cloudにある #DO07 by Toshiaki Maki
マイクロサービスに必要な技術要素はすべてSpring Cloudにある #DO07マイクロサービスに必要な技術要素はすべてSpring Cloudにある #DO07
マイクロサービスに必要な技術要素はすべてSpring Cloudにある #DO07
Toshiaki Maki6.5K views
Spring Framework 5.0による Reactive Web Application #JavaDayTokyo by Toshiaki Maki
Spring Framework 5.0による Reactive Web Application #JavaDayTokyoSpring Framework 5.0による Reactive Web Application #JavaDayTokyo
Spring Framework 5.0による Reactive Web Application #JavaDayTokyo
Toshiaki Maki31.5K views
実例で学ぶ、明日から使えるSpring Boot Tips #jsug by Toshiaki Maki
実例で学ぶ、明日から使えるSpring Boot Tips #jsug実例で学ぶ、明日から使えるSpring Boot Tips #jsug
実例で学ぶ、明日から使えるSpring Boot Tips #jsug
Toshiaki Maki17.1K views
Spring ❤️ Kotlin #jjug by Toshiaki Maki
Spring ❤️ Kotlin #jjugSpring ❤️ Kotlin #jjug
Spring ❤️ Kotlin #jjug
Toshiaki Maki3.8K views
Event Driven Microservices with Spring Cloud Stream #jjug_ccc #ccc_ab3 by Toshiaki Maki
Event Driven Microservices with Spring Cloud Stream #jjug_ccc #ccc_ab3Event Driven Microservices with Spring Cloud Stream #jjug_ccc #ccc_ab3
Event Driven Microservices with Spring Cloud Stream #jjug_ccc #ccc_ab3
Toshiaki Maki18.3K views
Managing your Docker image continuously with Concourse CI by Toshiaki Maki
Managing your Docker image continuously with Concourse CIManaging your Docker image continuously with Concourse CI
Managing your Docker image continuously with Concourse CI
Toshiaki Maki1.7K views
Data Microservices with Spring Cloud Stream, Task, and Data Flow #jsug #spri... by Toshiaki Maki
Data Microservices with Spring Cloud Stream, Task,  and Data Flow #jsug #spri...Data Microservices with Spring Cloud Stream, Task,  and Data Flow #jsug #spri...
Data Microservices with Spring Cloud Stream, Task, and Data Flow #jsug #spri...
Toshiaki Maki22.3K views
Consumer Driven Contractsで REST API/マイクロサービスをテスト #m3tech by Toshiaki Maki
Consumer Driven Contractsで REST API/マイクロサービスをテスト #m3techConsumer Driven Contractsで REST API/マイクロサービスをテスト #m3tech
Consumer Driven Contractsで REST API/マイクロサービスをテスト #m3tech
Toshiaki Maki5.2K views

Recently uploaded

Windows 11 information that can be used at the development site by
Windows 11 information that can be used at the development siteWindows 11 information that can be used at the development site
Windows 11 information that can be used at the development siteAtomu Hidaka
90 views41 slides
PCCC23:富士通株式会社 テーマ1「次世代高性能・省電力プロセッサ『FUJITSU-MONAKA』」 by
PCCC23:富士通株式会社 テーマ1「次世代高性能・省電力プロセッサ『FUJITSU-MONAKA』」PCCC23:富士通株式会社 テーマ1「次世代高性能・省電力プロセッサ『FUJITSU-MONAKA』」
PCCC23:富士通株式会社 テーマ1「次世代高性能・省電力プロセッサ『FUJITSU-MONAKA』」PC Cluster Consortium
45 views12 slides
SNMPセキュリティ超入門 by
SNMPセキュリティ超入門SNMPセキュリティ超入門
SNMPセキュリティ超入門mkoda
453 views15 slides
The Things Stack説明資料 by The Things Industries by
The Things Stack説明資料 by The Things IndustriesThe Things Stack説明資料 by The Things Industries
The Things Stack説明資料 by The Things IndustriesCRI Japan, Inc.
76 views29 slides
光コラボは契約してはいけない by
光コラボは契約してはいけない光コラボは契約してはいけない
光コラボは契約してはいけないTakuya Matsunaga
25 views17 slides

Recently uploaded(12)

Windows 11 information that can be used at the development site by Atomu Hidaka
Windows 11 information that can be used at the development siteWindows 11 information that can be used at the development site
Windows 11 information that can be used at the development site
Atomu Hidaka90 views
PCCC23:富士通株式会社 テーマ1「次世代高性能・省電力プロセッサ『FUJITSU-MONAKA』」 by PC Cluster Consortium
PCCC23:富士通株式会社 テーマ1「次世代高性能・省電力プロセッサ『FUJITSU-MONAKA』」PCCC23:富士通株式会社 テーマ1「次世代高性能・省電力プロセッサ『FUJITSU-MONAKA』」
PCCC23:富士通株式会社 テーマ1「次世代高性能・省電力プロセッサ『FUJITSU-MONAKA』」
SNMPセキュリティ超入門 by mkoda
SNMPセキュリティ超入門SNMPセキュリティ超入門
SNMPセキュリティ超入門
mkoda453 views
The Things Stack説明資料 by The Things Industries by CRI Japan, Inc.
The Things Stack説明資料 by The Things IndustriesThe Things Stack説明資料 by The Things Industries
The Things Stack説明資料 by The Things Industries
CRI Japan, Inc.76 views
光コラボは契約してはいけない by Takuya Matsunaga
光コラボは契約してはいけない光コラボは契約してはいけない
光コラボは契約してはいけない
Takuya Matsunaga25 views
PCCC23:東京大学情報基盤センター 「Society5.0の実現を目指す『計算・データ・学習』の融合による革新的スーパーコンピューティング」 by PC Cluster Consortium
PCCC23:東京大学情報基盤センター 「Society5.0の実現を目指す『計算・データ・学習』の融合による革新的スーパーコンピューティング」PCCC23:東京大学情報基盤センター 「Society5.0の実現を目指す『計算・データ・学習』の融合による革新的スーパーコンピューティング」
PCCC23:東京大学情報基盤センター 「Society5.0の実現を目指す『計算・データ・学習』の融合による革新的スーパーコンピューティング」
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20... by NTT DATA Technology & Innovation
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...
SSH応用編_20231129.pdf by icebreaker4
SSH応用編_20231129.pdfSSH応用編_20231129.pdf
SSH応用編_20231129.pdf
icebreaker4380 views
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料) by NTT DATA Technology & Innovation
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)

Spring Frameworkの今 (2013年版) #jjug_ccc #ccc_r17 #springframework