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

= RESTful Webサービスのペット・カタログ - NetBeans IDE 6.5
:jbake-type: tutorial
:jbake-tags: tutorials 
:jbake-status: published
:icons: font
:syntax: true
:source-highlighter: pygments
:toc: left
:toc-title:
:description: RESTful Webサービスのペット・カタログ - NetBeans IDE 6.5 - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, RESTful Webサービスのペット・カタログ - NetBeans IDE 6.5

|===
|このスクリーンキャストでは、Carol Mcdonald氏が、RESTful Webサービス、JAX-RS、dojo、MySQLおよびNetBeans IDE 6.5を使用してペット・カタログをビルドする方法を示します。

このチュートリアルは、link:../intro-screencasts.html[+NetBeans IDE 6.5のガイド・ビデオ・ツアー+]の一部です。

著者: Carol Mcdonald氏
時間: 8:46
link:http://bits.netbeans.org/media/restproject.swf[+ダウンロード+] (20MB)


== 関連リンク

* link:http://weblogs.java.net/blog/caroljmcdonald/[+Carol氏のブログからのサンプル・プロジェクトのダウンロード+]
* link:./rest.html[+RESTful Webサービスについて+]
link:/about/contact_form.html?to=3&subject=Feedback: NB6 web services pet catalog screencast[+ご意見をお寄せください+]
 
|===
