Melhorando o desempenho de aplicações em JSF

Tamanho: px
Começar a partir da página:

Download "Melhorando o desempenho de aplicações em JSF"

Transcrição

1 capa_ Melhorando o desempenho de aplicações em JSF Aumente a escalabilidade através de configurações e refatorações efetivas Adriano Castro é formado em Ciência da Computação pela Universidade Federal de Juiz de Fora e atua como desenvolvedor Java pela TO Brasil. Além disso é criador e desenvolvedor dos projetos Checando.com.br e tostring (www.tostring.com.br). / 12

2 Aplicações JSF possuem escalabilidade ameaçada quando utilizado sem o conhecimento básico da especificação do framework ou da implementação escolhida. Muitas vezes não sabemos como proceder diante de um cenário com recursos limitados e a performance da aplicação acaba sendo prejudicada. Este artigo irá mostrar como planejar e refatorar sistemas em JSF de acordo com a disponibilidade de recursos em ambientes de produção. que motiva a escolha do JSF como arquitetura de O referência para uma aplicação Web baseada em Java? Talvez seja a facilidade de desenvolver interfaces gráficas complexas; talvez seja sua capacidade de manter as camadas de modelo, controle e visualização bem separadas e injetáveis por containers, ou até mesmo sua característica orientada a eventos que permite o desenvolvimento de aplicações tão ricas quanto uma aplicação desktop. Mas o que torna o JSF tão robusto pode também o fazer pouco escalável. Segundo Eelco Klaver, na apresentação citada como referência para este artigo, enquanto aplicações web tradicionais servem a centenas de usuários, aplicações JSF podem não suportar 50 usuários. Nesse cenário, os maiores gargalos são o tamanho da sessão, o consumo de CPU e o uso de banda. Mas por que a utilização do JSF é tão custosa? Cada requisição feita a uma aplicação JSF faz com que o container instancie um objeto de contexto responsável por executar o fluxo de fases do framework. Esse objeto não é thread-safe, isto é, ele atende apenas a uma requisição por vez. Dessa forma, cada requisição, por mais que seja um simples post via AJAX, resulta em um grande consumo de processamento e memória no ciclo de vida desse objeto. Detalhado o problema é possível então modelar uma estratégia de otimização que visará diminuir o tempo e o consumo de recursos entre cada requisição e resposta de uma aplicação JSF. Tal estratégia será granularizada nos tópicos seguintes. É importante ressaltar que as decisões de implementação variam de acordo com as peculiaridades de cada sistema. Dessa forma, as estratégias de otimização nem sempre suprem completamente tais peculiaridades. Por isso é muito importante analisar o perfil da aplicação antes de decidir como arquitetá-la ou refatorá-la. Nos primeiros tópicos serão abordados o consumo de memória e processamento pelo JSF para manter o estado dos componentes visuais presentes na view. Você verá como é possível gerenciar a ordem de prioridade de cada um desses recursos em detrimento do outro levando-se em conta os recursos disponíveis no servidor de aplicações utilizado. Você verá também como fazer uso dos conversores e validadores presentes no JSF de uma forma menos impactante e, principalmente, o quanto é importante dizer ao JSF quando utilizá-los. Por fim serão apresentados parâmetros de configuração que podem contribuir em melhorias de desempenho. Espera-se, entretanto, que o leitor tenha um conhecimento mínimo da especificação do Java Server Faces ou que pelo menos esteja familiarizado com seu uso. De qualquer forma, no início de cada tópico será dada uma breve introdução a respeito do que motivou tal otimização. Saving State Method O saving state method (método de armazenamento de estado) foi escolhido para iniciar o processo de otimização de uma aplicação JSF. E não foi por acaso. Ele diz respeito a uma decisão arquitetural que refletirá impactando a aplicação por completo 13 \

3 pois refere-se a um recurso muito poderoso do JSF: a manutenção do estado de seus componentes que pode ser configurada através do parâmetro javax.faces.state_saving_method. Sabe-se que as requisições web são stateless (sem persistência de estado) ao contrário do JSF, que mantém o estado dos componentes entre as requisições. Para controlar os estados de todos os componentes presentes na view, uma árvore de estados gerenciada pelo framework deve ser armazenada em algum local de forma a ser carregada e atualizada. O JSF permite que o desenvolvedor decida onde mantê-la. Para dar suporte a essa escolha o JSF disponibiliza o parâmetro de contexto javax.faces.state_sa- ViNG METHOD que deve ser inserido no arquivo web. xml da aplicação. Os valores aceitos para este parâmetro são: server - valor padrão quando o parâmetro for omitido - e client, como exemplifica a Listagem 1. O que distingue as duas opções pode parecer simples: o método server armazena os estados no servidor enquanto o client os armazena no lado cliente da aplicação. As implicações em termos de consumo, entretanto, diferem muito. O método client faz com que o estado da árvore de componentes seja armazenado no cliente. Em outras palavras, o código da view que será gerado (HTML, por exemplo) passa a conter uma String enorme, codificada em Base64 e que representa o estado dos componentes que fazem parte dela. Com essa String armazenada no cliente, o servidor passa a manter menos informações na sessão do usuário, resultando em economia de memória em detrimento de CPU, já que a cada requisição o estado deve ser decodificado, remontado e codificado novamente para a resposta. Além disso, uma quantidade maior de informações trafega. isto é, abre-se mão de processamento e banda em prol de um menor consumo de memória. A figura 1 demonstra como essa grande String codificada é armazenada no código-fonte HTML de um cadastro simples de usuários com pouco menos de 10 campos. Neste exemplo, o valor do campo hidden cujo id é javax.faces.viewstate é enviado a cada requisição e decodificado para que o JSF possa restaurar o estado do formulário. Listagem 1. Exemplo de configuração do parâmetro. <context-param> <param-name> javax.faces.state_saving_method </param-name> <param-value>client</param-value> </context-param> A performance apresentada por uma aplicação em um determinado ambiente está muito relacionada à quantidade de recursos de processamento, memória e banda do hospedeiro. É necessário ter conhecimento da disponibilidade destes recursos, pois esta informação será relevante na escolha do método. Uma escolha malfeita resultará em desperdício de recursos e, consequentemente, na perda de performance. O processo de otimização se resume em colocar na balança o quanto de recurso se tem disponível e o consumo resultante de acordo com cada opção. O método de armazenamento server faz com que o JSF armazene o estado dos componentes no servidor, resultando em um maior consumo de memória nesse lado e um consumo menor no lado do cliente. Com esta opção, o consumo de banda é menor, já que não há necessidade de armazenar informações a respeito do estado dos componentes já que menos informações trafegam. Para aplicações que fazem uso intenso de ajax, onde o número de requisições é alto, percebe-se uma melhoria no tempo de resposta quando se tem limitações de tráfego por parte do servidor ou quando a conexão do cliente não é das melhores. Figura 1. Armazenamento do estado dos componentes no HTML gerado. Por outro lado, é muito importante analisar o que cada decisão implica em termos de usabilidade e se as consequências de uma opção não interferem no produto final. Por exemplo, a opção server prejudica a funcionalidade de navegação entre históricos do browser, enquanto o método client fornece pouca segurança, já que expõe o estado dos componentes no código gerado ao cliente. Além dessas, existem outras implicações que devem ser levadas em conta que não serão listadas aqui de forma a focar apenas na otimização de aplicações em JSF. Não existe, assim, uma opção melhor que a outra. Existe uma opção que melhor se adapta às necessidades de cada aplicação e essa análise deve ser feita por alguém que, além de conhecê-la por completo também conhece quem a hospedará. Por esse motivo, se a escolha acabar sendo a opção que apresenta a pior performance, deve-se pensar em aumentar a quantidade de recursos disponíveis no hospedeiro. / 14

