Solucionado (ver solução)
Solucionado
(ver solução)
26
respostas

Migrando de tomcat para widfly

Fiz mas o servidor não sobe. Entendi que ele não acha o persistence.xml

https://gist.github.com/anonymous/1c8a45db74275d4ad14a26ab907d9de1

standalone.xml

https://gist.github.com/anonymous/4d6869c0de59ee1f9e4d2203766ab05f

No servidor a conexão está ok, conforme imagem:

Erro: https://gist.github.com/anonymous/7ee6d80f84e1601c94948a29d1f2ac49

26 respostas

Olá, Guilherme.

A mensagem de erro é a seguinte, né?

Caused by: java.lang.ClassCastException: org.dom4j.DocumentFactory cannot be cast to org.dom4j.DocumentFactory

Bizarro, né? Não pode ser feito cast da classe para ela mesma!

Isso acontece quando há duas versões diferentes da classe.

Então, eu suspeito o seguinte: você tem alguma biblioteca na sua aplicação (no WEB-INF\lib) que já é fornecida pelo Wildfly.

Olhando mais um pouquinho o erro, dá pra ver:

Caused by: java.lang.ClassCastException: org.dom4j.DocumentFactory cannot be cast to org.dom4j.DocumentFactory
    at org.dom4j.DocumentFactory.getInstance(DocumentFactory.java:97)
    at org.hibernate.internal.util.xml.XMLHelper$1.doWork(XMLHelper.java:33)

Então, provavelmente há um conflito entre o Hibernate da sua aplicação e o do Wildfly.

Quando estamos em um servidor de aplicação, devemos confiar nele. Por isso, remova o Hibernate da sua aplicação.

Ah, outra coisa: você criou o módulo do org.postgresql? Dá um trabalhinho fazer isso no Widlfly...

Como assim:

Ah, outra coisa: você criou o módulo do org.postgresql? Dá um trabalhinho fazer isso no Widlfly...

Vou retirar o Hibernate do meu pom.xml

Não tem a ver com o erro em si, mas você já configurou o datasource do PostgreSQL no Wildfly?

Segue um passo a passo: https://pedrohosilva.wordpress.com/2014/08/29/configurando-o-datasource-do-postgresql-no-wildfly/

Guilherme,

Você pode ter problemas com a compilação. O Hibernate teria que ser colocado com escopo de provided no Maven. Isso quer dizer que o servidor de aplicação vai fornecer a implementação do Hibernate.

É comum usarmos essa dependência:

<dependency>
  <groupId>org.jboss.spec</groupId>
  <artifactId>jboss-javaee-7.0</artifactId>
  <version>1.0.0.Final</version>
  <type>pom</type>
  <scope>provided</scope>
</dependency>

Perceba que, nesse caso, tá o Java EE 7.0.

Guilherme,

Você pode ter problemas com a compilação. O Hibernate teria que ser colocado com escopo de provided no Maven. Isso quer dizer que o servidor de aplicação vai fornecer a implementação do Hibernate.

É comum usarmos essa dependência:

<dependency>
  <groupId>org.jboss.spec</groupId>
  <artifactId>jboss-javaee-7.0</artifactId>
  <version>1.0.0.Final</version>
  <type>pom</type>
  <scope>provided</scope>
</dependency>

Perceba que, nesse caso, tá o Java EE 7.0.

Sobre o datasource, não é a imagem que adicionei ?

Você testou a conexão e deu certo?

Se não deu certo, chegou a fazer a parte de colocar o jar do PostgreSQL?

Dá pra fazer pela linha de comando com o jboss-cli ou criando uma pasta e um XML na mão em modules/system/layers/base/

Pelo que entendi da imagem está conectando sim.

Ah, é! Desculpe! hehe

Não consegui

Vou colocar novamente minhas configurações, pois fiz do zero.

Log: https://gist.github.com/anonymous/e748dc9dc6602154d6f4913f6b640f69

Configurações Spring https://gist.github.com/anonymous/f4007272d6b47db2dceaa923732c9dde

package br.com.netsoft.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

