Impossible de déployer mon application web

Fermé
ddoriii - 25 juil. 2016 à 13:15
 ddoriii - 26 juil. 2016 à 08:56
Bonjour,

J'ai récupérer un projet la semaine dernière et impossible de le déployer sur tomcat.

Lorsque j'essaie de démarrer le war sous tomcat l'erreur suivante apparait:

Caused by: org.springframework.beans.factory.BeanDefinitionStoreException: Factory method [public javax.sql.DataSource com.****.project.config.DaoConfig.dataSource()] threw exception; nested exception is org.springframework.jdbc.datasource.lookup.DataSourceLookupFailureException: Failed to look up JNDI DataSource with name 'java:comp/env/jdbc/project'; nested exception is javax.naming.NameNotFoundException: Le Nom jdbc/project n'est pas lié à ce Contexte
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:188)
at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:581)
... 69 more
Caused by: org.springframework.jdbc.datasource.lookup.DataSourceLookupFailureException: Failed to look up JNDI DataSource with name 'java:comp/env/jdbc/project'; nested exception is javax.naming.NameNotFoundException: Le Nom jdbc/project n'est pas lié à ce Contexte
at org.springframework.jdbc.datasource.lookup.JndiDataSourceLookup.getDataSource(JndiDataSourceLookup.java:48)
at com.*****.project.config.DaoConfig.dataSource(DaoConfig.java:39)
at com.*****.project.config.DaoConfig$$EnhancerByCGLIB$$e2f88985.CGLIB$dataSource$3(<generated>)
at com.*****.project.config.DaoConfig$$EnhancerByCGLIB$$e2f88985$$FastClassByCGLIB$$52b3541f.invoke(<generated>)
at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228)
at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:326)
at com.*****.project.config.DaoConfig$$EnhancerByCGLIB$$e2f88985.dataSource(<generated>)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:166)
... 70 more
Caused by: javax.naming.NameNotFoundException: Le Nom jdbc/project n'est pas lié à ce Contexte
at org.apache.naming.NamingContext.lookup(NamingContext.java:820)
at org.apache.naming.NamingContext.lookup(NamingContext.java:154)
at org.apache.naming.NamingContext.lookup(NamingContext.java:831)
at org.apache.naming.NamingContext.lookup(NamingContext.java:154)
at org.apache.naming.NamingContext.lookup(NamingContext.java:831)
at org.apache.naming.NamingContext.lookup(NamingContext.java:168)
at org.apache.naming.SelectorContext.lookup(SelectorContext.java:158)
at javax.naming.InitialContext.lookup(InitialContext.java:411)
at org.springframework.jndi.JndiTemplate$1.doInContext(JndiTemplate.java:155)
at org.springframework.jndi.JndiTemplate.execute(JndiTemplate.java:87)
at org.springframework.jndi.JndiTemplate.lookup(JndiTemplate.java:152)
at org.springframework.jndi.JndiTemplate.lookup(JndiTemplate.java:179)
at org.springframework.jndi.JndiLocatorSupport.lookup(JndiLocatorSupport.java:95)
at org.springframework.jdbc.datasource.lookup.JndiDataSourceLookup.getDataSource(JndiDataSourceLookup.java:45)
... 81 more

juil. 25, 2016 12:02:22 PM org.apache.catalina.core.ApplicationContext log
Infos: Closing Spring root WebApplicationContext

J'ai donc chercher dans les fichiers de configuration et dans mon context.xml j'ai ça au niveau de la bdd

  <Resource 
    	minIdle="10" 
    	initialSize="10" 
    	password="*****" 
    	username="****" 
    	url="jdbc:oracle:thin:@server:port" 
    	type="javax.sql.DataSource" 
    	name="jdbc/project"
      	maxWait="10000" 
      	maxIdle="30"
      	maxActive="100" 
     	driverClassName="oracle.jdbc.OracleDriver" 
     	auth="Container"/>



Pour le fichier DaoConfig j'ai

package com.****.project.config;

import java.util.Properties;

import javax.annotation.Resource;
import javax.sql.DataSource;

import org.hibernate.ejb.HibernatePersistence;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
import org.springframework.core.env.Environment;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.jdbc.datasource.lookup.JndiDataSourceLookup;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;