4 Escopo dos managed beans Todo managed bean gerenciável pelo JSF deve possuir um escopo, ou pelo menos a indicação explícita de que não pertence a escopo algum. Este escopo determina o local onde o bean ficará armazenado e, principalmente, o tempo de vida de suas instâncias. Os escopos disponíveis pelo JSF são Request, View, Session, Application, Custom e None. A indicação do escopo ao bean pode ser feita tanto no faces-config.xml quanto por annotations na própria classe. De uma forma bem resumida - apontando apenas o que interessa para analisá-los em termos de desempenho e consumo de recursos - managed beans com escopo de Request são instanciados pelo JSF no início de uma requisição e morrem após o response ser enviado. Managed beans cujo escopo é o de View nascem quando o JSF cria uma nova view, permanecem vivos enquanto requisições post são realizadas para a mesma página e morrem quando outra view é criada a partir do modelo de navegação do JSF (vide JSF Navigation Model). O escopo de um managed bean, quando omitido, é o Request. É comum não informar o escopo de um bean, muitas vezes por desconhecimento, e isso faz com que todos os managed beans da aplicação sejam criados e eliminados durante uma única requisição. isso resulta em uma carga de processamento muito grande, pois beans que realizam instanciações aninhadas ou que acessam a base de dados em sua inicialização para carregar os dependentes são inicializados a todo o tempo, inclusive em requisições para atualizações parciais, como as em ajax. Outro equívoco cometido com frequência é a utilização do escopo View em todos os managed beans por manter os valores dos objetos de modelo vivos entre requisições para a mesma página ou por que eles são mais compatíveis com componentes de terceiros que envolvem paginação e estados mais complexos. Um bean cujo escopo é View pode ficar alocado na memória do servidor durante um longo período de tempo. Para grandes beans e muitos usuários o consumo de memória se torna absurdo. Managed beans cujo escopo é Session permanecem vivos enquanto a sessão do usuário estiver ativa e o escopo Application mantém os beans vivos enquanto a aplicação estiver viva. Por fim, o escopo Custom será detalhado no final deste tópico e o None significa que o bean tem seu escopo determinado pelo bean que o mantém. Selecionar bem o escopo dos managed beans de uma aplicação é crucial para seu desempenho. Quanto menos deles houver associados à sessão ou à aplicação melhor. Escolha com cuidado o escopo de seus beans Beans cujo escopo é Application, Session ou View podem ocupar significantemente grande parte da memória em ambientes acessados por grandes quantidades de usuários e por isso devem ser evitados. É recomendável guardar nestes beans somente os componentes ou as informações que realmente necessitam ser persistidas entre as requisições. Há quem critique o uso de mais de um bean por view, mas, em determinados casos, isso pode ser necessário, já que um dos beans pode ser usado apenas para os objetos que realmente precisam sobreviver a estas requisições e o outro para objetos que podem ser descartados após a resposta. Ao mesmo tempo é recomendável evitar que beans responsáveis por consultas ao banco tenham escopo de request quando a página possuir renderizações parciais. Requisições realizadas dentro desta página com o objetivo de renderizar porções da mesma, como, por exemplo, as feitas em ajax para popular combos ou preencher componentes, resultarão em uma nova instanciação dos beans e, consequentemente, uma nova consulta ao banco. Dessa forma, é necessário analisar, bean por bean, quais deles merecem ou não ter um escopo mais custoso, em termos de memória e processamento. Utilize o CustomScope com mais frequência Este subtópico foi baseado no livro Java Server Faces The Complete Reference, escrito por um dos desenvolvedores da especificação do JSF, Ed Burns. O escopo Request é muito utilizado em aplicações JSF por ser uma ponte de passagem de dados entre requisições e, principalmente, por ter um tempo de vida curto. Este escopo, entretanto, faz parte da especificação de Servlets e, por esse motivo, atende a seus contratos. Entre os termos deste contrato incluem-se as notificações de listeners que podem ou não ser registrados. independentemente de nenhum, um, ou até mais de um listener é possível perceber impactos na performance de cada requisição. Para dar base à otimização desses beans, voltamos à definição de escopos, onde apresentamos o CustomScope. Ele permite ao desenvolvedor definir, criar ou utilizar escopos personalizados ou fornecidos à parte. Tal escopo recebe como parâmetro uma EL que deve apontar para um objeto que implementa java.util.map. Dessa forma o tempo de vida do bean passará a depender do tempo de vida do mapa utilizado. Utilizar o CustomScoped com um escopo criado e gerenciado por você é uma tarefa trabalhosa e pode trazer ganhos ao desempenho se bem-feito, mas não 15 \

5 é a criação de escopo que será sugerida aqui, e sim a utilização de um escopo introduzido na versão 2.0 do JSF cujo tempo de vida é sutilmente reduzido e não tem seu desempenho impactado pelos motivos citados anteriormente. Este novo escopo é chamado de FacesContext attributes scope e tem o tempo de vida definido pelo tempo de vida da invocação do FacesServlet. Seu acesso é realizado através de uma EL como no exemplo abaixo: #{facescontext.attributes Recomenda-se, a partir daí, usar o CustomScoped apontando para este mapa de atributos do FacesContext como alternativa ao RequestScoped de forma a ter ganhos de desempenho para beans cujo objetivo foi citado no início = #{facescontext.attributes ) public class UmBeanQualquer { Otimizando as validações e conversões Converters e validators - conversores e validadores, respectivamente - são dois recursos muito poderosos do JSF e estão presentes nas primeiras fases do ciclo de vida de uma requisição. É através deles que os valores preenchidos nos clientes são convertidos de String para os tipos do modelo da aplicação e validados de acordo com as regras de negócio de cada um. Mais detalhes a respeito do ciclo de vida serão vistos no próximo tópico. É recomendável sempre utilizar os conversores e validadores presentes na implementação do JSF utilizada, pois eles atendem a maioria dos casos e já são otimizados. De qualquer forma, o JSF fornece interfaces que permitem aos desenvolvedores criar e reutilizar implementações próprias destes recursos. Quando componentes personalizados por demandas peculiares de uma aplicação são construídos é quase certo que eles acompanharão um conversor e, pelo menos, um validador, também personalizados. A forma mais comum de se implementar um conversor é criando uma classe que implementa a interface javax.faces.convert.converter e configurando o JSF através de entradas no faces-config.xml ou através de anotações para permitir ao container injetar instâncias destes recursos na aplicação. Estes dois passos já bastam, mas as boas práticas na criação de conversores e validadores serão omitidas por não fazer parte do escopo deste artigo. As Listagens 2 e 3 contêm um conversor e como eles são utilizados, respectivamente. Para isso será adotado um exemplo de cadastro de veículos. Listagem 2. Criação do conversor. package cadastroplacas; import javax.faces.bean.applicationscoped; import javax.faces.bean.managedbean; import javax.faces.component.uicomponent; import javax.faces.context.facescontext; import javax.faces.convert.converter; import = cadastroplacas. ConversorPlaca ) public class ConversorPlaca implements Converter { public ConversorPlaca() { System.out.println( Instância de ConversorPlaca criada. public Object getasobject(facescontext context, UIComponent component, String value) { return new Placa(value.substring(0, 3), public String getasstring(facescontext context, UIComponent component, Object value) { Placa placa = (Placa) value; return placa.getprefixo().touppercase() placa.getnumero(); Listagem 3. Utilização do conversor de placas. <h:body> <h:form> <h:panelgrid columns= 2 > <h:outputlabel value= Placa: /> <h:inputtext value= #{cadastroplacabean.placa converter= cadastroplacas.conversorplaca /> <h:outputtext value= /> <h:commandbutton value= Cadastrar /> </h:panelgrid> </h:form> </h:body> Foram omitidos também os outros campos que possivelmente seriam relevantes a um cadastro de veículos, assim como o bean de cadastro de placas, pois não queremos entrar no mérito da funcionalidade, mas sim no consumo de recursos dos conversores. / 16

