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

= Integració amb eines i serveis externs
:jbake-type: tutorial
:jbake-tags: tutorials 
:jbake-status: published
:icons: font
:syntax: true
:source-highlighter: pygments
:toc: left
:toc-title:
:description: Integració amb eines i serveis externs - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, Integració amb eines i serveis externs

Per a facilitar el desenvolupament de diversos tipus d'aplicacions, l'IDE NetBeans proporciona integració amb algunes eines i serveis externs. Els recursos llistats a continuació us ajudaran a com configurar i utilitzar cada eina i servei, per exemple, connectar a bases de dades, gestionar el vostre codi font mitjançant un sistema de control de versions, i utilitzar característiques corporatives disponibles a través del projecte Kenai.

== Guies d'aprenentatge i Articles

=== Gestió del codi font

* link:../docs/ide/clearcase.html[+ClearCase+]
* link:../docs/ide/subversion.html[+Subversion+]
* link:../docs/ide/cvs.html[+Sistema de control de versions (CVS)+]

=== Bases de dades

* link:../docs/ide/install-and-configure-mysql-server.html[+Configurant el servidor MySQL al sistema operatiu Windows+]
* link:../docs/ide/java-db.html[+Treballant amb la base de dades Java DB (Derby)+]
* link:../docs/ide/mysql.html[+Connectant a la base de dades MySQL+]

=== Maven

* link:../docs/java/maven-hib-java-se.html[+Creant una aplicació Swing Maven utilitzant Hibernate+]
* link:http://wiki.netbeans.org/MavenBestPractices[+Millors pràctiques Maven+]

=== Optimització

* link:../docs/java/profile-loadgenerator.html[+Utilitzant un generador de càrrega en l'IDE NetBeans+]

== Screencasts

image:::../../images_www/v6/arrow-button.gif[role="left", link="../docs/screencasts.html"]


== Documents aportats per la comunitat

* link:http://wiki.netbeans.org/TutorialUsingSVNLocalRepository[+Utilitzant un repositori local Subversion (SVN)+]
* link:http://wiki.netbeans.org/ApacheCXFonNetBeans[+Desenvolupant una aplicació de processament Loan mitjançant Apache CXF i JPA en NetBeans 6.1+]
* link:http://wiki.netbeans.org/AccessMssql[+Accedint a MS Access / MS SQL des de NetBeans+]

== Altres recursos

* link:http://wiki.netbeans.org/NetBeansUserFAQ#section-NetBeansUserFAQ-VersionControlSystems[+PMFs del control de versions+]
* link:http://wiki.netbeans.org/NetBeansUserFAQ#section-NetBeansUserFAQ-DatabaseConnectivity[+PMFs de connectivitat a bases de dades+]
* link:http://www.mysql.com/why-mysql/java/[+MySQL i Java - Recursos+]
