// 
//     Licensed to the Apache Software Foundation (ASF) under one
//     or more contributor license agreements.  See the NOTICE file
//     distributed with this work for additional information
//     regarding copyright ownership.  The ASF licenses this file
//     to you under the Apache License, Version 2.0 (the
//     "License"); you may not use this file except in compliance
//     with the License.  You may obtain a copy of the License at
// 
//       http://www.apache.org/licenses/LICENSE-2.0
// 
//     Unless required by applicable law or agreed to in writing,
//     software distributed under the License is distributed on an
//     "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
//     KIND, either express or implied.  See the License for the
//     specific language governing permissions and limitations
//     under the License.
//

.JavaEE Tutorials
************************************************
- link:cdi-validate_pt_BR.html[Aplicando Anotações de Ciclo de Vida e de Beans @Alternative]
- link:cdi-intro_pt_BR.html[Conceitos Básicos sobre a Injeção de Dependência e Contextos e JSF 2.x]
- link:secure-ejb_pt_BR.html[Construindo Enterprise Beans Seguros no Java EE]
- link:entappclient_pt_BR.html[Criando e Executando um Cliente da Aplicação no GlassFish Server]
- link:javaee-entapp-ejb_pt_BR.html[Criando uma Aplicação Corporativa com o EJB 3.1]
- link:maven-entapp_pt_BR.html[Criando uma Aplicação Corporativa com o Maven]
- link:profiler-javaee_pt_BR.html[Determinando um perfil de uma Aplicação Corporativa no NetBeans IDE]
- link:javaee-intro_pt_BR.html[Introdução ao Suporte para a Tecnologia Java EE no NetBeans IDE]
- link:javaee-gettingstarted_pt_BR.html[Introdução às Aplicações Java EE]
- link:index_pt_BR.html[JavaEE Tutorials]
- link:section_pt_BR.html[]
- link:maven-entapp-testing_pt_BR.html[Testando uma Aplicação Corporativa Maven]
- link:cdi-events_pt_BR.html[Trabalhando com Eventos no CDI]
- link:cdi-inject_pt_BR.html[Trabalhando com Injeção e Qualificadores no CDI]
- link:maven-websocketapi_pt_BR.html[Usando a API do WebSocket em uma Aplicação Web]
- link:maven-osgiservice-cdi_pt_BR.html[Usando o CDI para Injetar Pacotes OSGi como Serviços no NetBeans IDE]
- link:javaee-entapp-junit_pt_BR.html[Usando o Container EJB Incorporado para Testar Aplicações Corporativas]
- link:jpa-eclipselink-screencast_pt_BR.html[Usando o Suporte JPA com o EclipseLink]
- link:javaee-gettingstarted-screencast_pt_BR.html[Vídeo de Conceitos Básicos sobre Aplicações Java EE]
- link:maven-primefaces-screencast_pt_BR.html[Vídeo de Desenvolvimento de PrimeFaces com o NetBeans IDE]
- link:weblogic-javaee-m1-screencast_pt_BR.html[Vídeo sobre a Implantação de uma Aplicação Web no Oracle WebLogic Server]
- link:maven-websocketapi-screencast_pt_BR.html[Vídeo Usando a API do WebSocket em uma Aplicação Web]
************************************************


