SlideShare uma empresa Scribd logo
1 de 43
Baixar para ler offline
10 things :
   How to enhance
   the power of JRoR
   using Java EE technology

     橋本 吉治
      HASHIMOTO                            Yoshiharu
                                                       Japan Java User Group
                                                                   @hasssie


     JRubyKaigi2010 28th Aug
http://www.flickr.com/photos/shinyai/335249511/                                1
自己紹介
                                              who am I
       Rubyを愛するJava開発者
                                      Java guy loves Ruby
                               JJUG / 卓球.rb
            a member of Japan Java User Groups,
                      TableTennis.rb
                                             某SIer勤務
           working at a big IT service company
http://www.flickr.com/photos/vs/186075406/                  2
Also I am a writer
[How to develop JRuby on Rails]




                                  3
1.    Java App Server
2.    JAX-WS API
3.    JMS API
4.    EJB
5.    JDBC driver
6.    JMX
7.    Spring Framework
8.    Java IDE
9.    Java OSS library
10.   Java build tool like Ant
                                 4
5
エンタープライズ・システム
         で大事なことを
          考えてみた
                 Think about what
                important things for
                 enterprise system
http://www.flickr.com/photos/marcinmoga/4572263486/in/photostream/   6
エンタープライズシステム
  は多くのシステムが
    連動して動く
Lots of systems are connecting
   each other on enterprise
            systems
                                 7
JRoRシステムも
繋がらないと



                                                     JRoR system
                                                must connect with
                                                   other systems
http://www.flickr.com/photos/yngrich/8828592/                       8
繋がるために3つの
                                                       Java EE 技術の
                                                             力を使う


                                                        3 things about
                                                               Java EE
                                             for connecting each other
http://www.flickr.com/photos/marvinkuo/2153147300/                       9
本で書けなかったことにも言及
 Mention to what I couldn’t
  write down on my book
      1. JAX-WS API.
      2. JMS API.
      3. EJB.

                              10
about JAX-WS・・・



http://www.flickr.com/photos/shinyai/335249511/   11
空前の SOAP ブーム
                 ※エンタープライズシステム限定

           The SOAP boom spread
                 like wildfire
       just only on enterprise system
http://www.flickr.com/photos/usfwssoutheast/4642078354/   12
• SOAP Webサービス実装の安定化
• SOAでレガシー再構築という夢
• SOAPで繋げるクラウド基盤多数

• stabilize SOAP Web Service impl
• fantasy of restructuring of legacy system
  using SOA
• SOAP connect with cloud computing
  base
                                              13
Rails+SOAP
       Railsは、SOAPを捨てた
  RubyとXMLの相性が「よい」とはいえない


        Rails dump SOAP;
not get along with Ruby and XML
             REXML
                              14
+
http://http://www.flickr.com/photos/pinksherbet/3038760752/   15
メリット
  JAX-WSは扱いやすく、比較的高速
 NetBeansなどツールサポートが手厚い

      JAX-WS is easy to use,
faster to access and have lots of
  support tools like NetBeans.
                                    16
STEP1: WSDLからコード生成してjarに固める
STEP2: 下記のコードを書く
Step1: generate from WSDL and pack into jar
Step2: write code as follows;
     require 'java'
     require 'jar/UsersManagerWSClient'
     import ‘ws.client.UsersManagerService’
     class UsersManager
         def initialize
          @service = 
             UsersManagerService.new.get_users_manager_port
         end

        def find(user_id); transform(@service.find(user_id.to_s)); end

        private
        def transform(jobj)
         # Java オブジェクト ⇒ Rubyオブジェクトの変換
        end
     end
                                                                         17
Step1: XMLスキーマを設計
Step2: xjcコマンドを使ってJavaクラスの生成
Step3:下記のコードを書く


                         def unmarshal
                           ctx = JAXBContext.newInstance("net.pkg.class") 
                           um = ctx.createUnmarshaller() 
                           gbc = (GeneratedBindingClass) um.unmarshal(file) 
                           xmlVal = gbc.getXMLValueOfInterest() 
                          end




Step1: Design XML schema
Step2: generate Java class using xjc command
Step3: write code above
                                                                               18
about JMS・・・


http://www.flickr.com/photos/shinyai/335249511/   19
RailsからMoMを使いたい
安定した非同期通信基盤を使いたい
            Message oriented Middleware
                Mn   ・・・・   M2   M1




    Rails                                 other system

want to use MoM from Rails,
    want to use stable
  async-messaging base
                                                         20
非同期通信のメリット
      ユーザーにいち早く応答できる
        他システム連携が容易
                           time


        JRoR
        other    message
       systems


the merit of async-messaging
     prompt response to users
  easy to collaborate other systems
                                      21
Rails+非同期通信
AP4R、ActiveMessagingなどがあるが、WMQ
     など安定した基盤を使いたい


  Rails + async-messaging
 AP4R, ActiveMessaging and so on...
But want to use stable base like WMQ

                                       22
