You are on page 1of 20
Instructions for Authors of SBC Conferences Papers and Abstracts Cicero Joatan Pereira de Souza "DEPARTAMENTO DE TELEMATICA Instituto Federal de Educagao, Ciéncia e Tecnologia do Ceara (IFCE) Fortaleza ~ CE — Brasil Abstract. This meta-paper describes the style to be used in articles and short papers for SBC conferences. For papers in English, you should add just an abstract while for the papers in Portuguese, we also ask for an abstract in Por- tuguese (“resumo”), In both cases, abstracts should not have more than 10 lines and must be in the first page of the paper. Resumo. Este meta-artigo descreve o estilo a ser usado na confecgao de artigos € resumos de artigos para publicagdo nos anais das conferéncias organizadas pela SBC. E solicitada a escrita de resumo ¢ abstract apenas para os artigos escritos em portugués. Artigas em inglés deverdo apresentar apenas abstract. Nos dois casos, o autor deve tomar euidado para que 0 resumo (e 0 abstract) nao ultrapassem 10 linhas cada, sendo que ambos devem estar na primeira pdgina do artigo. 1. Introducao ‘A capacidade da programagao de resolugao de problemas permite atingir diferentes éreas do conhecimento, Para fazer uma nova aplicagao, o programador precisa conhecer as re- gras de negécio, o que por sua vez demanda tempo de estudo, Para ajudar ao programador a reduzir o tempo na criago de uma nova aplicagio, foi criado o conceito de framework, Um framework consiste em uma estrutura basica de classes ¢ objetos para um projeto, aumentando a produtividade e diminuindo o time-to-market [ref] A maioria dos frameworks existentes foram feitos de acordo com 0 avango tec~ nolégico ¢ da demanda para a érea web, que com o passar dos anos ganhou grande escala de aceitagdo pela sua facilidade de acesso. Dessa forma, basicamente todas as linguagens possem seus pr6prios frameworks para desenvolvimento web. Alguns exemplos sao: Ruby, com o Ruby on Rails, Python com o Django e 0 Flask, ¢ Java com o Spring € 0 Raptor. Apesar do crescimento da progtamagao web, ainda existem profissionais com en- foque na Area de programagao para desktop [ref2]. Escolher fazer uma aplicagao para que seja executada localmente na maquina do usuario final 6 avaliar um requisito do cliente ou fazer uma escotha de estratégia arquitetural. Um exemplo sio projetos que oferecem servigos tanto no ambiente local quando em nuvem, Por esses motivos poderia se ter um framework que ajude aos programadores no desenvolvimento para desktop utilizando as ferramentas oferecidas pela linguagem escolhida. ‘Tendo em vista essas caracteristicas, este trabalho visa atender o pablico que pre- cisa dessa tecnologia , proporcionando facilidade no desenvolvimento para esse ambiente, Para isso foi escolhida a linguagem Java ¢ suas ferramentas, ¢ utilizando a tecnologia de construgdo de aplicagdes gréficas JavaFX e suas especificagdes. O escopo do trabalho se limitard a construgao de uma ambiente bisico onde os usuérios podem iniciar seus proje~ tos sem muito esforgo e com uma baixa curva de aprendizagem. Fazem parte do escopo deste trabalho as fung6es de injeco de dependéncia, rotas e seguranga. Para isso é seguido padrdes como a arquitetura MVC, e ferramentas jé adotadas em outros frameworks como © Maven facilitando a migragao de ambientes. Outro objetivo é usar tecnologias que fa- Cilitam o acoplamento de novas funcionalidade como pacotes ¢ da importagao do projeto para uso de outros desenvolvedores. Para isso, a ferramenta Maven se mostra uma boa candidata para atender este requisito. Com o objetivo de demonstrar o funcionamento da proposta, sera desenvolvida ‘uma aplicagao simples fazendo uso do framework proposto. Para efeito de qualidade do cédigo, serdo escritos testes automatizados garantindo a confianga do software proposto, Ao final sera demonstrado os resultados obtidos da ferramenta desenvolvida e trabalhos faturos. 2. Base tedrica Nesta segio sera discutida as bases te6ricas para a construgao da solugao proposta desde 0 padrao arquitetural adotado, a linguagem usada e as ferramentas disponiveis na linguagem que ajudam a implementar um framework abstrato permitindo ao programador usuério @ personalizar sua aplicagao. 2.1, Padrao Arquitetural Figure 1. Padrao MVC © padrio arquitetural usado pela maioria dos frameworks € 0 MVC. Em por- tugués modelo-visao-controlador, é um padrao de arquitetura de software que separa a representac3o da informagao da interagao do usuétio com ele. O modelo (model) con- siste nos dados da aplicagio, regras de negécios, I6gica e fungdes. Uma visio (view) pode ser qualquer safda de representagao dos dados, como uma tabela ou um diagrama, E possivel ter varias visées do mesmo dado, como um gréfico de barras para gerencia- mento ¢ uma visio tabular para contadores. O controlador (controller) faz a mediaco da entrada, convertendo-a em comandos para 0 modelo ou visio. As ideias centrais por tras do MVC sao a reusabilidade de cédigo e separacao de conceitos. A camada de modelo € responsdvel pela a légica do negécio € manipulacao de dados bem como suas validagdes £ onde os dados do sistema tem um significado ¢ normalmente sio recuperados de um bbanco de dados. 2.2, Linguagem Java ‘A linguagem utilizada neste trabalho é 0 Java, que é uma linguagem de programagao orientada a objetos desenvolvida na década de 90 por uma equipe de programadores chefiada por James Gosling, na empresa Sun Microsystems. Diferente das linguagens de programacao convencionais, que so compiladas para cédigo nativo, a linguagem Java € compilada para um bytecode que ¢ interpretado por uma méquina virtual (Java Virtual Machine, mais conhecida pela stia abreviago TVM). A linguagem de programagao Java € a linguagem convencional da Plataforma Java, mas nao é a sua tinica linguagem. 2.3, JavaFX Atualmente a linguagem Java em sua versio 8 acoplou uma nova tecnologia de desen- volvimento gréfico denominada JavaFX. Foi primeiramente vista na conferéncia JavaOne WorldWide Java Developer em Maio de 2007, e desde entao vem ganhando espago até ser acoplado na versio 8 do java, O JavaFX € a proposta de substituigdo do Swing (antiga tec- nologia de desenvolvimento grifico) e vem com a vantagem de possuir a estrutura MVC, estrutura adotada pela maioria dos frameworks de desenvolvimento, Com JavaFX é possivel criar aplicagdes gréficas para diversos dispositivos in- cluindo aplicagdes para desktop. O JavaFX implementa a arquitetura MVC com 0 uso de Controller € View. O controllers & implementado via cédigo java, jé a view é imple- mentada pela extensio .fxml, que é uma linguagem baseada em XML. Cada view (fxml) possui sua classe controladora, que é ligada pela declaragao de uma tag na formatagao do fxm, Fazendo uso dessas tecnologias em java, € possivel com o mesmo cédigo gerar aplicagées para diversos sistema operacionais, diminuindo o esforgo de programagao € melhorando a distribuigao da aplicagao, Atualmente o JavaFX esta na versio 2.2. 2.4, Reflexio ‘Apesar de ser uma linguagem compilada e termos controle sobre 0 cédigo que produzi- mos € 0 que sera executado, por vezes queremos ter comportamentos mais dinamico dos objetos que escrevemos. Muitas dessas situagSes acontecem quando queremos escrever um cédigo mais abstrato ¢ deixar a implementagao concreta para o programador que for ssim podemos ter uma implementagio de um cédigo de uso geral, ¢ as regras de negécio concretas serem escritas para cada problema especifico. Para isso pode-se usar uma biblioteca em java chamada Reflection [ref7] No java, reflexdo é a habilidade de manipular e examinar propriedades do pro- grama em tempo de execugao. Através dela, por exemplo, podemos criar um objeto como no cédigo a abaixo: Peseoa. class. newInstance (); ‘Também podemos acessar campos de uma classe: Field[] fields = Pessoa.class.getDec for (Field field : fields) ( aredPields(); System.out.printin (fi Name ()); ) Ainda € possi Method method = jose.getClass () .getethod ("getName"); tring name = (String) method. invoke (jose); systen.o intin (name); Apesar de termos a vantagem do dinamismo, existem algumas desvantagens de usar reflection no java. As principais sio: desempenho e exposicao de cédigo interno, Sobre desempenho, como estamos escrevendo cédigo dinamico, a maquina virtual do java no pode otimizar 0 e6digo, por isso a performance € afetada. A respeito da exposigao de c6digo interno, via reflection é possivel acessar métodos ¢ campos privados de um objeto, isso afeta as restrigdes de regras de negécio do cédigo. Consciente dessas desvantagens, cuidados foram tomados para nfo violar a coesio dos objetos. Um deles é evitar acessar métodos ¢ campos privados das instancias. O projeto é pensado para apenas se autogerir € apenas acessar seus proprio objetos, ¢ no acesso, se necessirio, limitar-se ao o que 0 programador usuério permitir 0 acesso, Caso seja necessdrio acessar um campo ou método que nao estiver disponfvel, seré mostrada uma excecio cortespondente avisando ao programador da falha ‘Com questo ao desempenho, haveria uma problema se fosse executado eédigo sensivel a performance, 0 projeto nao visa atender a sistemas de tempo real, portanto, a perda de performance pode ser desconsiderada, 2.5. Injegdo de Dependéncia e Contextos (CDI) A Injegaio de Dependéncia ¢ Contextos (CDI) foi especificada na JSR-299 [ref6] ¢ € mem- bro do Java EE 6, 0 CDI introduziu uma abordagem para melhor interagao entre os com- ponentes Java com um avangado modelo de ciclo de vida. Dos principais recursos da ferramenta os que sio usados nesse projeto sao Injegao de Dependéncia, Métodos Produ- tores e Interceptadores. A maioria dos frameworks em Java, como por exemplo Vraptor e Spring, usam 0 conceito de injegao de dependéncia. Utilizando esse conceito, pode-se fazer um projeto muito menos acoplado e mais com independéncia entre suas camadas. Neste trabalho é utilizada a biblioteca de CDI chamada Weld. “Weld é uma implementagdo de referéncia de CDI: Injeco de Dependéncia ¢ Contextos para a Plataforma Java EE, que é um padrio JCP para injegdo de dependéncia ¢ gerenciamento de ciclo de vida contextual” [ref8]. O desenvolvedor também tem a capacidade injetar suas préprias dependéncias dentro do projeto sem dificuldades. 2.8.1. Contexto CDI Contexto CDI é 0 ambiente controlado pelo CDI que gerencia todos os objetos que fazem parte do ambiente. Todas as classes que foram declaradas gerencidveis no projeto terdo seu ciclo de vida controlados pelo contexto. Um projeto, para ser gerenciado pelo CDI, precisa apenas conter uma arquivo chamado beans.xml dentro da pasta resource/META- INE. A partir disso todas as classes do projeto se tornam gerenciaveis. 2.5.2, Injecao de dependéncia A Injegao de Dependéncia possibilita injegao de type safe em qualquer componente Java EE, Antes da chegada do CDI no Java, os frameworks usavam XML pata resolver a Injegdo de Dependéncia. Agora, a linguagem oferece anotagées e qualificadores para re- solver as dependéncias oferecendo menos trabalho. As anotagGes no java sio declaradas como uma interface e iniciando com cardcter '@” como pode ser visto abaixo: ace Injeci ‘ Dessa forma, os objetos podem ser injetados como na figura: ublic IndexController (Pessoa pessoa) { this.pessoa Através da anotaco @Inject o objeto pessoa é automaticamente injetado pelo ambiente controlado pelo CDI a partir do método construtor da classe. Isto posto, a classe In- dexController nio sabe (¢ nio precisa saber) como pessoa foi criado. Essa é uma das grandes vantagens de usar essa fetramenta: 0 baixo acoplamento entre as classes. Outta forma usual de injetar um objeto pelo CDI pode ser na declaragao de um campo na classe: public class IndexController BInject private Pessoa pessoa; 2.5.3. Métodos produtores Métodos produtores trazem uma abordagem para eriar injegdes polimérficas durante a execugdo, Tais métodos sao responsaveis por instanciar objetos no contexto CDI de forma personalizada pelo usuario. Também sio titeis ao se utilizar um pacote de terceiros que nao contém Injecdo de Dependéncia. Os produtores também aceitam injegdo de de- pendéncia em sua classe. Para se declarar um produtor, é preciso anotar © método com a anotagao @Produces ¢ retornar o tipo desejado. Mas ainda ndo é suficiente para tipos iguais gerenciados pelo CDI, 0 contexto ainda ndo sabe qual objeto invocar, se através da classe Pessoa no contexto CDI ou pelo método produtor, para isso temos que criar € usar uma anotagio qualificadora, A anotagio @ Qualifier é uma meta-anotagao que é a responsével por tomar a anotagao declarada uma qualificadora, como podemos ver nos c6digo abaixo abaixo: ceNewJose (} duceNewJose oduceJose() { se = new Pessoal); jose. setName ("Jose") ; return jose; ex (@ProduceNewJose Pessoa jose) Ainda é possivel receber um objeto do tipo InjectionPoint no método produtor. Este objeto nos permite acessar informagdes de onde o objeto esta sendo injetado. Assim, podemos recuperar informagGes como a classe que invocou o objeto injetado ¢ outras anotagdes vinculadas ao objeto. 2.5.4, Interceptadores Interceptadores possibilitam sua invocagio de acordo com a classe associada em con- junto com o ciclo de vida dos eventos. Com eles é possivel interceptar invocagao de métodos e classes podendo redirecionar ou impedir a sua execugto. Usando intercep- tores & possivel construir Iégicas de seguranga ¢ auditoria para a aplicagao sem afetar as regras de negécio do sistema. Essa Iégica de auditoria pode ficar separada em um lugar especifice facilitando a manutengao do cédigo. Dos ciclos de vida disponiveis na ferramenta usada (Weld), os que sao usados neste trabalho sao: AroundInvoke ¢ Around- Construct. © AroundInvoke serve para interceptar invocagao de métodos antes de sua execugdo; jf 0 AroundConstruct, € usado para interceptar chamadas a objetos antes de sua criagao, Para fazer uso dos interceptadores, é preciso criar uma anotagio que fard a ligago entre a implementacao concreta do interceptador ¢ 0 método a ser interceptado. Esta anotagdo deverd ser anotada com @InterceptorBinding ¢ com as outras anotagdes padrdes. Entio € criado um interceptador com as configuragdes desejadas. Para isso a classe pre~ cisa ter a anotago @Interceptor, identificando a classe como interceptadora. A classe também é anotada com a anotacao criada @interceptorainding @Target ({ElementType. TYPE, Element Type .METHOD}) @Retent ion (Retent lonPolicy .RUNTIME) ublic @i 1 Controller {} Criar a classe interceptadora com um método que seré executado: terceptor @interceptc: erceptor. Priority. APPLICATION) ptor { lority (1 ublic class Contrellerintere @AroundInvoke public Object check (Invocationcontext, cationcontext) throws Exception ( System.out.printin("0 metodo foi interceptado"); retur: at ionContext . pr i E agregar ao método a ser interceptado a0 do metodo E preciso anotar a classe interceptadora com prioridade para que o context CDI aplique a interceplacio. O objeto imocationContext nos permite acessar informagdes sobre a invocagao interceptada e assim podemos personalizar o comportamento do método in- terceptador. © método interceptador terd obrigatoriamente que receber um parimetro do tipo InvacationContext do pacote javax.interceptor e devolver 0 um tipo Object. Para © método interceptado ser executado, © método interceptador deverd retomar 0 objeto contido na chamada invocationContext proceed(). Caso exista uma légica do método in- terceptador onde o método interceptado nao poder executar, entao o retorno ser mull 2.8.5. Service Provider Interface (SPI) Por veres precisamos usar pacotes de terceiros para usar em nossos projeto, Isso sed para nao termos que reescrever problemas jé solucionados por outros desenvolvedores ¢€ disponibilizados para a comunidade. Service Provider Interface (SPI), que permite a integracdo de frameworks de terceiros no ambiente Java EE. Para ativar este servigo 0 pacote importado precisa apenas ter o arquivo beans.xml configurado. Isso jé é suficiente para, ao criarmos o contexto CDI, as classes do pacote se tornarem gerenciadas. Entretanto, nem sempre os pacotes que importamos em nosso projeto contém arquivo que possibilita 0 contexto CDI de gerencié-lo. Para isso existem os métodos produtores para que o desenvolvedor implemente a criagao dos objetos dentro do projeto. 3. Trabalhos relacionados 3.1, Afterburner.fx Afterburner.fx [ref3] € um framework que usa a arquitetura MVP (Model View Presenter), Criado por Adam Bien usando como base JavaFX, o projeto tem injegao de dependéncia € convengao sobre configuracio. Usando CoC (Convention over configuration) é possivel padronizar as diferentes camadas do projeto usando uma convencao de nomes. Com isso os arquivos da view, ess € classes de controle seguem a nomenclatura padrao. O projeto modifica a arquitetura convencional do JavaFX (MVC) para MVP, que é uma derivagao do do MVC. A camada Presenter faz a tarefa de ser mediadora, substituindo o Controller. © Afterburner se limita a esses escopos, ndo possuindo médulos de rotas € seguranga que tem que ser implementadas pelo programador ¢ so comuns em qualquer projeto. 3.2, JRebirth Outro projeto que usa JavaFX é 0 JRebirth [ref4]. Diferente do anterior, este usa um padrio chamado WB-CS-MVC, padrdo com 7 camadas de abstragio: © Wave * Behavior © Command © Service © Model © View © Controller Destas, trés sio consideradas como componentes do JRebirth © Command ® Service © Model Cada camada é independente em suas tarefas ¢ se comunicam via camada wave. A ca- mada de Aplicagao (App) é iniciada e criar a aplicagao em JavaFX 8 usando o JRebirth, GlobalFacade ¢ iniciado junto com a aplicagao e simplifica o acesso dos componentes. O Notifier carrega pequenas notificagdes chamadas Wave, e Wave sao pequenas mensagens que so usadas para comunicagdo entre os componentes. ServiceFacade and Services s30 usados para comunicagao com outras aplicagdes e que podem ter o tempo de execugo alto, Esses processos sio executados em uma pool de Thread ¢ os resultados sao enviados para os componentes interessados. UiFacade and Models séo componentes usados para gerenciar a interface com 0 usuério, Os elementos da componente View sio basicamente usados para criar uma interface usando os unidades visuais do JavaFX. Os elementos do componente Controller sio usados para gerenciar a légicas das interagdes da camada View. 0 Krebirth ainda possuir injegdo de dependéncia nativa, gerenciamento de threads nativa, ciclo de vida independente de cada camada e faz uso do Java Web Start, que é uma ferramenta java que inicializa uma aplicagao desktop por um servidor remoto. ‘Com todas essas caracterfsticas 0 projeto parece ser bem estruturado ¢ complexo, dada essa complexidade pode ser dificil para novos programadores, programadores que ‘vo migrar de uma linguagem ou adotar a ferramenta, aprender a arquitetura proposta. O padrio usado no mercado (MVC e suas variagSes) ja pode ser suficiente para iniciar uma aplicagao e gerencié-la, Outro problema é o declinio do uso da tecnologia Java Web Start, tanto pelo suporte de navegadores quando pelos problemas de seguranga 3.3. Griffon Griffon & um projeto escrito Groovy (linguagem que executa na JVM) criado em 2008 pelo The Griffon Team. I inspirador no Grails, faz. uso de Convencdo sobre Configuragao, fem suporte tanto para JavaFX quanto para o Swing. A arquitetura usada é 0 MVC. O ptojeto ainda possui varios plugins fazendo com que os projetos que o usam cresgam de acordo com a necessidade. 4, Solusio proposta Nesta seco seré mostrada a solugao proposta utilizando uma aplicagao simples como exemplo de acordo com 0 escopo apresentado, Seré abordado as ferramentas utilizadas para desenvolvimento e testes bem como utilizar cada parte do projeto. 4.1, Ferramentas utilizadas Para escrever 0 c6digo foi utilizado a IDE Intellij Comumnity 2016.2.3. [refx] IDE (In- tegrated Development Environment), ow Ambiente de Desenvolvimento Integrado, em portugués, é um programa que possui ferramentas que agilizam ao programador escrever seu cédigo. Junto a ele foi utilizada uma ferramenta chamada Scene Builder{refx] que serve para desenvolver telas para o JavaFX. ‘A versio do Tava utilizada foi Java 8. Para testes unitérios foi utilizado o JUnit 4 [refx], uma ferramenta chamada Arquillianrefs] para gerenciamento do CDI no ambiente de testes, uma ferramenta chamada TestFX{refx] que tem o propésito de facilitar testes no ambiente do JavaFX uma ferramenta chamada Surefire[tetx] para cobertura de testes, Para efeito de simular uma aplicagao real, foi utilizado 0 Hibernate [refx], que ¢ uma ferramenta para gerenciar a camada de ORM (Object Relational Mapping ou Mapeamento Objeto Relacional) que é uma ferramenta para mapear modelos orientados a objeto para tum banco de dados relacional. Também foram utilizadas todas as ferramentas descritas na segio Base Teérica sendo elas: JavaFX ¢ rellexio que ja vem acoplados no Java 8 Weld que foi importada para projeto. Para importar as bibliotecas necessérias que estio acopladas no Java 8 por padrao, foi utilizado o Maven. 4.2. Aplicagao exemplo exemplo descrito abordaré apenas o escopo da solugao proposta ¢ outras camadas per- tinentes para o entendimento do trabalho, Outras camadas de projeto como conexao com © banco de dados ¢ outros servicos nao serdo abordados. A aplicagao escolhida para efeito de demonstragao foi um gerenciador simples de gestio de presenga de alunos em uma instituigao de ensino. Os seguintes modelos esto presentes na aplicagao: Administrador (Administrator), Professor, Secretétio (Secretary), ‘Aluno (Student), Aula (Lesson), Presenga (Attendance), Podemos ver o diagrama de classes que foi gerado na Figura 2. Figure 2. Diagrama de classes da aplicagao exemplo Existem as seguintes agdes no sistema: criagao, edigao, listagem e visualizaga0 de Administradores, Alunos, Professores e Aulas. E edigio de presenga de alunos em suas turmas, As seguintes regras de negécio foram escolhidas: Administrador, Secretirio € Professor podem acessar o sistema, Os Administradores tem acesso a todo o sistema, Os Professores podem editar as presengas dos alunos que fazem parte de suas aulas. Os Sccretérios podem listar e ver alunos e suas presencas. 4.2.1, Formato padrao do JavaFX. 0 formato padrio de classes da aplicagao utilizando Maven pode ser vista na Fig, 4. Onde pacotes-e-classes-do-projeto é onde fica o cédigo java, resources/views é onde estio os arquivos .fxml. resources/assets é onde se encontram arquivos estiticos como imagens arquivos ess. ‘Uma forma padrao de inicializar uma aplicagdo em JavaFX sem a solugio ap- resentada pode ser criar uma classe Main com 0 método main onde serd inicializada a aplicagao, estender da classe Application que faz parte do pacote do JavaFX, ¢ imple- mentar o método start: public class Poverride public void star Parent root = PXMLLoader. Load (ge! primaryStage.setTitle ("Hello World"); primaryStage.setScene(new Scene (root, 300, 275)); primaryStage. show () (Stage primarystage) throws Exception( pasta-raiz java tp [nera-rne cotes-e-classes-do-projeto java [}-—pon. xa Figure 3. Modelo inicial de um projeto JavaFX com Maven ) public static vold main (s 1 args) { Launeh (args) ; ) ‘Uma classe controladora no JavaFX por padro tem o seguinte formato: public class SimpleContreller implements Initializable( private URL tion; private ceBundle resourceBundle; public void initialize(URL location, ResourceBundle xesourceBundle) { this. location = location; his.resourceBundle = res: ceBundle; A interface Initializable implementa 0 método initialize que por sua ver. recebe as varidveis location ¢ resourceBundle. ‘A variével location é a URL que possui 0 cam- inho do fxml carregado respectivo ao controlador. A varidvel resourceBundle serve para gerenciar multilinguagens no JavaFX. A URL é automaticamente injetada pelo JavaFX a0 se renderizar um tela ¢ 0 resourceBundle tem que set construfdo ¢ passado como ar- gumento na construgao de uma tela. Um controlador padrio do JavaFX nao é obrigado a implementar a classe Initializable nem 0 método initialize Para um arquivo fxml saber qual é seu respectivo controlador, é preciso colocar a classe controladora na tag raiz. do arquivo fxm 4.2.2, Inicializago da aplicagio ‘A solugao também tem como objetivo ser facil de usar. Desa forma, foi procurado um meio de inicializar a aplicagao de maneira simples. O que se precisa fazer & herdar da classe FxMain ¢ implementar 0 método firstScreen e escrever 0 método estitico padrao do java main, invocando 0 método initiate passando a classe atual como argumento. Na implementagao do método firsiSereen é preciso injetar a classe Result, que cuida do redi- recionamentos das rotas, ¢ invocar 0 método render que é responsavel por renderizar telas normais passando como argumentos 0 caminho do arquivo fxml ¢ o titulo da tela, respectivamente. public class Main extend einje: private Result result; public static void main(Stringt] initiate (Main.class, args); firstSereen() t-render ("/views/sa JavaFX"); res e.fxnl", "Primeira tela em ‘Também é necessério que os controladores herdem da classe Controller presente no frame work. Nao & preciso implementar a interface Initializable e 0 método initialize pois a classe Controller jé faz isso, Essas duas variaveis estio disponiveis como campos na classe pai, Controller. ler extends public class SimpleCont roller ( ) 4.2.3. Injegao de dependéncias no projeto A primeira coisa a se ter atengao é se 0 arquivo beans.xml esté presente na pasta resources/META-INF fazendo 0 projeto set gerenciavel pelo contexto CDI (O arquivo nao precisa ter nenhum contetido, basta existir no local especificado), Isto posto, a anotagio @Inject poderd ser usada no projeto. Injetar uma dependéncia em um controlador pode ser feita normalmente através do método construtor ou como campo de classe, Podemos ver no eédigo no formulario de administradores: ublie class FormController extends Controller private AdministratorDao administratozDao; @inject public FormController (AdministratorDao administratorDao) { chis.administratorDao = administratorDao; , ‘Também é possivel injetar dependéncia em outras partes do cédigo, como por exemplo na camada DAO. public class AdministratorDao extends Dao

You might also like