• Nenhum resultado encontrado

PROJETO INTEGRADOR. Documentação. Aplicação de Controle de Acesso FACULDADE DE TECNOLOGIA SENAC GOIÁS. Programação com Frameworks

N/A
N/A
Protected

Academic year: 2021

Share "PROJETO INTEGRADOR. Documentação. Aplicação de Controle de Acesso FACULDADE DE TECNOLOGIA SENAC GOIÁS. Programação com Frameworks"

Copied!
30
0
0

Texto

(1)

PROJETO INTEGRADOR

FACULDADE DE TECNOLOGIA SENAC GOIÁS

Programação com Frameworks

Documentação

Aplicação de Controle de Acesso

Gestão em Tecnologia da Informação 5º Módulo – Noturno

Professor: Fabricio Leonard

Alunos:

João Victor Alves;

Douglas Ferreira;

Erik Souza;

(2)

Sumário

Proposta do Projeto ... 3

Configurando o Servidor ... 4

Configurando o projeto para usar RichFaces ... 9

JARs ... 10

Web.xml ... 13

Conexão com o banco ... 14

Persistence.xml ... 14

Classe JPAUtil ... 15

Controle de Acesso - Definição ... 16

Requisitos ... 16

Modelagem do banco ... 16

Controle de Acesso - Telas ... 17

Tela de Login ... 17

Tela de Cadastro de Usuário ... 18

Tela de Erro ao logar ... 20

Tela do Administrador ... 21

Tela do Usuário comum ... 23

Visão Geral do Projeto ... 25

Controle de Acesso – Bean ... 26

Variáveis Globais ... 26

Métodos para cadastro de usuário ... 27

Métodos para validar o login ... 28

Método para relacionar usuário X permissão ... 28

Método que busca todos os usuários ... 29

Método que busca todas as permissões ... 30

(3)

3

Proposta do Projeto

Desenvolver um sistema de controle de acesso utilizando os Frameworks apresentados na disciplina.

Abaixo será explicado como a aplicação de controle de acesso foi desenvolvida, desde a configuração do servidor, configuração da ferramenta de desenvolvimento para suportar o framework, modelagem do banco etc.

Para esse projeto serão usados:

 Eclipse como IDE de desenvolvimento.

 PostgreSQL como Sistema Gerenciador de Banco de Dados (SGBD).

 Hibernate como framework para o mapeamento objeto-relacional.

 JPA como especificação para a persistência de dados

 .RichFaces como framework, sendo ele uma biblioteca de componentes para aplicações web que utilizam JSF.

(4)

4

Configurando o Servidor

Será utilizado nesse trabalho o servidor GlassFish 4.0, nas linhas abaixo será ensinado como instalar e configurar o servidor.

Com o Eclipse Kepler aberto vá até a aba Help > Eclipse Marketplace. Pesquise pelo servidor e selecione a opção do GlassFish para a versão Kepler do Eclipse e clique em

(5)

5

(6)

6

Agora vamos configurar o servidor. Com a View Server aberta, clique em “No servers

are available. Click this link to create a new server”. E deixe as opções conforme a

figura a baixo. Logo após clique em Add.

Baixe os arquivo do GlassFish: https://glassfish.java.net/download.html e descompacte em um ligar de fácil acesso.

(7)

7

Clicando em Browse selecione os a pasta glassfish que você acabou de descompactar, aparecera a mensagem Foun GlasshFish Server version 4.0.0, caso não apareça verifique se selecionou a pasta correta.

Podemos ver na imagem acima que o JDK não esta correto para o funcionamento do

GlassFish, para resolver isso clique em Intalled JRE preferences > Add > Standard VM > Next. Clicando em Directory selecione o local onde esta instalava a sua versão

do JDK, com isso a ferramenta ira carregar todas as bibliotecas automaticamente. Para finalizar, Finish > Ok, voltando para janela da imagem anterior, selecione em JDK a versão que acabou de configurar.

(8)

8 GlahsFish configurado e funcionando, já é possível na View Server, configurar

