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

= Oracle WebLogic ServerへのWebアプリケーションのデプロイのビデオ
:jbake-type: tutorial
:jbake-tags: tutorials 
:jbake-status: published
:icons: font
:syntax: true
:source-highlighter: pygments
:toc: left
:toc-title:
:description: Oracle WebLogic ServerへのWebアプリケーションのデプロイのビデオ - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, Oracle WebLogic ServerへのWebアプリケーションのデプロイのビデオ

|===
|このスクリーンキャストでは、NetBeans IDEでのOracle WebLogicサーバーのサポートについて説明します。このスクリーンキャストでは、サーバーのインスタンスをIDEに登録してからJava EE 5 Webアプリケーションをデプロイする方法について説明します。IDEでは、自動的にWebLogicディスクリプタ・ファイルを生成および構成し、必要なJDBCドライバをサーバーにデプロイできます。また、IDEからサーバー上のJavaServer Faces 2.0ライブラリを有効化することもできます。

作成者: Ken Ganfield
時間: 10:20

link:http://bits.netbeans.org/media/weblogic4.mp4[+フルサイズを視聴+] ([Ctrl]を押しながらクリックするとダウンロード、19MB)

右側でのスクリーンキャストの表示で問題が発生する場合は、開始する前に、スクリーンキャストをダウンロードできます。または、上のリンクをクリックして、スクリーンキャストのフルサイズ・バージョンを表示できます。


link:/about/contact_form.html?to=3&subject=Feedback:  Deploying a Java EE Application to the Oracle WebLogic Server[+ご意見をお寄せください+]
 |         
|===



== 関連リンク

* link:../web/jsf-jpa-weblogic.html[+Oracle WebLogic Server上でのJavaServer Faces 2.0 Webアプリケーションの実行+]