@EnableWebMvc
@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/resources/**").addResourceLocations("/resources/");
        registry.addResourceHandler("/webjars/**").addResourceLocations("/webjars/").resourceChain(true);
    }
}

presistence.xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1"
    xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
    <persistence-unit name="nota-fiscal-servico-ds"
        transaction-type="RESOURCE_LOCAL">
        <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
        <non-jta-data-source>java:/prefeitura</non-jta-data-source>
        <properties>
            <property name="hibernate.hbm2ddl.auto" value="none" />
            <property name="hibernate.show_sql" value="true" />
            <property name="show_sql" value="true" />
            <property name="hibernate.format_sql" value="true" />
            <property name="hibernate.connection.autocommit" value="false" />
            <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect" />
        </properties>
    </persistence-unit>
</persistence>

pom.xml

<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>br.com.netsooft</groupId>
    <artifactId>nota-fiscal-servico-web</artifactId>
    <version>1.0.0</version>
    <packaging>war</packaging>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.6.RELEASE</version>
        <relativePath /> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>

        <!-- false - não precisa de XML -->
        <failOnMissingWebXml>false</failOnMissingWebXml>
        <!-- Spring MVC -->
        <spring-framework.version>4.3.5.RELEASE</spring-framework.version>

        <!-- Servlet API -->
        <servlet.version>3.1.0</servlet.version>
    </properties>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-framework-bom</artifactId>
                <version>${spring-framework.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <dependencies>
        <dependency>
            <groupId>org.jboss.spec</groupId>
            <artifactId>jboss-javaee-7.0</artifactId>
            <version>1.0.0.Final</version>
            <type>pom</type>
            <scope>provided</scope>
        </dependency>

        <!-- Spring MVC -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <!-- <scope>compile</scope> -->
            <!-- <exclusions> -->
            <!-- <exclusion> -->
            <!-- <groupId>commons-logging</groupId> -->
            <!-- <artifactId>commons-logging</artifactId> -->
            <!-- </exclusion> -->
            <!-- </exclusions> -->
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <scope>provided</scope>
        </dependency>

        <!-- Servlet API -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>${servlet.version}</version>
            <scope>provided</scope>
        </dependency>

        <!-- Spring security -->
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-config</artifactId>
        </dependency>
    </dependencies>
</project>

Tenso viu kkkk

Olá, Guilherme!

non-jta-data-source

Pelo erro no log, ele não encontrou o Datasource ao subir a aplicação:

    "WFLYCTL0412: Required services that are not installed:" => ["jboss.naming.context.java.jboss.datasources.prefeitura"],

Acho que em um servidor de aplicação, o datasource tem que ser do tipo JTA, em que possui transações gerenciadas pelo servidor de aplicação.

Do jeito que você usou, acho que dá pau. Você teria que criar um EntityManager a partir da EntityManagerFactory na mão, se não me engano.

Para mudar para um JTA Data Source, coloque true na opção "Use JTA?".

Lá no persistence.xml, mude o transaction-type para JTA e o use <jta-data-source>.

<?xml version="1.0" encoding="UTF-8"?>
    <persistence version="2.1"
        xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
        <persistence-unit name="nota-fiscal-servico-ds"
            transaction-type="JTA">
            <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
            <jta-data-source>java:/prefeitura</jta-data-source>
            <properties>
                <property name="hibernate.hbm2ddl.auto" value="none" />
                <property name="hibernate.show_sql" value="true" />
                <property name="show_sql" value="true" />
                <property name="hibernate.format_sql" value="true" />
                <property name="hibernate.connection.autocommit" value="false" />
                <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect" />
            </properties>
        </persistence-unit>
    </persistence>

Spring Boot

O Spring Boot foi criado pra ter um Tomcat embutido, né?

Você precisa, primeiro, comentar o spring-boot-starter-tomcat.

<!--  
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <scope>provided</scope>
        </dependency>
-->

Você tá usando alguma anotação do Sprint Boot? Pelo menos pelo que vi, não... Acho que rola comentar e não colocar nada no lugar!

O <parent> do spring-boot-starter-parent serviria apenas para configurar as versões do Java, Spring Web MVC e Spring Security.

Talvez role até tirar o Spring Boot e ficar apenas com o Spring Web MVC e o Spring Security! Mas aí você vai ter que configurar as versões no pom.xml.

Mesmo com a mudança continua o erro.

"WFLYCTL0412: Required services that are not installed:" => ["jboss.naming.context.java.jboss.datasources.prefeitura"],

Está sem o spring.

Pelo que entendi ele não está achando o banco de dados.

Este erro também

https://gist.github.com/anonymous/f0dd4daf75a67157fcd5eeede8c79a41

Pelo que estou vendo, mesmo sem escolher um projeto ele dá este erro...

Qual a sua versão do Widlfly?

wildfly-10.1.0.Final

Isto no console 17:18:36,698 INFO [org.jboss.as.connector.subsystems.datasources] (MSC service thread 1-2) WFLYJCA0001: Bound data source [java:jboss/datasources/prefeitura], quer dizer que conectou, correto ?

Opa! É sim!

solução!

Exclui o servidor .

Instalei novamente e fiz as configurações novamente.

Testou a aplicação? Funcionou?

Estou colocando os arquivos java. Mas com o pom subiu normal

Com o persitence.xml não sobe de jeito nenhum, que é o que necessitamos.

Com o , http://localhost:8080/nota-fiscal-servico-web-1.0.0/login, isto é com a versão do pom. Como fazer para tirar ?

<version>1.0.0</version>

Como este arquivo, já sobe.

package br.com.netsoft.config;

import java.util.Properties;

import javax.persistence.EntityManagerFactory;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
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;

@EnableJpaRepositories(basePackageClasses = WebConfig.class)
@EnableTransactionManagement
@Configuration
public class JPAConfig {

    @Bean
    public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
        LocalContainerEntityManagerFactoryBean factoryBean = new LocalContainerEntityManagerFactoryBean();
        JpaVendorAdapter jpaVendorAdapter = new HibernateJpaVendorAdapter();
        factoryBean.setJpaVendorAdapter(jpaVendorAdapter);
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setUsername("postgres");
        dataSource.setPassword("63Netsis417");
        dataSource.setUrl("jdbc:postgresql://localhost:5432/prefeitura");
        dataSource.setDriverClassName("org.postgresql.Driver");
        factoryBean.setDataSource(dataSource);
        Properties props = new Properties();
        props.setProperty("hibernate.dialect", "org.hibernate.dialect.PostgreSQLDialect");
        props.setProperty("hibernate.show_sql", "true");
        props.setProperty("show_sql", "true");
        props.setProperty("hibernate.format_sql", "true");
        props.setProperty("hibernate.hbm2ddl.auto", "update");
        factoryBean.setJpaProperties(props);
        factoryBean.setPackagesToScan("br.com.netsoft");
        return factoryBean;
    }

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

Equivale a esta dependência.

<!-- Spring Data JPA -->
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-jpa</artifactId>
            <version>${spring-data-jpa.version}</version>
        </dependency>

Para mudar o contexto, basta renomear o WAR. Ele é gerado assim pelo Maven lá no target, né?

Isso é meio ruim, porque a configuração do BD deveria ficar no Servidor de Aplicação.

Criei um tópico para estes dois últimos assuntos. Acho melhor.

obrigado.