@Configuration
@EnableJpaRepositories("com.****.project.dao")
@Profile(value = { "!dev" })
public class DaoConfig {

	private static final String PROPERTY_NAME_HIBERNATE_DIALECT = "hibernate.dialect";

	private static final String PROPERTY_NAME_HIBERNATE_SHOW_SQL = "hibernate.show_sql";
	private static final String PROPERTY_NAME_HIBERNATE_DDL_AUTO = "hibernate.hbm2ddl.auto";
	private static final String PROPERTY_NAME_ENTITYMANAGER_PACKAGES_TO_SCAN = "entitymanager.packages.to.scan";

	@Resource
	private Environment environment;

	@Bean
	@Resource(name = "jdbc/project")
	public DataSource dataSource() {
		final JndiDataSourceLookup dsLookup = new JndiDataSourceLookup();
		dsLookup.setResourceRef(true);
		DataSource dataSource = dsLookup.getDataSource("java:comp/env/jdbc/project");
		return dataSource;
	}

	@Bean
	public JpaTransactionManager transactionManager()
			throws ClassNotFoundException {
		JpaTransactionManager transactionManager = new JpaTransactionManager();

		transactionManager.setEntityManagerFactory(entityManagerFactory()
				.getObject());

		return transactionManager;
	}

	@Bean
	public LocalContainerEntityManagerFactoryBean entityManagerFactory()
			throws ClassNotFoundException {
		LocalContainerEntityManagerFactoryBean entityManagerFactoryBean = new LocalContainerEntityManagerFactoryBean();

		entityManagerFactoryBean.setDataSource(dataSource());
		entityManagerFactoryBean
				.setPackagesToScan(environment
						.getRequiredProperty(PROPERTY_NAME_ENTITYMANAGER_PACKAGES_TO_SCAN));
		entityManagerFactoryBean
				.setPersistenceProviderClass(HibernatePersistence.class);

		Properties jpaProperties = new Properties();

		jpaProperties.put(PROPERTY_NAME_HIBERNATE_SHOW_SQL, environment
				.getRequiredProperty(PROPERTY_NAME_HIBERNATE_SHOW_SQL));
		jpaProperties.put(PROPERTY_NAME_HIBERNATE_DDL_AUTO, getHbm2DdlMode());

		HibernateJpaVendorAdapter adapter = new HibernateJpaVendorAdapter();

		adapter.setDatabasePlatform(this.getDialect());
		adapter.setGenerateDdl(false);
		entityManagerFactoryBean.setJpaVendorAdapter(adapter);
		entityManagerFactoryBean.setJpaProperties(jpaProperties);

		return entityManagerFactoryBean;
	}

	/**
	 * @return the hibernate dialect
	 */
	protected String getDialect() {
		return environment.getRequiredProperty(PROPERTY_NAME_HIBERNATE_DIALECT);
	}

	/**
	 * @return the HBM to DDL mode (create/update...)
	 */
	protected String getHbm2DdlMode() {
		return environment
				.getRequiredProperty(PROPERTY_NAME_HIBERNATE_DDL_AUTO);
	}

} 





Voilà. Du coup j'ai bien vérifié les paramètres de connexion à la base de données et les informations de connexions sont correctes à priori.

Quelqu'un pourrait-il m'aider, ça fait un moment que je cherche sans rien trouver qui débloque la situation
Merci à vous.

A voir également:

1 réponse

KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
25 juil. 2016 à 17:50
Bonjour,

Tomcat n'est pas un Java EE donc faire de l'hibernate ça risque d'être un peu trop pour lui...
Essayes de déployer ton war sur un serveur Java EE (wildfly par exemple) ce serait déjà un début.

Ensuite il faudrait regarder le java:comp/env, parfois faut le mettre, d'autres fois non, il faudrait être sûr que le lien se fasse.
0
Bonjour et merci pour ta réponse.

En fait je suis au boulot, impossible de changer d'environnement :/
Après un update maven l'erreur lié au jdbc a disparue. Je n'ai pas vraiment compris pourquoi, mais il s'agissait d'un mise à jour spring.framework dans le pom à priori. Maintenant il me dit clairement que c'est le java:comp/env qui pose problème:

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'java:comp/env/mail/elisa' is defined: not found in JNDI environment


je vais essayer de voir ce que ça donne sans.
Merci encore de ta réponse.
0