6 Para se ter uma ideia dos efeitos causados na aplicação, colocamos uma chamada à saída padrão do Java no construtor de ConversorPlaca, pois iremos focar este tópico na instanciação desnecessária de conversores para casos onde eles são consumidos da maneira convencional. No momento em que a tela é carregada, assim como em cada evento disparado pelo botão Cadastrar, uma nova instância de ConversorPlaca é criada. isso acontece, pois no início o JSF busca o objeto do modelo para convertê-lo e exibi-lo no campo. Já durante o evento do botão, o valor do campo preenchido é convertido para ser validado e atualizado no modelo. É possível perceber esse comportamento pela escrita da frase instância de ConversorPlaca criada inúmeras vezes na saída padrão do Java enquanto se utiliza o cadastro - estamos utilizando a saída padrão apenas para simplificar o código, mas recomenda-se apontar sempre para o log da aplicação em questão. Sabe-se que a instanciação desnecessária e descontrolada de objetos é um fator que compromete o desempenho. No exemplo acima estamos falando apenas de um conversor e duas requisições, mas em ambientes reais pode haver uma grande quantidade deles em conjunto com um número maior de usuários e eventos. Cada instância criada deste conversor será descartada ao final da requisição e o coletor de lixo provavelmente cuidará dela, por isso não se preocupe, você não vai ter problemas de estouro de memória por culpa dos conversores de sua aplicação. Entretanto por que não reduzir essa quantidade de instanciações já que é possível? Você poupará a JVM de um trabalho desnecessário com apenas algumas modificações. Os beans cujo escopo é Application já foram descritos em tópicos anteriores e este escopo será utilizado para manter apenas uma instância do conversor durante o tempo de vida da aplicação. Para isso, o conversor será tratado a partir de agora como um managed bean e o JSF cuidará de sua instanciação antes de começar a atender às requisições. A única alteração necessária na classe do conversor está presente na Listagem 4. Listagem 4. Alterações no = cadastroplacas. ConversorPlaca = public class ConversorPlaca implements Converter { A partir de agora, sempre que a aplicação iniciar, uma instância de ConversorPlaca será criada e mantida até que a aplicação não esteja mais em execução. A Listagem 5 mostra como o componente deve consumir essa única instância do conversor. Listagem 5. Como a tela deverá passar a consumir o componente. <h:outputlabel value= Placa: /> <h:inputtext value= #{cadastroplacabean.placa converter= #{conversorplaca /> Com essa simples alteração economiza-se memória, já que menos objetos do conversor serão instanciados para cada requisição, além de evitar processamento desnecessário. Uso de immediate nos campos e eventos Como dito no início do artigo, uma de nossas metas será reduzir o tempo gasto em um request. O JSF processa cada requisição em um fluxo de seis fases. Explicar detalhadamente cada fase não faz parte do escopo do artigo, mas um entendimento superficial é necessário para otimizar as requisições que se aplicam a este tópico. Restore View é a primeira das seis fases. É aqui que o JSF obtém ou cria a view em que o usuário se encontra. Esta view é mantida através de componentes em estrutura de árvore. Logo após executada, se a requisição se trata de um post, as próximas fases serão executadas, caso contrário ele irá diretamente para a última delas. Considerando então uma requisição post, a segunda fase, Apply Request Values, recupera os valores preenchidos no formulário submetido em formato de String e que serão convertidos nos tipos corretos de acordo com a associação dos campos com os objetos em seu managed bean. Em seguida, a fase Process Validation realiza as validações dos campos e se todos os campos forem válidos, Update Model Values aplica os valores no modelo. Por fim invoke Application executa os eventos associados à requisição e Render Response atualiza a view a ser retornada para o usuário. Cada campo presente em um formulário passa por todas estas fases e não é possível ignorá-las. É possível, entretanto, aperfeiçoar parte do processo. Existem muitos casos onde um formulário possui procedimentos internos que o modifica à medida que o usuário o preenche. Para facilitar o entendimento imagine um exemplo de cadastro de usuários onde, na seção de endereço, há uma caixa de seleção de cidade cujo preenchimento depende do que foi selecionado previamente na caixa de seleção de estado. Este campo permanece vazio e é preenchido no momento em que um estado é selecionado. O evento que pre- 17 \

7 enche a caixa de cidades pode ser executado por uma requisição em ajax ou não, mas o que importa é que ela será executada seguindo o fluxo do JSF. Considere agora que esse formulário contém não somente os campos de UF e cidade, mas todos os campos relevantes de um cadastro de usuário completo como nome, data de nascimento etc. Qualquer evento no campo UF enviará todos os valores preenchidos nos campos e as fases do JSF se aplicarão a todos eles. Nestes casos há um desperdício de recursos, pois o formulário inteiro está sendo processado pelo fluxo do JSF quando o que importa ali é obter a UF selecionada e carregar uma lista de cidades para preencher o campo. A Listagem 6 ilustra esse exemplo. Listagem 6. Exemplo de uma tela de cadastro de usuários. <h:panelgrid columns= 2 > <h:outputlabel value= Nome: /> <h:inputtext value= #{flash.nome /> <h:outputlabel value= Data de nascimento: /> <h:inputtext value= #{flash.datanascimento /> <h:outputlabel value= Logradouro: /> <h:inputtext value= #{flash.logradouro /> <h:outputlabel value= Número: /> <h:inputtext value= #{flash.numero /> <h:outputlabel value= Complemento: /> <h:inputtext value= #{flash.complemento /> <h:outputlabel value= UF: /> <h:selectonemenu value= #{flash.estado onchange= this.form.submit() valuechangelistener= #{cidades.atualizarlistacidades > <f:selectitems itemlabel= #{estado itemvalue= #{estado value= #{cidades.estados var= estado /> </h:selectonemenu> <h:outputlabel value= Cidade: /> <h:selectonemenu value= #{flash.cidade > <f:selectitems itemlabel= #{cidade itemvalue= #{cidade value= #{cidades.cidades var= cidade /> </h:selectonemenu> <h:outputtext value= /> <h:commandbutton action= sucesso value= Cadastrar /> </h:panelgrid> Repare que foram omitidos muitos outros campos relevantes ao cadastro de usuários de forma a facilitar o entendimento das alterações que serão realizadas. Outro detalhe importante é a ausência de um managed bean para o usuário. Foi utilizado um tipo especial de memória chamada Flash em JSF que serve apenas como uma ponte para passagem de valores através de uma requisição. Um bean de cidades foi criado com a simples tarefa de retornar uma lista de acordo com a UF selecionada, mas ele será omitido, pois depende muito de como as camadas de negócio são implementadas em cada aplicação. O exemplo da Listagem 6 é uma prática ruim em JSF, pois, como dito anteriormente, há o desperdício de recursos na conversão e validação de todos os campos no evento disparado pela lista de estados. Dessa forma, para aperfeiçoar esta requisição precisaremos dizer ao JSF que eventos gerados a partir da lista de estados se tratam apenas de atualizações parciais em nossa view e não representam a ação de cadastro. É possível alcançar esse comportamento a partir do atributo immediate. Este atributo garante ao componente que sua conversão e validação, assim como os eventos dos botões, se darão na primeira fase Apply Request Values. Com isso, percorre-se um atalho no fluxo de fases somente com as informações que interessam para aquela requisição. E este atalho reduz o tempo do ciclo de vida da requisição, dando lugar à próxima requisição mais rapidamente (lembre-se que cada requisição é executada unitariamente pelo JSF, pois o Faces Context não é thread-safe). Voltando ao exemplo da Listagem 6, iremos adicionar o atributo immediate= true no campo que irá disparar o evento e adicionar um novo botão, também com este atributo, que irá disparar o request pegando o atalho discutido anteriormente. Não iremos adicionar o atributo no botão Cadastrar, pois não queremos que o formulário inteiro tenha este comportamento. Vamos otimizar somente o que dá pra otimizar aqui. Por fim alteraremos o evento onchange para chamar o novo botão criado. A Listagem 7 mostra como ficará o código. Listagem 7 Aplicação do atributo immediate= true no cadastro <h:panelgrid columns= 2 > <h:outputlabel value= Nome: /> <h:inputtext required= true value= #{flash.nome /> <h:outputlabel value= Data de nascimento: /> <h:inputtext value= #{flash.datanascimento /> <h:outputlabel value= Logradouro: /> <h:inputtext value= #{flash.logradouro /> <h:outputlabel value= Número: /> <h:inputtext value= #{flash.numero /> <h:outputlabel value= Complemento: /> <h:inputtext value= #{flash.complemento /> / 18

8 <h:outputlabel value= UF: /> <h:selectonemenu immediate= true value= #{flash.estado onchange= document. getelementbyid( form:atualizarcidades ).click() valuechangelistener= #{cidades.atualizarlistacidades > <f:selectitems itemlabel= #{estado itemvalue= #{estado value= #{cidades.estados var= estado /> </h:selectonemenu> <h:outputlabel value= Cidade: /> <h:selectonemenu value= #{flash.cidade > <f:selectitems itemlabel= #{cidade itemvalue= #{cidade value= #{cidades.cidades var= cidade /> </h:selectonemenu> <h:outputtext value= /> <h:commandbutton action= sucesso value= Cadastrar /> </h:panelgrid> <h:commandbutton style= visibility: hidden id= atualizarcidades value= atualizarcidades immediate= true /> Para grandes formulários é possível notar uma diferença significativa - em questão de milissegundos - nos eventos disparados em ajax que passam a usar o immediate como forma de não submetê-los por completo ao fluxo de fases do JSF. É necessário lembrar que este recurso não se restringe a requisições em ajax, mas também para requisições convencionais que envolvam o refresh da página por completo. Recomenda-se que, para aplicações em processo de otimização, todos os formulários sejam revistos e, sempre que houver atualizações parciais em sua estrutura, o atributo immediate= true seja utilizado nos campos e em botões com a finalidade única de realizar a requisição do evento. As requisições terminarão mais rapidamente e o JSF irá suportar uma quantidade maior delas em um dado espaço de tempo. Configurações adicionais A especificação do JSF traz uma série de parâmetros de inicialização que permitem aos desenvolvedores configurá-la. Quanto maior for o conhecimento desses parâmetros e do perfil da aplicação maior serão a qualidade e o desempenho do produto gerado. Além desses parâmetros há também os parâmetros específicos de cada implementação do JSF. Cada implementação pode ainda fornecer valores padrões para estes parâmetros. Descrever cada um dos parâmetros tornaria este artigo enorme, por isso serão fornecidos dois exemplos de como é possível obter melhores resultados em uma aplicação a partir de pré-configurações. Estas configurações deverão ser aplicadas no web.xml de sua aplicação. Project Stage O JSF 2.0 introduziu um parâmetro responsável por manter referência à fase atual da aplicação representado pelo enum javax.faces.application. ProjectStage. Os valores de fase permitidos são Development, UnitTest, SystemTest e Production. Para não fugir ao escopo deste artigo não serão detalhados os comportamentos da aplicação de acordo com cada fase disponível. Basta saber que o JSF consome mais recursos quando a aplicação está em fase de desenvolvimento, pois ele trabalhará focado em fornecer aos desenvolvedores facilidades como mensagens de erro mais detalhadas e possibilidades de diagnóstico da aplicação maximizadas, tudo isso a custo de processamento e memória. Um detalhe que passa despercebido é que algumas ides adicionam, por conta própria, o valor Development para este parâmetro no momento da criação de novos projetos. Muitas vezes este valor é mantido nos ambientes de produção após a publicação por descuido ou por desconhecimento do parâmetro, o que é prejudicial ao desempenho. Veja o exemplo da Listagem 8 que contém um trecho do web.xml gerado automaticamente pelo NetBeans quando da criação de uma nova aplicação web: Listagem 8. Exemplo de configuração automática do NetBeans. <context-param> <param-name>javax.faces.project_stage </param-name> <param-value>development</param-value> </context-param> De acordo com a especificação do JSF, o valor default de PROJECT_STAGE é Production, por isso remova esta tag de seu web.xml antes de cada publicação. Mantenha este valor somente em seu ambiente local de desenvolvimento. Facelets Refresh Period Durante a fase de desenvolvimento de uma aplicação, por questões de produtividade, é desejável que as alterações nos arquivos físicos das páginas sejam compiladas em tempo de execução para que elas fiquem disponíveis no browser sem que haja a necessidade de um restart no servidor. E para que isso seja possível o Facelets verifica se há alterações nestas páginas periodicamente. Essa varredura consome re- 19 \

9 Conheça mais sua implementação Fabricantes de implementações da especificação JSF geralmente fornecem parâmetros de inicialização adicionais que permitem ajustar ainda mais sua aplicação. Por isso não se limite a conhecer somente a especificação do JSF, mas também a documentação da implementação utilizada. Até a data desta publicação, o The Apache Software Foundation fornecia em seu site oficial (http:// myfaces.apache.org) uma seção chamada Web Context Parameters contendo a lista de parâmetros presentes no JSF e os valores padrões adotados pelo MyFaces - uma das implementações do JSF disponíveis - além de seus parâmetros específicos. Há uma categorização dos parâmetros e uma das categorias é performance. Dê uma atenção especial a ela. Espera-se que cada fabricante forneça essas informações, por isso é recomendável que você estude e trace um plano de configuração de acordo com o perfil de sua aplicação. cursos e muitos não sabem, mas é possível aumentar seu período de execução ou até mesmo desativá-la. A utilidade dessa recompilação automática se restringe ao ambiente de desenvolvimento. Afinal de contas, a frequência com que uma aplicação é publicada em ambientes de produção não justifica manter o recurso ativado. Além disso, em muitos casos, publicações acompanham arquivos.java e sua atualização requer o restart do servidor. Quando omitido, o período de atualização padrão do Facelets depende da implementação do JSF utilizada JSF é uma especificação e não uma implementação - e recomenda-se desligá-lo antes de cada publicação. Para desabilitar este recurso basta armazenar o valor -1 em seu parâmetro de inicialização correspondente, como mostra a Listagem 9, que é um trecho do web. xml de uma aplicação web. Listagem 9. Desativação do recurso de atualização do Facelets. <context-param> <param-name> javax.faces.facelets_refresh_period </param-name> <param-value>-1</param-value> </context-param> Considerações Finais Não existe uma receita de bolo a ser seguida para otimizar suas aplicações. Como você pode ter percebido fizemos uso apenas da especificação do JSF de forma a selecionar as decisões arquiteturais de acordo com os recursos que temos disponíveis para hospedar uma aplicação. A árdua tarefa de otimizar aplicações complexas requer paciência, mas também requer que você saiba o que está fazendo. Parte-se do princípio que ela já atende a seus clientes, mas pode atender melhor. Um bom trabalho de otimização exige que você conheça bem sua aplicação e o framework utilizado. Por isso recomendo que leiam a especificação do JSF e pelo menos um livro de referência completo. Muita coisa já poderá ser óbvia pra você, mas sempre é possível extrair detalhes pequenos que refletem melhorias no produto final. Além disso, recomendo utilizar ferramentas de perfil para que você possa observar as melhorias consequentes das modificações e se o caminho seguido está correto. /referências > Java Server Faces The Complete Reference, Ed Burns, Chris Schalk; > Tuning JSF Applications - Session size matters: sessions/00017/; > JSF Best Practices: > JSF 2.0 Reminder: Project Stage: blog/driscoll/archive/2009/09/28/jsf-20-reminder-projectstage / 20

MÓDULO Programação para Web 2

MÓDULO Programação para Web 2 MÓDULO Programação para Web 2 USANDO O JSF Continuação Interdependência e Injeção Instâncias de Managed Beans podem conversar entre si para dividir o processamento das requisições dos usuários de acordo

Leia mais

Anotações e Navegação no JSF 2.0

Anotações e Navegação no JSF 2.0 1/16 Anotações e Navegação no JSF 2.0 Simplifique a navegação e a configuração XML com o JSF 2.0 Aprenda a utilizar anotações e navegações implícita e condicional em suas aplicações JSF 2.0 MARCEL TOKARSKI

Leia mais

Experiência em missão crítica de missão crítica

Experiência em missão crítica de missão crítica 2 / 49 Experiência em missão crítica de missão crítica Pioneira no ensino de Linux à distância Parceira de treinamento IBM Primeira com LPI no Brasil + de 30.000 alunos satisfeitos Reconhecimento internacional

Leia mais

Desenvolvimento de aplicação web com framework JavaServer Faces e Hibernate

Desenvolvimento de aplicação web com framework JavaServer Faces e Hibernate Desenvolvimento de aplicação web com framework JavaServer Faces e Hibernate Tiago Peres Souza 1, Jaime Willian Dias 1,2 ¹Universidade paranaense (Unipar) Paranavaí PR Brasil tiagop_ti@hotmail.com 2 Universidade

Leia mais

Minha primeira aplicação utilizando Java Server Faces + Glassfish

Minha primeira aplicação utilizando Java Server Faces + Glassfish Minha primeira aplicação utilizando Java Server Faces + Glassfish Este tutorial apresenta de forma simples, como iniciar no desenvolvimento com o framework Java Server faces 1.2, utilizando-se o servidor

Leia mais

Além do JSF: Matriz de Campos com Recursos e Práticas Incomuns

Além do JSF: Matriz de Campos com Recursos e Práticas Incomuns Décio Heinzelmann Luckow (decioluckow@gmail.com): é bacharel em Sistemas de Informação pela Univille e pósgraduando em Gestão de Projetos pela Sustentare Escola de Negócios. Já trabalhou com as linguagens

Leia mais

Java Server Faces 2.0 Rich Faces 4.0

Java Server Faces 2.0 Rich Faces 4.0 DEPARTAMENTO DE INFORMÁTICA - DI Java Server Faces 2.0 Rich Faces 4.0 Quais as novidades e alterações nas novas versões das tecnologias? Pablo Bruno de Moura Nóbrega Analista de Sistemas pablo.nobrega@uece.br

Leia mais

JSF2 e AJAX. Desenvolvimento Web com. Construa aplicações Web mais interativas e elegantes

JSF2 e AJAX. Desenvolvimento Web com. Construa aplicações Web mais interativas e elegantes Desenvolvimento Web com JSF2 e AJAX Construa aplicações Web mais interativas e elegantes Wagner Borges (wagner@quebrandoparadigmas.com): é formado em Sistemas de Informação pela FACID e especializado em

Leia mais

INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DE ALAGOAS CURSO TECNICO EM INFORMATICA DISCIPLINA:

INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DE ALAGOAS CURSO TECNICO EM INFORMATICA DISCIPLINA: INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DE ALAGOAS CURSO TECNICO EM INFORMATICA DISCIPLINA: PROGRAMAÇÃO ORIENTADA A OBJETOS PROFESSOR: REINALDO GOMES ASSUNTO: REVISÃO DA INTRODUÇÃO A ORIENTAÇÃO

Leia mais

JSF e PrimeFaces. Professor: Ricardo Luis dos Santos IFSUL Campus Sapucaia do Sul

JSF e PrimeFaces. Professor: Ricardo Luis dos Santos IFSUL Campus Sapucaia do Sul JSF e PrimeFaces Professor: Ricardo Luis dos Santos IFSUL 2015 Agenda Introdução Desenvolvimento Web Java Server Faces Exercício 2 Introdução Ao longo dos anos diversas linguagens de programação foram

Leia mais

ENTERPRISE JAVABEANS 3. Msc. Daniele Carvalho Oliveira

ENTERPRISE JAVABEANS 3. Msc. Daniele Carvalho Oliveira ENTERPRISE JAVABEANS 3 Msc. Daniele Carvalho Oliveira Apostila Servlets e JSP www.argonavis.com.br/cursos/java/j550/index.html INTRODUÇÃO Introdução Enterprise JavaBeans é um padrão de modelo de componentes

Leia mais

As Novidades do JSF 2.0

As Novidades do JSF 2.0 artigo As Novidades do JSF 2.0 Conheça a nova versão do JSF que traz inúmeras vantagens em relação ao seu antecessor. O JSF é hoje a principal ferramenta no mundoj para desenvolvimento Web, principalmente

Leia mais

PROJETO PEDAGÓGICO DE CURSOS

PROJETO PEDAGÓGICO DE CURSOS 1 de 6 PROJETO PEDAGÓGICO DE CURSOS BURITREINAMENTOS MANAUS-AM MARÇO / 2015 2 de 6 PACOTES DE TREINAMENTOS BURITECH A Buritech desenvolveu um grupo de pacotes de treinamentos, aqui chamados de BuriPacks,

Leia mais

Boas Práticas de Desenvolvimento Seguro

Boas Práticas de Desenvolvimento Seguro Boas Práticas de Desenvolvimento Seguro Julho / 2.012 Histórico de Revisões Data Versão Descrição Autor 29/07/2012 1.0 Versão inicial Ricardo Kiyoshi Página 2 de 11 Conteúdo 1. SEGURANÇA DA INFORMAÇÃO

Leia mais

AJAX no GASweb. Mas e afinal, para que usamos o AJAX?

AJAX no GASweb. Mas e afinal, para que usamos o AJAX? Nível - Avançado AJAX no GASweb Por: Pablo Hadler AJAX (Asynchronous Javascript and XML) foi criado com o princípio de ser uma maneira rápida e otimizada de podermos fazer requisições Web, sendo esta totalmente

Leia mais

UM ESTUDO SOBRE ARQUITETURA PARA DESENVOLVIMENTO DE SOFTWARE WEB UTILIZANDO NOVAS TECNOLOGIAS

UM ESTUDO SOBRE ARQUITETURA PARA DESENVOLVIMENTO DE SOFTWARE WEB UTILIZANDO NOVAS TECNOLOGIAS UM ESTUDO SOBRE ARQUITETURA PARA DESENVOLVIMENTO DE SOFTWARE WEB UTILIZANDO NOVAS TECNOLOGIAS Edi Carlos Siniciato ¹, William Magalhães¹ ¹ Universidade Paranaense (Unipar) Paranavaí PR Brasil edysiniciato@gmail.com,

Leia mais

Frameworks RIA para JSF lado a lado

Frameworks RIA para JSF lado a lado Maykon Junior Vaz (maykonjv@gmail.com): é graduando em Bacharelado em Sistemas de Informação na Universidade do Estado de Minas Gerais Frutal, onde desenvolveu diversos projetos Web utilizando tecnologia

Leia mais

Componentes no Java EE

Componentes no Java EE Unidade III Componentes no Plataforma Java Enterprise Edition Adiciona ao Java suporte para: Desenvolvimento de Aplicações Web: JSP, Servlets e Componentes de Negócio: Interconexão com Sistemas Legados:

Leia mais

Tutorial para criação de componentes JSF Facelets Por Érico GR 07/08/2007

Tutorial para criação de componentes JSF Facelets Por Érico GR 07/08/2007 Tutorial para criação de componentes JSF Facelets Por Érico GR 07/08/2007 Nível: Intermediário Este tutorial tem como objetivo criar um simples componente que renderiza uma tag label utilizando recursos

Leia mais

JavaServer Faces (JSF) Leonardo Murta (leomurta@ic.uff.br)

JavaServer Faces (JSF) Leonardo Murta (leomurta@ic.uff.br) JavaServer Faces (JSF) Leonardo Murta (leomurta@ic.uff.br) Especificação/IDE/Implementação Esse curso foi preparado em 03/2015 usando a seguinte especificação, IDE e implementação Especificação JavaServer

Leia mais

Torne seu site mais rápido e venda mais

Torne seu site mais rápido e venda mais Torne seu site mais rápido e venda mais Descubra como criar uma estratégia de aceleração de sites que deixe seu site mais rápido e aumente sua conversão UAIZO A Uaizo ajuda a sua empresa a definir a estratégia

Leia mais

Programação Orientada a Objetos com PHP & MySQL Cookies e Sessões. Prof. MSc. Hugo Souza

Programação Orientada a Objetos com PHP & MySQL Cookies e Sessões. Prof. MSc. Hugo Souza Programação Orientada a Objetos com PHP & MySQL Cookies e Sessões Prof. MSc. Hugo Souza Se você precisar manter informações sobre seus usuários enquanto eles navegam pelo seu site, ou até quando eles saem

Leia mais

5 Detalhes da Implementação

5 Detalhes da Implementação Detalhes da Implementação 101 5 Detalhes da Implementação Neste capítulo descreveremos detalhes da implementação do Explorator que foi desenvolvido usando o paradigma MVC 45 e o paradigma de CoC 46 (Convention

Leia mais

Java EE 6. A revolução do. Um overview sobre as novidades da JSR 316. a r t i g o

Java EE 6. A revolução do. Um overview sobre as novidades da JSR 316. a r t i g o a r t i g o Pedro Henrique S. Mariano (pedro.mariano@caelum.com.br) técnologo em Análise e Desenvolvimento de Sofware pela FIAP, possui as certificações SCJP 6 e SCRUM master.trabalha como consultor e

Leia mais

Introdução ao X3. Exercício 1: Criando um registro de Contato

Introdução ao X3. Exercício 1: Criando um registro de Contato Introdução ao X3 Exercício 1: Criando um registro de Contato Inicie por adicionar um novo registro de Contato. Navegue para a tabela de Contato clicando na aba de Contato no alto da página. Existem duas

Leia mais

Java II. Sérgio Luiz Ruivace Cerqueira sergioruivace@gmail.com

Java II. Sérgio Luiz Ruivace Cerqueira sergioruivace@gmail.com Java II Sérgio Luiz Ruivace Cerqueira sergioruivace@gmail.com Por quê JSP? Com Servlets é fácil Ler dados de um formulário Recuperar dados de uma requisição Gerar informação de resposta Fazer gerenciamento

Leia mais

INTRODUÇÃO À TECNOLOGIA SERVLETS

INTRODUÇÃO À TECNOLOGIA SERVLETS PROGRAMAÇÃO SERVIDOR EM SISTEMAS WEB INTRODUÇÃO À TECNOLOGIA SERVLETS Prof. Dr. Daniel Caetano 2012-1 Objetivos Apresentar o conceito aplicações orientada a serviços via web Apresentar o papel dos contentores

Leia mais

Desenvolvendo Aplicações Web com NetBeans

Desenvolvendo Aplicações Web com NetBeans Desenvolvendo Aplicações Web com NetBeans Aula 3 Cap. 4 Trabalhando com Banco de Dados Prof.: Marcelo Ferreira Ortega Introdução O trabalho com banco de dados utilizando o NetBeans se desenvolveu ao longo

Leia mais

Como criar um EJB. Criando um projeto EJB com um cliente WEB no Eclipse

Como criar um EJB. Criando um projeto EJB com um cliente WEB no Eclipse Como criar um EJB Criando um projeto EJB com um cliente WEB no Eclipse Gabriel Novais Amorim Abril/2014 Este tutorial apresenta o passo a passo para se criar um projeto EJB no Eclipse com um cliente web

Leia mais

Scriptlets e Formulários

Scriptlets e Formulários 2 Scriptlets e Formulários Prof. Autor: Daniel Morais dos Reis e-tec Brasil Programação Avançada Para Web Página1 Meta Permitir ao aluno aprender a criar um novo projeto Java para web no Netbeans IDE,

Leia mais

AJAX Reverso. Comet com DWR. baseado em

AJAX Reverso. Comet com DWR. baseado em AJAX Reverso baseado em Comet com DWR Aprenda a trabalhar com o AJAX Reverso, técnica ainda pouco explorada que proporciona aos sistemas Web a funcionalidade de atualizar os clientes conforme o servidor

Leia mais

JSF Facelets. Como Facelets muda a forma de desenvolver com JSF

JSF Facelets. Como Facelets muda a forma de desenvolver com JSF JSF Facelets Como Facelets muda a forma de desenvolver com JSF Agenda JSF 1.x JSF e JSP Facelets JSF 2.0 JSF Framework MVC Eventos (Observadores) Manter o estado da View Uma árvore de componete JSF JSF

Leia mais

World Wide Web e Aplicações

World Wide Web e Aplicações World Wide Web e Aplicações Módulo H O que é a WWW Permite a criação, manipulação e recuperação de informações Padrão de fato para navegação, publicação de informações e execução de transações na Internet

Leia mais

Casa do Código Livros para o programador Rua Vergueiro, 3185-8º andar 04101-300 Vila Mariana São Paulo SP Brasil

Casa do Código Livros para o programador Rua Vergueiro, 3185-8º andar 04101-300 Vila Mariana São Paulo SP Brasil 2012, Casa do Código Todos os direitos reservados e protegidos pela Lei nº9.610, de 10/02/1998. Nenhuma parte deste livro poderá ser reproduzida, nem transmitida, sem autorização prévia por escrito da

Leia mais

Processos (Threads,Virtualização e Migração de Código)

Processos (Threads,Virtualização e Migração de Código) Processos (Threads,Virtualização e Migração de Código) Roteiro Processos Threads Virtualização Migração de Código O que é um processo?! Processos são programas em execução. Processo Processo Processo tem

Leia mais

Use a Cabeça! FREEMAN, Eric e Elisabeth. HTML com CSS e XHTML BASHMAN, Brian / SIERRA Kathy / BATES, Bert. Servlets & JSP

Use a Cabeça! FREEMAN, Eric e Elisabeth. HTML com CSS e XHTML BASHMAN, Brian / SIERRA Kathy / BATES, Bert. Servlets & JSP Use a Cabeça! FREEMAN, Eric e Elisabeth. HTML com CSS e XHTML BASHMAN, Brian / SIERRA Kathy / BATES, Bert. Servlets & JSP Software cliente: browser e outros Protocolo HTTP Infraestrutura de transporte

Leia mais

Diveo Exchange OWA 2007

Diveo Exchange OWA 2007 Diveo Exchange OWA 2007 Manual do Usuário v.1.0 Autor: Cícero Renato G. Souza Revisão: Antonio Carlos de Jesus Sistemas & IT Introdução... 4 Introdução ao Outlook Web Access 2007... 4 Quais são as funcionalidades

Leia mais

Enterprise Java Beans

Enterprise Java Beans Enterprise Java Beans Prof. Pasteur Ottoni de Miranda Junior DCC PUC Minas Disponível em www.pasteurjr.blogspot.com 1-O que é um Enterprise Java Bean? O Entertprise Java Bean (EJB) é um componente server-side

Leia mais

LEI DE ACESSO A INFORMAÇÃO DIREITO DO CIDADÃO

LEI DE ACESSO A INFORMAÇÃO DIREITO DO CIDADÃO DESCRIÇÃO DO SIGAI O SIGAI (Sistema Integrado de Gestão do Acesso à Informação) é uma solução de software que foi desenvolvida para automatizar os processos administrativos e operacionais visando a atender

Leia mais

Capítulo 04: Persistência com SQLite

Capítulo 04: Persistência com SQLite Capítulo 04: Persistência com SQLite Instrutor Programador desde 2000 Aluno de doutorado Mestre em informática pelo ICOMP/UFAM Especialista em aplicações WEB FUCAPI marcio.palheta@gmail.com sites.google.com/site/marcio

Leia mais

4 O Workflow e a Máquina de Regras

4 O Workflow e a Máquina de Regras 4 O Workflow e a Máquina de Regras O objetivo do workflow e da máquina de regras é definir um conjunto de passos e regras configuráveis. Ao longo de sua execução, um usuário consegue simplificar o seu

Leia mais

Introdução. Templates. Configurações. Componentes. Prof. Enzo Seraphim

Introdução. <facelets> Templates. Configurações. Componentes. Prof. Enzo Seraphim Introdução Templates Configurações Componentes Prof. Enzo Seraphim Definição Linguagem de descrição de páginas (PDL Page Description Language) criada para JSF. Estabelece templates que suportam

Leia mais

Associação Carioca de Ensino Superior Centro Universitário Carioca

Associação Carioca de Ensino Superior Centro Universitário Carioca Desenvolvimento de Aplicações Web Lista de Exercícios Métodos HTTP 1. No tocante ao protocolo de transferência de hipertexto (HTTP), esse protocolo da categoria "solicitação e resposta" possui três métodos

Leia mais

Geração e execução de scripts de teste em aplicações web a partir de casos de uso direcionados por comportamento 64

Geração e execução de scripts de teste em aplicações web a partir de casos de uso direcionados por comportamento 64 direcionados por comportamento 64 5 Estudo de caso Neste capítulo serão apresentadas as aplicações web utilizadas na aplicação da abordagem proposta, bem como a tecnologia em que foram desenvolvidas, o

Leia mais

Artigo JavaMagazine (edição 58)

Artigo JavaMagazine (edição 58) 1 / JBoss Seam Simplicidade e produtividade no desenvolvimento de aplicações Web Aprenda a desenvolver aplicações Web utilizando a integração perfeita entre JSF e EJB 3 FÁBIO AUGUSTO FALAVINHA O JBoss

Leia mais

Arquitetura de uma Webapp

Arquitetura de uma Webapp Arquitetura de uma Webapp Arquitetura J2EE Containers e componentes MVC: introdução Frederico Costa Guedes Pereira 2006 fredguedespereira@gmail.com Plataforma J2EE World Wide Web e a Economia da Informação

Leia mais

Projetos do MyFaces 1/12

Projetos do MyFaces 1/12 1/12 JSF com MyFaces e Tomahawk Aprenda a utilizar os recursos do MyFaces FRANCISCO CALAÇA XAVIER Uma das implementações do JavaServer Faces mais utilizada atualmente é o MyFaces, um projeto da Apache

Leia mais

Lidando de Forma Eficiente com Validações Locais de Objetos

Lidando de Forma Eficiente com Validações Locais de Objetos Lidando de Forma Eficiente com Validações Locais de Objetos Aprenda a construir um mini-framework para validar objetos locais sem afetar a complexidade do código. Autor Paulo César M. N. A. Coutinho (pcmnac@gmail.com):

Leia mais

Desenvolvendo aplicações desktop em Java: presente e futuro

Desenvolvendo aplicações desktop em Java: presente e futuro Desenvolvendo aplicações desktop em Java: presente e futuro Michael Nascimento Santos Conexão Java 2006 Michael Nascimento Santos 7 anos de experiência com Java Expert nas JSRs 207, 250, 270 (Java 6),

Leia mais

Evolução do Design através de Testes e o TDD

Evolução do Design através de Testes e o TDD c a p a Lucas Souza (lucas.souza@caelum.com.br): é bacharel em Engenharia da Computação pela Universidade de Ribeirão Preto, possui a certificação SCJP e trabalha com Java há 4 anos. Atualmente é desenvolvedor

Leia mais

Conceitos de Ajax Exemplos de uso do Ajax no braço, muitos exemplos, muito código (HTML, CSS, JavaScript, PHP, XML, JSON)

Conceitos de Ajax Exemplos de uso do Ajax no braço, muitos exemplos, muito código (HTML, CSS, JavaScript, PHP, XML, JSON) Márcio Koch 1 Currículo Formado na FURB em Ciência da Computação Pós graduado em Tecnologias para o desenvolvimento de aplicações web Mestrando em Computação Gráfica na UDESC Arquiteto de software na Senior

Leia mais

Unidade 9: Middleware JDBC para Criação de Beans

Unidade 9: Middleware JDBC para Criação de Beans Programação Servidor para Sistemas Web 1 Unidade 9: Middleware JDBC para Criação de Beans Implementando MVC Nível 1 Prof. Daniel Caetano Objetivo: Preparar o aluno para construir classes de entidade com

Leia mais

Centro Universitário de Formiga UNIFOR-MG Ciência da Computação Disciplina: Professor: Alunos: Hibernate V alidator Formiga, Outubro 2011.

Centro Universitário de Formiga UNIFOR-MG Ciência da Computação Disciplina: Professor: Alunos: Hibernate V alidator Formiga, Outubro 2011. Centro Universitário de Formiga UNIFOR-MG Ciência da Computação 8º período Disciplina: Laboratório de Programação IV Professor: Michel Pires Silva Alunos: Valter Ribeiro Lima Júnior Hibernate Validator

Leia mais

Introdução a Servlets

Introdução a Servlets Linguagem de Programação para Web Introdução a Servlets Prof. Mauro Lopes 1-31 21 Objetivos Iniciaremos aqui o estudo sobre o desenvolvimento de sistemas web usando o Java. Apresentaremos nesta aula os

Leia mais

1 Criar uma entity a partir de uma web application que usa a Framework JavaServer Faces (JSF)

1 Criar uma entity a partir de uma web application que usa a Framework JavaServer Faces (JSF) Sessão Prática II JPA entities e unidades de persistência 1 Criar uma entity a partir de uma web application que usa a Framework JavaServer Faces (JSF) a) Criar um Web Application (JPAsecond) como anteriormente:

Leia mais

FERRAMENTAS DE COLABORAÇÃO CORPORATIVA

FERRAMENTAS DE COLABORAÇÃO CORPORATIVA FERRAMENTAS DE COLABORAÇÃO CORPORATIVA Manual de Utilização Google Grupos Sumário (Clique sobre a opção desejada para ir direto à página correspondente) Utilização do Google Grupos Introdução... 3 Página

Leia mais

Padrões de Projeto em Aplicações Web Desenvolvendo projetos web consistentes baseados em reuso de soluções

Padrões de Projeto em Aplicações Web Desenvolvendo projetos web consistentes baseados em reuso de soluções 1/ Padrões de Projeto em Aplicações Web Desenvolvendo projetos web consistentes baseados em reuso de soluções Adote as melhores práticas de reuso de soluções com a abordagem de Padrões de Projeto (Design

Leia mais

ARQUITETURA DO SISTEMA ERP PEGASUS

ARQUITETURA DO SISTEMA ERP PEGASUS ARQUITETURA DO SISTEMA ERP PEGASUS Elaborado por: Bruno Duarte Nogueira Arquiteto de Software Data: 05/03/2012 1 Sumário 1. Introdução... 3 2. Tecnologias... 3 2.1. Web Tier... 3 2.1.1. Facelets 1.1.14...

Leia mais

Parte I. Demoiselle Vaadin

Parte I. Demoiselle Vaadin Parte I. Demoiselle Vaadin O Vaadin é um framework para construção de interfaces web que aplica ideias inovadoras. Apesar de usar o GWT como mecanismo para a exibição de seus componentes, eles tem características

Leia mais

Integrando Eclipse e Websphere Application Server Community Edition

Integrando Eclipse e Websphere Application Server Community Edition 1 Integrando Eclipse e Websphere Application Server Community Edition Sobre o Autor Carlos Eduardo G. Tosin (carlos@tosin.com.br) é formado em Ciência da Computação pela PUC-PR, pós-graduado em Desenvolvimento

Leia mais

JSF - Controle de Acesso FERNANDO FREITAS COSTA

JSF - Controle de Acesso FERNANDO FREITAS COSTA JSF - Controle de Acesso FERNANDO FREITAS COSTA ESPECIALISTA EM GESTÃO E DOCÊNCIA UNIVERSITÁRIA JSF Controle de Acesso Antes de iniciarmos este assunto, é importante conhecermos a definição de autenticação

Leia mais

Desenvolvimento de aplicações Web. Java Server Pages

Desenvolvimento de aplicações Web. Java Server Pages Desenvolvimento de aplicações Web Java Server Pages Hamilton Lima - athanazio@pobox.com 2003 Como funciona? Servidor web 2 Internet 1 Browser 3 Arquivo jsp 4 JSP Compilado 2 Passo a passo 1 browser envia

Leia mais

Curso de Aprendizado Industrial Desenvolvedor WEB

Curso de Aprendizado Industrial Desenvolvedor WEB Curso de Aprendizado Industrial Desenvolvedor WEB Disciplina: Programação Orientada a Objetos II Professor: Cheli dos S. Mendes da Costa Modelo Cliente- Servidor Modelo de Aplicação Cliente-servidor Os

Leia mais

Faculdade de Tecnologia SENAC Goiás. Disciplina: Gerenciamento de Rede de Computadores. Goiânia, 16 de novembro de 2014.

Faculdade de Tecnologia SENAC Goiás. Disciplina: Gerenciamento de Rede de Computadores. Goiânia, 16 de novembro de 2014. Faculdade de Tecnologia SENAC Goiás Disciplina: Gerenciamento de Rede de Computadores : Goiânia, 16 de novembro de 2014. Faculdade de Tecnologia SENAC Goiás Professor: Marissol Martins Alunos: Edy Laus,

Leia mais

2 Auto-sintonia de Bancos de Dados e Agentes de Software

2 Auto-sintonia de Bancos de Dados e Agentes de Software 2 Auto-sintonia de Bancos de Dados e Agentes de Software A uso da abordagem de agentes de software 1 pode trazer benefícios a áreas de aplicação em que é necessário construir sistemas autônomos, ou seja,

Leia mais

DESENVOLVIMENTO WEB UTILIZANDO FRAMEWORK PRIMEFACES E OUTRAS TECNOLOGIAS ATUAIS

DESENVOLVIMENTO WEB UTILIZANDO FRAMEWORK PRIMEFACES E OUTRAS TECNOLOGIAS ATUAIS DESENVOLVIMENTO WEB UTILIZANDO FRAMEWORK PRIMEFACES E OUTRAS TECNOLOGIAS ATUAIS Emanuel M. Godoy 1, Ricardo Ribeiro Rufino 1 1 Universidade Paranaense (Unipar) Paranavaí PR Brasil godoymanel@gmail.com,

Leia mais

Desenvolvendo para WEB

Desenvolvendo para WEB Nível - Básico Desenvolvendo para WEB Por: Evandro Silva Neste nosso primeiro artigo vamos revisar alguns conceitos que envolvem a programação de aplicativos WEB. A ideia aqui é explicarmos a arquitetura

Leia mais

MÓDULO Programação para Web 2

MÓDULO Programação para Web 2 MÓDULO Programação para Web 2 Sistemas Web na JEE OBJETIVO DO MÓDULO Arquitetura Web em aplicações JEE Conceitos iniciais Desenvolvimento Web Aplicações web tornam-se mais e mais importantes Mais e mais

Leia mais

Definições de Projeto

Definições de Projeto App Alunos Definições de Projeto Implementação de uma app para Manipulação de Dados de Alunos Em linhas gerais, a app consiste em: Manter dados de alunos; Entrar em contato com alunos; Trocar dados com

Leia mais

Dominando Action Script 3

Dominando Action Script 3 Dominando Action Script 3 Segunda Edição (2014) Daniel Schmitz Esse livro está à venda em http://leanpub.com/dominandoactionscript3 Essa versão foi publicada em 2014-05-02 This is a Leanpub book. Leanpub

Leia mais

Capítulo 1 - Java EE 6 por alto - 1

Capítulo 1 - Java EE 6 por alto - 1 Capítulo 1 - Java EE 6 por alto - 1 Um pouquinho de história - 2 Padrões - 4 Arquitetura - 4 Componentes - 5 Contentores - 6 Serviços - 7 Protocolos de rede - 9 Empacotamento - 9 Java Standard Edition

Leia mais

Melhorias e Correções Patch's

Melhorias e Correções Patch's Melhorias e Correções Patch's Relação de Correções ID Descrição 3399 Erro em data de início de atividade No projeto ID: 655, em algumas atividades não estão sendo respeitadas as datas de início. 3468 Incidente

Leia mais

Apesar de existirem diversas implementações de MVC, em linhas gerais, o fluxo funciona geralmente da seguinte forma:

Apesar de existirem diversas implementações de MVC, em linhas gerais, o fluxo funciona geralmente da seguinte forma: 1 Introdução A utilização de frameworks como base para a construção de aplicativos tem sido adotada pelos desenvolvedores com três objetivos básicos. Primeiramente para adotar um padrão de projeto que

Leia mais

Grupo de Usuários Java http://www.guj.com.br JavaServer Faces: A mais nova tecnologia Java para desenvolvimento WEB

Grupo de Usuários Java http://www.guj.com.br JavaServer Faces: A mais nova tecnologia Java para desenvolvimento WEB JavaServer Faces: A mais nova tecnologia Java para desenvolvimento WEB Talita Pitanga Conheça um pouco sobre a mais nova tecnologia para desenvolvimento de aplicações WEB: JavaServer Faces. Introdução

Leia mais

PadrãoIX. Módulo II JAVA. Marcio de Carvalho Victorino. Servlets A,L,F,M

PadrãoIX. Módulo II JAVA. Marcio de Carvalho Victorino. Servlets A,L,F,M JAVA Marcio de Carvalho Victorino 1 Servlets 2 1 Plataforma WEB Baseada em HTTP (RFC 2068): Protocolo simples de transferência de arquivos Sem estado (não mantém sessão aberta) Funcionamento (simplificado):

Leia mais

Bool setcookie (string nome [, string valor [, int validade [, string caminho [, string dominio [, int seguro]]]]] )

Bool setcookie (string nome [, string valor [, int validade [, string caminho [, string dominio [, int seguro]]]]] ) Disciplina: Tópicos Especiais em TI PHP Este material foi produzido com base nos livros e documentos citados abaixo, que possuem direitos autorais sobre o conteúdo. Favor adquiri-los para dar continuidade

Leia mais

Aula 2: RIA - Aplicações Ricas para Internet Fonte: Plano de Aula Oficial da Disciplina

Aula 2: RIA - Aplicações Ricas para Internet Fonte: Plano de Aula Oficial da Disciplina Programação para Internet Rica 1 Aula 2: RIA - Aplicações Ricas para Internet Fonte: Plano de Aula Oficial da Disciplina Objetivo: Identificar as principais características de uma Aplicação Internet Rica.

Leia mais

Potenciais de Aplicação da Metodologia AJAX

Potenciais de Aplicação da Metodologia AJAX SEGeT Simpósio de Excelência em Gestão e Tecnologia 1 Potenciais de Aplicação da Metodologia AJAX Bruno Simões Kleverson Pereira Marcos Santos Eduardo Barrere Associação Educacional Dom Bosco - AEDB RESUMO

Leia mais

Descobrindo o Profiling de

Descobrindo o Profiling de artigo Descobrindo o Profiling de Aplicações Java com JProfiler Aprenda como encontrar problemas de performance na sua aplicação com o JProfiler. Muitas vezes, nos deparamos com problemas de performance

Leia mais

DESENVOLVENDO APLICAÇÕES UTILIZANDO JAVASERVER FACES E MVC

DESENVOLVENDO APLICAÇÕES UTILIZANDO JAVASERVER FACES E MVC DESENVOLVENDO APLICAÇÕES UTILIZANDO JAVASERVER FACES E MVC Felipe Moreira Decol Claro 1, Késsia Rita da Costa Marchi 1 1 Universidade Paranaense (Unipar) Paranavaí PR Brasil felipe4258@hotmail.com, kessia@unipar.br

Leia mais

Moodle FTEC Versão 2.0 Manual do Usuário Acesse a área de LOGIN do site da FTEC www.ftec.com.br

Moodle FTEC Versão 2.0 Manual do Usuário Acesse a área de LOGIN do site da FTEC www.ftec.com.br Moodle FTEC Versão 2.0 Manual do Usuário Acesse a área de LOGIN do site da FTEC www.ftec.com.br Índice Como acessar o Moodle Editando seu PERFIL Editando o curso / disciplina no Moodle Incluindo Recursos

Leia mais

Manual de Boas Maneiras no E-mail Marketing

Manual de Boas Maneiras no E-mail Marketing Manual de Boas Maneiras no E-mail Marketing Conheça alguns cuidados que você precisa ter quando elaborar suas campanhas de e- mail marketing. A MailSender elaborou para você um breve manual com as melhores

Leia mais

Como implantar um Help Desk

Como implantar um Help Desk 7 Passos Como implantar um Oito passos usando Software Sumário Passo 1 - Cadastros Básicos...3 Passo 2 Catálogo de Serviços...4 Passo 3 Base de Conhecimento...5 Passo 4 Níveis de Suporte Técnico...6 Passo

Leia mais

JavaServer Faces. Parte 2

JavaServer Faces. Parte 2 JavaServer Faces Parte 2 Recapitulando Aplicações web são aplicações que executam em um servidor Recebem requisições de usuários Retornam respostas ao usuário Browsers só entendem e exibem html O servidor

Leia mais

Sistema Gerenciador de Hotel. Adriano Douglas Girardello. Ana Paula Fredrich. Tiago Alexandre Schulz Sippert

Sistema Gerenciador de Hotel. Adriano Douglas Girardello. Ana Paula Fredrich. Tiago Alexandre Schulz Sippert UNIOESTE Universidade Estadual do Oeste do Paraná CENTRO DE CIÊNCIAS EXATAS E TECNOLÓGICAS Colegiado de Informática Curso de Bacharelado em Informática Sistema Gerenciador de Hotel Adriano Douglas Girardello

Leia mais

Aula 03 - Projeto Java Web

Aula 03 - Projeto Java Web Aula 03 - Projeto Java Web Para criação de um projeto java web, vá em File/New. Escolha o projeto: Em seguida, na caixa Categorias selecione Java Web. Feito isso, na caixa à direita selecione Aplicação

Leia mais

Prática da Disciplina de Sistemas Distribuídos Serviços Web IFMA DAI Professor Mauro Lopes C. Silva

Prática da Disciplina de Sistemas Distribuídos Serviços Web IFMA DAI Professor Mauro Lopes C. Silva 1. O que são Serviços Web (Web Services)? Prática da Disciplina de Sistemas Distribuídos Serviços Web IFMA DAI Professor Mauro Lopes C. Silva A ideia central dos Web Services parte da antiga necessidade

Leia mais

Criação de Servlets Name Directory Build WAR JSP/Servlet frameworks Launch URL Package Class name Generate header comments

Criação de Servlets Name Directory Build WAR JSP/Servlet frameworks Launch URL Package Class name Generate header comments Criação de Servlets 1. Crie um novo projeto através do Menu File New Project. 2. Acesse o Menu File New. 3. Na janela Object Gallery que surgirá, selecione a guia Web. 4. Escolha o ícone que corresponde

Leia mais

Smart Laudos 1.9. A Forma Inteligente de Criar seus Laudos Médicos. Manual do Usuário

Smart Laudos 1.9. A Forma Inteligente de Criar seus Laudos Médicos. Manual do Usuário Smart Laudos 1.9 A Forma Inteligente de Criar seus Laudos Médicos Manual do Usuário Conteúdo 1. O que é o Smart Laudos?... 3 2. Características... 3 3. Instalação... 3 4. Menu do Sistema... 4 5. Configurando

Leia mais

Tópicos de Ambiente Web. Modulo 2 Processo de desenvolvimento de um site Professora: Sheila Cáceres

Tópicos de Ambiente Web. Modulo 2 Processo de desenvolvimento de um site Professora: Sheila Cáceres Tópicos de Ambiente Web Modulo 2 Processo de desenvolvimento de um site Professora: Sheila Cáceres Roteiro Motivação Desenvolvimento de um site Etapas no desenvolvimento de software (software:site) Analise

Leia mais

Programação Java para a Web Décio Heinzelmann Luckow Alexandre Altair de Melo

Programação Java para a Web Décio Heinzelmann Luckow Alexandre Altair de Melo Programação Java para a Web Décio Heinzelmann Luckow Alexandre Altair de Melo Novatec Copyright 2010 da Novatec Editora Ltda. Todos os direitos reservados e protegidos pela Lei 9.610 de 19/02/1998. É proibida

Leia mais

Ambientação JAVA. Versão 0.1 MICHEL CORDEIRO ANALISTA DE NEGÓCIO (NTI 2014) 1 UNIVERSIDADE CEUMA 08/01/2014

Ambientação JAVA. Versão 0.1 MICHEL CORDEIRO ANALISTA DE NEGÓCIO (NTI 2014) 1 UNIVERSIDADE CEUMA 08/01/2014 UNIVERSIDADE CEUMA Ambientação JAVA Versão 0.1 08/01/2014 Este é um modelo de configuração para desenvolvimento no ambiente Java. MICHEL CORDEIRO ANALISTA DE NEGÓCIO (NTI 2014) 1 Sumário Sumário... 2 1

Leia mais

Demoiselle Report Guide. Demoiselle Report. Marlon Carvalho. Rodrigo Hjort. Robson Ximenes

Demoiselle Report Guide. Demoiselle Report. Marlon Carvalho. <marlon.carvalho@gmail.com> Rodrigo Hjort. <rodrigo.hjort@gmail.com> Robson Ximenes Demoiselle Report Guide Demoiselle Report Marlon Carvalho Rodrigo Hjort Robson Ximenes Demoiselle Report... v 1. Configuração

Leia mais

Desenvolvimento para Android Prá3ca 3. Prof. Markus Endler

Desenvolvimento para Android Prá3ca 3. Prof. Markus Endler Desenvolvimento para Android Prá3ca 3 Prof. Markus Endler Exercício 3.1 Solicitando permissão para abrir uma página Web ü Criaremos uma Ac.vity com um EditText (para entrada de uma URL), um Bu?on e uma

Leia mais

na prática Prototipagem de interfaces Otimizando a identificação e especificação de requisitos

na prática Prototipagem de interfaces Otimizando a identificação e especificação de requisitos : : www.mundoj.com.br : : Prototipagem de interfaces na prática Otimizando a identificação e especificação de requisitos Bruno Leite Alves (brunoleitealves @gmail.com /Twitter @brunoleitealves): é bacharel

Leia mais

Projeto: Simul-e Documento de Arquitetura de Software

Projeto: Simul-e Documento de Arquitetura de Software Projeto: Simul-e Documento de Arquitetura de Software Versão 1.0 Página 1 de 9 Histórico da Revisão Data Versão Descrição Autor 12.09.2015 1.0 Criação do Documento Hugo Pazolline 20.10.2015 1.0 Atualização

Leia mais

NETALARM GATEWAY. Manual do Usuário

NETALARM GATEWAY. Manual do Usuário Índice 1. Introdução...3 2. Requisitos Mínimos de Instalação...3 3. Instalação...3 4. Inicialização do Programa...5 5. Abas de Configuração...6 5.1 Aba Serial...6 5.2 Aba TCP...7 5.2.1 Opções Cliente /

Leia mais

DESENVOLVENDO APLICAÇÃO UTILIZANDO JAVA SERVER FACES

DESENVOLVENDO APLICAÇÃO UTILIZANDO JAVA SERVER FACES DESENVOLVENDO APLICAÇÃO UTILIZANDO JAVA SERVER FACES Alexandre Egleilton Araújo, Jaime Willian Dias Universidade Paranaense (Unipar) Paranavaí PR Brasil araujo.ale01@gmail.com, jaime@unipar.br Resumo.

Leia mais

O atacante pode roubar a sessão de um usuário legítimo do sistema, que esteja previamente autenticado e realizar operações que o mesmo poderia.

O atacante pode roubar a sessão de um usuário legítimo do sistema, que esteja previamente autenticado e realizar operações que o mesmo poderia. Explorando e tratando a falha de Cross-site-scripting (XSS) 1 D E D E Z E M B R O D E 2 0 1 5 Muito pouco falada e com alto nível crítico dentro das vulnerabilidades relatadas, o Cross-site-scripting (XSS)

Leia mais

Linguagem de Programação JAVA. Professora Michelle Nery Nomeclaturas

Linguagem de Programação JAVA. Professora Michelle Nery Nomeclaturas Linguagem de Programação JAVA Professora Michelle Nery Nomeclaturas Conteúdo Programático Nomeclaturas JDK JRE JEE JSE JME JVM Toolkits Swing AWT/SWT JDBC EJB JNI JSP Conteúdo Programático Nomenclatures

Leia mais