+
http://http://www.flickr.com/photos/pinksherbet/3038760752/   23
メリット
JMSをサポートするMoMが多い
トランザクション処理が容易に書ける
ActiveMessagingもJMSをサポート


               merit
Many MoMs support JMS
Easy to develop for transaction function
Also ActiveMessaging support JMS
                                           24
例)メッセージ送信
ex) sending messages

 Rails    JMS client
Web App




     JRoR              EJB/Web Service Container
    Mongrel               Java Application Server   other systems


                                                                    25
STEP1.下記のコード or ActiveMessagingを使う
         import javax.jms.Session;
         import javax.naming.InitialContext;
         class UsersRegister
           def initialize
            @context = InitialContext.new
           end

          def regist(user, ut)
           begin
             cf = @context .lookup "jms/UsersRegisterQConFactory"
             que = @context .lookup "jms/UsersRegisterQueue"
             con = cf.create_queue_connection
             qs =
               con.create_queue_session(
                false,
                Session.AUTO_ACKNOWLEDGE
             )        
             sender = qs.create_sender(que)            
             msg = qs.create_text_message
             msg.set_text(create_msg(user))
             sender.send(txt);
           rescue


Step1: Use this code above or ActiveMessaging
                                                                    26
では、メッセージを
           受け取るには?
                         Then how to receive
                             messages?

http://www.flickr.com/photos/marcinmoga/4240686102/   27
MDBで受信、RESTでJRoRへ
                        Web
       SOAP client     Service Session Bean

  Rails 
 Web App

           REST I/F
                               Message-driven
                                   Bean
      JRoR            EJB/Web Service Container
     Mongrel             Java Application Server   other systems


 MDB receive messages
 and use REST to JRoR
                                                                   28
about EJB ・・・

                                                  29
http://www.flickr.com/photos/shinyai/335249511/        29
Railsから2pcを使いたい!
             2 phase commit = prepare(1) + commit(2)


             process1         process1‐1


                                           other sytem1
 Rails App
                              process1‐2


                                           other sytem2


want to use 2pc from Rails?
                                                          30
+
http://http://www.flickr.com/photos/pinksherbet/3038760752/   31
メリット
 XAを使った分散トランザクションが可能
トランザクション処理コードの複雑さが緩和


               merit
can develop a distributed transaction
system using XA without any
complicated messy transaction code
                                        32
典型的な使い方
                              RDB



                EJB                   MoM
                              Mn    ・・・・   M2   M1
Rails App
            Java App Server                          other system



            typical usage
                                                                    33
でも、
but,
       34
こうやりたいよね
            JTA         DataSource

 war                                 RDB

  ActionController
       same transaction

         ActiveRecord                        MoM
             JMS                     Mn    ・・・・   M2   M1



       web container
                                                            other systems
  Java App Server

want to do like this way
                                                                            35
send queue with user transaction.
     # POST /users
     # POST /users.xml
     def create
      ut = InitialContext.new.lookup "UserTransaction“
      @user = User.new(params[:user])
      respond_to do |format|
       begin
          ut.begin                             # transaction begin
          @user.save!                          # persist to RDB
          send_queue(@user)           # send queue

               ・・・

         ut.commit;                            # transaction commit
        end
       rescue
        ut.rollback                            # transaction rollback

         ・・・

                                                                        36
やってみよう!

 Try it!
           37
失敗
                 failure... orz
http://www.flickr.com/photos/proimos/4199675334/        38
理由(調査中)
               『リソースマネージャが
          グローバルトランザクションの外で作業中』
                   コネクション管理が別なのが原因か

                      Why?(consumption)
         “The resource manager is doing work
             outside a global transaction”
          separate connection management
http://http://www.flickr.com/photos/anitakhart/4626206362/   39
まとめ

conclusion
             40
繋がるために3つの
                                                       Java EE 技術の
                                                         力を使おう!



                                                     Let’s use Java EE
                                                connecting each other!
http://www.flickr.com/photos/marvinkuo/2153147300/                   41
大事なのは
お互いが
繋がること
                                        The most important thing
                                                               is
                                         “Connecting each other”
http://www.flickr.com/photos/yngrich/8828592/                   42
10 things :
   How to enhance
   the power of JRoR
   using Java EE technology

     橋本 吉治
      HASHIMOTO                            Yoshiharu
                                                       Japan Java User Group
                                                                   @hasssie


     JRubyKaigi2010 28th Aug
http://www.flickr.com/photos/shinyai/335249511/                                43

Mais conteúdo relacionado

Semelhante a Public 20100828 j_ruby_kaigi_10things_jror_with_javaee

Beginning Java EE 6 勉強会(4) #bje_study
Beginning Java EE 6 勉強会(4) #bje_studyBeginning Java EE 6 勉強会(4) #bje_study
Beginning Java EE 6 勉強会(4) #bje_study
George Okada
 
Java fx勉強会lt 第8回
Java fx勉強会lt 第8回Java fx勉強会lt 第8回
Java fx勉強会lt 第8回
Taiji Miyabe
 
