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

= Ознакомительное видео о приложениях Java EE
:jbake-type: tutorial
:jbake-tags: tutorials 
:jbake-status: published
:icons: font
:syntax: true
:source-highlighter: pygments
:toc: left
:toc-title:
:description: Ознакомительное видео о приложениях Java EE - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, Ознакомительное видео о приложениях Java EE

|===
|На этой экранной демонстрации описывается поддержка, обеспечиваемая IDE NetBeans для некоторых технологий, реализованных как часть спецификации Java Enterprise Edition 6 (Java EE 6). В этой экранной демонстрации показано использование мастеров в среде IDE для создания простого веб-приложения Java EE 6, содержащего фасад сеансного компонента EJB 3.1 без учета состояния для класса сущностей. После этого будет продемонстрировано, как создавать управляемый компонент JSF с доступом к сеансному фасаду и некоторым страницам JSF 2.0.

Автор: Кен Гэнфилд (Ken Ganfield)
Продолжительность: 6:16

link:http://bits.netbeans.org/media/nb68-gettingstarted-javaee6.mov[+Загрузить / Смотреть видео целиком+] (25 МБ)


link:/about/contact_form.html?to=3&subject=Feedback: Getting Started with Java EE Applications Demo[+Отправить отзыв по этому учебному курсу+]
 
|===


== Связанные ссылки

* link:javaee-gettingstarted.html[+Общие сведения о приложениях Java EE в NetBeans IDE+]
* link:javaee-intro.html[+Введение в технологию Java EE +]
* link:../web/jsf20-support.html[+JSF 2.0 Support in IDE NetBeans 6.8+]
* link:../../trails/java-ee.html[+Учебная карта по Java EE и Java Web+]
