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

= O Tutorial do NetBeans E-commerce: Instruções de Configuração
:jbake-type: tutorial
:jbake-tags: tutorials 
:jbake-status: published
:icons: font
:syntax: true
:source-highlighter: pygments
:toc: left
:toc-title:
:description: O Tutorial do NetBeans E-commerce: Instruções de Configuração - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, O Tutorial do NetBeans E-commerce: Instruções de Configuração



1. link:intro.html[+Introdução+]
2. link:design.html[+Criando a Aplicação+]
3. link:setup-dev-environ.html[+Configurando o Ambiente de Desenvolvimento+]
4. link:data-model.html[+Criando o Modelo de Dados+]
5. link:page-views-controller.html[+Preparando as Views de Página e o Servlet do Controlador+]
6. link:connect-db.html[+Conectando a Aplicação ao Banco de Dados+]
7. link:entity-session.html[+Adicionando Classes de Entidades e Beans de Sessão+]
8. link:manage-sessions.html[+Gerenciando Sessões+]
9. link:transaction.html[+Integrando a Lógica de Negócios Transacional+]
10. link:language.html[+Adicionando o Suporte a Idioma+]
11. link:security.html[+Protegendo a Aplicação+]
12. link:test-profile.html[+Testando e Criando Perfis+]
13. link:conclusion.html[+Conclusão+]

image::../../../../images_www/articles/68/netbeans-stamp-68-69.png[title="O conteúdo desta página se aplica ao NetBeans IDE, versões e 6.8 e 6.9"]

Se desejar seguir uma unidade do tutorial sem ter concluído as unidades anteriores, você precisará executar algumas etapas preliminares para configurar o ambiente de desenvolvimento.

1. *Configure seu servidor de banco de dados MySQL.* Siga as etapas descritas em: link:setup-dev-environ.html#communicate[+Comunicando-se com o Servidor do Banco de Dados+].
2. *Crie o esquema `affablebean` no servidor do banco de dados e preencha o banco de dados com dados de amostra:*
.. Clique em link:https://netbeans.org/projects/samples/downloads/download/Samples%252FJavaEE%252Fecommerce%252Faffablebean.sql[+affablebean.sql+] e copie (Ctrl-C; ⌘-C no Mac) todo o conteúdo do arquivo.
.. Abra o editor SQL do IDE. Na janela Serviços (Ctrl-5; ⌘-5 no Mac), clique com o botão direito do mouse no nó de conexão do banco de dados `affablebean` (image::images/db-connection-node.png[]) e selecione Executar Comando. 
image::images/execute-command.png[title="Selecione Executar Comando em um nó de conexão para abrir o editor SQL do IDE"] 
O editor SQL do IDE será aberto.

[start=3]
. Cole (Ctrl-V; ⌘-V no Mac) todo o conteúdo do arquivo `affablebean.sql` no editor.

[start=4]
. Clique no botão Executar SQL (image::images/run-sql-btn.png[]) na barra de ferramentas do editor. O script será executado no servidor MySQL. As tabelas serão geradas para o banco de dados e os dados de amostra serão adicionadas às tabelas `product` e `category`.

[start=3]
. *Crie um pool de conexões e recursos JDBC no GlassFish*
1. Na janela Serviços (Ctrl-5; ⌘-5 no Mac), expanda o nó Servidores > GlassFish Server 3 e selecione Propriedades. Na janela Servidores exibida, certifique-se de que a opção "Ativar Implantação do driver JDBC" esteja selecionada. Se o seu projeto exigir o driver link:http://www.mysql.com/downloads/connector/j/[+Conector/J+] do MySQL, esta opção irá garantir que o driver seja implantado no GlassFish quando o projeto for implantado. (Se o servidor já estiver sendo executado, ele deverá ser reiniciado.)
2. Na janela Serviços, clique com o botão direito do mouse no nó GLassFish Server 3 e selecione Iniciar.
3. Quando o servidor estiver sendo executado, clique com o botão direito do mouse no nó GlassFish Server 3 e selecione Exibir Console Admin.
4. Efetue log-in na console (o nome do usuário/senha default é:`admin/adminadmin`).
5. Na Console Admin, na Árvore à esquerda, expanda o nó Recursos > JDBC e, em seguida, clique no nó Pools de Conexões.
6. Na interface Pools de Conexões, clique no botão Novo e insira os detalhes a seguir:
* *Nome:*`AffableBeanPool`
* *Tipo de Recurso:*`javax.sql.ConnectionPoolDataSource`
* *Fornecedor do Banco de Dados* `MySql`
image::images/connection-pool.png[title="Especificar definições para criar um pool de conexões que estabelece conexão com um banco de dados MySQL"]

[start=7]
. Clique em Próximo. Aceite todos os defaults e clique em Finalizar.

[start=8]
. Na interface Pools de Conexões, clique no recém-criado `AffableBeanConnectionPool` para fazer as seguintes alterações na guia Geral:
* *Nome da Classe da Fonte de Dados:* `com.mysql.jdbc.jdbc2.optional.MysqlDataSource`
image::images/datasource-classname.png[title="Defina o nome da classe da fonte de dados para o pool de conexões"]

[start=9]
. Clique em Salvar.

[start=10]
. Clique na guia Propriedades Adicionais e verifique se as três propriedades a seguir foram definidas. (Talvez existam outras propriedades listadas: estas são as definições default, no entanto as três seguintes devem ser configuradas manualmente.)
* *Usuário:*`root`
* *Senha:*`nbuser`
* *URL:*`jdbc:mysql://localhost:3306/affablebean`
image::images/additional-properties.png[title="Defina o nome de usuário, a senha e o url do banco de dados"]

[start=11]
. Clique em Salvar.

[start=12]
. Clique na guia Geral e, em seguida, clique em Ping. Você deverá receber uma mensagem indicando que o ping foi bem-sucedido. O pool de conexões `AffableBeanPool` pode agora conectar-se com o servidor de banco de dados MySQL. 
image::images/ping-succeeded.png[title="Pingue o servidor MySQL para determinar se o pool de conexões pode se conectar"]

[start=13]
. Na Árvore da Console Admin na coluna esquerda, clique no nó Recursos > JDBC > Recursos do JDBC. A interface Recursos do JDBC será aberta na janela principal.

[start=14]
. Clique no botão Novo para criar um novo recurso JDBC e, em seguida, informe os seguintes detalhes:
* *Nome JNDI:*`jdbc/affablebean`
* *Pool de Conexões:*`AffableBeanPool`
image::images/jdbc-resource.png[title="Especifique o nome JNDI e o pool de conexões para criar o recurso JDBC"]

[start=15]
. Clique em OK.

Você configurou o servidor MySQL e pode conectar-se a ele na janela Serviços do IDE. Um banco de dados chamado `affablebean` foi criado e as tabelas `product` e `category` do banco de dados foram preenchidas com dados de amostra. Em seguida, você iniciou o GlassFish Server e criou um pool de conexões que permite ao servidor estabelecer conexão com o banco de dados `affablebean`. Finalmente, você criou um recurso JDBC que sua aplicação pode utilizar para fazer referência ao pool de conexões do servidor.

Você agora pode abrir e executar qualquer um dos snapshots do projeto fornecidos nas unidades do tutorial.

link:/about/contact_form.html?to=3&subject=Feedback: NetBeans E-commerce Tutorial - Setup Instructions[+Envie-nos Seu Feedback+]


