Public 20100828 j_ruby_kaigi_10things_jror_with_javaee

1,185 views

Published on

2010年8月28日のJRuby会議で話したプレゼン資料です。

・ JRuby + Jax-WS
・ JRuby + JMS
・ JRuby + EJB

の話をしています。

Published in: Technology
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,185
On SlideShare
0
From Embeds
0
Number of Embeds
5
Actions
Shares
0
Downloads
3
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

Public 20100828 j_ruby_kaigi_10things_jror_with_javaee

  1. 1. 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
  2. 2. 自己紹介 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
  3. 3. Also I am a writer [How to develop JRuby on Rails] 3
  4. 4. 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. 5. 5
  6. 6. エンタープライズ・システム で大事なことを 考えてみた Think about what important things for enterprise system http://www.flickr.com/photos/marcinmoga/4572263486/in/photostream/ 6
  7. 7. エンタープライズシステム は多くのシステムが 連動して動く Lots of systems are connecting each other on enterprise systems 7
  8. 8. JRoRシステムも 繋がらないと JRoR system must connect with other systems http://www.flickr.com/photos/yngrich/8828592/ 8
  9. 9. 繋がるために3つの Java EE 技術の 力を使う 3 things about Java EE for connecting each other http://www.flickr.com/photos/marvinkuo/2153147300/ 9
  10. 10. 本で書けなかったことにも言及 Mention to what I couldn’t write down on my book 1. JAX-WS API. 2. JMS API. 3. EJB. 10
  11. 11. about JAX-WS・・・ http://www.flickr.com/photos/shinyai/335249511/ 11
  12. 12. 空前の SOAP ブーム ※エンタープライズシステム限定 The SOAP boom spread like wildfire just only on enterprise system http://www.flickr.com/photos/usfwssoutheast/4642078354/ 12
  13. 13. • SOAP Webサービス実装の安定化 • SOAでレガシー再構築という夢 • SOAPで繋げるクラウド基盤多数 • stabilize SOAP Web Service impl • fantasy of restructuring of legacy system using SOA • SOAP connect with cloud computing base 13
  14. 14. Rails+SOAP Railsは、SOAPを捨てた RubyとXMLの相性が「よい」とはいえない Rails dump SOAP; not get along with Ruby and XML REXML 14
  15. 15. + http://http://www.flickr.com/photos/pinksherbet/3038760752/ 15
  16. 16. メリット JAX-WSは扱いやすく、比較的高速 NetBeansなどツールサポートが手厚い JAX-WS is easy to use, faster to access and have lots of support tools like NetBeans. 16
  17. 17. 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
  18. 18. 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
  19. 19. about JMS・・・ http://www.flickr.com/photos/shinyai/335249511/ 19
  20. 20. 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
  21. 21. 非同期通信のメリット ユーザーにいち早く応答できる 他システム連携が容易 time JRoR other message systems the merit of async-messaging prompt response to users easy to collaborate other systems 21
  22. 22. Rails+非同期通信 AP4R、ActiveMessagingなどがあるが、WMQ など安定した基盤を使いたい Rails + async-messaging AP4R, ActiveMessaging and so on... But want to use stable base like WMQ 22
  23. 23. + http://http://www.flickr.com/photos/pinksherbet/3038760752/ 23
  24. 24. メリット JMSをサポートするMoMが多い トランザクション処理が容易に書ける ActiveMessagingもJMSをサポート merit Many MoMs support JMS Easy to develop for transaction function Also ActiveMessaging support JMS 24
  25. 25. 例)メッセージ送信 ex) sending messages Rails  JMS client Web App JRoR EJB/Web Service Container Mongrel Java Application Server other systems 25
  26. 26. 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
  27. 27. では、メッセージを 受け取るには? Then how to receive messages? http://www.flickr.com/photos/marcinmoga/4240686102/ 27
  28. 28. 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
  29. 29. about EJB ・・・ 29 http://www.flickr.com/photos/shinyai/335249511/ 29
  30. 30. 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
  31. 31. + http://http://www.flickr.com/photos/pinksherbet/3038760752/ 31
  32. 32. メリット XAを使った分散トランザクションが可能 トランザクション処理コードの複雑さが緩和 merit can develop a distributed transaction system using XA without any complicated messy transaction code 32
  33. 33. 典型的な使い方 RDB EJB  MoM Mn ・・・・ M2 M1 Rails App Java App Server other system typical usage 33
  34. 34. でも、 but, 34
  35. 35. こうやりたいよね 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
  36. 36. 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
  37. 37. やってみよう! Try it! 37
  38. 38. 失敗 failure... orz http://www.flickr.com/photos/proimos/4199675334/ 38
  39. 39. 理由(調査中) 『リソースマネージャが グローバルトランザクションの外で作業中』 コネクション管理が別なのが原因か Why?(consumption) “The resource manager is doing work outside a global transaction” separate connection management http://http://www.flickr.com/photos/anitakhart/4626206362/ 39
  40. 40. まとめ conclusion 40
  41. 41. 繋がるために3つの Java EE 技術の 力を使おう! Let’s use Java EE connecting each other! http://www.flickr.com/photos/marvinkuo/2153147300/ 41
  42. 42. 大事なのは お互いが 繋がること The most important thing is “Connecting each other” http://www.flickr.com/photos/yngrich/8828592/ 42
  43. 43. 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

×