(Proposta) para o TIDIA Ae 2.0 erso !.0 Data" #!$0%$200& TIDIA - Ae Verso: 1.0 Orientaes para Construo de Ferramentas para o TIDIA Ae 2.0 Data: 310!200" 'ist(ri)o de *e+ises Data Verso Descrio Autor 0.1.0 Verso ini#ia$ do do#umento Todos 0.2.0 %e&inamento do es'ue$eto Tia(o 0.3.0 Correes de a#ordo #om a responsa)i$idade dos (rupos %omeo 0.*.0 %eestruturao de t+pi#os ,andro- .dson e Tia(o 2"0!200" 0./.0 Criao da parte de in&ra-estrutura Tia(o- C0ssio- 1enri'ue e 2os3 Au(usto 2!0!200" 0.4.0 Do#umento no &ormato o&i#ia$ do pro5eto e reunio de outros do#umentos par#iais. %omeo 260!200" 0.".0 Adio de #onte7do dos t+pi#os 3 e / 8Camada de 9ersist:n#ia e Inte(rao de Ferramentas no Compat;<eis #om o ,a=ai> Tia(o 310!200" 0.!.0 Adio de item so)re inte(rao de uma &erramenta ,a=ai #om #omponentes Tidia. C0ssio- 1enri'ue e 2os3 Au(usto 310!200" 0.6.0 %e<iso (ramati#a$- re<iso de &ormatao- #riao de introduo e remoo de partes no uti$i?adas e no pertinentes- #omo a #on#$uso do do#umento. %omeo 310!200" 1.0 %e<iso &ina$- promo<endo o do#umento da #ate(oria de proposta para (uia. .duardo Terui@a Con&iden#ia$ FA9.,9- 90(ina 2 TIDIA - Ae Verso: 1.0 Orientaes para Construo de Ferramentas para o TIDIA Ae 2.0 Data: 310!200" Ta,e-a de Conte.do 1.Introduo / 1.1 9rop+sito / 1.2 .s#opo / 2.Con&i(urao de Am)iente 4 1.1 2VA 4 1.2 Con&i(urando A@,BC *.1: 4 1.3 Con&i(urao do Aa<en " 1.* Insta$ando o ,u)<ersion ! 1./ Tom#at ! 1.4 Insta$ao do Conne#tor2 6 1." Dsando o ,VE para &a?er o doFn$oad do ,AGAI H#a&e )ran#IJ 6 1.! Con&i(urando o ar'ui<o sa=ai.properties 10 1.6 Dsando o Aa<en para o dep$o@ do ,a=ai 11 1.10 Insta$ando o .#$ipse 3.2K 8<erso est0<e$> 12 1.10.1 Adi#ionando o .#$ipse Le) Too$s 9ro5e#t 8LT9> 13 1.10.2 Adi#ionando o ,u)#$ipse ao .#$ipse 1* 1.10.3 Adi#ionando o ,prin(ID. ao .#$ipse 1* 1.10.* Importando o #+di(o-&onte do ,a=ai dentro do .#$ipse 1/ 3.Camada de 9ersist:n#ia 14 1.11 Formas de persist:n#ia 1" 1.12 Dsando o 1i)ernate 1" 1.13 Dsando o pa#ote Meneri#Dao 1! 1.1* Construindo uma ap$i#ao 1! *.FrameFor= do ,AGAI - ,er<ios 1! 1.1/ Con#eituao de ,er<ios- Componentes- Ferramentas e FrameFor= no ,a=ai 1! 1.14 Desen<o$<endo Ferramentas e Componentes ,a=ai 16 1.1" ,er<ios Dispon;<eis pe$o ,a=ai 21 1.1! Fun#tiona$ ,er<i#es 23 1.1!.1 Dni<ersa$ Components 23 1.1!.1.1 ComponentAana(er ........................................................................................................................... 23 1.1!.1.1.1 ComponentsCoader ..................................................................................................................... 24 1.1!.1.1.2 ConteNtCoaderCistener ............................................................................................................... 24 1.1!.1.1.3 ,er<erCon&i(urationCistener ........................................................................................................ 24 1.1!.1.2 Co$$a)orati<e Too$s ............................................................................................................................ 2" 1.1!.1.2.1 Too$Aana(er ............................................................................................................................... 2" 1.1!.1.2.2 A#ti<eToo$Aana(er ................................................................................................................... 2! 1.1!.1.2.3 ,essionAana(er ......................................................................................................................... 2! 1.1!.1.2.* Too$ ............................................................................................................................................. 26 1.1!.1.2./ A#ti<eToo$ .................................................................................................................................. 30 1.1!.1.2.4 ,ession ........................................................................................................................................ 30 1.1!.1.2." ConteNt,ession ............................................................................................................................. 31 1.1!.1.2.! Too$,ession .................................................................................................................................. 31 1.1!.1.2.6 ,essionOindin(Too$ ..................................................................................................................... 32 1.1!.1.2.10 ,essionOindin(Cistener ............................................................................................................. 32 1.1!.1.2.11 %e'uestFi$ter .............................................................................................................................. 32 Con&iden#ia$ FA9.,9- 90(ina 3 TIDIA - Ae Verso: 1.0 Orientaes para Construo de Ferramentas para o TIDIA Ae 2.0 Data: 310!200" 1.1!.1.3 Data)ase ............................................................................................................................................. 32 1.1!.1.3.1 ,BC,er<i#e .................................................................................................................................. 32 1.1!.1.3.2 ,BC%eader ................................................................................................................................... 3* 1.1!.1.* ,er<er 9usI ......................................................................................................................................... 3/ 1.1!.1.*.1 Courier,er<i#e ............................................................................................................................. 3/ 1.1!.1.*.2 De$i<er@ ........................................................................................................................................ 3/ 1.1!.1.*.3 O)ser<in( Courier ........................................................................................................................ 3/ 1.1!.1./ .mai$ Out ............................................................................................................................................ 34 1.1!.1./.1 Di(est ........................................................................................................................................... 34 1.1!.1./.2 Di(estAessa(e ............................................................................................................................. 34 1.1!.1./.3 Di(est,er<i#e ............................................................................................................................... 34 1.1!.1./.* .mai$,er<i#e ................................................................................................................................ 3" 1.1!.1.4 Aemor@ Ca#Ie .................................................................................................................................... 3! 1.1!.1.4.1 Ca#Ie ............................................................................................................................................ 3! 1.1!.1.4.2 Ca#Ier .......................................................................................................................................... 3! 1.1!.1.4.3 Aemor@,er<i#e ............................................................................................................................ 36 1.1!.1." Dti$ities ................................................................................................................................................ 36 1.1!.1.".1 .N#eptions .................................................................................................................................... 36 1.1!.1.".2 Id Aana(er ................................................................................................................................... 36 1.1!.1.".3 TIreadCo#a$Aana(er ................................................................................................................... 36 1.1!.1.".* Time,er<i#e ................................................................................................................................. *0 1.1!.1."./ Co(Con&i(urationAana(er ........................................................................................................... *1 1.1!.2 In&ormationa$ ,er<i#es *1 /.Inte(rao de &erramentas no #ompat;<eis #om o ,a=ai *1 1.16 Dep$o@ do ,a=ai no 2)oss *2 1.20 Inte(rao de uma &erramenta ,a=ai #om #omponentes do Tidia-Ae ** 4.Tra)a$Ios Futuros /2 ".%e&er:n#ias /2 Con&iden#ia$ FA9.,9- 90(ina * TIDIA - Ae Verso: 1.0 Orientaes para Construo de Ferramentas para o TIDIA Ae 2.0 Data: 310!200" Orientaes para Construo de Ferramentas (Proposta) para o TIDIA Ae 2.0 !. Introduo !.!Prop(sito O prop+sito deste do#umento 3 orientar desen<o$<edores de so&tFare na tare&a de #onstruo de no<as &erramentas para o sistema Tidia-Ae 2.0- no<a <erso do am)iente 'ue ser0 desen<o$<ida na Fase II do pro5eto e #ompat;<e$ #om as inter&a#es de ser<io do ,AGAI 2.*. As orientaes #onstantes deste do#umento &oram #ompi$adas de di<ersas &ontes do pr+prio pro5eto ,AGAI e reinterpretadas e me$Ioradas pe$a e'uipe de pro5eto TIDIA Ae. !.2Es)opo .ste do#umento #ontemp$a: Con&i(urao e preparao de um am)iente de desen<o$<imento: P indi#ado passo a passo o 'ue de<e ser &eito para preparar uma ID. para o desen<o$<imento de no<as &erramentasQ Deta$Iamento de ser<ios: ,er<ios de interesse aos #onstrutores de &erramentas so deta$Iados #om suas inter&a#es e des#rio dos m3todos o&ere#idos. Con&iden#ia$ FA9.,9- 90(ina / TIDIA - Ae Verso: 1.0 Orientaes para Construo de Ferramentas para o TIDIA Ae 2.0 Data: 310!200" 2. Con/i0urao de Am,iente !.!12 Veri&i'ue se a <erso da 2VA insta$ada 3 a 1./: R5a<a -<ersion 5a<a <ersion S1./.0T11S ,e &or di&erente- desinsta$e a <erso #orrente- #aso 50 ti<er a$(uma- e )aiNe a <erso #orreta: Ittp:5a<a.sun.#om5a<asedoFn$oadsindeNT5d=/.5sp O)s: 9ara os usu0rios de LindoFs re#omenda-se a insta$ao em diret+rios sem espaos. .m se(uida- 3 ne#ess0rio #on&i(urar a$(umas <ari0<eis de am)iente. A primeira 3 a 2AVAT1OA.: 1. LindoFs: 2AVAT1OA.UJ#:VdiretorioTinsta$a#aoV5d=1./.0TNNJ 2. CinuN: 2AVAT1OA.U HdiretorioTinsta$a#ao5a<aJ Adi#ione H2AVAT1OA.)inJ ao 9atI do sistema. A#res#ente a <ari0<e$ de am)iente 2AVATO9T, para aumentar a mem+ria dispon;<e$ para o ,a=ai: 2AVATO9T,UW-ser<er -XX:KDse9ara$$e$MC -XmN"4!m -XX: AaN9erm,i?eU12!m -D5a<a.aFt.Iead$essUtrueW O)s: .ssas #on&i(uraes so para desen<o$<imento- para mais in&ormaes <isite: Ittp:)u(s.sa=aipro5e#t.or(#on&$uen#edisp$a@OOOT,a=aiK2.2Kde<e$operK2VAKtunin( !.2Con/i0urando 23S45 6.!" Faa o doFn$oad do A@,BC: Ittp:de<.m@s'$.#omdoFn$oadsm@s'$*.1.Itm$ O)s.: A <erso /.0.N tam)3m &un#iona- se esta <erso esti<er insta$ada- no 3 ne#ess0rio rea$i?ar um doFn(rade. Insta$e #om a #on&i(urao ,tandard. Opte pe$a insta$ao do ser<io no LindoFs ,e$e#ione a ini#ia$i?ao autom0ti#a 8ou ento ini#ie o A@,BC antes de tentar rodar o ,a=ai>. In#$ua o diret+rio )in no 9AT1. Eo use uma #onta anYnima. Con&iden#ia$ FA9.,9- 90(ina 4 TIDIA - Ae Verso: 1.0 Orientaes para Construo de Ferramentas para o TIDIA Ae 2.0 Data: 310!200" Co$o'ue o passFord de root #omo Sm@s'$pFd1S. Con&i(ure o )an#o de dados para o ,a=ai %ode o se(uinte #omando no prompt: mysql -u root -p Digite a senha do root, e em seguida rode o script abaixo: create database sakai default character set utf8; grant all on sakai.* to sakaiuser@'localhost' identified by 'sakaipassword'; grant all on sakai.* to sakaiuser@'127.0.0.1' identified by 'sakaipassword'; quit 8Op#iona$> Faa o doFn$oad do Buer@ OroFser.
Ittp:de<.m@s'$.#omdoFn$oads'uer@-)roFser1.1.Itm$ !.#Con/i0urao do 2a+en Faa o doFn$oad do Aa<en 1.0.2. O)s.: Testes #om <erses superiores no &oram )em su#edidos- portanto a#onse$Iamos usar essa <erso. Ittp:ma<en.apa#Ie.or(ma<en-1.NstartdoFn$oad.Itm$ Des#ompa#te o ar'ui<o no diret+rio de sua pre&er:n#ia. ,ete as <ari0<eis de am)iente: MAVEN_!ME"caminho_para_ma#en MAVEN_!$%&"'-(ms)*+m -(mx*,)m -((:$erm&i-e"+.m -((:Max$erm&i-e",)/m' Adi#ione ao 9AT1: 0MAVEN_!ME1bin Con&iden#ia$ FA9.,9- 90(ina " TIDIA - Ae Verso: 1.0 Orientaes para Construo de Ferramentas para o TIDIA Ae 2.0 Data: 310!200" !.6Insta-ando o Su,+ersion Insta$e o su)<ersion de a#ordo #om o site: Ittp:su)<ersion.ti(ris.or(pro5e#tTpa#=a(es.Itm$ De pre&er:n#ia ao )in0rio- mas se )aiNar o &onte- re#ompi$e-o #om as opes: --2ith-ssl e Z2ith-libs3 Con&i(ure a <ari0<e$ de am)iente: ,DOV.%,IOET1OA.U1diretorio_instalacao1sub#ersion-,3)34 Adi#ione ao 9AT1: 0&56VE7&8!N_!ME1bin !.7Tom)at Faa o doFn$oad do Tom#at /./ 8no m0Nimo a <erso /./.2/- a <erso /./.24 e a <erso 4 no &un#ionam>: Ittp:tom#at.apa#Ie.or(doFn$oad-//.#(i O)s: Aos usu0rios do LindoFs: De<em #erti&i#ar-se 'ue no eNistem espaos no patI para o Tom#at. De<em )aiNar o ar'ui<o ?ipado ao in<3s de insta$ar o ser<io. Isto &a#i$ita a #on&i(urao e <isua$i?ao dos $o(s. Aodi&i'ue o ar'ui<o con91ser#er3xml para a#eitar #ara#teres uni<ersais: Adi#ione 578Encoding":5%;-/: ao e$emento Conne#tor: <=onnector port":/>/>: 578Encoding":5%;-/: 333 ,ete a <ari0<e$ de am)iente: =A%A?8NA_!ME"caminho_para_tomcat Adi#ione ao 9AT1: 0=A%A?8NA_!ME1bin Con&iden#ia$ FA9.,9- 90(ina ! TIDIA - Ae Verso: 1.0 Orientaes para Construo de Ferramentas para o TIDIA Ae 2.0 Data: 310!200" 9ara Aa#CinuN #on&i(ure o ar'ui<o catalina3sh no diret+rio tom#at)in #om: eNport 2AVATO9T,US-ser<er -XX:KDse9ara$$e$MC -XmN"4!m -XX:AaN9erm,i?eU140m -D5a<a.aFt.Iead$essUtrue 9ara LindoFs #rie o ar'ui<o seten<.)at- tam)3m no diret+rio tom#at)in- e #o$o'ue ne$e: set 2AVATO9T,U-ser<er -XX:KDse9ara$$e$MC -XmN"4!m -XX:AaN9erm,i?eU140m -D5a<a.aFt.Iead$essUtrue Di#as para os usu0rios de CinuN: Eo D)untu- insta$ar o tom#at a partir de doFn$oad da p0(ina do &a)ri#ante e no <ia apt-(et 8s@napti#>- pois a insta$ao se tornar0 mais &0#i$Q Dar permisses de es#rita ao usu0rio donoeNe#utor do pro#esso do Tom#at nas pastas $o(s- Fe)apps- temp e For= 'ue esto a)aiNo de CATACIEAT1OA.Q Criar a pasta #omponents so) a pasta prin#ipa$ do Tom#at 8CATACIEAT1OA.> e dar permisso de es#rita ao usu0rio dono do pro#esso. !.8Insta-ao do Conne)tor$1 9ara &a?er a #oneNo do sa=ai #om o ser<idor A@,BC3 ne#ess0rio um dri<er 2DOC. As <erses 'ue podem ser uti$i?adas do Conne#tor2 dependem da <erso do A@,BC insta$ada: Caso a <erso do A@,BC insta$ada se5a a *.1- a <erso do Conne#tor2 'ue de<e ser insta$ada de<e ser a 3.1.12K e pode ser en#ontrada em: Ittp:de<.m@s'$.#omdoFn$oads#onne#tor53.1.Itm$ Caso a <erso do m@,BC es#o$Iida para a insta$ao &or a /.0.N a <erso do Conne#tor2 de<e ser a /.0.*K e pode ser en#ontrada em: Ittp:de<.m@s'$.#omdoFn$oads#onne#tor5/.0.Itm$ Ap+s o doFn$oad do dri<er apropriado eNtraia o ar'ui<o Hm@s'$-#onne#tor-5a<a-[<ersion\-)in.5arJ para a pasta 0=A%A?8NA_!ME1commom1lib 8RCATACIEAT1OA. 3 o diret+rio rai? do Tom#at>. !.&9sando o S: para /a;er o do<n-oad do SA=AI >)a/e ,ran)?@ V0 para um diret+rio tempor0rio e ap$i'ue o #omando s<n: #Ie#=out Ittps:sour#e.sa=aipro5e#t.or(s<n#a&e)ran#Ies2-*-N O)s.: Apenas testado em $inuN. Con&iden#ia$ FA9.,9- 90(ina 6 TIDIA - Ae Verso: 1.0 Orientaes para Construo de Ferramentas para o TIDIA Ae 2.0 Data: 310!200" Caso 'ueria pro#urar uma <erso di&erente da <erso 2-*-N <isite: Ittps:sour#e.sa=aipro5e#t.or(s<n#a&e O pr+prio pro(rama do su)<ersion #riar0 um diret+rio #om o nome da <erso- #aso 'ueira mudar o nome do diret+rio- apenas insira o nome no &ina$ da ur$ #omo em: #Ie#=out Ittps:sour#e.sa=aipro5e#t.or(s<n#a&e)ran#Ies2-*-N diretorioTdese5ado .sse diret+rio #riado ser0 #onsiderado o diret+rio rai? do sa=ai e ser0 re&eren#iado #omo sakai-src por este do#umento. !.%Con/i0urando o arAui+o saBai.properties Crie uma pasta dentro do diret+rio rai? do tom#at 80=A%A?8NA_!ME> #om o nome Hsa=aiJ. Dentro desta pasta #opie o sa=ai.properties #ontido no sa@ai-src1re9erence1docs1 8diret+rio do &onte do ,a=ai>3 .ste ar'ui<o 50 <em pr3-#on&i(urado por de&au$t para usar o 1,BCDO. Vamos a$ter0-$o para usar o A@,BC. O)s.: 9ara$e$amente o ar'ui<o sa=ai.properties pode ser en#ontrado em: Ittps:sour#e.sa=aipro5e#t.or(s<nre&eren#etrun=do#ssa=ai.properties Comente as se(uintes $inIas do ser<idor 1,BCDO #omo a)aiNo: ]] 1,BCDO settin(s - on )@ de&au$t ]<endor^or(.sa=aipro5e#t.ser<i#e.&rameFor=.s'$.,'$,er<i#eUIs'$d) ]dri<erC$assEame^5a<aN.s'$.OaseData,our#eUor(.Is'$d).5d)#Dri<er ]Ii)ernate.dia$e#tUor(.Ii)ernate.dia$e#t.1,BCDia$e#t ]<a$idationBuer@^5a<aN.s'$.OaseData,our#eUse$e#t 1 &rom ,_,T.ATD,.%, ] tFo Is'$d) stora(e options: &irst &or in-memor@ 8no persisten#e )etFeen runs>- se#ond &or dis= )ased ]ur$^5a<aN.s'$.OaseData,our#eU5d)#:Is'$d):. ]ur$^5a<aN.s'$.OaseData,our#eU5d)#:Is'$d):R`sa=ai.Iomead)sa=ai.d) Des#omente as se(uintes $inIas: ]] A@,BC settin(s - ma=e sure to a$ter as appropriate <endor^or(.sa=aipro5e#t.d).api.,'$,er<i#eUm@s'$ dri<erC$assEame^5a<aN.s'$.OaseData,our#eU#om.m@s'$.5d)#.Dri<er Ii)ernate.dia$e#tUor(.Ii)ernate.dia$e#t.A@,BCDia$e#t ur$^5a<aN.s'$.OaseData,our#eU5d)#:m@s'$:12".0.0.1:3304sa=aib useDni#odeUtruec#Iara#ter.n#odin(UDTF-! <a$idationBuer@^5a<aN.s'$.OaseData,our#eUse$e#t 1 &rom DDAC de&au$tTransa#tionIso$ation,trin(^5a<aN.s'$.OaseData,our#eUT%AE,ACTIOET%.ADTCOAAITT .D O)s.: #aso o ser<idor no este5a rodando $o#a$mente mude o 8$ de 12".0.0.1 para o 8$ #orreto do ser<idor #om o ,MOD. Con&iden#ia$ FA9.,9- 90(ina 10 TIDIA - Ae Verso: 1.0 Orientaes para Construo de Ferramentas para o TIDIA Ae 2.0 Data: 310!200" .dite as $inIas a)aiNo para #on&i(urar o usu0rio e senIa do ,MOD a ser uti$i?ado: ] TIe username and passFord. TIe de&au$ts are &or tIe out-o&-tIe-)oN 1,BCDO. CIan(e to mat#I @our setup. username^5a<aN.s'$.OaseData,our#eUsa=aiuser passFord^5a<aN.s'$.OaseData,our#eUsa=aipassFord O)s.: O usu0rio e a senIa a#ima so as mesmas #riadas para o ,a=ai no t+pi#o HCon&i(urando A@,BC *.1J. A primeira <e? 'ue o sa=ai &or ini#iado o atri)uto a)aiNo de<e en#ontrar-se des#omentado: auto.dd$Utrue .$e 3 um 9lag de #riao de ta)e$as e demais #on&i(uraes ini#iais do )an#o. Ap+s a primeira ini#ia$i?ao do sistema- #omente o mesmo #omando. !.C9sando o 2a+en para o dep-o3 do SaBai
O ar'ui<o build3properties do Aa<en de<e ser #riado para a #ompi$ao e dep$o@ do ,a=ai. .$e de<e ser #riado no diret+rio Iome do seu usu0rio. Eo FindoFs e$e de<e ser #riado no diret+rio: #:VDo#uments and ,ettin(sVEOA.TD,DA%IOV)uid.properties Eo $inuN: IomeEOA.TD,DA%IO)ui$d.properties Ap+s a #riao do )ui$d.properties- insira as se(uintes $inIas de #+di(o: ma<en.repo.remote U Ittp:sour#e.sa=aipro5e#t.or(ma<en ma<en.tom#at.Iome U DiretorioTdeTinsta$a#aoTtom#at ,e um proN@ esti<er sendo uti$i?ado a#res#ente os se(uintes #omandos: ma<en.proN@.Iost U FFF.@our.proN@.Iost ma<en.proN@.port U !0 ma<en.proN@.username U @ourTusername ma<en.proN@.passFord U @ourTpassFord ma<en.proN@.non9roN@1osts U $o#a$Iost
A)ra um prompt de #omandos 8.N.: #md no FindoFs ou )asI no $inuN>- <0 at3 o diret+rio rai? do sa=ai 8sa=ai-sr#> e eNe#ute o #omando: ma<en )$d dp$ Con&iden#ia$ FA9.,9- 90(ina 11 TIDIA - Ae Verso: 1.0 Orientaes para Construo de Ferramentas para o TIDIA Ae 2.0 Data: 310!200" A primeira <e? o ma<en demorar0 a$(o em torno de / a 10 minutos para &a?er o doFn$oad de todos os ar'ui<os ne#ess0rios. Veri&i'ue 'ue o #omando terminou #om su#esso Ini#ie o tom#at #om o #omando: RCATACIEAT1OA.)instartup A(uarde at3 o tom#at ini#iar 8pode $e<ar a$(uns minutos>. A)ra um )roFser e entre no endereo a)aiNo para <er se o tom#at est0 eNe#utando: Ittp:$o#a$Iost:!0!0 A(ora entre no endereo a)aiNo para <er se o ,a=ai est0 eNe#utando: Ittp:$o#a$Iost:!0!0porta$ ,e tudo deu #erto- &aa o $o(in no ,a=ai #om o usu0rio: admin- senIa: admin. !.!0Insta-ando o E)-ipse #.2D (+erso estE+e-) Faa o doFn$oad da mais no<a <erso est0<e$ do .#$ipse em: Ittp:FFF.e#$ipse.or( O)s.: ,e <o#: ti<er a$(uma <erso do .#$ipse 3.1.N 50 insta$ada 3 a#onse$I0<e$ )aiNar uma <erso mais atua$ do .#$ipse do 'ue atua$i?0-$a. O)s.: ,e <o#: ainda no )aiNou o .#$ipse- 3 a#onse$I0<e$ )aiNar o Le)Too$s 9$at&orm: A$$-in-one pa#=a(e para o .#$ipse 3.2 'ue in#$ui o .#$ipse e todos os pa#otes de &erramentas Fe) 8Fe)too$s> ne#ess0rios 83 )em mais r0pido e &0#i$ do 'ue )aiNa-$os separadamente>. ,e &i?er isso- <o#: pode pu$ar o passo de insta$ao das Le)Too$s 8passo 2.10.1>. .Ntraia o ar'ui<o 'ue &oi )aiNado no diret+rio opt. Dsu0rios do LindoFs podem eNtrair no diret+rio #:V. Dsu0rios do Aa# de<em usar o insta$ador e #o$o#a-$o em App$i#ations. .Ne#ute o .#$ipse para <eri&i#ar se est0 &un#ionando 8 opte#$ipsee#$ipse >. Dsu0rios do LindoFs: #:Ve#$ipseVe#$ipse.eNe para eNe#utar o e#$ipse. o Eota: se no &un#ionar pode ser a$(um pro)$ema #om a insta$ao do 5a<a. A #on&i(urao padro de mem+ria do .#$ipse 3 muito )aiNa para a(dentar o n7mero de ap$i#aes Fe) da insta$ao #omp$eta do ,a=ai. 3. Fe#Ie o .#$ipse #aso e$e este5a eNe#utando. *. .dite o ar'ui<o e#$ipse.ini no diret+rio onde <o#: eNtraiuinsta$ou o .#$ipse. /. A$tere as #on&i(uraes onde est0: Con&iden#ia$ FA9.,9- 90(ina 12 TIDIA - Ae Verso: 1.0 Orientaes para Construo de Ferramentas para o TIDIA Ae 2.0 Data: 310!200" -<mar(s -Xms*0m -XmN2/4m 9ara: -<mar(s -Xms2/4m -XmN"4!m Eo LindoFs 3 a#onse$I0<e$ editar esse ar'ui<o usando o Lord9ad ao in<3s do )$o#o de notas. Dsu0rios do Aa# de<ero pro#eder #om a$(uns passos eNtras para editar o e#$ipse.ini: 1. D: um Contro$-#$i#= no ;#one do .#$ipse App$i#ation e se$e#ione ,IoF 9a#=a(e Contents. 2. D: dois #$i'ues em Contents &o$derD. 3. D: dois #$i'ues na pasta Aa#O,- o ar'ui<o e#$ipse.ini de<e estar a$i. *. CaminIo do ar'ui<o: e#$ipse.#$ipse.appContentsAa#O,e#$ipse.ini /. A5uste a 2VA. O <a$or padro da 2VA ser0 a'ue$e da 2%.- mas 3 a#onse$I0<e$ mud0-$o para o da 2DG. 1. Ini#ie o .#$ipse se e$e no esti<er eNe#utando. 2. ,e$e#ione LindoF -\ 9re&eren#es -\ 2a<a -\ Insta$$ed 2%.s. 3. ,e$e#ione a 2%. 'ue est0 insta$ada atua$mente. *. C$i'ue no )oto .dit. /. C$i'ue em OroFse e na<e(ue at3 o diret+rio rai? onde o 5a<a est0 insta$ado 8por eNemp$o- opt5a<a>. 4. C$i'ue em OG para sa$<ar e em se(uida OG para &ina$i?ar. !.!0.!Adi)ionando o E)-ipse Fe, Too-s ProGe)t (FTP) O LT9 pode ser en#ontrado em: Ittp:FFF.e#$ipse.or(Fe)too$s Insta$ao manua$ 8mais r0pida>: 1. Ittp:FFF.e#$ipse.or(Fe)too$s 2. Faa o DoFn$oad do LT9 1./K para seu des=top. 3. Fe#Ie o .#$ipse. *. .Ntraia o pa#ote )aiNado no diret+rio de insta$ao do .#$ipse. /. Ini#ie o .#$ipse. Insta$ao usando o atua$i?ador do .#$ipse 8.#$ipse updater> 8mais &0#i$>: 1. Ini#ie o e#$ipse. 2. ,e$e#ione 1e$p -\ ,o&tFare Dpdates -\ Find and Insta$$. 3. ,e$e#ione ,ear#I &or neF &eatures to insta$$- #$i'ue em EeNt. *. .s#o$Ia .#$ipse.or( Dpdate ,ite e #$i'ue em FinisI. Con&iden#ia$ FA9.,9- 90(ina 13 TIDIA - Ae Verso: 1.0 Orientaes para Construo de Ferramentas para o TIDIA Ae 2.0 Data: 310!200" /. ,e$e#ione LT9 0." 8ou uma <erso mais no<a- se Iou<er>. 4. Eota: ,e isso no esti<er na $ista- use a se(uinte D%C de update: Ittp:doFn$oad.e#$ipse.or(Fe)too$supdates ". C$i'ue em ,e$e#t %e'uired. !. C$i'ue em EeNt e si(a as instrues de insta$ao. 6. A#eite os termos e #$i'ue em FinisI. 10. C$i'ue em Insta$$ A$$. 11. %eini#ie a ap$i#ao #aso isso se5a re'uerido. Le)Too$s 9$at&orm: A$$-in-one 8da maneira mais r0pida>: 1. Isso s+ de<e ser usado se <o#: ainda no ti<er o .#$ipse insta$ado. 2. V0 em: Ittp:FFF.e#$ipse.or(Fe)too$s 3. C$i'ue em doFn$oads do $ado direito da p0(ina. *. C$i'ue na <erso mais atua$ do )ui$d 1./. /. Eota: Aparentemente no I0 um pa#ote a$$-in-one para a <erso 1./.3 por isso re#omenda-se uti$i?ar o pa#ote 1./.2 nesse #aso 4. Co#a$i?e os pa#otes A$$-in-one e d: o doFn$oad do mais apropriado para sua p$ata&orma. ". .Ntraia o pa#ote para onde 'uer 'ue <o#: 'uiser para insta$ar o e#$ipse 8norma$mente no seu dri<e rai?>. !. Ini#ie o .#$ipse. !.!0.2Adi)ionando o Su,)-ipse ao E)-ipse 9ara insta$ar o p$u(in si(a os passos a)aiNo: 1 Ini#ie o e#$ipse. 2 ,e$e#ione 1e$p -\ ,o&tFare Dpdates -\ Find and Insta$$. 3 ,e$e#ione ,ear#I &or neF &eatures to insta$$- #$i'ue em EeNt. * C$i'ue em EeF %emote ,ite. / .ntre #om o nome ,u)#$ipse. 4 .ntre #om a D%C Ittp:su)#$ipse.ti(ris.or(updateT1.2.N . ,e <o#: est0 usando o .#$ipse 3.1 ou uma <erso mais <e$Ia- <o#: de<e usar ao in<3s disso a D%C Ittp:su)#$ipse.ti(ris.or(updateT1.0.N Eote: Contudo- re#omenda-se 'ue atua$i?e seu e#$ipse para a <erso 3.2K. " C$i'ue em FinisI. ! Aar'ue a #aiNa ,u)#$ipse e #$i'ue em EeNt. 6 A#eite os termos- #$i'ue em EeNt- #$i'ue em FinisI- #$i'ue em Insta$$ A$$. 10 %eini#ia o am)iente 'uando per(untado. 11 Adi#ione )in e tar(et para serem i(norados pe$o s<n ($o)a$ do .#$ipse 8Op#iona$>. Isso o poupar0 de ter 'ue &a?er #ommit nos diret+rios )in e tar(et 'uando <o#e adi#ionar pro5etos no s<n. 11.1 C$i'ue em LindoF -\ 9re&eren#es 11.2 ,e$e#ione Team -\ I(nored %esour#es 11.3 C$i'ue em Add 9attern e entre em S)inS 11.* C$i'ue em Add 9attern e entre em Star(etS 11./ C$i'ue em App$@ e ento OG !.!0.#Adi)ionando o Sprin0IDE ao E)-ipse O ,prin(ID. pode ser en#ontrado em: Con&iden#ia$ FA9.,9- 90(ina 1* TIDIA - Ae Verso: 1.0 Orientaes para Construo de Ferramentas para o TIDIA Ae 2.0 Data: 310!200" Ittp:sprin(ide.or(pro5e#t 9ara insta$ar o p$u(in si(a os passos a)aiNo: 1. Ini#ie o .#$ipse. 2. ,e$e#ione 1e$p -\ ,o&tFare Dpdates -\ Find and Insta$$. 3. ,e$e#ione ,ear#I &or neF &eatures to insta$$- #$i'ue em EeNt. *. C$i'ue em EeF %emote ,ite. /. .ntre #om ,prin( ID. updatesite para o nome. 4. .ntre #om Ittp:sprin(ide.or(updatesite para a D%C. ". C$i'ue em OG. !. Aar'ue a #aiNa S,prin( ID. updatesiteS e #$i'ue em FinisI. 6. Aar'ue a #aiNa ,prin( ID. e #$i'ue em EeNt. 10. A#eite os termos da $i#ena- #$i'ue em EeNt- #$i'ue em FinisI e #$i'ue em Insta$$ A$$. 11. %eini#ie o am)iente 'uando &or so$i#itado. !.!0.6Importando o )(di0oH/onte do SaBai dentro do E)-ipse 9ara importar o #+(ido &onte pre<iamente )aiNado do ,a=ai si(a os passos a)aiNo: 1 Ini#ie o .#$ipse se e$e no esti<er em eNe#uo. 2 Crie um no<o For=spa#e para o ,a=ai. 3 C$i'ue em Fi$e -\ ,Fit#I Lor=spa#e. * .ntre #om SL,-,a=aiS no $u(ar do diret+rio padro HFor=spa#eJ. / C$i'ue em OG 8o e#$ipse <ai reini#iar>. 4 Os passos se(uintes de<ero ser &eitos dentro do For=spa#e L,-,a=ai. " Adi#ione as )i)$iote#as do reposit+rio do Aa<en 8Aa<en %epositor@ $i)raries> no #$asspatI. ! ,e$e#ione LindoF -\ 9re&eren#es -\ 2a<a -\ Oui$d 9atI -\ C$asspatI Varia)$es. 6 Adi#ione a <ari0<e$ do #$asspatI AAV.ET%.9O #om o #aminIo para onde est0 o reposit+rio do ma<en. 10 O #aminIo de<eria ser: RD,.%T1OA..ma<enrepositor@. 11 Tro'ue para a perspe#ti<e 2a<a 8LindoF -\ Open 9erspe#ti<e -\ 2a<a>. 12 Asse(ure-se 'ue <o#: se en#ontra no pa#=a(e eNp$orer. 13 ,e$e#ione o menu 9ro5e#t e desmar'ue Oui$d automati#a$$@. 1* ,e$e#ione Fi$e -\ Import -\ Menera$ -\ .Nistin( 9ro5e#ts into Lor=spa#e. 1/ .ntre #om o #aminIo #omp$eto para o diret+rio #om o #+di(o &onte do sa=ai 8sakai-src> #omo sendo o diret+rio rai?. 14 C$i'ue em Dese$e#t A$$ para desmar#ar todos os pro5etos. 1" ,e$e#ione os se(uintes pro5etos 8<o#: s+ pre#isa da maioria das A9Is- a$(uns uti$it0rios e todos os pro5etos d)>: a$ias-api announ#ement-api ar#Ii<e-api autI?-api #m-api #omponent-api #ontent-api #ourier-api d)-api d)-imp$ d)-uti$ emai$-api entit@-api Con&iden#ia$ FA9.,9- 90(ina 1/ TIDIA - Ae Verso: 1.0 Orientaes para Construo de Ferramentas para o TIDIA Ae 2.0 Data: 310!200" e<ent-api 5s& messa(e-api master site-api site-mana(e-api too$-api user-api user-uti$ uti$-api uti$-uti$ <e$o#it@ 1! C$i'ue em FinisI para importar os pro5etos se$e#ionados. 16 Isso poder0 $e<ar a$(um tempo. 20 Ini#ia$mente <o#: poder0 ter a$(umas &a$Ias de )ui$d na maioria dos pro5etos ,a=ai. Isso o#orre por'ue <o#: est0 &a?endo )ui$din( na ordem padro e suas depend:n#ias se en#ontram em uma ordem di&erente. Isso <em sendo par#ia$mente a5ustado no ,a=ai 2.2. 21 Cimpe todos os 9ro5etos do ,a=ai. 22 ,e$e#ione 9ro5e#t -\ C$ean. 23 ,e$e#ione C$ean a$$ pro5e#ts. 2* Aar'ue ,tart a )ui$d immediate$@. 2/ C$i'ue em OG. 24 Oui$d A$$ 89ro5e#t -\ Oui$d A$$>. 2" %epita este passo at3 'ue os erros desapaream 8no de<e passar de umas 3 ou * <e?es>. 2! 1a<er0 #entenas de Farnin(s- por isso no pre#isa se preo#upar #om isso. 26 Ci(ando no<amente os Automati# )ui$ds. 30 ,e$e#ione 9ro5e#t e Oui$d automati#a$$@. #. Camada de PersistIn)ia O ,a=ai tem um mode$o de persist:n#ia #entra$i?ado- onde todas as &erramentas e o sistema em si usam a mesma )ase de dados. A #on&i(urao de produo 3 tipi#amente #$usteri?ada- ou se5a- 3 )astante dependente da )ase de dados. Ferramentas 'ue no se #$usteri?am- pro<a<e$mente no sero adotadas pe$a distri)uio o&i#ia$ do ,a=ai. O sistema de ar'ui<os 3 usado para persist:n#ia de dados <o$umosos #omo )$o)s ou ar'ui<os. .sses dados so disponi)i$i?ados <ia Le)Da<. O #ontro$e de #on&i(uraes da )ase de dados esto #on#entrados nos ar'ui<o sa=ai.properties $o#a$i?ado no diret+rio de insta$ao do Tom#at- no diret+rio ,a=ai. DeiNe sempre 8eN#eto em produo> a propriedade Hauto.d$$UtrueJ. Dessa &orma- se as ta)e$as do ,a=ai ainda no &oram #riadas- e$as sero. O 1,BCD 3 o )an#o padro #on&i(urado- e$e arma?ena os dados apenas em mem+ria por de&au$t. 9ara usar a persist:n#ia em ar'ui<os- des#omente a se(uinte propriedade do sa=ai.properties: ur$^5a<aN.s'$.OaseData,our#eU5d)#:Is'$d):R`sa=ai.Iomead)sa=ai.d) Deta$Ies de #on&i(urao para outros )an#os podem ser en#ontrados em: Con&iden#ia$ FA9.,9- 90(ina 14 TIDIA - Ae Verso: 1.0 Orientaes para Construo de Ferramentas para o TIDIA Ae 2.0 Data: 310!200" Ittp:#on&$uen#e.sa=aipro5e#t.or(#on&$uen#edisp$a@DOCInsta$$KMuideK-KDOKe2!2.*e26 Apenas 3 )ases de dados so suportadas atua$mente pe$o ,a=ai: 1,BCDO- A@,BC e Ora#$e. A adoo de outras )ases 3 um tra)a$Io 0rduo- pois (rande parte do #+di(o de a#esso a )an#o est0 em ,BC nati<o. !.!!Formas de persistIn)ia A persist:n#ia pode ser &eita de 3 maneiras: 2DOC: Oastante tra)a$Ioso- de )aiNa porta)i$idade- mas propor#iona maior #ontro$e. ,prin( 2DOC: Tra)a$Ioso- porta)i$idade ra?o0<e$- mas propor#iona maior #ontro$e. 1i)ernate: Aenos tra)a$Ioso- mais port0<e$- propor#iona #ontro$e #on&i(ur0<e$. O 1i)ernate 3 a &orma de persist:n#ia mais re#omendada para o ,a=ai de<ido a &a#i$idade de desen<o$<imento e #ontro$e moderado. 9or3m- no 3 per&eito- pode ser tra)a$Ioso de mapear os o)5etos- a #on&i(urao ini#ia$ no pode ser a$terada dinami#amente- $a?@ #o$$e#tions no so to $a?@ assim- et#.. O 1i)ernate 3 3 usado a partir do ,a=ai 2.2- <erses anteriores usa<am o 1i)ernate 2. A$(umas di#as ao se usar o &rameFor=: Eo use tipos primiti<os para mapear propriedades em o)5etos persistentes. Mera$mente no I0 pro)$emas #om isso- mas 'uando uma propriedade do )an#o est0 EDCC- no 3 poss;<e$ mapear para tipos primiti<os- somente para o)5etos. Eo atri)ua <a$ores nas propriedades dos 9O2O,. O &rameFor= espera 'ue todos os atri)utos dos o)5etos este5am no ini#ia$i?ados. ,e <o#: ti<er a$(um o)5eto no sa$<o sendo re&eren#iado por outro- pro#ure primeiro sa$<ar esse o)5eto e s+ depois sa$<ar o seu parente. O 1i)ernate tem <0rias opes em #as#ata 'ue a&irmam rea$i?ar essa tare&a- mas 3 me$Ior simp$i&i#ar. A mesma #oisa na de$eo. Dse Ids no primiti<os em #Ia<es prim0rias dos o)5etos persistentes. P mais e&i#iente e 3 uma )oa id3ia para a (rande maioria dos DOs. Dse Con( ou ,trin( para resu$tados me$Iores. !.!29sando o 'i,ernate .Nistem )asi#amente 3 maneiras de usar o 1i)ernate no ,a=ai: Criar um ,essionFa#tor@ usando #on&i(uraes dentro da sua &erramenta. Vo#: de<e usar esse m3todo 'uando 3 pre#iso se #one#tar a uma )ase de dados eNterna. Eo use essa opo para se #one#tar f )ase de dados interna do ,a=ai. 9ara mais in&ormaes a#esse: Ittp:FFF.Ii)ernate.or(Ii)Tdo#sre&eren#eenItm$session-#on&i(uration.Itm$ Criar um ,essionFa#tor@ a partir do ,essionFa#tor@Oase ($o)a$ do ,a=ai. .sse no 3 o m3todo re#omendado- mas se <o#: ti<er apenas um pro5eto no Aa<en ento <o#: poderia usar esse m3todo. .sse so$uo &un#iona )em para &erramentas simp$es- por3m para mais #omp$eNas de<e- se usar o m3todo a)aiNo. Adi#ionar os seus 1OAs ao ,essionFa#tor@ ($o)a$ do ,a=ai usando Adde)$e,essionFa#tor@Oean. .sse 3 o m3todo mais re#omendado. Fun#iona )em para a maioria- eN#eto para as ap$i#aes mais simp$es. %e'uer 'ue a &erramenta &aa o dep$o@ parte na pasta sIared e na pasta #omponents- por isso pode se tornar #omp$eNo para &erramentas pe'uenas. Con&iden#ia$ FA9.,9- 90(ina 1" TIDIA - Ae Verso: 1.0 Orientaes para Construo de Ferramentas para o TIDIA Ae 2.0 Data: 310!200" !.!#9sando o pa)ote Jeneri)Dao O Meneri#Dao 3 uma #amada de a)strao 'ue possi)i$ita o uso do 1i)ernate #om seus o)5etos persistentes sem pre#isar es#re<er um 7ni#o DAO. P a$tamente #on&i(ur0<e$ e estend;<e$ e no tem depend:n#ia a$(uma do 1i)ernate nas suas inter&a#es. Aais in&ormaes de uso podem ser en#ontradas nos 5a<ado#s: Ittp:sour#e.edte#I.<t.eduma<en(eneri#-dao ,eu uso 3 demonstrado no eNemp$o Tas=Cist. 9ode ser en#ontrado a)aiNo: Ittps:sour#e.sa=aipro5e#t.or(#ontri)tas=$isttrun= !.!6Construindo uma ap-i)ao Dma simp$es ap$i#ao de a#esso f #amada de persist:n#ia pode ser #onstru;da se(uindo a apresentao a)aiNo: http://bugs.sakaiproject.org/confluence/download/attachments/18439/SakaiPersistenceAndHibernate.ppt? version=1 9ara$e$amente- o es'ue$eto de uma ap$i#ao #om a#esso a persist:n#ia- dentre outras #oisas- pode ser #onstru;da #om p$u(in do ,a=ai para o .#$ipse. .s#o$Ia a #riao de uma ap$i#ao C%DD. Dma )oa noo de estrutura de &erramenta e maneiras de a#esso ao )an#o pode ser o)tida o)ser<ando a estrutura #riada. 6. Framework do SA=AI H Servios !.!7Con)eituao de Ser+iosK ComponentesK Ferramentas e Frame<orB no SaBai Os ser<ios e #omponentes do ,a=ai so um #on5unto de imp$ementaes de a$(uma A9I do ,a=ai- ou se5a- uma #o$eo de Oeans do ,prin(. As &erramentas ,a=ai ser<em somente #omo inter&a#e (r0&i#a 8MDI> e no podem &a?er nenIum tipo de persist:n#ia diretamente. A persist:n#ia &i#a a #ar(o do #omponente pr+prio para este ser<io. 20 os #omponentes- por sua <e?- no &a?em 'ua$'uer tipo de ser<io de inter&a#e (r0&i#a #omo 1TAC- por eNemp$o- por3m podem a#essar outros ser<ios por meio das A9Is dispon;<eis. O FrameFor= ,a=ai possi)i$ita 'ue ser<ios e #omponentes se5am re(istrados para 'ue possam &orne#er &un#iona$idades #omuns sem- ne#essariamente- #onIe#er o dom;nio de seus o)5etos 8OA,AAE- 200"a>. Cada #omponente do ,a=ai pu)$i#a os seus ser<ios usando o ar'ui<o H#omponents.Nm$J da &orma #omo o ,prin( &a?. .stes #omponentes so ini#iados 'uando o ,a=ai 3 ini#ia$i?ado e suas depend:n#ias so reso$<idas automati#amente e ao mesmo tempo 8OA,AAE- 200"a>. As A9Is do ,a=ai so de&inidas em termos de inter&a#es 2a<a- para as 'uais eNiste uma 7ni#a imp$ementao para #ada inter&a#e da A9I no ,a=ai. O nome do Oean ,prin( no #onteNto ,prin( do ,a=ai 8#omponents.Nm$> 3 sempre o nome da inter&a#e #omp$eto- in#$uindo o8s> seu8s> pa#ote8s>. 9or eNemp$o- o ser<io DserDire#tor@,er<i#e possui a se(uinte entrada no ar'ui<o #omponents.Nm$: <bean id="org.sakaiproject.user.api.UserDirectoryService Con&iden#ia$ FA9.,9- 90(ina 1! TIDIA - Ae Verso: 1.0 Orientaes para Construo de Ferramentas para o TIDIA Ae 2.0 Data: 310!200" class="org.sakaiproject.user.impl.DbUserService" init-method="init" destroy-method="destroy" singleton="true" ...... <property name="autoDdl value=!"auto.ddl#$% <property name="cache&inutes value='$% <%bean Figura 1: Exemplo de Definio de Servio no Sakai (BASMAN, !!"a#$ !.!8Desen+o-+endo Ferramentas e Componentes SaBai O ,a=ai uti$i?a um #on5unto de te#no$o(ias para o desen<o$<imento de suas &erramentas- )em #omo o &orne#imento de ser<ios. A Fi(ura 2 apresenta as te#no$o(ias uti$i?adas pe$o ,a=ai em #amadas. Figura 2: Te#no$o(ias Dti$i?adas pe$o ,a=ai 8OA,AAE- 200")>. 9er#e)e-se na Fi(ura 2 'ue as te#no$o(ias en<o$<idas para o &un#ionamento do ,a=ai so: g 2a<a: <erso /.0 ou superior. 2a<a %untime .n<ironment 82%.> para insta$ao e uso e 2a<a De<e$opment Git 82DG> para o desen<o$<imento de &erramentas ,a=aiQ Con&iden#ia$ FA9.,9- 90(ina 16 TIDIA - Ae Verso: 1.0 Orientaes para Construo de Ferramentas para o TIDIA Ae 2.0 Data: 310!200" g Apa#Ie 1TT9 eou Tom#at: ser<idor Apa#Ie 1TT9 em #on5unto #om os m+du$os modT5= para o Container Tom#at /./ ou superiorQ g 2,F- Veo#it@ e %,F: para o desen<o$<imento de MDIQ e g A@,BC ou Ora#$e: para a persist:n#ia de dados. Com )ase nas te#no$o(ias en<o$<idas- a estrutura do ,a=ai 3 apresentada na Fi(ura 3 a se(uir. Figura 3: .strutura ,a=ai 8OA,AAE- 200")>. Como pode ser <isto na Fi(ura 3- a estrutura do ,a=ai est0 di<idida em duas partes prin#ipais: Apresentao: A apresentao permite a interao de #$ientes por meio de a$(umas te#no$o(ias #omo- por eNemp$o- Le) ,er<i#es 8ANis> e por meio de )roFsers <ia %,F e 2,FQ ,er<ios: A #amada de ser<ios 3 &ormada por ser<ios #omuns 8)an#o de dados e =erne$> a$3m de outros ser<ios 'ue podem ser adi#ionados 8otIer ser<i#es>. Dessa &orma- 3 poss;<e$ #onstruir &erramentas ,a=ai #om )ase nas te#no$o(ias e estrutura en<o$<idas. Dma &erramenta ,a=ai 3 a$(o )em pare#ido #omo um ser<$et- por3m #om a$(umas pe#u$iaridaes #omo 8OA,AAE- 200"aQ OA,AAE- 200")>: g O #onteNo ,prin( da &erramenta 3 automati#amente adi#ionado ao #onteNto ,prin( ($o)a$- assim os ser<ios ,a=ai podem ser diretamente re&eren#iados no ,prin(Q g Os 2A%s do ,prin( no de<em ser in#$u;dos na ap$i#ao- uma <e? 'ue e$es 50 este5am #omparti$Iados 8pasta ,Iared do Container Tom#at>. Con&iden#ia$ FA9.,9- 90(ina 20 TIDIA - Ae Verso: 1.0 Orientaes para Construo de Ferramentas para o TIDIA Ae 2.0 Data: 310!200" Assim- eNiste um 7ni#o #onteNto da ap$i#ao ,a=ai ($o)a$ e #omparti$Iado 'ue possui todos os )eans 'ue representam os ser<ios ,a=ai. 9ara o desen<o$<imento da inter&a#e (r0&i#a da &erramenta ,a=ai 3 poss;<e$ uti$i?ar %,F Z7easonable &er#er ;aces 8%,FLIGI- 200"> 'ue 3 um &rameFor= opensour#e de pro(ramao Le) desen<o$<ido uti$i?ando o ,prin(. O %,F &orne#e um temp$ate puro em X1TAC e um tratamento #omp$eto de #i#$o de <ida. A$3m disso- o %,F uti$i?a A5aN e C,,- assim os desen<o$<edores no pre#isam tratar 1ttp,er<$et%e'uestWs- D%Cs ou ta(s 1TAC. 9ermite- tam)3m- pro(ramao pura )aseada no mode$o de )eans- assim #omo 2,F 8JavaServer Faces>- a$3m de uma ar'uitetura a$tamente modu$ar e p$u(0<e$. O uso do %,F em &erramentas ,a=ai 3 simp$es- uma <e? 'ue e$e 3 desen<o$<ido usando o ,prin( o 'ue torna seu uso r0pido e direto. Cada entidade %,F 3 um )ean ,prin( e os ser<ios pode ser in5etados em 'ua$'uer $u(ar. 9or eNemp$o- para #riar uma entidade %,F 9rodu#er de<e-se adi#ionar o se(uinte #+di(o ao ar'ui<o #omponents.Nm$: <bean class=org.sakaiproject.myproject.tool.producers.(ello)orld*roducer$ <property name=userDirectoryService$ re+="org.sakaiproject.user.api.UserDirectoryService$ <%bean Figura 3: .Nemp$o de De&inio de uma .ntidade %,F 8OA,AAE- 200"a>. Dessa &orma- as &erramentas e ser<ios do ,a=ai se #omuni#am #om )ase nos #Iama os ClassLoaders. Os ClassLoaders so a #Ia<e para a &$eNi)i$i?ao em 2a<a. Eo Container Tom#at- os ClassLoaders &ormam uma 0r<ore #omo mostra a &i(ura a se(uir. Figura 4: C$assCoaders no Container Tom#at 8OA,AAE- 200")>. Ea Fi(ura *- Le)aap1 e Le)app2 representam as &erramentas ,a=ai. Os #omponentes e A9Is &i#am $o#a$i?ados na pasta ,Iared. Assim- 'ua$'uer &erramenta imp$antada no Container ,a=ai 8Fi(ura *> tem a#esso aos ser<ios e #omponentes insta$ados. O desen<o$<imento de #omponentes ,a=ai est0 di<idido em duas partes 8OA,AAE- 200")>: O desen<o$<imento do m+du$o A9I: #ont3m norma$mente inter&a#es 2a<a e #onstantes 'ue &ormam um 2A% 'ue 3 en<iado f 0rea #omparti$IadaQ O desen<o$<imento do m+du$o Imp$: 'ue #ont3m a imp$ementao das inter&a#es da A9I- a$3m de outras #oisas. Cont3m tam)3m um ar'ui<o #omponents.Nm$ 'ue pu)$i#a os )eans de imp$ementao para o #onteNto ,prin( #omparti$Iado. Tam)3m &orma um 2A% 'ue 3 en<iado f 0rea de #omponentes. 9ara a #riao de #omponentes e &erramentas eNiste um p$u(in para o .#$ipse #Iamado App Oui$der. Dm tutoria$ de insta$ao e uso do App Oui$der est0 dispon;<e$ em ,a=ai 8200">. !.!& Ser+ios DisponL+eis pe-o SaBai Os ser<ios do ,a=ai esto di<ididos em <0rias #ate(orias #omo mostra a Fi(ura /: Con&iden#ia$ FA9.,9- 90(ina 21 TIDIA - Ae Verso: 1.0 Orientaes para Construo de Ferramentas para o TIDIA Ae 2.0 Data: 310!200" Con&iden#ia$ FA9.,9- 90(ina 22 TIDIA - Ae Verso: 1.0 Orientaes para Construo de Ferramentas para o TIDIA Ae 2.0 Data: 310!200" Figura 5: ,er<ios do FrameFor= ,a=ai. As sees a se(uir apresentam uma des#rio de #ada um dos ser<ios dispon;<eis em Functionnal e Informational Services. !.!% Fun)tiona- Ser+i)es !.!%.!9ni+ersa- Components ,o os #omponentes )0si#os para todas as &erramentas ,a=ai em n;<e$ de ser<ios. 1.18.1.1 ComponentManager O ,a=ai Component Aana(er 3 um ser<io 'ue usa as #apa#idades de um managedbean do ,prin( para #riar e manter um re(istro de #omponentes 'ue mapeiam as inter&a#es de uma A9I para sua imp$ementao #orrespondente. .ssa ati<idade pode ser #omparada a um poss;<e$ domain name resolver para inter&a#es de uma A9I. .sse ser<io 3 simi$ar ao OGI O,ID $oader 'ue pro<: )us#a para imp$ementaes de uma inter&a#e em parti#u$ar. Os e<entos 'ue de<em o#orrer para o Component Aana(er operar in#$uem: 1. Buando uma ap$i#ao Fe) #om #omponentes 8imp$ementaes de uma inter&a#e em parti#u$ar> ini#ia- se- um ser<$et espe#ia$ na ap$i#ao #Iamado de Components,er<$et $: um ar'ui<o de #on&i(urao e re(istra os #omponentes #ontidos no ser<$et. 2. Buando &erramentas 8ou outros #onsumidores da A9I> so #arre(ados- o ComponentAana(er $o#a$i?a a imp$ementao para as inter&a#es re'uisitadas. O ComponentAan(er usa o re(istro para imp$ementaes pr3re(istradas. 10 di<ersos m3todos 'ue eNe#utam essa pro#ura in#$uindo o Service Injection e o Service Locator 8des#ritos adiante> 3. A &erramenta &a? #Iamadas para a imp$ementao da A9I atra<3s dos $imites da ap$i#ao Fe). Isso a#onte#e pois a inter&a#e da A9I e seus o)5etos retornados so de&inidos em um espao #omparti$Iado- o crosswebapplication. Como a &erramenta e a imp$ementao da A9I operam em di&erentes ap$i#aes Fe)- e$as podem ter di&erentes #on&i(uraes para seus ar'ui<os 5ar. Dm eNemp$o disso 3 'uando uma &erramenta ne#essita de uma <erso de um uti$it0rio #omo o Xer#es en'uanto uma A9I ne#essita outra <erso. O desen<o$<imento de e$ementos de ap$i#aes por meio de di<ersas ap$i#aes Fe) pode o#asionar es&oro adi#iona$ e a Ia)i$idade de di&erentes e$ementos possu;rem di&erentes ar'ui<os de #on&i(urao 5ar 3 a$tamente <a$iosa para manteno da #on&ia)i$idade de todo o sistema. Ea <erso 1.0 do ,a=ai 3 poss;<e$ re#uperar o Component %e(istr@ uti$i?ando o Component ,er<$et. Encontrando implementaes de servios do Sa!ai 10 duas maneiras de $o#a$i?ar a imp$ementao de uma inter&a#e em parti#u$ar: Service Locator e Service Injection. O ,a=ai Component Aana(er apoia tanto o service injection 'uanto o service location #omo me#anismos para reso$<erem a re&er:n#ia de imp$ementaes de uma A9I. O padro ser<i#e in5e#tion 3 re#omendado e mais port0<e$. " #adr$o Servi%e &o%a'or O padro Service Locator 3 uti$i?ado onde uma &erramenta &a? uma #Iamada eNp$i#;ta para re#uperar a imp$ementao para uma inter&a#e. 9or eNemp$o: ,mport org.sakaiproject.service.+rame-ork.component.cover..omponent&anager/ Con&iden#ia$ FA9.,9- 90(ina 23 TIDIA - Ae Verso: 1.0 Orientaes para Construo de Ferramentas para o TIDIA Ae 2.0 Data: 310!200" 0ogger logger = 10ogger2 .omponent&anager.get10ogger2/ O &ra(mento a#ima &a? #om 'ue o #+di(o dependa de um ComponentAana(er em parti#u$ar de<ido f de#$arao de import eNp$;#ita na assinatura do m3todo. Dm padro #omum 'uando uti$i?ado o service locator 3 es#onder o ser<i#e $o#ator uti$i?ando outro padro- #Iamado Cover #attern. A #o)ertura est0ti#a simp$esmente possui um m3todo para todo m3todo na #amada in&erior da inter&a#e Z dentro de #ada m3todo- o ser<i#e $o#ator 3 #Iamado- e ento o m3todo 3 #Iamado na imp$ementao retornada pe$o ser<i#e $o#ator. Eo ,a=ai 3 uti$i?ado a strin( cover no nome do pa#ote para indi#ar 'uando esse padro est0 em uso. Isso a5uda a manter #o)erturas est0ti#as separadas de inter&a#es- o)5etos e imp$ementaes de inter&a#e. " padr$o Servi%e (n)e%'ion Dma a)orda(em mais port0<e$ 3 uti$i?ar m3todos setter de 2a<aOeans para Hin5etarJ a imp$ementao de uma #$asse. Isso 3 #Iamado #omo o padro Service Injection- pois o m3todo set 3 usado para in5etar a imp$ementao atua$ da inter&a#e ap+s o )ean da &erramenta ter sido #onstru;do. Dessa maneira no I0 depend:n#ia no 2a<a so)re a assinatura do m3todo do ComponentAana(er ou do nome do pa#ote 2a<a. public void set0ogger10ogger logger2" this.logger = logger/ # Eo ,a=ai 2a<a FrameFor= <erso 1.0- I0 duas maneiras de indi#ar 'ua$ ser<i#e in5e#tion 3 dese5ado. Buando um ser<i#e re'uer ser in5etado #om outro ser<i#e- o ser<i#e in5e#tion 3 um e&eito #o$atera$ da #riao do )ean do ser<io. Dm eNemp$o de ar'ui<o #omponents.Nm$ se(ue a)aiNo: <beans <bean id="org.sakaiproject.service.common.id.,d&anager" class="org.sakaiproject.component.common.id.Sakai,d&anager" initmethod=" init" destroymethod=" destroy" singleton="true" <property name="logger" <re+ bean="3org.sakaiproject.service.+rame-ork.log.0ogger3"% <%property <%bean <%beans Eesse eNemp$o est0 sendo #riado e re(istrado o Id%anager bean ao mesmo tempo- in5etando nesse )ean a imp$ementao do Co((er. 9ara uma &erramenta T99 #ompat;<e$- o ser<i#e in5e#tion 3 des#rito no ar'ui<o &a#es#on&i(. Nm$: <+acescon+ig <managedbean <description4ool 5ean +or announcements<%description <managedbeanname 6nnouncement4ool<%managedbeanname <managedbeanclass org.sakaiproject.tool.annc.6nnouncement4ool <%managedbeanclass <managedproperty <descriptionService Dependency7 logging service<%description <propertyname Con&iden#ia$ FA9.,9- 90(ina 2* TIDIA - Ae Verso: 1.0 Orientaes para Construo de Ferramentas para o TIDIA Ae 2.0 Data: 310!200" logger<%propertyname <value 38".omponents9"org.sakaiproject.service.+rame-ork.log.0ogger":#3 <%value <%managedproperty <%managedbean <%+acescon+ig O ,er<i#e In5e#tion permite ao &rameFor= possuir #ontro$e #omp$eto so)re as imp$ementaes usadas em tempo de eNe#uo e #onsumidas no #+di(o 2a<a. A$3m disso- o uso do ser<i#e in5e#tion simp$i&i#a a #onstruo de testes de unidade #omo testes de unidade pro<er o #+di(o #om uma imp$ementao &a$sa ou su)stituta #omo parte da operao de teste. .sto sendo in<esti(ados outros me#anismos #omo o 2a<a Eamin( and Dire#tor@ Inter&a#e 82EDI> #omo uma maneira de identi&i#ar re&er:n#ias a A9I atra<3s de #onteNtos de ap$i#aes Fe). De maneira (era$- a inter&a#e Component Aana(er pro<: a#esso a o)5etos sin($eton- 'ue #orrespondem a um #omponente 8ser<ios- re#ursos- et#>. Os m3todos 'ue #ompe a inter&a#e so: %e#upera um #omponente dado um nome de #$asse *+)e%' ge'(,la-- ifa%e#: %e#upera um sin($eton asso#iado #om a inter&a#e da #$asse pro<ida. .sse sin($eton 3 uma insthn#ia de um o)5eto 'ue imp$ementa a inter&a#e indi#ada. %e#upera um #omponente dado um nome de inter&a#e *+)e%' ge'(S'ring ifa%eName#: %e#upera um sin($eton asso#iado #om o nome de inter&a#e pro<ida. .sse sin($eton 3 uma insthn#ia de um o)5eto 'ue imp$ementa a inter&a#e indi#ada. Dm eNemp$o de nome de inter&a#e 3 or(.sa=aipro5e#t.api.=erne$.session.,ession Aana(er. Veri&i#a a eNist:n#ia de um #omponente dado o nome de uma #$asse +oolean %on'ain-(,la-- ifa%e#: %etorna true se o sin($eton asso#iado #om a inter&a#e pro<ida 3 re(istrado #om o Component Aana(er e eNiste. Veri&i#a se um #omponente eNiste dado um nome de inter&a#e +oolean %on'ain-(S'ring ifa%eName#: %etorna true se o sin($eton asso#iado #om o nome de inter&a#e pro<ido est0 re(istrado #om o Component Aana(er e eNiste. Dm eNemp$o de nome de inter&a#e 3 or(.sa=aipro5e#t.api.=erne$.too$.Too$Aana(er %e#upera o #on5unto de #omponentes re(istrados Se' ge'.egi-'ered(n'erfa%e-(#: %etorna o #on5unto de #omponentes re(istrados atua$mente #arre(ados e dispon;<eis #omo o)5etos sin($eton. .sse 3 um #on5unto de nomes de inter&a#e. O #on5unto pode ser uti$i?ado para des#o)rir a imp$ementao de uma inter&a#e #onIe#ida. Carre(a uma #omponente eNistente dada uma #$asse void load,omponen'(,la-- ifa%e, *+)e%' %omponen'#: .m a$(uns #asos- uma insthn#ia de uma imp$ementao de ser<io pode ser #riada por outros m3todos a$3m dos do Componet Coader . .sse m3todo pode ser usado para re(istrar essa insthn#ia #omo um sin($eton e asso#i0-$o #om a inter&a#e &orne#ida Carre(a um #omponente eNistente dado o nome de uma #$asse void load,omponen'(S'ring ifa%eName, *+)e%' %omponen'#: .m a$(uns #asos- a insthn#ia de uma imp$ementao de um ser<i#e pode ser #riada por m3todos di&erentes dos do Componente Coader. .sse m3todo pode ser usado para re(istrar essa insthn#ia #omo um sin($eton e asso#ia-$o #om o nome de inter&a#e dado. Con&iden#ia$ FA9.,9- 90(ina 2/ TIDIA - Ae Verso: 1.0 Orientaes para Construo de Ferramentas para o TIDIA Ae 2.0 Data: 310!200" Fe#Ia o Component Aana(er void %lo-e(#: .sse m3todo 3 #Iamado para &e#Iar o Component Aana(er. .$e- por sua <e?- &e#Ia o #onteNto da ap$i#ao ,prin(. %e#upera as propriedades de #on&i(urao /roper'ie- ge',onfig(#: .sse m3todo pode ser usado para a#essar <0rias propriedades de #on&i(urao suportadas pe$o ,a=ai. 1.1!.1.1.1 ComponentsCoader .ste #omponente 8inter&a#e 2a<a> de&ine um m3todo para #arre(ar todos os #omponentes re(istrados dispon;<eis- a$3m de #riar o)5etos Singletons 8,AGAI- 200/>: void load(ComponentManager mgr, String componentsRoot); onde: mgr 3 uma insthn#ia de ComponentAana(erQ components&oot 3 o #aminIo #anYni#o para o diret+rio onde os #omponentes se en#ontram. O <a$or de components&oot 3 re#uperado por meio da instruo: System.getProperty(sakai.components.root); 1.1!.1.1.2 ConteNtCoaderCistener .sta #$asse uti$it0ria '(tilit) "bject* representa uma eNtenso da #$asse Conte+tLoaderListener do ,prin( e in#rementade#rementa o n7mero de &i$Ios do #omponente Component%anager 8,AGAI- 200/>. ,ua A9I 3 &ormada pe$os se(uintes m3todos: Cria um ConteNtCoader p!lic createConte"t#istener(); Ini#ia$i?a o #onteNto rai? da ap$i#ao Le) p!lic void conte"t$nitiali%ed(ServletConte"t&vent event); .n#erra o #onteNto rai? da ap$i#ao Le) p!lic void conte"t'estroyed(ServletConte"t&vent event); 1.1!.1.1.3,er<erCon&i(urationCistener .ssa inter&a#e &orne#e in&ormaes so)re #omo o ser<idor est0 #on&i(urado 8,AGAI- 200")>. ,ua A9I 3 &ormada pe$os se(uintes m3todos: String getServer$d(): a#essa o 7ni#o id do ser<idorQ String getServer$nstance(): a#essa o id da 7ni#a insthn#ia do ser<idorQ String getServer$d$nstance(): a#essa o id #om)inado de ser<idorinsthn#iaQ String getServer(ame(): a#essa o nome DE, do ser<idorQ String getServer)rl(): a#essa a D%C para o ser<idor rai?Q String get*elp)rl(String +elpConte"t) : a#essa a D%C para o ser<io de a5uda do ser<idorQ Con&iden#ia$ FA9.,9- 90(ina 24 TIDIA - Ae Verso: 1.0 Orientaes para Construo de Ferramentas para o TIDIA Ae 2.0 Data: 310!200" String get,ccess)rl(): a#essa a D%C para a#essar ser<ios no ser<idorQ String get,ccessPat+(): a#essa o #aminIo do ser<io de a#esso no ser<idor re$ati<o a D%C )ase para o ser<idorQ String getPortal)rl(): a#essa a D%C para o ser<io de porta$ do ser<idorQ String get-ool)rl(): a#essa a D%C para o ser<io de en#aminIamento do ser<idorQ String get.ate/aySite$d(): a#essa o id do site para o (ateFa@ p7)$i#oQ String get#ogged0t)rl(); a#essa a D%C para usar #omo redire#ionamento 'uando o usu0rio e&etuar $o(inQ String get)ser*ome)rl(): acessa a D%C para o diret+rio Iome do usu0rioQ String getSakai*omePat+(): a#essa o #aminIo para o Hsa=ai IomeJ no ser<idor de ap$i#aoQ String getString(String name) : a#essa a$(um <a$or nomeado de uma #on&i(urao #omo uma ,trin(Q String getString(String name, String d1lt) : a#essa a$(um <a$or nomeado de uma #on&i(urao #omo uma ,trin(Q ,tring23 getStrings(String name) : a#essa a$(um <a$or nomeado de uma #on&i(urao #omo um arra@ de ,trin(sQ int get$nt(String name, int d1lt) : a#essa a$(um <a$ue nomeado de #on&i(urao #omo um intQ !oolean get4oolean(String name, !oolean d1lt) : a#essa a$(um <a$ue nomeado de #on&i(urao #omo um )oo$eanQ #ist get-ool0rder(String category) : a#essa a $ista de ids de &erramentas desta #ate(oriaQ #ist get-oolsRe5ired(String category) : a#essa a $ista de de ids de &erramentas 'ue so re'ueridas por esta #ate(oriaQ #ist get'e1alt-ools(String category> : a#essa a $ista de ids de &erramentas 'ue so se$e#ionadas por padro para esta #ate(oriaQ #ist6String7 get-oolCategories(String category); a#essa a $ista de #ate(orias de &erramentas para um dado tipo de siteQ Map6String, #ist6String77 get-oolCategories,sMap(String category): a#essa um map de #ate(orias de ids de &erramentas para este tipo de siteQ Map6String, String7 get-ool-oCategoryMap(String category) : a#essa um map de #ate(orias de ides de &erramentas para este tipo de site. 1.18.1.2 Collaborative Tools 1.1!.1.2.1 Too$Aana(er Inter&a#e #om o pape$ de re(istrar as &erramentas dispon;<eis na insta$ao do ,a=ai. Tam)3m 3 usado para des#o)rir #oisas #omo o $o#a$ do usu0rio atua$ 8,ite- et#> e in&ormaes so)re as &erramentas do ,a=ai. A A9I Too$Aana(er possui os se(uintes m3todos: void register(-ool tool) : adi#iona a &erramenta ao re(istroQ Con&iden#ia$ FA9.,9- 90(ina 2" TIDIA - Ae Verso: 1.0 Orientaes para Construo de Ferramentas para o TIDIA Ae 2.0 Data: 310!200" void register('ocment tool8ml) : adi#iona o do#umento XAC ao re(istro- usando a &erramenta de es'uema XACQ void register(9ile tool8ml9ile) : adi#iona as &erramentas de&inidas no ar'ui<o XAC ao re(istroQ <oid re(ister8Input,tream too$Xm$,tream> : adi#iona as &erramentas no stream ao re(istroQ -ool get-ool(String id) : )us#a uma &erramenta no re(istro por meio do seu idQ Set 1ind-ools(Set categories, Set key/ords) : )us#a um #on5unto de &erramentas se(undo as #ate(orias e as palavras:c+aves indicadas; Too$ (etCurrentToo$8>: a#essa a &erramenta asso#iada #om a re'uisiotIread #orrenteQ Placement getCrrentPlacement(): a#essa a &erramenta do tipo #lacement asso#iada #om a re'uisiotIread #orrente. 9ara a#essar a Too$Aana(er pode-se uti$i?ar o &rameFor= ,prin( para in5etar o ser<io. 9ara adi#ionar um )ean do tipo Too$Aana(er 3 ne#ess0ria a se(uinte entrada: <bean id="org.sakaiproject.yourapp.logic.;our6pp.lass" class="org.sakaiproject.yourapp.logic.impl.;our6pp.lass,mpl" <property name="tool&anager" re+="org.sakaiproject.tool.api.4ool&anager" % <%bean ,our-ppClassImpl 3 a #$asse #on#reta 'ue imp$ementa a inter&a#e Too$Aana(er 'ue possui um atri)uto #Iamado too$Aana(er 'ue- por sua <e?- 3 do tipo Too$Aana(er. Dessa &orma- 3 poss;<e$ a#essar a Too$Aana(er #om o m3todo get-oolManager(). 1.1!.1.2.2 A#ti<eToo$Aana(er Inter&a#e 'ue estende Too$Aana(er e introdu? suporte f ati<idades espe#;&i#as de ,er<$ets. Os m3todos adi#ionais so: #ist6-ool7 parse-ools(9ile tool8ml9ile) : &a? o parse de um ar'ui<o de re(istro de &erramentas e retorna uma $ista de &erramentas re(istradasQ #ist6-ool7 parse-ools('ocment tool8ml) : &a? o parse de um ar'ui<o de re(istro e retorna uma $ista de &erramentas re(istradasQ #ist6-ool7 parse-ools($nptStream tool8mlStream) : &a? o parse de um ar'ui<o e retorna uma $ista de &erramentas re(istradasQ ,ctive-ool get,ctive-ool(String id) : )us#a uma &erramenta no re(istro #om o id indi#adoQ String get#ocali%ed-oolProperty(String tool$d, String key) : retorna a propriedade $o#a$i?ada da &erramenta. 1.1!.1.2.3 ,essionAana(er Con&iden#ia$ FA9.,9- 90(ina 2! TIDIA - Ae Verso: 1.0 Orientaes para Construo de Ferramentas para o TIDIA Ae 2.0 Data: 310!200" .sta inter&a#e permite o a#esso fs &erramentas espe#;&i#as para #ada usu0rio por meio de Ittp da A9I dos ,er<$ets. O (eren#iamento de sesso pode ser &eito #om a in5eo do ser<io no ,prin(. 9ara adi#ionar um )ean ,essionAana(er do tipo _ourAppC$assImp$ 3 ne#ess0ria a se(uinte entrada: <bean id="org.sakaiproject.yourapp.logic.;our6pp.lass" class="org.sakaiproject.yourapp.logic.impl.;our6pp.lass,mpl" <property name="session&anager" re+="org.sakaiproject.tool.api.Session&anager" % <%bean .m se(uida 3 ne#ess0rio #riar um atri)uto do tipo ,essionAana(er no )ean da se(uinte maneira: private Session&anager session&anager = org.sakaiproject.tool.cover.Session&anager.get,nstance12/ public void setSession&anager1Session&anager session&anager2 " this.session&anager = session&anager/ # A A9I do ,essionAana(er possui <0rios m3todos- $istados a se(uir: Session getSession(String session$d) : a#essa a sesso #onIe#ida #om o id in&ormadoQ Session startSession(): ini#ia uma no<a sessoQ Session startSession(String id) : ini#ia uma no<a seo usando o id in&ormadoQ Session getCrrentSession(): a#essa a sesso asso#iada f re'uisiotIread #orrenteQ String getCrrentSession)ser$d(): a#essa o id do usu0rio da sesso #orrenteQ -oolSession getCrrent-oolSession(): a#essa a sesso da &erramenta asso#iada #om a re'uisiotIread #orrenteQ void setCrrentSession(Session s) : de&ine a sesso in&ormada #omo a sesso #orrenteQ void setCrrent-oolSession(-oolSession s) : de&ine a sesso #omo a sesso de &erramenta atua$ para a re'uisiotIreadQ int get,ctive)serCont(int secs) : retorna o n7mero de usu0rios #om sesses re#entemente ati<as de a#ordo #om a 'uantidade de se(undos in&ormada. 1.1!.1.2.* Too$ A inter&a#e Too$ mode$a a inter&a#e do usu0rio para a produo de &erramentas. Os seus atri)utos so imut0<eis. A A9I de Too$ possui <0rios m3todos- $istados a se(uir: String get$d(): a#essa o id da &erramentaQ Con&iden#ia$ FA9.,9- 90(ina 26 TIDIA - Ae Verso: 1.0 Orientaes para Construo de Ferramentas para o TIDIA Ae 2.0 Data: 310!200" String get*ome(): a#essa o $o#a$ da &erramentaQ String get-itle(): a#essa o t;tu$o da &erramentaQ String get'escription(): a#essa a des#rio da &erramentaQ Properties getRegisteredCon1ig(): a#essa as propriedade de #on&i(urao de re(istro de uma &erramentaQ Properties getMta!leCon1ig(): a#essa as propriedades de #on&i(urao 'ue podem ser #on&i(uradas no re(istro da &erramentaQ Properties get9inalCon1ig(): a#essa as propriedade de #on&i(urao 'ue so #onstantesQ Set get;ey/ords(): a#essa as pa$a<ras-#Ia<e re(istradas para a &erramentaQ Set getCategories(): a#essa as #ate(orias re(istradas para a &erramentaQ 1.1!.1.2./ A#ti<eToo$ .sta inter&a#e 3 uma eNtenso de Too$ 'ue introdu? ser<ios espe#;&i#os a ,er<$ets. ,ua A9I possui <0rios m3todos $istados a se(uir: void 1or/ard(*ttpServletRe5est re5, *ttpServletResponse res, Placement placement, String toolConte"t, String toolPat+) t+ro/s -ool&"ception: in<o#a a &erramenta para manipu$ar #omp$etamente a re'uisioQ void inclde(*ttpServletRe5est re5, *ttpServletResponse res, Placement placement, String toolConte"t, String toolPat+) t+ro/s -ool&"ception: in<o#a a &erramenta para manipu$ar a re'uisio produ?indo um &ra(mentoQ void +elp(*ttpServletRe5est re5, *ttpServletResponse res, String toolConte"t, String toolPat+) t+ro/s -ool&"ception: in<o#a a &erramenta para manipu$ar #omp$etamente a re'uisio. 1.1!.1.2.4 ,ession .sta inter&a#e mode$a uma sesso para usu0rios &inais no ,a=ai para a A9I de ,er<$ets. A A9I de ,ession possui os se(uintes m3todos: 0!<ect get,ttri!te(String name) : retorna o o)5eto asso#iado #om o nome in&ormado na sessoQ &nmeration get,ttri!te(ames(): retorna um .numeration de ,trin(s #ontendo os nomes de todos os o)5etos asso#iados f sessoQ long getCreation-ime(): retorna a Iora em 'ue a sesso &oi #riadaQ String get$d(): retorna a strin( #ontendo o id da sessoQ long get#ast,ccessed-ime(): retorna a 7$tima Iora 'ue o #$iente en<iou uma re'uisio asso#iada a sessoQ int getMa"$nactive$nterval(): retorna o inter<a$o m0Nimo de tempo em se(undos 'ue o ,a=ai mant3m a sesso a)ertaQ -oolSession get-oolSession(String placement$d) : )us#a ou #ria uma sesso de &erramenta #om o id in&ormadoQ Conte"tSession getConte"tSession(String conte"t$d) : )us#a ou #ria uma sesso de #onteNto para o id do #onteNto in&ormadoQ Con&iden#ia$ FA9.,9- 90(ina 30 TIDIA - Ae Verso: 1.0 Orientaes para Construo de Ferramentas para o TIDIA Ae 2.0 Data: 310!200" String get)ser&id(): retorna o id da or(ani?ao do usu0rio asso#iado #om a sessoQ String get)ser$d(): retorna o id do usu0rio autenti#ado na sessoQ void invalidate(): destr+i a sesso #orrenteQ void clear(): $impa os atri)utos da sessoQ void clear&"cept(Collection names) : $impa os atri)utos da sesso- menos a'ue$e nomeados na #o$eoQ void remove,ttri!te(String name) : remo<e o o)5eto #om o nome espe#i&i#adoQ void set,ctive(): mar#a a sesso #omo ainda ati<aQ void set,ttri!te(String name, 0!<ect vale) : asso#ia um o)5eto ao nome espe#i&i#ado na sessoQ void setMa"$nactive$nterval(int interval) : de&ine o inter<a$o m0Nimo para in<a$idar uma sessoQ void set)ser&id(String eid) : de&ine o id da or(ani?ao asso#iado a sessoQ void set)ser$d(String id) : de&ine o usu0rio asso#iado #om a sesso. 1.1!.1.2."ConteNt,ession .sta inter&a#e mode$a uma sesso 1ttp para o usu0rio &ina$ em um #onteNto #omo um ,er<$etConteNt. A A9I do ConteNt,ession possui <0rios m3todos- $istados a se(uir: void clear,ttri!tes(); remo<e todos os atri)utos da sessoQ 0!<ect get,ttri!te(String name); retorna o o)5eto asso#iado #om o nome espe#i&i#ado da sessoQ &nmeration get,ttri!te(ames(); retorna um .numeration de ,trin(s #ontendo os nomes de todos os o)5etos asso#iados a sessoQ long getCreation-ime(); retorna a Iora em 'ue a sesso &oi #riadaQ String get$d(); retorna a ,trin( #ontendo o id asso#iado a sessoQ long get#ast,ccessed-ime(); retorna a 7$tima Iora 'ue o #$iente en<iou uma re'uisio asso#iada a sessoQ String getConte"t$d(); retorna a ,trin( #ontendo o identi&i#ador de #onteNto para a sessoQ String get)ser&id(); retorna o id do usu0rio asso#iado a sessoQ String get)ser$d(); retorna o usu0rio autenti#ado #om a sessoQ void remove,ttri!te(String name); remo<e o o)5eto asso#iado #om o nome espe#i&i#ado da sessoQ void set,ttri!te(String name, 0!<ect vale); asso#ia um o)5eto f sesso usando o nome espe#i&i#ado. 1.1!.1.2.!Too$,ession .sta inter&a#e mode$a uma &erramenta para usu0rios &inais espe#;&i#as para uso em uma sesso. A A9I da inter&a#e in#$ui <0rios m3todos- $istados a se(uir: g void clear,ttri!tes(): remo<e todos os atri)utos da sessoQ Con&iden#ia$ FA9.,9- 90(ina 31 TIDIA - Ae Verso: 1.0 Orientaes para Construo de Ferramentas para o TIDIA Ae 2.0 Data: 310!200" g 0!<ect get,ttri!te(String name) : retorna o o)5eto asso#iado #om um nome espe#i&i#ado na sessoQ g &nmeration get,ttri!te(ames(): retorna um .numeration de ,trin( #ontendo os nomes de todos os o)5etos asso#iados a sessoQ g long getCreation-ime(): retorna a Iora em 'ue a sesso &oi #riadaQ g String get$d(): retorna uma ,trin( #ontendo o identi&i#ador 7ni#o da sessoQ g long get#ast,ccessed-ime(): retorna a 7$tima <e? 'ue um #$iente en<iou uma re'uisio para uma &erramenta de sessoQ g String getPlacement$d(): retorna uma ,trin( #ontendo o identi&i#ador da &erramenta da sessoQ g String get)ser&id(): retorna o id do usu0rio asso#iado #om a sessoQ g String get)ser$d(): retorna o usu0rio autenti#ado asso#iado #om a sessoQ g void remove,ttri!te(String name) : remo<e o o)5etos asso#iado ao nome espe#i&i#ado na sessoQ g void set,ttri!te(String name, 0!<ect vale) : asso#ia um o)5eto usando o nome espe#i&i#ado a sesso. 1.1!.1.2.6,essionOindin(Too$ .sta inter&a#e representa os e<entos 'ue so en<iados aos o)5etos 'uando estes so asso#iados a sesso ou desasso#iados de uma sesso. A A9I da inter&a#e in#$ui <0rios m3todos- $istados a se(uir: String get(ame(): retorna o nome ao 'ua$ o atri)uto est0 asso#iado ou desasso#iado da sessoQ = Session getSession(): retorna a sesso 'ue asso#ia ou desasso#ia o <a$or do atri)utoQ 0!<ect get>ale(): retorna o <a$or do atri)uto 'ue &oi adi#ionado- remo<ido ou su)stitu;do. 1.1!.1.2.10,essionOindin(Cistener .sta inter&a#e #ausa f um o)5eto a noti&i#ao de sua asso#iaodesasso#iao em uma sesso. A A9I da inter&a#e in#$ui <0rios m3todos- $istados a se(uir: void vale4ond(Session4inding&vent event) : noti&i#a o o)5eto 'ue est0 sendo asso#iadoQ void vale)n!ond(Session4inding&vent event) : noti&i#a o o)5eto 'ue est0 sendo desasso#iado da sesso. 1.1!.1.2.11%e'uestFi$ter Eo possui do#umentao dispon;<e$. 1.18.1.3 Database 1.1!.1.3.1,BC,er<i#e O ser<io ,'$,er<i#e pro<: a#esso a um poo$ de #oneNes para )ase de dados ,BC. Os o)5etos do tipo Conne#tion (eren#iados por esse ser<io so o)5etos 5a<a.s'$.Conne#tion padro. A se(uir so des#ritos os m3todos dessa inter&a#e: Con&iden#ia$ FA9.,9- 90(ina 32 TIDIA - Ae Verso: 1.0 Orientaes para Construo de Ferramentas para o TIDIA Ae 2.0 Data: 310!200" ,onne%'ion +orro0,onne%'ion(# '1ro0- S2&Ex%ep'ion: A#essa um o)5eto Conne#tion dispon;<e$ ou re#entemente #riado a partir do poo$ de&au$t. 9oder0 esperar um tempo at3 'ue um este5a dispon;<e$. %etorna o o)5eto Conne#tion e (era uma eN#eo #aso a #oneNo no possa ser entre(ue. void re'urn,onne%'ion(,onne%'ion %onn#: Ci)era uma #oneNo a )ase de dados ,e o parhmetro da #oneNo 3 nu$$- 3 i(norada. +oolean 'ran-a%'(.unna+le %all+a%k, S'ring 'ag#: .Ne#uta #+di(os em uma transao. O #+di(o 3 #a$$)a#=. Bua$'uer #Iamada para esse ser<io ser0 &eita dentro da transao se e$as no &orne#erem sua pr+pria #oneNo. ,e a transao &a$Ia de<ido a um deadloc@- sero &eitas tentati<as de re#uper0-$a. %etorna true #aso tudo o#orra norma$mente. Mera um ,'$,er<i#eDead$o#=.N#eption o m3todo &or en#errado de<ido a um dead$o#=- e tam)3m (erar0 um ,'$,er<i#eDni'ueVio$ation. &i-' d+.ead(S'ring -3l#: C: um #ampo da )ase de dados- a partir de m7$tip$os re(istros- retornado #om um arra@ de ,trin(s- um por re(istro. %etorna uma $ista de ,trin(s do #ampo de um re(istro en#ontrado- ou <a?io se nenIum &oi en#ontrado. &i-' d+.ead(S'ring -3l, *+)e%'45 field-, S3l.eader reader#: 9ro#essa uma #onsu$ta- preen#Iendo os #ampos- e retorna os resu$tados #omo um Cist- um por #ampo $ido. ,e o $eitor 3 &orne#ido- ser0 #Iamado para #ada re(istro para preparar o O)5e#t 'ue ser0 #o$o#ado na Cist. 9or outro $ado- o primeiro #ampo de #ada re(istro- #omo um ,trin(- ser0 #o$o#ado na $ista. %etorna a $ista de e$ementos $idos- um por re(istro. &i-' d+.ead(,onne%'ion %onn, S'ring -3l, *+)e%'45 field-, S3l.eader reader#: 9ro#essa uma #onsu$ta- preen#Iendo os #ampos- e retorna os resu$tados #omo um Cist- um por #ampo $ido. ,e o $eitor 3 &orne#ido- ser0 #Iamado para #ada re(istro para preparar o O)5e#t 'ue ser0 #o$o#ado na Cist. 9or outro $ado- o primeiro #ampo de #ada re(istro- #omo um ,trin(- ser0 #o$o#ado na $ista. %etorna a $ista de e$ementos $idos- um por re(istro. void d+.eadBinar6(S'ring -3l, *+)e%'45 field-, +6'e45 value#: C: um #ampo da )ase de dados- de m7$tip$os re(istros- #on#atenando os <a$ores )in0rios no parhmetro <a$ue. void d+.eadBinar6(,onne%'ion %onn, S'ring -3l, *+)e%'45 field-, +6'e45 value#: C: um #ampo da )ase de dados- de m7$tip$os re(istros- #on#atenando os <a$ores )in0rios no parhmetro <a$ue. (npu'S'ream d+.eadBinar6(S'ring -3l, *+)e%'45 field-, +oolean +ig# '1ro0- Server*verloadEx%ep'ion: C: um #ampo re(istro da )ase de dados- retornando o stream do resu$tado re(istro #ampo. O stream mant3m o #oneNo a)erta Z ento de<e ser &e#Iada ou &ina$i?ada rapidamente. Cana uma ,er<erO<er$oad.N#eption- se a $eitura no pode ser #omp$etada de<ida a &a$ta de #oneNes $i<res 8se a espera 3 &a$sa>. &ong d+(n-er'(,onne%'ion %aller,onne%'ion, S'ring -3l, *+)e%'45 field-, S'ring au'o,olumn#: .Ne#uta uma #onsu$ta HinsertJ s'$- retornando um poss;<e$ #ampo autoupdate #om o <a$or Con(. O nome do #ampo da )ase de dados 'ue possuir0 um autoupdate Z ser0 retornado o <a$or uti$i?ado 8use nu$$ para desa)i$itar esse re#urso>. %etorna o <a$or autoupdate- ou nu$$. &ong d+(n-er'(,onne%'ion %aller,onne%'ion, S'ring -3l, *+)e%'45 field-, S'ring au'o,olumn, (npu'S'ream la-', in' la-'&eng'1#: .Ne#uta uma #onsu$ta HinsertJ s'$- retornando um poss;<e$ #ampo autoupdate #om <a$ro Con(- #om um parametro stream adi#iona$. %etorna o <a$or do autoupdate ou nu$$. +oolean d+7ri'e(S'ring -3l#: .Ne#uta uma #onsu$ta HFriteJ s'$. %etorna true se eNe#utada #om su#esso- &a$so #aso #ontr0rio. +oolean d+7ri'e(S'ring -3l, S'ring var#: .Ne#ute uma #onsu$ta HFriteJ no s'$ Z sem resposta. Dma #ampo Con( 3 #on&i(urado para HbJ preen#Ie-o #om o parhmetro <ar. %etorna true se eNe#utado #om su#esso- &a$so #aso #ontr0rio. Con&iden#ia$ FA9.,9- 90(ina 33 TIDIA - Ae Verso: 1.0 Orientaes para Construo de Ferramentas para o TIDIA Ae 2.0 Data: 310!200" +oolean d+7ri'eBinar6(S'ring -3l, *+)e%'45 field-, +6'e45 var, in' off-e', in' len#: .Ne#ute uma #onsu$ta HFriteJ no s'$ Z sem resposta. Dma #ampo Con( 3 #on&i(urado para HbJ preen#Ie-o #om o parhmetro <ar. %etorna true se eNe#utado #om su#esso- &a$so #aso #ontr0rio. +oolean d+7ri'e(S'ring -3l, *+)e%'45 field-#: .Ne#ute uma #onsu$ta HFriteJ no s'$ Z sem resposta. Dma #ampo Con( 3 #on&i(urado para HbJ preen#Ie-o #om o parhmetro <ar. %etorna true se eNe#utado #om su#esso- &a$so #aso #ontr0rio. +oolean d+7ri'e(,onne%'ion %onne%'ion, S'ring -3l, *+)e%'45 field-#: .Ne#ute uma #onsu$ta HFriteJ no s'$ Z sem resposta. Dma #ampo Con( 3 #on&i(urado para HbJ preen#Ie-o #om o parhmetro <ar. %etorna true se eNe#utado #om su#esso- &a$so no #ontr0rio. +oolean d+7ri'eFail2uie'(,onne%'ion %onne%'ion, S'ring -3l, *+)e%'45 field-#: .Ne#uta uma #onsu$ta HFriteJ s'$ Z sem resposta- uti$i?ando um #on5unto de #ampos a partir de um arra@ e uma #oneNo dados- no re(istrando erros em #aso de &a$Ia. %etorna true se eNe#utada #om su#esso- &a$so #aso #ontr0rio. +oolean d+7ri'e(S'ring -3l, *+)e%'45 field-, S'ring la-'Field#: .Ne#uta uma #onsu$ta HFriteJ s'$ Z sem resposta- uti$i?ando um #on5unto de #ampos a partir de um arra@ mais a$(uns parametros. %etorna true se eNe#utado #om su#esso- &a$so #aso #ontr0rio. void d+.eadBlo+And8pda'e(S'ring -3l, +6'e45 %on'en'#: C: um #ampo OCOO a partir da )ase de dados de um re(istro- e atua$i?a seus )@tes #om o parhmetro #ontent. ,onne%'ion d+.ead&o%k(S'ring -3l, S'ringBuffer field#: C: um #ampo a partir da )ase de dados- de um re(istro- e retorna o <a$or en#ontrado- e tra<a para update. %etorna a #oneNo mantendo a tra<a. void d+8pda'e,ommi'(S'ring -3l, *+)e%'45 field-, S'ring var, ,onne%'ion %onn#: %ea$i?a o #ommit do update tra<ado na #oneNo espe#i&i#ada. void d+,an%el(,onne%'ion %onn#: Can#e$a o update 'ue &oi tra<ado na #oneNo espe#i&i#ada. 9regorian,alendar ge',al(#: A#essa o #a$end0rio usado para pro#essar o)5etos do tipo Time para ,'$. %etorna o #a$end0rio usado no pro#essamento de o)5etos Time para ,'$. S'ring ge':endor(#: %etorna uma strin( indi#ando o &orne#edor da )ase de dados Hora#$eJ- Hm@s'$J ou HIs'$d)J. void ddl(,la--&oader loader, S'ring re-our%e#: Carre(a e eNe#uta o ar'ui<o nomeado usando um #$ass $oader dados- #omo um dd$ #Ie#= #reate. A primeira $inIa no #oment0rio 8WW> ser0 eNe#utada e- se eNe#utada #om su#esso- todas $inIas no #oment0rio sero eNe#utadas. De#$araes ,BC de<em estar em uma 7ni#a $inIa- e de<e possuir WQW #omo terminadores. &ong ge'Nex'Se3uen%e(S'ring 'a+leName, ,onne%'ion %onn#: %e#upera o pr+Nimo <a$or a partir de uma se'd:n#ia- para as te#no$o(ias 'ue suportam se'd:n#ias. 9ara outras- retorna nu$$. %etorna um Inte(er 'ue 3 o pr+Nimo e$emento a se'd:n#ia. S'ring ge'Boolean,on-'an'(+oolean value#: %e#upera a de#$arao ,BC para um Ooo$ean ou um #ampo Oit para esse <a$or. 1.1!.1.3.2,BC%eader ,'$%eader 3 uma inter&a#e para o)5etos 'ue podem $er e$ementos de uma re'uisio ,'$ de um %esu$t,et *+)e%' readS3l.e-ul'.e%ord(.e-ul'Se' re-ul'#: C: #ampos a partir de um %esu$t,et #riando um o)5eto 'ue 3 retornado. Con&iden#ia$ FA9.,9- 90(ina 3* TIDIA - Ae Verso: 1.0 Orientaes para Construo de Ferramentas para o TIDIA Ae 2.0 Data: 310!200" 1.18.1.4Server Push 1.1!.1.*.1Courier,er<i#e Courier,er<i#e 3 a inter&a#e para um ser<io ,a=ai no 'ua$ 3 poss;<e$ empurrar mensa(ens a partir do #omponentes do ser<idor ,a=ai para a inter&a#e do usu0rio no na<e(ador. P usado (era$mente por uma &erramenta em parti#u$ar para atua$i?0-$a em resposta a uma mudana posta pe$o ser<idor. Dm endereo identi&i#a uma 5ane$a do #$iente em parti#u$ar: &undem-se a sesso Dsa(e- o endereo das 5ane$as do porta$ e possi<e$mente o id da &erramenta 8para 5ane$as &$utuantes de &erramentas>. Dm o)5eto De$i<er@ #aptura o endereo- o 1TAC .$ement Id en<o$<ido- e 'uais'uer outros deta$Ies de um tipo em parti#u$ar de entre(a. 10 uma strin( de&inida na inter&a#e 'ue ser<e para en#ontrar o respe#ti<o ser<io no ,er<i#eAana(er: static +inal String S<=>,.<?@6&< = .ourierService.class.get@ame12/ A)aiNo se(uem os m3todos da inter&a#e: void deliver(Deliver6 deliver6#: .n&i$eira um entre(a para uma 5ane$a #$iente identi&i#ada em um o)5eto De$i<er@. A &ormato da entre(a 3 determinada pe$o tipo de o)5eto De$i<er@ en<iado. void %lear(S'ring addre--, S'ring elemen'(d#: Cimpa 'ua$'uer re'uisio de entre(a pendente para uma 5ane$a #$iente para o e$emento passado pe$o parhmetro e$ementId. void %lear(S'ring addre--#: Cimpa 'ua$'uer re'uisio de entre(a pendente para a sesso da 5ane$a #$iente. &i-' ge'Deliverie-(S'ring addre--#: A#essa e desin&i$eira as entre(as en&i$eiradas para uma 5ane$a #$iente em parti#u$ar. %etorna a $ista de o)5eto De$i<er@ endereadas para a sesso da 5ane$a #$iente. !oolean +as'eliveries(String address): Veri&i#a a eNist:n#ia de 'uais'uer entre(as en&i$eiradas para uma sesso de uma 5ane$a #$iente. %etorna true se I0 entre(as para a 5ane$a #$iente- &a$so no #aso #ontr0rio. 1.1!.1.*.2De$i<er@ De$i<er@ 3 a inter&a#e #entra$ para e$ementos en<iados para o ser<io Courier 'ue representam <0rios arran5os de entre(a para 5ane$as #$ientes. Address 3 o endereo de uma 5ane$a #$iente. ,e(ue os m3todos da inter&a#e: g <oid setAddress8,trin( address>: Con&i(ura o endereo de entre(a. g ,trin( (etAddress8>: A#essa o endereo de entre(a. %etorna o endereo de entre(a. g <oid set.$ement8,trin( id>: Con&i(ura o 1TAC .$ement Id 'ue 3 re&eren#iado na entre(a. g ,trin( (et.$ement8>: A#essa o 1TAC .$ement Id 'ue 3 re&eren#iado nesse entre(a. %etorna o 1TAC .$ement Id g <oid a#t8>: .Ne#uta 'ua$'uer ao prede&inida. Eota: 3 eNe#utada na mesma sesso na 'ua$ est0 sendo entre(ue. g ,trin( #ompose8>: Compe uma mensa(em 5a<as#ript para entre(a na 5ane$a #$iente do na<e(ador. %etorna a mensa(em 5a<as#ript para en<iar f 5ane$a #$iente do na<e(ador. 1.1!.1.*.3O)ser<in( Courier O)ser<in(Courier 3 um o)ser<ador 'ue usa o Courier,er<i#e para noti&i#ar 'uando I0 mudanas. Con&iden#ia$ FA9.,9- 90(ina 3/ TIDIA - Ae Verso: 1.0 Orientaes para Construo de Ferramentas para o TIDIA Ae 2.0 Data: 310!200" +oolean %1e%k(*+)e%' arg#: Veri&i#a se 'ueremos pro#essar ou i(norar um update passado pe$o parhmetro ar(. %etorna true para #ontinuar- &a$so para en#errar a operao. void di-a+le(#: Desa)i$ita. void ena+le(#: 1a)i$ita. S'ring ge'Deliver6(d(#: %etorna o id de entre(a. S'ring ge'Elemen'(d(#: %etorna o id do e$emento. +oolean ge'Ena+led(#: %etorna o status de Ia)i$itao. S'ring ge'&o%a'ion(#: %etorna a $o#a$i?ao do 'ue o o)ser<ador est0 o)ser<ando. void )u-'Delivered(#: A#eita noti&i#ao 'ue o e$emento a#a)ou de ser entre(ue. ,e I0 re'uisies pendentes de entre(a- e$as so ?eradas. void -e'Deliver6(d(S'ring id#: Con&i(ura o id de entre(a. <oid set.$ementId8,trin( id>: Con&i(ura o e$emento de entre(a. 1.18.1.5Email ut 1.1!.1./.1Di(est Di(est arma?ena #on5untos de mensa(ens para um dado usu0rio 8id>. A se(uir os m3todos dispon;<eis nessa #$asse. S'ring ge'(d(#: A#essa o id do usu0rio para esta di(est. %etorna o id do usu0rio. &i-' ge'Me--age-(;ime period#: A#essa a $ista de mensa(ens 8Di(estAessa(e>- por um per;odo. %etorna a $ista de mensa(ens 8ta$<e? <a?ia>. &i-' ge'/eriod-(#: A#essa a $ista de de per;odos 8,trin(- Time9eriod strin(>. %etorna a $ista de per;odos 8,trin(- Time9eriod strin(>. 1.1!.1./.2Di(estAessa(e Di(estAessa(e 3 uma mensa(em em uma di(est. A se(uir esto $istados os m3todos da inter&a#e: S'ring ge';o(#: A#essa o HparaJ 8user id> da mensa(em. %etorna o HparaJ 8to> 8user id> da mensa(em. void -e';o(S'ring 'o#: Con&i(ura o HparaJ 8user id> da mensa(em. S'ring ge'Su+)e%'(#: A#essa o assunto da mensa(em. %etorna o assunto da mensa(em. void -e'Su+)e%'(S'ring -u+)e%'#: Con&i(ura o assunto da mensa(em S'ring ge'Bod6(#: A#essa o #orpo da mensa(em. %etorna o #orpo da mensa(em. void -e'Bod6(S'ring +od6#: Con&i(ura o #orpo da mensa(em. 1.1!.1./.3Di(est,er<i#e O Di(est,er<i#e #o$e#iona #on5untos de mensa(ens para di&erentes usu0rios- e en<ia-as periodi#amente. Conte7do est0ti#o da inter&a#e: .ssa strin( pode ser usada para en#ontrar o ser<io no ,er<i#eAana(er. -'a'i% final S'ring SE.:(,E<NAME = Dige-'Servi%e$%la--$ge'Name(#> Con&iden#ia$ FA9.,9- 90(ina 34 TIDIA - Ae Verso: 1.0 Orientaes para Construo de Ferramentas para o TIDIA Ae 2.0 Data: 310!200" .ssa strin( ini#ia as re&er:n#ias para re#ursos nesse ser<io. -'a'i% final S'ring .EFE.EN,E<.**; = ?dige-'?> .<ento para adi#ionar um di(est -'a'i% final S'ring SE,8.E<ADD<D(9ES; = ?dige-'$add?> .<ento para atua$i?ar um di(est -'a'i% final S'ring SE,8.E<ED(;<D(9ES; = ?dige-'$upd?> .<ento para remo<er um di(est -'a'i% final S'ring SE,8.E<.EM*:E<D(9ES; = ?dige-'$del?> A3todos da inter&a#e: Dige-' ge'Dige-'(S'ring id# '1ro0- (d8nu-edEx%ep'ion: A#essa uma di(est asso#iada #om o id passado por parhmetro. %etorna o o)5eto Di(est. Cana uma eN#eo IdDnused.N#eption se no I0 um o)5eto di(est #om o id passado no parhmetro. &i-' ge'Dige-'-(#: A#essa todos os o)5etos di(ests. %etorna a $ista de todos os di(ests de&inidos. void dige-'(S'ring 'o, S'ring Su+)e%', S'ring +od6#: Adi#iona uma no<a mensa(em para o di(est- #riando uma se ne#ess0rio. .ssa &unes retorna distanteQ o di(est ser0 adi#ionado to $o(o 'uanto poss;<e$. Dige-'Edi' add(S'ring id# '1ro0- (d8-edEx%ep'ion: Adi#iona uma no<a di(est #om a id passada pe$o parhmetro. De<em ser eNe#utados um #ommit8>- remo<e 8> ou #an#e$ 8> ap+s sua eNe#uo. %etorna um no<o o)5eto Di(est.dit para edio. Cana um IdDser.N#eption se esses di(est 50 eNistem. Dige-'Edi' edi'(S'ring id# '1ro0- (n8-eEx%ep'ion: %e#upera um o)5eto Di(est )$o'ueado para edio. 9ode ser um no<o. De<em ser eNe#utados um #ommit8>- #an#e$8> ou remo<e8> ap+s sua eNe#uo. %etorna um o)5eto Di(est.dit para edio. A eN#eo InDse.N#eption 3 $anada #aso o o)5eto di(est est0 )$o'ueado para outro usu0rio. void %ommi'(Dige-'Edi' edi'#: .n<ia as mudanas &eitas para um o)5eto Di(est.dit- e $i)era o )$o'ueio. O Di(est.dit 3 desa)i$itado- e no 3 uti$i?ado ap+s a #Iamada desse m3todo. void %an%el(Dige-'Edi' edi'#: Can#e$a as mudanas &eitas por um o)5eto Di(est.dit- $i)era o )$o'ueio. O Di(est.dit 3 desa)i$itado e no uti$i?ado ap+s a #Iamada desse m3todo. void remove(Dige-'Edi' edi'#: %emo<e o o)5eto Di(est.dit do parhmetro Z de<e ser tra<ado a partir de um edit8>. O Di(est.dit 3 desa)i$itado e no mais uti$i?ado ap+s a #Iamada f esse m3todo. 1.1!.1./.*.mai$,er<i#e .mai$,er<i#e 3 uma inter&a#e para en<io de emai$s. void -endMail((n'erne'Addre-- from, (n'erne'Addre--45 'o, S'ring -u+)e%', S'ring %on'en', (n'erne'Addre--45 1eader;o, (n'erne'Addre--45 repl6;o, &i-' addi'ional@eader-#: Cria e en<ia um mensa(em (en3ri#a de teNto AIA. para o endereo des#rito pe$o parhmetro to. void -end(S'ring fromS'r, S'ring 'oS'r, S'ring -u+)e%', S'ring %on'en', S'ring 1eader;oS'r, S'ring repl6;oS'r, &i-' addi'ional@eader-#: Cria e en<ia uma mensa(em (en3ri#a de teNto AIA. para o endereo des#rito pe$o parhmetro to. void -end;o8-er-(,olle%'ion u-er-, ,olle%'ion 1eader-, S'ring me--age#: .n<ia uma mensa(em simp$es para um #on5unto de usu0rios. Con&iden#ia$ FA9.,9- 90(ina 3" TIDIA - Ae Verso: 1.0 Orientaes para Construo de Ferramentas para o TIDIA Ae 2.0 Data: 310!200" 1.18.1.!Memor" Ca#he 1.1!.1.4.1Ca#Ie .sta inter&a#e representa um #a#Ie 'ue arma?ena o)5etos re&eren#iados por #Ia<es #om tamanIo $imitado. A A9I da inter&a#e in#$ui <0rios m3todos- $istados a se(uir: g void pt(0!<ect key, 0!<ect payload, int dration): arma?ena um o)5etoQ g void pt(0!<ect key, 0!<ect payload) : arma?ena um o)5eto 'ue no eNpira automati#amenteQ g !oolean contains;ey&"pired0r(ot(0!<ect key) : testa se uma entrada no #a#Ie eNpirou ou noQ g !oolean contains;ey(0!<ect key) : testa se uma entrada no #a#Ie eNpirouQ g void e"pire(0!<ect key) : eNpira um o)5etoQ g 0!<ect get&"pired0r(ot(0!<ect key) : )us#a uma entrada de um o)5eto no #a#IeQ g 0!<ect get(0!<ect key) : )us#a um o)5eto no #a#Ie se no eNpirouQ g #ist get,ll(): )us#a todas as entradas 'ue no eNpiraramQ g #ist get,ll(String pat+) : )us#a todos as entradas no eNpiradas no #aminIo espe#i&i#adoQ g #ist get;eys(): )us#a todas as #Ia<es do #a#IeQ g #ist get$ds(): )us#a todas as #Ia<es do #a#Ie de re#ursos modi&i#ados se(undo os seus IdsQ g void clear(): $impa todas as entradasQ g void remove(0!<ect key) : remo<e a entrada do #a#IeQ g void disa!le(): desa)i$ita o #a#IeQ g void ena!le(): Ia)i$ita o #a#IeQ g !oolean disa!led(): in&orma se o #a#Ie est0 desa)i$itadoQ g !oolean isComplete(): retorna se o #a#Ie est0 #omp$etoQ g void setComplete(): de&ine 'ue o #a#Ie est0 #omp$eto #ontendo todas as entradas poss;<eisQ g !oolean isComplete(String pat+) : retorna se o #a#Ie est0 #omp$eto para um n;<e$ de re&eren#ia na Iierar'uiaQ g void setComplete(String pat+) : de&ine o #a#Ie #omo #omp$etado para um n;<e$ de Iierar'uiaQ g void +old&vents(): de&ine o #a#Ie para arma?enar pro#essamentos em )at#IQ g void process&vents(): restaura o pro#essamento norma$ de e<entos do #a#IeQ g void destroy(): $impa todas as entradas e da um sIutdoFn no #a#IeQ g void attac+'erivedCac+e('erivedCac+e cac+e) : aneNa o Deri<edCa#Ie ao #a#Ie. 1.1!.1.4.2Ca#Ier P a inter&a#e usada por 'ua$'uer o)5eto 'ue 3 arma?enado no #a#Ie. A A9I da inter&a#e in#$ui <0rios m3todos- $istados a se(uir: Con&iden#ia$ FA9.,9- 90(ina 3! TIDIA - Ae Verso: 1.0 Orientaes para Construo de Ferramentas para o TIDIA Ae 2.0 Data: 310!200" void resetCac+e(): $impa tudo 'ue esti<er no #a#IeQ long getSi%e(): retorna o tamanIo do #a#Ier em termos de mem+ria usadaQ String get'escription(): retorna a des#ri#ao do #a#Ier. 1.1!.1.4.3Aemor@,er<i#e P a inter&a#e para o uso de mem+ria do ,a=ai. A A9I da inter&a#e in#$ui <0rios m3todos- $istados a se(uir: long get,vaila!leMemory(): retorna a 'uantidade de mem+ria dispon;<e$Q void resetCac+ers() t+ro/s MemoryPermission&"ception: #ausa perda de mem+ria a ser usada para a $impe?a de #a#Ies op#ionaisQ void registerCac+er(Cac+er cac+er) : re(istra #omo um usu0rio do #a#IeQ void nregisterCac+er(Cac+er cac+er) : retira o o)5eto do re(istro do #a#IeQ Cac+e ne/Cac+e(Cac+eRe1res+er re1res+er, String pattern) : #onstr+i um #a#IeQ Cac+e ne/*ardCac+e(Cac+eRe1res+er re1res+er, String pattern) : #onstr+i um #a#Ie espe#ia$Q Cac+e ne/Cac+e(Cac+eRe1res+er re1res+er, long sleep) : #onstr+i um #a#Ie e automati#amente atua$i?a o tratamentoQ Cac+e ne/*ardCac+e(Cac+eRe1res+er re1res+er, long sleep) : #onstr+i um #a#IeQ Cac+e ne/*ardCac+e(long sleep, String pattern) : #onstr+i um #a#IeQ Cac+e ne/Cac+e(): #onstr+i um #a#Ie #om tratamento autom0ti#oQ Cac+e ne/*ardCac+e(): #onstr+i um #a#Ie se tratamento autom0ti#oQ MltiRe1Cac+e ne/MltiRe1Cac+e(long sleep) : #onstr+i um #a#Ie mu$tire&eren#iadoQ String getStats(): retorna o status da mem+ria dos usu0rios. 1.18.1.$%tilities Dti$ities do ,a=ai di<idem-se em duas #ate(orias: ser<ios e #$asses. ,er<ios so de&inidos por inter&a#es e possuem um (eren#iador- en'uanto o resto no possui um (eren#iador- mas eNistem #omo #$asses iso$adas. 1.1!.1.".1.N#eptions Eo eNiste do#umentao dispon;<e$. 1.1!.1.".2Id Aana(er IdAana(er 3 a inter&a#e de tra)a$Io para a A9I do ,a=ai Id Aana(er (erar ids 7ni#os. A se(uir a assinatura do m3todo dessa #$asse. String create)id(): A$o#a um Id 7ni#o e o retorna. 1.1!.1.".3TIreadCo#a$Aana(er Con&iden#ia$ FA9.,9- 90(ina 36 TIDIA - Ae Verso: 1.0 Orientaes para Construo de Ferramentas para o TIDIA Ae 2.0 Data: 310!200" TIreadCo#a$Aana(er pro<: re(istro e des#o)erta de o)5etos #er#ados pe$a re'uisio atua$ de pro#essamento ou tIread. C$ientes 'uem possuem o)5etos podem #on&i(urar ou re#uper0-$os a sua <ontade Z O ,a=ai FrameFor= asse(ura 'ue todo o #on5unto de o)5etos perten#entes ao pro#essamento atua$ 3 $impo 'uando o pro#essamento da re'uisio 3 #omp$etado. void -e'(S'ring name, *+)e%' value#: Amarra esse o)5eto so) o nome passado por parhmetro #om a tIread atua$- ou remo<e-o se o <a$or 3 nu$$. void %lear(#: %emo<e todos os o)5etos amarrados para tIread atua$. *+)e%' ge'(S'ring name#: .n#ontra o o)5eto nomeado perten#ente a tIread atua$. %etorna o o)5eto dado pe$o parhmetro nome- ou nu$$ se no en#ontrado. 1.1!.1.".*Time,er<i#e O tipo strin( para essa Hap$i#aoJ: no de<e ser a$terado no de#orrer do tempo assim #omo pode ser arma?enado em <0rias partes de entidades persistentes. -'a'i% final S'ring A//&(,A;(*N<(D = ?-akai:'ime?> ii 9re&eren#es =e@ &or userWs time ?one i pu+li% -'a'i% final S'ring ;(MEA*NE<BEC = ?'imeDone?> ;ime ne0;ime(#: .e#upera um o)5eto time e retorna-o. ;ime ne0;ime9m'(S'ring value#: %e#upera um o)5eto time e o #on&i(ura a partir do <a$or da strin( passada no parhmetro em nosso &ormato. ;ime ne0;ime(long value#: %e#upera um o)5eto time- seta-o a partir do <a$or- passado por parhmetro- $on( em mi$isse(undos desde o <a$or Hepo#J. ;ime ne0;ime(9regorian,alendar %al#: %e#upera um o)5eto time- )aseado no tempo #on&i(urado no #a$endar. ;ime ne0;ime9m'(in' 6ear, in' mon'1, in' da6, in' 1our, in' minu'e, in' -e%ond, in' milli-e%ond#: %e#upera um o)5eto time- a partir de <a$ores inteiros indi<iduais- em medidas MAT. ;ime ne0;ime9m'(;imeBreakdo0n +reakdo0n#: %e#upera um o)5eto time e o #on&i(ura a partir da parhmetro )rea=doFn 8<a$ores Mmt>. ;ime ne0;ime&o%al(in' 6ear, in' mon'1, in' da6, in' 1our, in' minu'e, in' -e%ond, in' milli-e%ond#: %e#upera um o)5eto time e o #on&i(ura a partir de <a$ores inteiros indi<iduais- <a$ores $o#ais. ;ime ne0;ime&o%al(;imeBreakdo0n +reakdo0n#: %e#upera um o)5eto time e o #on&i(ura a partir do parhmetro )rea=doFn 8<a$ores $o#ais>. ;imeBreakdo0n ne0;imeBreakdo0n(in' 6ear, in' mon'1, in' da6, in' 1our, in' minu'e, in' -e%ond, in' milli-e%ond#: .e#upera um o)5eto TimeOrea=doFn e o #on&i(ura a partir de inteiros indi<iduais. ;ime.ange ne0;ime.ange(;ime -'ar', ;ime end, +oolean -'ar'(n%luded, +oolean end(n%luded#: %e#upera um o)5eto Time%an(e- a partir de partes. ;ime.ange ne0;ime.ange(S'ring value#: %e#upera um Time%an(e- a partir de nosso &ormato de strin(. ;ime.ange ne0;ime.ange(;ime -'ar'AndEnd#: %e#upera Time%an(e- a partir de um tempo simp$es. Con&iden#ia$ FA9.,9- 90(ina *0 TIDIA - Ae Verso: 1.0 Orientaes para Construo de Ferramentas para o TIDIA Ae 2.0 Data: 310!200" ;ime.ange ne0;ime.ange(long -'ar', long dura'ion#: %e#upera um Time%an(e- a partir de <a$ores $on( de in;#io e durao. ;ime.ange ne0;ime.ange(;ime -'ar', ;ime end#: %e#upera um Time%an(e- a partir de dois tempos- in#$usi<e. ;imeAone ge'&o%al;imeAone(#: A#essa o Timejone $o#a$ e a retorna. +oolean %lear&o%al;imeAone(S'ring u-er(d#: Cimpa ?ona de tempo $o#a$ para um usu0rio em espe#;&i#o. %etorna true em #aso de su#esso. 9regorian,alendar ge',alendar(;imeAone Done, in' 6ear, in' mon'1, in' da6, in' 1our, in' min, in' -e%, in' m-#: %e#upera um #a$end0rio e o #on&i(ura para a ?ona espe#i&i#ada no parhmetro e os demais <a$ores. +oolean differen'(;ime a, ;ime +#: Compara dois tempo por di&erenas. Am)os podem ser nu$$. %etorna true se os tempos so di&erentes ou retorna &a$so #aso #ontr0rio. 1.1!.1."./Co(Con&i(urationAana(er Co(Con&i(urationAana(er pro<: #ontro$e em tempo de eNe#uo so)re o a#esso a mensa(ens de $o((in(. +oolean -e'&og&evel(S'ring level, S'ring logger# '1ro0- &og/ermi--ionEx%ep'ion: Con&i(ura o n;<e$ de $o((in( para um $o((er. O n;<e$ de $o((in(: OFF k T%AC. k D.ODM k IEFO k LA%E k .%%O% k FATAC k ACC. %etorna true em #aso de su#esso- &a$so se no 8pode ser um n;<e$ ruim- ou um $o((er no eNiste>. Cana uma eN#eo #aso o usu0rio atua$ no tenIa permisso #on&i(urada para esse n;<e$ de $o(. !.!%.2In/ormationa- Ser+i)es Ver deta$Ies em 8,AGAI- 200"d>. 7. Inte0rao de /erramentas no )ompatL+eis )om o SaBai A mi(rao de a$(umas &erramentas do Tidia-A. para o ,a=ai pode ser )astante #omp$i#ada. Como o Tidia-A. #onta #om um ser<idor de ap$i#ao 22.. #omp$eto 82)oss>- a$(umas das suas &erramentas usam re#ursos 'ue no esto dispon;<eis no ser<idor de ap$i#ao do ,a=ai 8Tom#at>. A$(uns desses re#ursos podem ser os .2Os- 2A,- et#. .n'uanto os re#ursos ne#ess0rios para o &un#ionamento da &erramenta no so disponi)i$i?ados para a p$ata&orma ,a=ai- pode-se esta)e$e#er um #ana$ de #omuni#ao #om o Tidia-A.. Tendo em mente 'ue esta 3 uma medida pa$iati<a- pois as &erramentas de<em o)ede#er os #rit3rios adotados pe$a &ase II do pro5eto. 10 duas possi)i$idades de inte(rao: tra?er o ,a=ai para dentro do 2)ossQ ou &a?er #om 'ue as &erramentas ,a=ai no Tom#at #Iamem um ser<idor remoto 2)oss. Fi?emos uma tentati<a- #om a primeira possi)i$idade- )aseada nas in&ormaes &orne#idas pe$o Andr3 Constantino da ,i$<a do n7#$eo de Campinas. .ssa so$uo #onsiste na mi(rao do ,a=ai para o 2)oss. A id3ia 3 )astante interessante. Ter;amos um ser<idor de ap$i#ao #om as duas ap$i#aes- &a?endo #om 'ue e$as se #omuni'uem HinternamenteJ. Dm 7ni#o ser<idor de ap$i#ao seria usado para desen<o$<imento. 9or3m- a <erso do 2)oss 3 superior f <erso usada no Tidia- o 'ue pode tra?er a$(uns pro)$emas de #ompati)i$idade fs &erramentas. A$3m disso- no sa)emos #omo o ,a=ai se #omporta nesse no<o am)iente- pois no ti<emos tempo de rea$i?ar testes mais #omp$etos. Con&iden#ia$ FA9.,9- 90(ina *1 TIDIA - Ae Verso: 1.0 Orientaes para Construo de Ferramentas para o TIDIA Ae 2.0 Data: 310!200" !.!CDep-o3 do SaBai no 1,oss 9ara o dep$o@ do ,a=ai no 2)oss- 3 ne#ess0rio 'ue os passos 2.1 a 2.6 do t+pi#o de Con&i(urao de Am)iente tenIam sido rea$i?ados #om su#esso. Faa o doFn$oad do 2)oss *.2.1.MA: Ittp:$a)s.5)oss.#om5)ossasdoFn$oads O)s: 9ara a <erso 2.* do ,a=ai- 3 ne#ess0ria esta <erso do 2)oss. Isto pode #ausar a$(uma in#ompati)i$idade #om a &erramenta Tidia-A.- tendo em <ista 'ue a <erso uti$i?ada 3 a *.0.2. .ste estudo de<e ser &eito para #ada &erramenta. Des#ompa#te o ar'ui<o no diret+rio de insta$ao da sua pre&er:n#ia. CIamaremos a'ui o $o#a$ de insta$ao do 2)oss de 2OO,,T1OA.. Faa o doFn$oad do dri<er A@,'$ /.0.NN: Ittp:de<.m@s'$.#omdoFn$oads#onne#tor5/.0.Itm$ ,a$<e o 5ar na pasta 2OO,,T1OA.ser<erde&au$t$i). A)ra o ar'ui<o de #on&i(urao $o#a$i?ado em sa=ai-sr#d)d)-imp$pa#=sr#Fe)appL.O- IEF#omponents.Nm$. A$tere o ar'ui<o #omo indi#ado a)aiNo: [l-- TIe &u$$@ 'ua$i&ied 2a<a #$ass name o& tIe 2DOC dri<er to )e used. --\ [propert@ nameUSdri<erC$assEameS\ [<a$ue\#om.m@s'$.5d)#.Dri<er[<a$ue\ [propert@\ [l-- TIe #onne#tion D%C to )e passed to our 2DOC dri<er to esta)$isI a #onne#tion. --\ [propert@ nameUSur$S\ [<a$ue\5d)#:m@s'$:$o#a$Iost:3304sa=ai[<a$ue\ sa=ai data)ase name in @our A_,BC [propert@\ [l-- TIe #onne#tion username to )e passed to our 2DOC dri<er to esta)$isI a #onne#tion. --\ [propert@ nameUSusernameS\ [<a$ue\sa=aiuser[<a$ue\ user #ode o& @our A@,BC [propert@\ [l-- TIe #onne#tion passFord to )e passed to our 2DOC dri<er to esta)$isI a #onne#tion. --\ [propert@ nameUSpassFordS\ [<a$ue\passFord[<a$ue\ passFord o& @our A@,BC [propert@\ As se(uintes $inIas &a?em #om 'ue o 2)oss i(nore sua imp$ementao 2,F nati<a. Isto 3 ne#ess0rio- pois o ,a=ai 2.* usa 2,F 1.1 e o 2)oss 2,F 1.2. [#onteNt-param\ Con&iden#ia$ FA9.,9- 90(ina *2 TIDIA - Ae Verso: 1.0 Orientaes para Construo de Ferramentas para o TIDIA Ae 2.0 Data: 310!200" [param-name\or(.5)oss.5)oss&a#es.LA%TODEDC.,T2,FTIA9C[param-name\ [param-<a$ue\true[param-<a$ue\ [#onteNt-param\ %epita isso no ar'ui<o sr#VFe)appVL.O-IEFVFe).Nm$ das se(uintes pastas: mai$too$Vmai$too$ ospAcommonAtool ospAjs+AeBample ospAportalAtool ospApresentationAtool ospAreportsAtool ospA-iCardAtool podcastsApodcasts blogAtool calendarAcalendar-summary-toolAtool chatAchat-toolAtool gradebookAtestservice-tool gradebookAappAsakai-tool helpAhelp-tool js+AeBample msgcntrAmessage+orums-app podcastsApodcasts-app postemApostem-app presentationAtool pro+ileApro+ile-app rosterAroster-app samplesAsample-tool-js+ jobschedulerAscheduler-tool sectionsAsections-app syllabusAsyllabus-app toolAtool-toolAsu userAuser-tool-admin-pre+sAadmin-pre+s userAuser-tool-pre+sAtool usermembershipAtool samAsamigo-appAsakai-samigo A)ra o prompt no diret+rio sa=ai-sr# e eNe#ute o se(uinte #omando: ma<en sa=ai Ao &im de um HOui$d ,u##ess&u$J- todos os ar'ui<os ne#ess0rios ao dep$o@ do ,a=ai &oram #o$o#ados no CATACIEAT1OA.- diret+rio de insta$ao do Tom#at. Os se(uintes passos #opiam os ar'ui<os do ,a=ai do CATACIEAT1OA. para o 2OO,,T1OA..
Copie a pasta #omponents 8e todos seus ar'ui<os> de CATACIEAT1OA. para a pasta 2OO,,T1OA.ser<erde&au$t. Con&iden#ia$ FA9.,9- 90(ina *3 TIDIA - Ae Verso: 1.0 Orientaes para Construo de Ferramentas para o TIDIA Ae 2.0 Data: 310!200" Copie todos os ar'ui<os .Far de CATACIEAT1OA.Fe)apps para a pasta 2OO,,T1OA.ser<erde&au$tdep$o@. A$(uns #omponentes do ,a=ai ainda no puderam ser portados- por isso eN#$ua os se(uintes ar'ui<os: mai$too$.Far osp-presentation-too$.Far osp-reports-too$.Far Copie o ar'ui<o sa=ai-da<-ser<er-sa=aiT2-1-1.5ar de CATACIEAT1OA.ser<er$i) para 2OO,,T1OA.$i). Copie todos os 5ars da pasta CATACIEAT1OA.sIared$i) para 2OO,,T1OA.ser<erde&au$t$i). Copie todos os 5ars da pasta CATACIEAT1OA.#ommon$i) para 2OO,,T1OA.ser<erde&au$t$i). Crie uma no<a pasta Hsa=aiJ em 2OO,,T1OA.ser<erde&au$t. Copie o ar'ui<o sa=ai.properties da pasta CATACIEAT1OA.sa=ai para a pasta 2OO,,T1OA.ser<erde&au$tsa=ai. Ini#ie o 2)oss e <eri&i'ue 'ue o sa=ai est0 no ar. Mera$mente a p0(ina ini#ia$ en#ontra-se em: Ittp:$o#a$Iost:!0!0porta$ !.20Inte0rao de uma /erramenta SaBai )om )omponentes do TidiaHAe 1. Criamos um no<o site #Iamado Teste1e$$o 8Lor=,ite ,etup \ EeF \ 9ro5e#t Le)site \ Teste1e$$o> e permitimos 'ue outros usu0rios a&i$iem-se. 2. Criamos um no<o pro5eto 1e$$o Lor$d uti$i?ando o p$u(in ,a=ai App Oui$der.89ro5e#t Eame: Ie$$oFor$d- =e@ name: 1e$$oLor$d- pa#=a(e pre&iN: or(.sa=aipro5e#t- 9ro5e#t T@pe: 2,9- Imp$ementation: 1e$$o Lor$d app> Con&iden#ia$ FA9.,9- 90(ina ** TIDIA - Ae Verso: 1.0 Orientaes para Construo de Ferramentas para o TIDIA Ae 2.0 Data: 310!200" 3. Adi#ionamos duas depend:n#ias do ,a=ai e duas do Tidia-Ae no ar'ui<o too$pro5e#t.Nm$ 8Cista(em 1> <dependency> <groupId>sakaiproject</groupId> <artifactId>sakai-user-api</artifactId> <version>${sakai.version}</version> </dependency> <dependency> <groupId>sakaiproject</groupId> <artifactId>sakai-entity-api</artifactId> <version>${sakai.version}</version> </dependency> <dependency> <groupId>tidia</groupId> <artifactId>comm</artifactId> <version>client</version> <type>jar</type> <properties> <war.bundle>true</war.bundle> </properties> </dependency> <dependency> <groupId>tidia</groupId> <artifactId>jbossall</artifactId> <version>client</version> <type>jar</type> <properties> <war.bundle>true</war.bundle> </properties> </dependency> *. Criamos uma pasta tidia5ars no nosso reposit+rio $o#a$ 8Iomeusuario.ma<enrepositor@tidia5ars> e #o$o#amos os 5ars re&eren#iados do Tidia 85)ossa$$-#$ient.5ar e #omm-#$ient.5ar> nesta pasta. 4. Criamos uma pasta $i) no diret+rio too$sr#Fe)appL.O-IEF e #o$o#amos as depend:n#ias do Tidia- Ae: 5)ossa$$-#$ient.5ar e #omm-#$ient.5ar ne$a. ". Adi#ionamos esses 5ars ao )ui$d patI da ap$i#ao no .#$ipse. !. Criamos uma #$asse CommConne#tion para rea$i?ar a #oneNo #om o .2O do ser<io de #omuni#ao do Tidia-Ae. .sta #$asse &a? o $oo=up do .2O e retorna uma re&er:n#ia a e$e por meio do m3todo (etCommConn8>. 8Cista(em 2> 6. Eo ar'ui<o 1e$$oLor$d.5sp 8Cista(em 3> uti$i?amos um o)5eto #o<er do ,a=ai para o)ter uma re&er:n#ia do ser<io de usu0rios 8DserDire#tor@,er<i#e>. 10. O)temos 'uais usu0rios esto #adastrados em nosso site 8#onteNto>. 11. O)temos uma re&er:n#ia do )ean CIanne$A(t e o uti$i?amos para #riar um #ana$ e adi#ionar os parti#ipantes do site a esse #ana$. 12. Imprimimos uma mensa(em 8se o)ti<emos su#esso> di?endo 'ua$ o id do #ana$ #riado e 'ue os usu0rios &oram adi#ionados a e$e. 13. Fa?emos )ui$d e dep$o@ da &erramenta. Con&iden#ia$ FA9.,9- 90(ina */ TIDIA - Ae Verso: 1.0 Orientaes para Construo de Ferramentas para o TIDIA Ae 2.0 Data: 310!200" 1*. %e(istramos a &erramenta Ie$$oFor$d no site #riado pre<iamente 8.dit site \ .dit too$s \ mar'ue Ie$$oFor$d> e testamos a &erramenta. 1/. O)ser<amos 'ue o id do #ana$ #riado 3 131 8neste eNemp$o> e 'ue os parti#ipantes &oram adi#ionados #om su#esso. Listagem 1: [bNm$ <ersionUS1.0S en#odin(USDTF-!Sb\ [l-- TIis &i$e (enerated )@ ,a=ai App Oui$der -Aj --\ [pro5e#t Nm$nsUSIttp:ma<en.apa#Ie.or(9OA3.0.0S Nm$ns:NsiUSIttp:FFF.F3.or(2001XAC,#Iema-instan#eS Nsi:s#IemaCo#ationUSIttp:ma<en.apa#Ie.or(9OA3.0.0 Ittp:ma<en.apa#Ie.or(ma<en-<3T0T0.NsdS\ [pomVersion\3[pomVersion\ [eNtend\....masterpro5e#t.Nm$[eNtend\ [name\sa=ai-Ie$$oFor$d-too$[name\ [(roupId\sa=aipro5e#t[(roupId\ [id\sa=ai-Ie$$oFor$d-too$[id\ [#urrentVersion\R`sa=ai.<ersiona[#urrentVersion\ [or(ani?ation\ [name\,a=ai 9ro5e#t[name\ [ur$\Ittp:sa=aipro5e#t.or([ur$\ [or(ani?ation\ [in#eption_ear\2004[in#eption_ear\ [l-- _ou must dep$o@ @our too$ as a Far &i$e --\ [properties\ [dep$o@.t@pe\Far[dep$o@.t@pe\ [properties\ [dependen#ies\ [l-- TIe sa=aipro5e#t p$u(in $etWs us )ui$d our too$ FitIout )ui$din( tIe entire sa=ai #ode )ase --\ [dependen#@\ [(roupId\sa=aipro5e#t[(roupId\ [arti&a#tId\sa=ai[arti&a#tId\ [<ersion\R`sa=ai.p$u(in.<ersiona[<ersion\ [t@pe\p$u(in[t@pe\ [dependen#@\ [dependen#@\ [(roupId\sa=aipro5e#t[(roupId\ [arti&a#tId\sa=ai-user-api[arti&a#tId\ [<ersion\R`sa=ai.<ersiona[<ersion\ [dependen#@\ [dependen#@\ [(roupId\sa=aipro5e#t[(roupId\ [arti&a#tId\sa=ai-entit@-api[arti&a#tId\ [<ersion\R`sa=ai.<ersiona[<ersion\ [dependen#@\ Con&iden#ia$ FA9.,9- 90(ina *4 TIDIA - Ae Verso: 1.0 Orientaes para Construo de Ferramentas para o TIDIA Ae 2.0 Data: 310!200" [l-- Fe are runnin( a Fe)app in tom#at so Fe need tIe ser<$et api --\ [dependen#@\ [(roupId\ser<$etapi[(roupId\ [arti&a#tId\ser<$etapi[arti&a#tId\ [<ersion\2.*[<ersion\ [dependen#@\ [l-- Le need tIis spe#ia$ pa#=a(e to run tIe 5sps in ,a=ai --\ [dependen#@\ [(roupId\or(.sa=aipro5e#t[(roupId\ [arti&a#tId\sa=ai-Fe)app-too$[arti&a#tId\ [<ersion\2.2.N[<ersion\ [properties\ [Far.)und$e\true[Far.)und$e\ [properties\ [ur$\Ittps:sour#e.sa=aipro5e#t.or(ma<enor(.sa=aipro5e#t5ars[ur$\ [dependen#@\ [l-- 2,9 ta($i) dependen#ies --\ [dependen#@\ [(roupId\5st$[(roupId\ [arti&a#tId\5st$[arti&a#tId\ [<ersion\1.1.2[<ersion\ [t@pe\5ar[t@pe\ [properties\ [Far.)und$e\true[Far.)und$e\ [properties\ [dependen#@\ [dependen#@\ [(roupId\ta($i)s[(roupId\ [arti&a#tId\standard[arti&a#tId\ [<ersion\1.1.2[<ersion\ [t@pe\5ar[t@pe\ [properties\ [Far.)und$e\true[Far.)und$e\ [properties\ [dependen#@\ [dependen#@\ [(roupId\tidia[(roupId\ [arti&a#tId\#omm[arti&a#tId\ [<ersion\#$ient[<ersion\ [t@pe\5ar[t@pe\ [properties\ [Far.)und$e\true[Far.)und$e\ [properties\ [dependen#@\ [dependen#@\ Con&iden#ia$ FA9.,9- 90(ina *" TIDIA - Ae Verso: 1.0 Orientaes para Construo de Ferramentas para o TIDIA Ae 2.0 Data: 310!200" [(roupId\tidia[(roupId\ [arti&a#tId\5)ossa$$[arti&a#tId\ [<ersion\#$ient[<ersion\ [t@pe\5ar[t@pe\ [properties\ [Far.)und$e\true[Far.)und$e\ [properties\ [dependen#@\ [l-- Various ,a=ai dependen#ies --\ [dependen#@\ [(roupId\sa=aipro5e#t[(roupId\ [arti&a#tId\sa=ai-uti$[arti&a#tId\ [<ersion\R`sa=ai.<ersiona[<ersion\ [properties\ [Far.)und$e\true[Far.)und$e\ [properties\ [dependen#@\ [l-- Commons 2A%, put in sIared$i) )@ ,a=ai --\ [dependen#@\ [(roupId\#ommons-$o((in([(roupId\ [arti&a#tId\#ommons-$o((in([arti&a#tId\ [<ersion\1.0.*[<ersion\ [dependen#@\ [dependen#ies\ [)ui$d\ [sour#eDire#tor@\sr#5a<a[sour#eDire#tor@\ [resour#es\ [resour#e\ [dire#tor@\R`)asedirasr#5a<a[dire#tor@\ [in#$udes\ [in#$ude\iii.Nm$[in#$ude\ [in#$udes\ [resour#e\ [resour#es\ [)ui$d\ [pro5e#t\ Listagem 2: pa#=a(e or(.sa=aipro5e#t.Ie$$oFor$d.too$Q import 5a<a.uti$.1asIta)$eQ import 5a<aN.namin(.ConteNtQ import 5a<aN.namin(.Initia$ConteNtQ Con&iden#ia$ FA9.,9- 90(ina *! TIDIA - Ae Verso: 1.0 Orientaes para Construo de Ferramentas para o TIDIA Ae 2.0 Data: 310!200" import 5a<aN.rmi.9orta)$e%emoteO)5e#tQ import )r.&apesp.tidia.ae.e$earnin(.#omm.preparation.spe#.CIanne$A(tQ import )r.&apesp.tidia.ae.e$earnin(.#omm.preparation.spe#.CIanne$A(t1omeQ pu)$i# #$ass CommConne#tion ` pri<ate stati# CIanne$A(t #Im U nu$$Q pri<ate <oid $oad8> ` tr@ ` 1asIta)$e en< U neF 1asIta)$e8>Q en<.put8ConteNt.IEITIACTCOET.XTTFACTO%_- Sor(.5np.inter&a#es.Eamin(ConteNtFa#tor@S>Q en<.put8ConteNt.D%CT9GMT9%.FIX.,- Sor(.5)oss.namin(:or(.5np.inter&a#esS>Q en<.put8ConteNt.9%OVID.%TD%C- S5np:10.0.116.12:1066S>Q Initia$ConteNt #tN U neF Initia$ConteNt8en<>Q
CIanne$A(t1ome Iome U nu$$Q O)5e#t re& U #tN.$oo=up8Se5)CIanne$A(rS>Q Iome U 8CIanne$A(t1ome> 9orta)$e%emoteO)5e#t.narroF8re&-
CIanne$A(t1ome.#$ass>Q #Im U Iome.#reate8>Q a #at#I8.N#eption e> ` e.print,ta#=Tra#e8>Q ,@stem.out.print$n8SFa$Ia na #oneNo #om o ser<io de #omuni#ao.S>Q a a pu)$i# CIanne$A(t (etCommConn8> ` i&8#Im UU nu$$> $oad8>Q return #ImQ a a Listagem 3: [bNm$ <ersionUS1.0S en#odin(USI,O-!!/6-1S b\ [e^ pa(e $an(ua(eUS5a<aS #ontentT@peUSteNtItm$Q #IarsetUI,O-!!/6-1S pa(e.n#odin(USI,O-!!/6-1Se\ [l-- [e^ pa(e error9a(eUSerror.5spS e\ --\ [e^ ta($i) pre&iNUS#S uriUSIttp:5a<a.sun.#om5sp5st$#oreS e\ [e^ ta($i) pre&iNUS&mtS uriUSIttp:5a<a.sun.#om5sp5st$&mtS e\ [e^ ta($i) pre&iNUS&nS uriUSIttp:5a<a.sun.#om5sp5st$&un#tionsS e\ [e^ ta($i) pre&iNUSNS uriUSIttp:5a<a.sun.#om5sp5st$Nm$S e\ Con&iden#ia$ FA9.,9- 90(ina *6 TIDIA - Ae Verso: 1.0 Orientaes para Construo de Ferramentas para o TIDIA Ae 2.0 Data: 310!200" [e-- TIis &i$e (enerated )@ ,a=ai App Oui$der --e\ [lDOCT_9. Itm$ 9DOCIC S-L3CDTD X1TAC 1.0 Transitiona$.ES SIttp:FFF.F3.or(T%NItm$1DTDNItm$1-transitiona$.dtdS\ [e^pa(e importUSor(.sa=aipro5e#t.user.api.DserDire#tor@,er<i#eSe\ [e^pa(e importUSor(.sa=aipro5e#t.Ie$$oFor$d.too$.CommConne#tionSe\ [e^pa(e importUS5a<a.rmi.%emote.N#eptionSe\ [e^pa(e importUS)r.&apesp.tidia.ae.#ommon.#omm.o)5e#t.iSe\ [e^pa(e importUS)r.&apesp.tidia.ae.e$earnin(.#omm.preparation.spe#.CIanne$A(tSe\ [e^pa(e importUSor(.sa=aipro5e#t.user.api.DserSe\ [e^pa(e importUS5a<aN.5ms.,essionSe\ [Itm$ Nm$nsUSIttp:FFF.F3.or(1666NItm$S\ [Iead\ [meta Ittp-e'ui<USContent-T@peS #ontentUSteNtItm$Q #IarsetUI,O-!!/6-1S \ [s#ript sr#US$i)rar@5sIeads#ripts.5sS $an(ua(eUS2a<a,#riptS t@peUSteNt5a<as#riptS\[s#ript\ [$in= mediaUSa$$S Ire&US$i)rar@s=intoo$T)ase.#ssS re$USst@$esIeetS t@peUSteNt#ssS\ [$in= mediaUSa$$S Ire&US$i)rar@s=inde&au$ttoo$.#ssS re$USst@$esIeetS t@peUSteNt#ssS\ [$in= mediaUSa$$S Ire&US#ss1e$$oLor$d.#ssS re$USst@$esIeetS t@peUSteNt#ssS\ [tit$e\1e$$o Lor$d[tit$e\ [Iead\ [)od@ on$oadUS[eU re'uest.(etAttri)ute8Ssa=ai.Itm$.)od@.on$oadS> e\S\ [di< #$assUSport$etOod@S\ [I3\1e$$o Lor$d[I3\ [e DserDire#tor@,er<i#e u U or(.sa=aipro5e#t.user.#o<er.DserDire#tor@,er<i#e .(etInstan#e8>Q i& 8u UU nu$$> out.print$n8SEo (oS>Q 5a<a.uti$.Cist $ U u.(etDsers8>Q 5a<a.uti$.Cist Iumans U neF 5a<a.uti$.Arra@Cist8>Q i& 8$.si?e8> UU 0> out.print$n8SCista ?eradaS>Q e$se ` 5a<a.uti$.Iterator it U $.iterator8>Q FIi$e 8it.IasEeNt8>> ` or(.sa=aipro5e#t.user.api.Dser user U 8or(.sa=aipro5e#t.user.api.Dser> it .neNt8>Q i& 8user.(etT@pe8>.e'ua$s8Sre(isteredS>> Iumans.add8user>Q a CIanne$A(t #Im U nu$$Q CommConne#tion #onn U neF CommConne#tion8>Q Con( #IanId U nu$$Q Con&iden#ia$ FA9.,9- 90(ina /0 TIDIA - Ae Verso: 1.0 Orientaes para Construo de Ferramentas para o TIDIA Ae 2.0 Data: 310!200" i& 8#onn.(etCommConn8> lU nu$$> ` #Im U #onn.(etCommConn8>Q Cria um no<o #ana$: tr@ ` #IanId U #Im.#reateCIanne$8Constants.TO9IC- nu$$>Q a #at#I 8%emote.N#eption e> ` e.print,ta#=Tra#e8>Q ,@stem.out.print$n8SEo &oi poss;<e$ #riar #ana$S>Q a out.print$n8SCana$ #riado: S K #IanId>Q a 5a<a.uti$.Iterator iter U Iumans.iterator8>Q 5a<a.uti$.Cist parti#ipants U neF 5a<a.uti$.Arra@Cist8>Q FIi$e 8iter.IasEeNt8>> ` Dser usuario U 8Dser> iter.neNt8>Q 9arti#ipant9rops part U neF 9arti#ipant9rops8>Q part.setConsumer8true>Q part.setDura)$e,u)s#ription8true>Q part.setAessa(e,e$e#tor8nu$$>Q part.setEoti&i#ationInterest8true>Q part.set9arti#ipantId8neF Con(8neF 5a<a.uti$.Date8> .(etTime8>>>Q part.set9rodu#er8true>Q part.setEoCo#a$8&a$se>Q part.setA#=noF$ed(eAode8,ession.ADTOTACGEOLC.DM.>Q part.set9arti#ipantEi#=8usuario.(etDisp$a@Eame8>>Q parti#ipants.add8part>Q a )oo$ean resu$t U #Im.add9arti#ipants8#IanId- parti#ipants>Q i&8resu$t> out.print$n8S9arti#ipantes adi#ionados ao #ana$.S>Q e$se out.print$n8SEo &oi poss;<e$ adi#ionar os parti#ipantes ao #ana$.S>Q a e\ Con&iden#ia$ FA9.,9- 90(ina /1 TIDIA - Ae Verso: 1.0 Orientaes para Construo de Ferramentas para o TIDIA Ae 2.0 Data: 310!200" [di<\ [)od@\ [Itm$\ 8. Tra,a-?os Futuros Desen<o$<imento de um p$u(in para o .#$ipse 'ue permita a #onstruo de &erramentas para o sistema Tidia-Ae de modo &a#i$itado 8Li?ard>. &. *e/erIn)ias OA,AAE- A. %e#ap o& ,a=ai ,er<i#es Z ,a=ai ELD Lor=sIop- 200"a. Dispon;<e$ em: Ittp:)u(s.sa=aipro5e#t.or(#on&$uen#edoFn$oadatta#Iments32"12%e#apKo&K,a=aiK,er<i#es.ppt OA,AAE- A. %e#ap o& ,a=ai ,er<i#es Z ,a=ai ELD Lor=sIop- 200"). Dispon;<e$ em: Ittp:)u(s.sa=aipro5e#t.or(#on&$uen#edoFn$oadatta#Iments32"12Introdu#tionKtoK,a=aiKandK,a=aiK, er<i#es.ppt %,FLIGI Z TIe %,F FrameFor=- 200" Z Dispon;<e$ em: Ittp:FFF2.#aret.#am.a#.u=rs&Fi=i ,a=ai App Oui$der Z %A too$- 200"a Dispon;<e$ em: Ittp:)u(s.sa=aipro5e#t.or(#on&$uen#edisp$a@OOOT,a=aiKAppKOui$der ,a=ai Gerne$ Ound$e Z ,er<i#e Aanua$ Components- 200/ Dispon;<e$ em: Ittp:)u(s.sa=aipro5e#t.or(#on&$uen#edoFn$oadatta#Iments104!!,GOAanua$Components<2.pd&b <ersionU1 ,a=ai Z Fun#tiona$ ,er<i#es Do#umentation- 200") Z Dispon;<e$ em: Ittp:)u(s.sa=aipro5e#t.or(#on&$uen#edisp$a@.ECFun#tiona$K,er<i#esKDo#umentation ,a=ai Z Dsin( tIe Too$Aana(er ,er<i#e Z 200"# Z Dispon;<e$ em: Ittp:)u(s.sa=aipro5e#t.or(#on&$uen#edisp$a@OOOTDsin(KtIeKToo$Aana(erK,er<i#e ,a=ai Z Fun#tiona$ ,er<i#es Do#umentation- 200"d Z Dispon;<e$ em: Ittp:)u(s.sa=aipro5e#t.or(#on&$uen#edisp$a@.ECIn&ormationa$K,er<i#esKDo#umentation ,a=ai 9ro(rammers Aanua$Z Dispon;<e$ em: Ittp:)u(s.sa=aipro5e#t.or(#on&$uen#edisp$a@OOOT,a=aiK9ro(rammerKAanua$ TIree La@s o& Dsin( 1i)ernate in ,a=aiZ Dispon;<e$ em: Ittp:)u(s.sa=aipro5e#t.or(#on&$uen#edoFn$oadatta#Iments1!*36,a=ai9ersisten#eAnd1i)ernate.pptb <ersionU1 Con&iden#ia$ FA9.,9- 90(ina /2