Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

Solucionado
(ver solução)
10
respostas

Problema ao subir o Tomcat v9.0 e v7.0

Olá, pessoal! Vocês poderiam me ajudar?

Após eu adicionar as dependências do JPA, Hibernate e MySQL no pom.xml, o Eclipse identificou o seguinte problema no Tomcat:

Could not publish to the server. java.lang.IndexOutOfBoundsException

Meu arquivo pom.xml está assim:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>org.casadocodigo</groupId>
  <artifactId>casadocodigo</artifactId>
  <version>1.0.0-SNAPSHOT</version>
  <packaging>war</packaging>
  <build>
    <finalName>casadocodigo</finalName>
  </build>
  <properties>
    <failOnMissingWebXml>false</failOnMissingWebXml>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>4.1.0.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.apache.tomcat</groupId>
            <artifactId>tomcat-servlet-api</artifactId>
            <version>7.0.30</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.1</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp.jstl</groupId>
            <artifactId>jstl-api</artifactId>
            <version>1.2</version>
            <exclusions>
                <exclusion>
                    <groupId>javax.servlet</groupId>
                    <artifactId>servlet-api</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.glassfish.web</groupId>
            <artifactId>jstl-impl</artifactId>
            <version>1.2</version>
            <exclusions>
                <exclusion>
                    <groupId>javax.servlet</groupId>
                    <artifactId>servlet-api</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.6.1</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>jcl-over-slf4j</artifactId>
            <version>1.6.1</version>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.6.1</version>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.16</version>
            <scope>runtime</scope>
        </dependency>

        <!-- Dependências do JPA, Hibernate e MySQL -->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>4.3.0.Final</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>4.3.0.Final</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate.javax.persistence</groupId>
            <artifactId>hibernate-jpa-2.1-api</artifactId>
            <version>1.0.0.Final</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
            <version>4.1.0.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.15</version>
        </dependency>

    </dependencies>
</project>

O problema ocorreu logo que o Maven estava fazendo o building das dependências. Estava usando o Tomcat v9.0 e mudei para o Tomcat v7.0, mesmo que está sendo utilizado no curso, mas o problema continua.

O que pode ser? Desde já, agradeço a ajuda de todos.

Abraço! Gustavo Ávila.

10 respostas

Tentei apagar e adicionar novamente as dependências do JPA, Hibernate e MySQL: agora o servidor está subindo, mas apresentando erros:

Segue o log:

jan 02, 2018 5:14:35 PM org.apache.catalina.core.ApplicationContext log
GRAVE: StandardWrapper.Throwable
java.lang.NoClassDefFoundError: LocalContainerEntityManagerFactoryBean

Caused by: java.lang.ClassNotFoundException: LocalContainerEntityManagerFactoryBean
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1892)
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1735)
    ... 28 more


jan 02, 2018 5:14:35 PM org.apache.catalina.core.StandardContext loadOnStartup
GRAVE: Servlet [dispatcher] in web application [/casadocodigo] threw load() exception
java.lang.ClassNotFoundException: LocalContainerEntityManagerFactoryBean

Já verifiquei a classe JPAConfiguration, que contem o objeto LocalContainerEntityManagerFactoryBean, mas aparentemente está tudo ok.

Segue a classe JPAConfiguration:

package br.com.casadocodigo.loja.conf;

import java.util.Properties;

import javax.persistence.EntityManagerFactory;

import org.springframework.context.annotation.Bean;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.JpaVendorAdapter;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;
import org.springframework.transaction.annotation.EnableTransactionManagement;

@EnableTransactionManagement
public class JPAConfiguration {

    @Bean
    public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
        LocalContainerEntityManagerFactoryBean factoryBean = new LocalContainerEntityManagerFactoryBean();
        JpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();

        factoryBean.setJpaVendorAdapter(vendorAdapter);

        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setUsername("root");
        dataSource.setPassword("asdf");
        dataSource.setUrl("jdbc:mysql://localhost:3306/casadocodigo");
        dataSource.setDriverClassName("com.mysql.jdbc.Driver");

        factoryBean.setDataSource(dataSource);

        Properties props = new Properties();
        props.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQL5Dialect");
        props.setProperty("hibernate.show_sql", "true");
        props.setProperty("hibernate.hbm2ddl.auto", "update");

        factoryBean.setJpaProperties(props);

        factoryBean.setPackagesToScan("br.com.casadocodigo.loja.models");

        return factoryBean;
    }

    @Bean
    public JpaTransactionManager transactionManager(EntityManagerFactory emf) {
        return new JpaTransactionManager(emf);
    }
}

Espero que consigam me ajudar! Obrigado!

Você já criou o banco de dados casadocodigo? O hibernati não cria automaticamente

Opa, Vitor! Criei sim.

Mas esse problema começou desde o momento que adicionei as dependências do JPA, Hibernate, Spring ORM e MySQL. Logo no momento do build do Maven, o Eclipse já mostrou o erro no Tomcat.

Tanto é que testei retirar as dependências e o servidor rodou normalmente.

Acredito que seja algum problema nessas dependências...alguma incompatibilidade. Tô pesquisando aqui, mas ainda não achei nada.

solução!

Boa noite Gustavo, tenta deletar seu diretório .M2 e baixa todas as dependencias novamente com o maven

Boa noite, Guilherme! Não estou conseguindo encontrar esse diretório .M2. Será que é porque a estrutura inicial do projeto foi montada com o JBoss Forge?

diretório m2 no windows:

C:\Users\Seu-Usuário-Aqui\.m2

Dependendo do seu sistema operacional a pasta m2 é oculta

Guilherme e Vitor Jordão! Deu certo! Fiz exatamente como o Guilherme falou e agora está funcionando perfeitamente! :D

Não sabia que as dependências do Maven ficavam nesse diretório .m2 do Windows.

Então o problema foi, provavelmente, por conta de algum .jar corrompido?

Muito obrigado pela ajuda tão rápida, pessoal!

Grande abraço!

Sim, de vez em quando é bom dar uma limpada nessa pasta, até por que com o tempo vai se acumulando muitas dependências velhas que não se tá mais utilizando...

Que bom que deu certo Gustavo!

Bons estudos

Valeu, Guilherme! :D