questões de Publish e Timeout, como também dar o Start no servidor. Eu costumo alterar as seguintes opções.

(9)

9

Configurando o projeto para usar RichFaces

Antes de tudo vamos criar um novo projeto: File > New > Dynamic Web Project. Coloque as configurações conforme a figura a baixo, e clique em Next > Next.

(10)

10

Na próxima e ultima janela deixe-a conforme a figura abaixo e depois clique em Finish.

JARs

Os JARs a seguir são necessários para que uma aplicação possa rodar com RichFaces 4:

● sac-1.3.jar: O SAC é um conjunto de classes Java que fornece uma interface padrão para tratamento de CSS.

● cssparser-0.9.5.jar: É uma API desenvolvida em Java para tratamento de CSS que proporciona aos desenvolvedores incorporar informações CSS em suas aplicações;

(11)

11

● guava-r08.jar: O Guava é um projeto do Google que contém um conjunto de bibliotecas baseadas em Java que trabalham com coleções, caching, primitivos, bibliotecas de concorrência, processamento de String, I/O, entre outras, sendo esta uma dependência de tempo de execução.

Para download dos JARs:

http://richfaces.jboss.org/download/stable.html Download dos demais JARs utilizados.

search.maven.org/remotecontent?filepath=com/google/guava/guava/10.0.1/guava-10.0.1.jar

repo1.maven.org/maven2/net/sourceforge/cssparser/cssparser/0.9.5/cssparser-0.9.5.jar repo1.maven.org/maven2/org/w3c/css/sac/1.3/sac-1.3.jar

(12)

12

Para um completo funcionamento do projeto que será criar uma aplicação que faça um

CRUD completo utilizando Hibernate, JPA e o SGBD PostgreSQL, é necessária ainda

importar os seguintes JARs :

Os JARs devem ser importados para pasta lib que se encontra dentro do diretório

WebContent > WEN-INF > lib. Ainda faltam os jars do iReport , então no momento

não adicionaremos ao Build Path, caso você não vá utilizar iReport e gerar relatórios, basta selecionar todos os JARs que estão na pasta lib e clicar em Build Path para que o eclipse faça o mapeamento.

Outra configuração importante de se fazer, sendo até indispensável, é a alteração do arquivo web.xml. Existem diversos “parâmetros” que o arquivo aceita para ajudar o desenvolvedor, nós nos limitaremos as mínimas configurações possíveis, para que não fique complexo a explicação no tutorial, e diminua os possíveis erros que possam surgir na edição do mesmo, segue a baixo como ficou o arquivo web.xml.

(13)

13

Web.xml

<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns="http://java.sun.com/xml/ns/javaee"

xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"

id="WebApp_ID" version="3.0">

<display-name>EstudoRichFaces</display-name> <welcome-file-list>

<welcome-file>index.xhtml</welcome-file> </welcome-file-list>

<context-param>

<param-name>org.richfaces.skin</param-name> <param-value>blueSky</param-value>

</context-param> <context-param>

<param-name>org.richfaces.enableControlSkinning</param-name> <param-value>true</param-value>

</context-param>

<servlet>

<servlet-name>Faces Servlet</servlet-name>

<servlet-class>javax.faces.webapp.FacesServlet</servlet-class> <load-on-startup>1</load-on-startup>

</servlet>

<servlet-mapping>

<servlet-name>Faces Servlet</servlet-name> <url-pattern>*.xhtml</url-pattern>

</servlet-mapping> </web-app>

(14)

14

Conexão com o banco

Persistence.xml

O arquivo persistence.xml encontra-se no diretório: ControleAcesso/src/META-INF/persistence.xml

<?xml version=”1.0” encoding=”UTF-8”?> <persistence version="2.0"

xmlns="http://java.sun.com/xml/ns/persistence"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">

<persistence-unit name="PU_BD_INT">

<provider>org.hibernate.ejb.HibernatePersistence</provider> <properties>

<property name="hibernate.dialect"

value="org.hibernate.dialect.PostgreSQLDialect" />

