// 
//     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.
//

= Vídeo de Conceitos Básicos sobre Aplicações Java EE
:jbake-type: tutorial
:jbake-tags: tutorials 
:jbake-status: published
:icons: font
:syntax: true
:source-highlighter: pygments
:toc: left
:toc-title:
:description: Vídeo de Conceitos Básicos sobre Aplicações Java EE - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, Vídeo de Conceitos Básicos sobre Aplicações Java EE

|===
|Este screencast demonstra o suporte fornecido pelo NetBeans IDE a algumas das tecnologias apresentadas como parte da especificação Java Enterprise Edition 6 (Java EE 6). O screencast demonstra como usar assistentes no IDE para criar uma aplicação web Java EE 6 simples, que contém uma fachada de bean de sessão sem estado do EJB 3.1 para uma classe de entidade. Depois, você verá como criar um bean gerenciado JSF que acesse a fachada da sessão e algumas páginas JSF 2.0.

Autor: Ken Ganfield
Tempo: 6:16

link:http://bits.netbeans.org/media/nb68-gettingstarted-javaee6.mov[+Download / Veja em tamanho completo+] (25 MB)


link:/about/contact_form.html?to=3&subject=Feedback: Getting Started with Java EE Applications Demo[+Enviar Feedback neste Tutorial+]
 
|===


== Links relacionados

* link:javaee-gettingstarted.html[+Conceitos Básicos sobre Aplicações Java EE no NetBeans IDE+]
* link:javaee-intro.html[+Introdução à Tecnologia Java EE+]
* link:../web/jsf20-support.html[+Suporte a JSF 2.0 no NetBeans IDE 6.8+]
* link:../../trails/java-ee.html[+Trilha de Aprendizado do Java EE e Java Web+]
