Solucionado (ver solução)
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