<property name="hibernate.hbm2ddl.auto" value="update" /> <property name="hibernate.show_sql" value="true" /> <property name="hibernate.format_sql" value="true" /> <property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver" /> <property name="javax.persistence.jdbc.url"

value="jdbc:postgresql://localhost:5432/BD_INT" /> <property name="javax.persistence.jdbc.user" value="postgres" /> <property name="javax.persistence.jdbc.password" value="johner7" />

</properties> </persistence-unit> </persistence>

(15)

15

Classe JPAUtil

A classe se encontra no diretório:

ControleAcesso/src/br/com/projeto/útil/JPAUtil.java package br.com.projeto.util;

import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence;

public class JPAUtil {

private static final EntityManagerFactory emf = Persistence .createEntityManagerFactory("PU_BD_INT"); public static EntityManager getEntityManager() {

return emf.createEntityManager(); }

(16)

16

Controle de Acesso - Definição

Requisitos

 Um usuário pode se auto cadastrar, e com isso ele recebe uma permissão de

Convidado do sistema com acesso apenas de consulta.

Um usuário com permissão de Administrador pode mudar a permissão de outros usuários que estão cadastrados no sistema.

 Quando um usuário logar, a tela tem que apresentar seu nome e mostrar qual o nível de acesso que ele tem no sistema.

 O sistema precisa autenticar se aquele usuário existe, caso a autenticação falhe ele será redirecionado para uma tela informando a falha.