クラウド開発に役立つ OSS あれこれ
クラウド開発に役立つ OSS あれこれクラウド開発に役立つ OSS あれこれ
クラウド開発に役立つ OSS あれこれ
Masataka MIZUNO
 
R5 3 type annotation
R5 3 type annotationR5 3 type annotation
R5 3 type annotation
EIICHI KIMURA
 
JavaEdge第3回ライブセッション
JavaEdge第3回ライブセッションJavaEdge第3回ライブセッション
JavaEdge第3回ライブセッション
Yoichiro Tanaka
 
Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話
Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話
Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話
Akira Inoue
 
Beginning java ee 6 13章メッセージ通信
Beginning java ee 6 13章メッセージ通信Beginning java ee 6 13章メッセージ通信
Beginning java ee 6 13章メッセージ通信
zuisener .
 
Beginning java ee 6 13章メッセージ通信up
Beginning java ee 6 13章メッセージ通信upBeginning java ee 6 13章メッセージ通信up
Beginning java ee 6 13章メッセージ通信up
zuisener .
 
Beginning Java EE 6 勉強会(5) #bje_study
Beginning Java EE 6 勉強会(5) #bje_studyBeginning Java EE 6 勉強会(5) #bje_study
Beginning Java EE 6 勉強会(5) #bje_study
zuisener .
 

Semelhante a Public 20100828 j_ruby_kaigi_10things_jror_with_javaee (20)

Beginning Java EE 6 勉強会(4) #bje_study
Beginning Java EE 6 勉強会(4) #bje_studyBeginning Java EE 6 勉強会(4) #bje_study
Beginning Java EE 6 勉強会(4) #bje_study
 
Springの今
Springの今Springの今
Springの今
 
JSer Class #3
JSer Class #3JSer Class #3
JSer Class #3
 
Java fx勉強会lt 第8回
Java fx勉強会lt 第8回Java fx勉強会lt 第8回
Java fx勉強会lt 第8回
 
Jjug springセッション
Jjug springセッションJjug springセッション
Jjug springセッション
 
クラウド開発に役立つ OSS あれこれ
クラウド開発に役立つ OSS あれこれクラウド開発に役立つ OSS あれこれ
クラウド開発に役立つ OSS あれこれ
 
R5 3 type annotation
R5 3 type annotationR5 3 type annotation
R5 3 type annotation
 
夏サミ2014 クラウドとCIツールで変わるエンタープライズJava開発
夏サミ2014 クラウドとCIツールで変わるエンタープライズJava開発 夏サミ2014 クラウドとCIツールで変わるエンタープライズJava開発
夏サミ2014 クラウドとCIツールで変わるエンタープライズJava開発
 
JavaEdge第3回ライブセッション
JavaEdge第3回ライブセッションJavaEdge第3回ライブセッション
JavaEdge第3回ライブセッション
 
Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話
Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話
Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話
 
Isomorphic web development with scala and scala.js
Isomorphic web development  with scala and scala.jsIsomorphic web development  with scala and scala.js
Isomorphic web development with scala and scala.js
 
MicroProfile 5で超手軽に始める今どきのクラウド完全対応エンタープライズシステム
MicroProfile 5で超手軽に始める今どきのクラウド完全対応エンタープライズシステムMicroProfile 5で超手軽に始める今どきのクラウド完全対応エンタープライズシステム
MicroProfile 5で超手軽に始める今どきのクラウド完全対応エンタープライズシステム
 
Beginning java ee 6 13章メッセージ通信
Beginning java ee 6 13章メッセージ通信Beginning java ee 6 13章メッセージ通信
Beginning java ee 6 13章メッセージ通信
 
Beginning java ee 6 13章メッセージ通信up
Beginning java ee 6 13章メッセージ通信upBeginning java ee 6 13章メッセージ通信up
Beginning java ee 6 13章メッセージ通信up
 
Beginning Java EE 6 勉強会(5) #bje_study
Beginning Java EE 6 勉強会(5) #bje_studyBeginning Java EE 6 勉強会(5) #bje_study
Beginning Java EE 6 勉強会(5) #bje_study
 
110409 slintky lt
110409 slintky lt110409 slintky lt
110409 slintky lt
 
Cloud Native Application on DEIS by using 12 factor
Cloud Native Application on DEIS by using 12 factorCloud Native Application on DEIS by using 12 factor
Cloud Native Application on DEIS by using 12 factor
 
Mvc conf session_1_osada
Mvc conf session_1_osadaMvc conf session_1_osada
Mvc conf session_1_osada
 
コンテナ環境でJavaイメージを小さくする方法!
コンテナ環境でJavaイメージを小さくする方法!コンテナ環境でJavaイメージを小さくする方法!
コンテナ環境でJavaイメージを小さくする方法!
 
SpringMVC
SpringMVCSpringMVC
SpringMVC
 

Último

Último (7)

LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 

Public 20100828 j_ruby_kaigi_10things_jror_with_javaee