# Revisao java
#### JSF - Java Server Faces
framework onde é efetuada a elaboração de interfaces de usuários para sistema web, separação entre a lógica e regras de negocio a navegação e conexões com serviços externos seguindo o modelo MVC
#### Por que usar JSF ao invés de JSP?
JSF e Facelets trouxeram inúmeras vantagens com relação ao modo antigo de fazer (JSP), por exemplo: templates, composite components, separação mais rígida entre visão e lógica de apresentação, facilidades AJAX, etc.As "páginas" JSP na verdade são "compiladas" para código Java tornando-se Servlets, e usando JSF você continua podendo estender a sua aplicação criando seus próprios Servlet
#### Que tecnologia é usada para renderizar a parte de view do JSF? Como ela é apresentada estruturalmente?
O ciclo de vida JSF é vinculado através do objeto Lifecycle, que usa outro objeto a seu favor, o FacesContext. O objeto FacesContext trabalha com seis fases que forma o ciclo de vida JSF, que estão apresentadas abaixo.
#### O que é um Managed Bean e Backing Bean? Qual é a diferença entre eles?
A função do managebean é estar intermediando entre a página e o seu modelo, ela mantem os dados durante o ciclo de vida de uma view. Ja o backing bean como diz o nome, é um “Bean por detrás”, um “Bean que dá suporte”. Ou seja, é o Bean que está por trás da funcionalidade de uma página, cuidando dos seus componentes, do estado da página, da navegação, etc. Costuma ser intimamente associado a alguma página.
#### Qual é o procedimento para mapear uma classe para o JSF? Existem diferentes formas de se mapear uma classe?
- Mapeamento direto no arquivo faces-config.xml por meio da tag xml "managed-bean" (Muito usado na versão 1.2 do faces)
- Mapeamento via anotação direto na classe. Onde:
@ManagedBean(name = "nome-que-vc-definir-aqui").
#### O que acontece se eu alterar o conteúdo da anotação @Named de uma classe mapeada?
Named permite expor qualquer objeto através de expression language (EL) na view, inclusive um EJB. Quando alterado será refletido nos objetos que estão em contato com a mesma
#### Qual é a sintaxe para acessar um dado de um objeto numa página .xhtml?
#{classeBB.objeto.propiedade}
#### Explique a tag f:selectItems e seus atributos itemValue e itemLabel
a tag f:selectItems carrega uma lista de opções a serem selecionadas na view, itemValue é o valor a qual sera atribuido e a itemLabel será a descrição mostrada para o usuario;
#### Para que serve a tag h:messages?
A tag h: messages mostra todas as mensagens em um local correspondente aos elementos da interface do usuário.
#### Qual é a proposta do componente h:dataTable? Como faço para listar dados de uma lista e atualizá-la automaticamente ao alterar ou remover um item?
este componente criar uma tabela com as mesmas propiedades da tag '<table' em html. Para listar os dados, é preciso carregar um array na camada bean
que o prorpio jsf faz a interação dos atributos. Para atualizar os dados, basta cada vez que instanciar a camada view, carregar os dados da bean em uma nova instancia.
#### De que formas posso realizar a validação de campos no JSF?
criando funções nas beans e enviar o formulario para validar os campos ou utilizar as propiedades de required e mask do jsf.
#### Explique a navegação implícita e como ela é feita no código Java
A Navegação Implícita é a mais simples de se executar • Um sinal (outcome) é enviado ao framework e um tratador de navegação identifica qual tela deve ser apresentada como resposta • Esse outcome é uma String de retorno: – se um método do MB retornar uma String – uma String no atributo action de um commandButton ou commandLink – uma String no atributo outcome de um link
#### O que o método init() com a anotação @PostConstruct faz?
O método anotado com @PostConstruct é executado toda vez que o ManagedBean for instanciado, logo após a execução do construtor da classe.
Portanto o número de vezes que ele será executado vai depender do escopo do bean, e do número de requisições
#### O que é JPA? E Hibernate? Por que usar?
a JPA é uma ferramenta de mapeamento objeto-relacional (ORM). O Hibernate é uma ferramenta ORM open source e é a líder de mercado, sendo a inspiração para a especificação Java Persistence API (JPA). Usa-se para abstrarir o desenvolvimento de logica utilizando JDBC e tirando a nescessidade de executar as querys...
#### Como é possível fazer a conexão com um banco de dados utilizado Hibernate? É necessário desenvolver algum código?
Não é nessecario desenvolver codigo. Apenas configuar os dados do banco na hibernate config, e instancar o objeto Hibernate connection passando os objetos e os metodos que representam ações no banco.
#### Como é feito o mapeamento de uma tabela para uma classe?
criando uma classe java, seguindo o mapeamento do banco. identificando a relação coluna com as notações @named.
#### Qual é o código para inserir uma linha numa tabela usando Hibernate? Qual é a diferença quando precisarmos alterar ou remover uma linha?
instanciando um objeto no java e utilizando o metodo Save do hibernate para salvado, update e remove para as outras operações.
#### Por que na consulta do HQL devemos usar o nome da identidade com letra maiúscula?
as consultas HQL são traduzidas pelo Hibernate em consultas SQL e possuem uma propria sintaxe.Além disso, o Hibernate também provê uma API que permite consultas SQL diretamente.
#### Como realizar o mapeamento N-1? E o 1-N?
Utilizando a anotação @ManyToOne e @JoinColumn é utilizado para nomearmos a coluna que possui a chave-estrangeira requerida pela associação. Se nada for especificado, será utilizado o nome do campo.
#### Qual é a diferença entre as anotações @JoinColumn e @PrimaryKeyJoinColumn?
Você pode usar a anotação @JoinColumn para mapear a coluna de chave estrangeira de uma associação gerenciada . O @PrimaryKeyJoinColumn especifica o mapeamento da coluna de chave estrangeira de uma tabela secundária ou a coluna de chave estrangeira em um mapeamento de herança que usa a estratégia JOINED.
#### Quais são os passos para montar um mapeamento N-N?
A maneira mais simples é utilizando o @ManyToMany está pronto pra usar.
Se seu banco de dados for gerado pela JPA. Utilize a forma mais simples.
Na classe Local.
@ManyToMany
ListEquipamento equipamentos;
Ou na classe Equipamento
@ManyToMany
ListLocal locais;
Se o banco já existir, utilize @JoinTable para mapear a tabela e as colunais que vc precisa.
E sim você pode criar uma classe para representar a tabela intermediaria, mas antes se pergunte se ela faz algum sentido no seu negócio. Por exemplo, é necessário mais informações além dos IDs do equipamento e local?
Nessa classe intermediaria, vc precisa mapear o Equipamento e o Local com @ManyToOne e no Local ou Equipamento um @OneToMany para a classe intermediária.
#### Qual é a diferença entre FetchType.EAGER e FetchType.LAZY?
Lazy Loading faz com que determinados objetos não sejam carregados do banco até que você precise deles, ou seja, são carregados 'on demand' (apenas quando você solicitar explicitamente o carregamento destes).
Oposto ao Lazy Loading,
Eager Loading carrega os dados mesmo que você não vá utilizá-los, mas é óbvio que você só utilizará esta técnica se de fato você for precisar com muita frequência dos dados carregados.
#### O que é Maven? Por que usar essa ferramenta?
O Apache Maven é uma ferramenta de automação e gerenciamento de projetos Java, embora também possa ser utilizada com outras linguagens. Ela fornece às equipes de desenvolvimento uma forma padronizada de automação, construção e publicação de suas aplicações, agregando agilidade e qualidade ao produto final. Por ser extremamente flexível, permite que sejam adicionados plugins a si, para estender suas funcionalidades nativas.
#### O que é o Spring Security?
O Spring Security é uma estrutura de autenticação e controle de acesso poderosa e altamente personalizável. É o padrão de fato para proteger aplicativos baseados em Spring.
O Spring Security é uma estrutura que se concentra no fornecimento de autenticação e autorização para aplicativos Java. Como todos os projetos do Spring, o poder real do Spring Security é encontrado na facilidade com que pode ser estendido para atender aos requisitos personalizados