Upgrade to Pro — share decks privately, control downloads, hide ads and more …

JavaOne2010 Groovy/Spring Roo

JavaOne2010 Groovy/Spring Roo

Presented in JJUG CCC 2010 Fall at 2010-10-18

Yasuharu Nakano

March 25, 2023
Tweet

More Decks by Yasuharu Nakano

Other Decks in Programming

Transcript

  1. 4 (SPPWZ w IUUQHSPPWZDPEFIBVTPSH w 3VCZʹΑ͘ࣅͨจ๏Λ࣋ͭಈతܕݴޠ w ΋ͪΖΜɺΫϩʔδϟ΋͋Δ w +BWBίʔυ˩(SPPWZίʔυ

    w ߴ͍ޓ׵ੑʢͰ͸ͳ͍ʣ w ಈతݴޠͷ͍͍ͱ͜ΖΛ࣋ͪͭͭɺطଘͷ+BWBͷࢿ࢈ʢϥ ΠϒϥϦ܈ʣΛ׆༻Ͱ͖Δ w +%,Ϋϥεʹ͢Βಈతʹϝιου௥ՃՄೳ w +%,ΫϥεʹศརϝιουΛ௥Ճͨ͠(%,͕͋Δ w ࠷৽TUBCMFόʔδϣϯɿ(SPPWZ w ܥɿ(SPPWZCFUBʢ೥಺ʹ͸ਖ਼ࣜ൛༧ఆʣ
  2. 11 +7.--ܥηογϣϯ w ࢀߟ +BWB0OF %FWFMPQͷࢿྉݕࡧ݁Ռ w(SPPWZ݅ w4DBMB݅ w+3VCZ݅ w+BWB4DSJQU݅

    w$MPKVSF݅ wҰ෦ʹݴޠ໊ΛؚΜͰ͍Δ͚ͩͷޡώοτ΋ؚΉ wྫ೥ʹൺ΂Δͱɺ੝Γ্͕Γʹ͚ܽͯΔΒ͍͠
  3. ࢀՃͨ͠(SPPWZܥηογϣϯ w  w (SPPWZ5P*OpOJUZBOE#FZPOE w 8IBUT/FXJO(SBJMT w 5IF(SPPWZBOE(SBJMT#0' XJUI-JWF(SBJMT1PEDBTU

    3FDPSEJOH w  w $PEF(FOFSBUJPOPOUIF+BWB7JSUVBM.BDIJOF8SJUJOH $PEF5IBU8SJUFT$PEF w  w 1PMZHMPU1SPHSBNNJOHJOUIF+BWB7JSUVBM.BDIJOF +7. w  w 8SJUJOH%PNBJO4QFDJpD-BOHVBHFT %4-T 6TJOH (SPPWZ 12
  4. ࢀՃͨ͠(SPPWZܥηογϣϯ w  w (SPPWZ5P*OpOJUZBOE#FZPOE w 8IBUT/FXJO(SBJMT w 5IF(SPPWZBOE(SBJMT#0' XJUI-JWF(SBJMT1PEDBTU

    3FDPSEJOH w  w $PEF(FOFSBUJPOPOUIF+BWB7JSUVBM.BDIJOF8SJUJOH $PEF5IBU8SJUFT$PEF w  w 1PMZHMPU1SPHSBNNJOHJOUIF+BWB7JSUVBM.BDIJOF +7. w  w 8SJUJOH%PNBJO4QFDJpD-BOHVBHFT %4-T 6TJOH (SPPWZ 13
  5. 20 (SBJMT w IUUQHSBJMTPSH w (SPPWZͷΩϥʔϓϩμΫτͷͭ w ϑϧελοΫͷ8FCΞϓϦέʔγϣϯϑϨʔϜϫʔΫ w (SPPWZ൛ɺ3VCZPO3BJMT

    w ίϛολਞ͕ॴଐ͍ͯͨ͠(0OF͕ࣾ4QSJOH4PVSDFࣾʹങ ऩ͞Εɺࠓ΍4QSJOHͷϥΠϯφοϓͷͭ w 4QSJOH.7$ 4QSJOH'SBNFXPSL )JCFSOBUFͳͲͷσ ϑΝΫτͳϓϩμΫτΛج൫ͱͯ͠࠾༻ w ໘౗ͳઃఆ͸ʮن໿ˍ%4-ʯͰ·Ζ΍͔ʹϥοϐϯά w ʮશ͕ͯϓϥάΠϯʯ w ͨͱ͑͹ɺೝূػೳ͸ɺ4QSJOH4FDVSJUZϓϥάΠϯΛΠ ϯετʔϧ͢Ε͹0,ʢ؆୯Ͱ͸ͳ͍͚Ͳʣ
  6. 23 import groovy.swing.SwingBuilder import javax.swing.* count = 0 def frame

    = new SwingBuilder().frame(title:'Frame', defaultCloseOperation:JFrame.EXIT_ON_CLOSE, pack:true, show:true) { vbox { def textlabel = label("Click the button!") button( text:'Click Me', actionPerformed: { count++ textlabel.text = "Clicked ${count} time(s)." println "Clicked!" } ) } } 4XJOH#VJMEFS ͷྫ
  7. (SBEMF w IUUQXXXHSBEMFPSH w .BWFOͷΑ͏ͳ૯߹తͳϓϩμΫτ؅ཧπʔϧ w *WZʹΑΔϥΠϒϥϦͷґଘؔ܎؅ཧ w ֤छϓϥάΠϯʹΑΔ؆୯ػೳ௥Ճ w

    (SPPWZ .BWFO &DMJQTF 04(J FUD w (SPPWZϕʔεͷ%4-Λ࠾༻ w ॊೈͳϚϧνϓϩδΣΫτߏ੒ʹରԠͰ͖Δʂ w σΟϨΫτϦߏ੒͸.BWFOํࣜΛ౿ऻ w ؀ڥΛյͣ͞ʹ.BWFOͱಉډՄೳ w ؾܰʹ͓ࢼ͕͠Ͱ͖Δʂ 24
  8. 25 $ cat build.gradle file apply plugin:'groovy' repositories { mavenCentral()

    } dependencies { groovy 'org.codehaus.groovy:groovy:1.7.4' testCompile 'junit:junit:4.8.1' } $ gradle clean test ....
  9. 27 // 10εϨουͰฒߦॲཧ GParsPool.withPool(10) { assert (1..10).findAllParallel { it %

    2 == 0 } == [2, 4, 6, 8, 10] } // Map/Reduce // filterɺmapͳͲͷݺͼग़͠͝ͱʹίϨΫγϣϯʹల։͠ͳ͍ͨΊɺ // xxxxParallelܥͷϝιουͱൺֱͯ͠ੑೳతʹ༗ར GParsPool.withPool { assert (1..10).parallel.filter{ it % 2 == 0 }.map{ it }.collection == [2, 4, 6, 8, 10] assert (1..10).parallel.filter{ it % 2 == 0 }.map{ it }.sum() == 30 }
  10. 30 // ʮ0ʙ9ʹؚ·ΕͯΔۮ਺ͷݸ਺͸4ݸͩΑͶʁʯʢޡʣ def list = [0, 1, 2, 3,

    4, 5, 6, 7, 8, 9] assert list.findAll{ it % 2 == 0 }.size() == 4 ʢࢀߟʣ1PXFS"TTFSU %%%%%%%%%!!!!!!!!!!!!!!!!!!!!!!!!!! Z/?SF$4%J##9G$"<>%H/"&9I4% /##9G$%&"#$;H">IJ&&=%"$%K%+%''%M%C;#"]9RW%''%D %%%%%%%^%%%%^%%%%%%%%%%%%%%%%%%%%%%^%%%%%%^ %%%%%%%^%%%%(M*%+*%D*%E*%_-%%%%%%%%`%%%%%%H/&#9 %%%%%%%(M*%)*%+*%,*%D*%`*%E*%a*%_*%V-
  11. (SPPWZ4FSW w IUUQLPCPHJUIVCDPNHSPPWZTFSW w +7.--ܥͷऑ఺ɺىಈͷ஗͞Λܶతʹղফ͢Δ w (SPPWZॲཧܥΛαʔόͱͯ͠ৗறͤ͞Δ͜ͱͰ HSPPWZίϚϯυͷىಈΛΈͨΊ্ɺߴ଎Խ͢Δ w ໿ʙഒͷߴ଎Խʢ΋ͪΖΜ؀ڥʹґଘʣ

    w (SPPWZ ඇOBUJWF൛  TFD w (SPPWZ OBUJWF൛  TFD w (SPPWZ4FSW TFD w εΫϦϓτ࣮૷࣌ͷࢼߦࡨޡͷετϨε͕ܹݮ w Ұ෦੍໿͋Γʗඪ४(SPPWZͱ׬શޓ׵ͳΘ͚Ͱ͸ͳ͍ 31
  12. 3PP 35 w IUUQXXXTQSJOHTPVSDFPSHSPP w +BWB։ൃऀ޲͚ͷɺ࢖͍΍͘͢ɺ֦ு͠΍͍͢ɺςΩετ ϕʔεͷ3"%πʔϧ w 3PPγΣϧΛىಈͯ͠ίϚϯυ࣮ߦ͢Δ w

    +BWBίʔυΛ͍͡ΔͱɺཪͰࣗಈతʹ৭ʑ΍ͬͯ͘ΕΔ w 3PP͕ඞཁͳͷ͸։ൃ͚࣌ͩ w ϥϯλΠϜͰ͸ෆཁʂʂ w +BWBͷඪ४తͳϥΠϒϥϦϑϨʔϜϫʔΫπʔϧ܈ʹରԠ w ྫ+%#$ +.4 +5" +41 +1" )JCFSOBUF  &DMJQTF-JOL ("& (85 +FUUZ 5PNDBU  4QSJOH.7$ 8FC'MPX .BWFO 'MFY -PH+  &DMJQTF +6OJU "TQFD+ 
  13. 3PPγΣϧ w SPPίϚϯυͰىಈ͢Δ w σϑΥϧτͰ͸ɺSPPTI͔SPPCBUͱ͍͏ϑΝΠϧ ໊ͳͷͰɺඞཁͳํΛSPPʹϦωʔϜ͓ͯ͘͠ w IJOUίϚϯυ͕͍͢͝ w ࣍ʹԿΛ͢Δͱྑ͍͔ΞυόΠεͯ͘͠ΕΔ

    w 5"#ิ׬͕͍͢͝ w ίϚϯυɺΦϓγϣϯɺ'2$/ͳͲΛΨϯΨϯิ׬͠ ͯ͘ΕΔ w ίϚϯυ࣮ߦͰΤϥʔʹͳͬͨΒɺ࣮ߦલ·Ͱϩʔϧ όοΫ w ҆৺ͯ͠ࢼͤΔ 36
  14. 37 B"*C59;"'1<(+'(. B"'5"'1<(+'(. B";11 """"DDDD""DDDD""DDDD"" """!"DD"E!"DD"E!"DD"E" ""!"!D!"!"!"!"!"!"!"!" "!"DF"D!"!D!"!"!D!"!"" !D!"GDGEDDDD!EDDDD!""""@)@)A)=H"I;&J"&KK&ALMN O&-'1*&"(1"P:;9<6"Q11)"R1;"+..9.(+<'&":;&.."STU"1;"(V:&"W>9<(W"(>&<">9("XYSXQ)

    ;113":;1%&'("22(1:Z&J&-[+'C+6&".+*:-& .+*:-&";113":&;.9.(&<'&".&(\:"22:;1J95&;"]^UXQYTSX"225+(+$+.&" ]_[XQP#Y^,D^YD=X=#Q_" .+*:-&";113"&<(9(V"22'-+.."`)51*+9<),1<(+'("22(&.(T\(1*+(9'+--V" `)51*+9<),1<(+'(";113"a9&-5".(;9<6"22a9&-5Y+*&"a9;.(Y+*& `)51*+9<),1<(+'(";113"a9&-5".(;9<6"22a9&-5Y+*&"-+.(Y+*&"22<1(Y\--"22.9b&=9<"H `)51*+9<),1<(+'(";113"a9&-5"<\*$&;"22a9&-5Y+*&":>1<&"22(V:&"%+J+)-+<6)Z1<6 `)51*+9<),1<(+'(";113":&;a1;*"&'-9:.& ;113"'1<(;1--&;"+--"22:+'C+6&"`)c&$ ;113":&;a1;*"&'-9:.& ;113"&d9( B"*J<"(1*'+(e;\<
  15. w 3PP͸lΤϨΨϯτͳ"DUJWF(FOFSBUJPOzΛ࠾༻ w ݩωλϑΝΠϧʹ+BWBιʔεϑΝΠϧ w +BWBίʔυҎ֎Λ௚઀ฤू͠ͳͯ͘ྑ͍ w 3PPͷ"EEPO͕+BWBϑΝΠϧΛಡΜ Ͱɺ"TQFDU+ίʔυΛࣗಈੜ੒͢Δ w

    ݩωλͷ+BWBϑΝΠϧ͸มߋ͠ͳ͍ w ίϯύΠϧ࣌ʹ"TQFDU+ίϯύΠϥ͕ɺݩωλ+BWB ίʔυͱ"TQFDU+ίʔυͱݩʹɺDMBTTϑΝΠϧΛ ੜ੒͢Δ w ϥϯλΠϜͰ͸ී௨ͷDMBTTϑΝΠϧʹͳ͍ͬͯΔ 39 $PEF(FOFSBUJPOઓུ
  16. 4QSJOH5PPM4VJUF454 w &DMJQTFϕʔεͷ4QSJOH4PVSDFઐ༻σΟετϦϏϡʔγϣϯ w 3PPͷ։ൃͳΒ4QSJOH4PVSDF5PPM4VJUFΛ࢖͏ͷ͕͓קΊ w ΋ͪΖΜɺ3PPͳΒλʔϛφϧ͚ͩͰ΋େৎ෉ w 454Ҏ֎ͷ*%&࢖͏৔߹ w

    "TQFDU+ϓϥάΠϯ͕͋ΔͱΑ͍ w ཪͰ3PPͷγΣϧΛىಈͨ͠λʔϛφϧΛ։͍͓ͯ͘ͱΑ͍ w 3PPγΣϧ͕ࣗಈతʹ+BWBϑΝΠϧͷมߋΛײ஌ͯ͠৭ʑ ΍ͬͯ͘ΕΔ w ͋ͱͰ3PPγΣϧΛىಈͨ͠ͱ͖ʹɺલճͱͷࠩ෼ʹج͍ͮ ͯࣗಈతʹΩϟονΞοϓͯ͘͠ΕΔͷͰɺىಈΛ๨Εͯ΋ େৎ෉ w 454ͳΒ3PP͕૊Έࠐ·ΕͯΔͷͰɺͦ͏͍͏໘౗ͳ͜ͱ͸Ұ੾ ඞཁͳ͠ 40
  17. 3PPґଘ͔Βͷ୤٫ w 4QSJOH3PPʹґଘ͠ͳ͍Α͏ʹ͢Δͷ͸؆୯ w 3PP͸ɺ࣮ߦ࣌ʹ͸શ͘ඞཁͳ͍ͷͰ͝৺഑ͳ͘ w 3PPͷࠟ੻Λফ͢खॱ w  "TQFDU+%FWFMPQNFOU5PPMTͷl1VTI*OzϦ

    ϑΝΫλϦϯάͰɺ+BWBίʔυ্ʹΠϯϥΠϯల։͢Δ w  QPNYNM͔Β3PPؔ܎ͷΤϯτϦΛશͯ࡟আ w  શιʔεΛݕࡧ͠ɺ!3PPΞϊςʔγϣϯΛશͯ࡟আ w ಉ͡खॱͰඞཁͳ΋ͷΛ௥Ճͨ͠Βɺݩ௨Γ3PPͷ։ൃ؀ ڥʹ໭͢͜ͱ΋Ͱ͖Δ w ૬౰໘౗ͩͱ͸ࢥ͍·͚͢Ͳ 43