 Os tipos de permissão que o administrador pode conceder são os seguintes: o Administrador;

o Convidado – Consulta;

o Funcionário - Consulta e Inclui;

o Funcionário - Consulta, Inclui e Altera; o Funcionário - Completo (CAIE);

Modelagem do banco

(17)

17

Controle de Acesso - Telas

Tela de Login

Segue abaixo o código do desenvolvimento da tela de login, o nosso index.xhtml. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"

"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:a4j="http://richfaces.org/a4j" xmlns:rich="http://richfaces.org/rich"> <h:head>

<title>Projeto Integrador</title> </h:head>

<h:body>

<h:form>

<table style="height: 100px;" />

<rich:panel style="width:245px; margin:auto;"> <f:facet name="header">

<h:outputText value="Login" /> </f:facet>

<h:panelGrid columns="2" style="font-size:15px"> <h:outputText value="Usuário:" />

<rich:inplaceInput value="#{bean.usuario.usuario}"

defaultLabel="insera qui seu usuario/nick"

style="width:140px" />

<h:outputText value="Senha:" />

<h:inputSecret value="#{bean.usuario.senha}"

style="width:145px"

maxlength="10" /> </h:panelGrid>

<hr />

<h:outputText value="Cadastre aqui um novo usuário" /> &nbsp;

(18)

18

<h:commandButton value="Cadastrar"

action="#{bean.novoUsuario}" /> <hr /> </rich:panel>

<div align="center">

<h:commandButton value="Entrar"

action="#{bean.validarUsuario}"

style="font-size:15px" /> &nbsp;

<h:commandButton value="Cancelar"

action="#{bean.chamarIndex}" style="font-size:15px" /> </div> </h:form> </h:body> </html>

Tela de Cadastro de Usuário

Segue abaixo o código do desenvolvimento da tela de cadastro de usuário, o nosso

cadastroUsuario.xhtml.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:a4j="http://richfaces.org/a4j" xmlns:rich="http://richfaces.org/rich"> <h:head>

<title>Projeto Integrador</title> </h:head>

<h:body>

<h:form>

<table style="height: 100px;" />

(19)

19

<f:facet name="header">

<h:outputText value="Informe os dados solicitados" />

</f:facet>

<h:panelGrid columns="2" style="font-size:15px"> <h:outputText value="Nome: " />

<rich:inplaceInput value="#{bean.usuario.nome}"

defaultLabel="clique aqui para inserir o nome completo"

style="width:200px" /> <h:outputText value="Usuário:" />

<rich:inplaceInput value="#{bean.usuario.usuario}"

defaultLabel="clique aqui para inserir um usuario/nick"

style="width:200px" /> <h:outputText value="Senha:" />

<h:inputSecret value="#{bean.usuario.senha}"

style="width:205px"

maxlength="10" /> </h:panelGrid>

</rich:panel>

<div align="center">

<h:commandButton value="Salvar"

action="#{bean.salvarUsuario}"

style="font-size:15px" /> &nbsp;

<h:commandButton value="Cancelar"

action="#{bean.chamarIndex}" style="font-size:15px" /> </div> </h:form> </h:body> </html>

(20)

20

Tela de Erro ao logar

Segue abaixo o código do desenvolvimento da tela de falha no login, o nosso

erroLogin.xhtml.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:a4j="http://richfaces.org/a4j" xmlns:rich="http://richfaces.org/rich"> <h:head>

<title>Projeto Integrador</title> </h:head>

<h:body>

<h:form>

<table style="height: 100px;" />

<rich:panel style="width:300px; margin:auto;"> <f:facet name="header">

<h:outputText value="Erro!" /> </f:facet>

<hr />

<h:outputText

value="Seu usuário ou senha estão errados, por favor tente novamente voltando a tela de login!" />

&nbsp;

<h:commandButton value="Login"

action="#{bean.chamarIndex}" /> <hr /> </rich:panel> </h:form> </h:body> </html>

(21)

21

Tela do Administrador

Segue abaixo o código do desenvolvimento da tela do Administrador, o nosso

usuarioAdm.xhtml.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:a4j="http://richfaces.org/a4j" xmlns:rich="http://richfaces.org/rich"> <h:head>

<title>Projeto Integrador</title> </h:head>

<h:body>

<h:form>

<rich:panel style="width:70%; margin:auto"> <f:facet name="header">

<h:outputText value="Um software abiliTISof Ltda." />

</f:facet>

<h:panelGrid columns="4" style="font-size:15px"> <h:outputText value="Bem-vindo: " style=" font-weight: bold" />

<h:outputText value="#{bean.usuario.nome}"

(22)

22

<h:outputText value=", seu nível de acesso é " /> <h:outputText value="#{bean.permissao.descricao}"

style="color: red; font-weight: bold" /> </h:panelGrid>

<hr />

<h:panelGrid columns="2" style="font-size:15px"> <f:facet name="header">

<h:outputText value="Cadastre uma permissão a um usuário" />

</f:facet>

<h:outputText value="Nome: " /> <rich:select enableManualInput="true"

value="#{bean.cbxUsuario}"

defaultLabel="selecione um usuário"> <f:selectItems

value="#{bean.listaComboboxUsuario}" /> </rich:select>

<h:outputText value="Permissão: " /> <rich:select enableManualInput="true"

value="#{bean.cbxPermissao}"

defaultLabel="selecione uma permissão"> <f:selectItems

value="#{bean.listaComboboxPermissao}" /> </rich:select> </h:panelGrid>

</rich:panel>

<div align="center">

<h:commandButton value="Salvar"

action="#{bean.salvarRelacao}"

style="font-size:15px" /> &nbsp;

<h:commandButton value="Cancelar"

action="#{bean.chamarIndex}" style="font-size:15px" /> </div> </h:form> </h:body> </html>

(23)

23

Tela do Usuário comum

Segue abaixo o código do desenvolvimento da tela do Usuário Comum, o nosso

usuarioComum.xhtml.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:a4j="http://richfaces.org/a4j" xmlns:rich="http://richfaces.org/rich"> <h:head>

<title>Projeto Integrador</title> </h:head>

<h:body>

<h:form>

<table style="height: 100px;" />

<rich:panel style="width:300px; margin:auto"> <f:facet name="header">

<h:outputText value="Informe os dados solicitados" />

</f:facet>

<h:panelGrid columns="2" style="font-size:15px"> <h:outputText value="Nome: " />

<rich:inplaceInput value="#{bean.usuario.nome}"

defaultLabel="clique aqui para inserir o nome completo"

style="width:200px" /> <h:outputText value="Usuário:" />

<rich:inplaceInput value="#{bean.usuario.usuario}"

defaultLabel="clique aqui para inserir um usuario/nick"

style="width:200px" /> <h:outputText value="Senha:" />

<h:inputSecret value="#{bean.usuario.senha}"

style="width:205px"

maxlength="10" /> </h:panelGrid>

</rich:panel>

<div align="center">

(24)

24

action="#{bean.salvarUsuario}"

style="font-size:15px" /> &nbsp;

<h:commandButton value="Cancelar"

action="#{bean.chamarIndex}" style="font-size:15px" /> </div> </h:form> </h:body> </html>

(25)

25

Visão Geral do Projeto

(26)

26

Controle de Acesso – Bean

Segue abaixo agora o código fonte dos métodos utilizados para o funcionamento da aplicação. Esses métodos se encontram

ControleAcesso/src/br/com/projeto/web/AcessoBean.java

Variáveis Globais

@Named("bean")

@SessionScoped

public class AcessoBean implements Serializable {

private static final long serialVersionUID = -8060872560728094879L;

private List<SelectItem> listaComboboxPermissao = new

ArrayList<SelectItem>();

private List<SelectItem> listaComboboxUsuario = new

ArrayList<SelectItem>();

private List<Usuario> listaUsuario = new ArrayList<Usuario>();

private List<Permissao> listaPermissao = new ArrayList<Permissao>();

private Usuario usuario = new Usuario();

private Relacao relacao = new Relacao();

private Permissao permissao = new Permissao();

private Integer cbxUsuario;

private Integer cbxPermissao;

(27)

27

Métodos para cadastro de usuário

public String novoUsuario() {

this.usuario = new Usuario();

return "cadastroUsuario";

}

// ************* cadastra um novo usuario

public String salvarUsuario() {

try {

EntityManager em = JPAUtil.getEntityManager(); em.getTransaction().begin();

em.persist(this.usuario); em.getTransaction().commit();

StringBuffer sql = new StringBuffer(); sql.append("SELECT u ");

sql.append("FROM Usuario u "); sql.append("WHERE u.usuario = '" +

this.usuario.getUsuario() + "' ");

sql.append("AND u.senha = '" + this.usuario.getSenha() + "' ");

Query query = em.createQuery(sql.toString());

this.usuario = (Usuario) query.getSingleResult();

// cadastra permissão de convidado (a mais basica) // para um novo usuario

em.getTransaction().begin();

this.relacao.setMatricula(this.usuario.getMatricula());

this.relacao.setCodigo(2); em.persist(this.relacao); em.getTransaction().commit();

this.usuario = new Usuario();

this.relacao = new Relacao();

return "index"; } catch (NoResultException e) { e.printStackTrace(); return "erroLogin"; } }

(28)

28

Métodos para validar o login

O condigo valida se o usuário e a senha estão corretos e dependendo do acesso chama a tela correspondente.

//verifica se o usuario informado existe e se a senha esta correta

public String validarUsuario() {

try {

EntityManager em = JPAUtil.getEntityManager(); StringBuffer sql = new StringBuffer();

sql.append("SELECT u "); sql.append("FROM Usuario u "); sql.append("WHERE u.usuario = '" +

this.usuario.getUsuario() + "' ");

sql.append("AND u.senha = '" + this.usuario.getSenha() + "' ");

Query query = em.createQuery(sql.toString());

this.usuario = (Usuario) query.getSingleResult();

this.consultaAcesso(this.usuario.getMatricula());

if (this.permissao.getCodigo() == 1) {

return "usuarioAdm"; } else { return "usuarioComum"; } } catch (NoResultException e) { e.printStackTrace(); return "erroLogin"; } } @SuppressWarnings("unchecked")

private void consultaAcesso(Integer matricula) {

StringBuffer sql = new StringBuffer(); sql.append("SELECT p ");

sql.append("FROM Permissao p, Relacao r, Usuario u "); sql.append("WHERE u.matricula = " + matricula + " "); sql.append("AND p.codigo = r.codigo ");

sql.append("AND u.matricula = r.matricula "); sql.append("ORDER BY r.id DESC ");

EntityManager em = JPAUtil.getEntityManager(); Query query = em.createQuery(sql.toString());

this.listaPermissao = query.getResultList();

this.permissao = this.listaPermissao.get(0); }

(29)

29

// *************** salvar relacao

public String salvarRelacao() {

this.relacao.setMatricula(this.cbxUsuario);

this.relacao.setCodigo(this.cbxPermissao); EntityManager em = JPAUtil.getEntityManager(); em.getTransaction().begin();

em.persist(this.relacao); em.getTransaction().commit();

return "usuarioAdm";

}

Método que busca todos os usuários

Na hora de fazer a relação do usuário com uma permissão a aplicação carrega em um combobox todos os usuários que estão no banco para escolher um.

@SuppressWarnings("unchecked")

public List<SelectItem> getListaComboboxUsuario() {

this.cbxUsuario = null;

this.listaComboboxUsuario = new ArrayList<SelectItem>(); EntityManager em = JPAUtil.getEntityManager();

Query query = em.createQuery("SELECT u FROM Usuario u");

this.listaUsuario = query.getResultList();

for (Usuario e : this.listaUsuario) {

this.listaComboboxUsuario.add(new SelectItem(new

Integer(e

.getMatricula()), e.getNome())); }

return listaComboboxUsuario;

(30)

30

Método que busca todas as permissões

Na hora de fazer a relação do usuário com uma permissão a aplicação carrega em um combobox todas as permissões que estão no banco para escolher um.

@SuppressWarnings("unchecked")

public List<SelectItem> getListaComboboxPermissao() {

this.cbxPermissao = null;

this.listaComboboxPermissao = new ArrayList<SelectItem>(); EntityManager em = JPAUtil.getEntityManager();

Query query = em.createQuery("SELECT p FROM Permissao p");

this.listaPermissao = query.getResultList();

for (Permissao e : this.listaPermissao) {

this.listaComboboxPermissao.add(new SelectItem(new

Integer(e .getCodigo()), e.getDescricao())); } return listaComboboxPermissao; }

Referências

http://showcase.richfaces.org/ http://www.ibm.com/developerworks/br/library/j-richfaces4/ http://richfaces.jboss.org/download/stable http://www.edsongoncalves.com.br/tag/richfaces/ http://docs.jboss.org/richfaces/latest_3_3_X/en/devguide/html/ http://www.devmedia.com.br/conhecendo-o-richfaces-parte-i/6440 http://www.mastertheboss.com/richfaces/richfaces-4-quick-tutorial http://www.devmedia.com.br/richfaces-4-desenvolvendo-interfaces-revista-java-magazine-99/23314

Referências

Documentos relacionados

For teachers who received their training in different periods, four different basic professional identities were identified: a) identity centred on an education of austerity

Especificamente as questões levantadas buscam avaliar qual o contributo das espécies mais representativas da área amostral (Bolbochenous maritimus (L.) Palla,

Dada a maior probabilidade de ocorrência de erros na dispensa com este tipo de receitas, existem pontos que exigem a atenção do farmacêutico, como a especificação clara do utente,

O valor da reputação dos pseudônimos é igual a 0,8 devido aos fal- sos positivos do mecanismo auxiliar, que acabam por fazer com que a reputação mesmo dos usuários que enviam

Este trabalho tem como objetivos apresentar os problemas ocasionados pelo recebimento de mensagens não solicitadas e pesquisar técnicas variadas no combate ao spam, em especial,

da quem praticasse tais assaltos às igrejas e mosteiros ou outros bens da Igreja, 29 medida que foi igualmente ineficaz, como decorre das deliberações tomadas por D. João I, quan-

Não tentarei sintetizar a interpretação de Armindo de Sousa sobre o parlamento medieval, dado que as suas propostas mais fraturantes foram já evidenciadas, de forma incisiva, por

forficata recém-colhidas foram tratadas com escarificação mecânica, imersão em ácido sulfúrico concentrado durante 5 e 10 minutos, sementes armazenadas na geladeira (3 ± 1