1

I had a JndiDatasourceCreator class and its have a bean in application context

<bean id="jndi" class="se.test.util.JndiDatasourceCreator" lazy-init="false" />

Its working fine. But when I move it into java config its not working.

Java config bean like this

@Bean
  @Lazy(value = false)
  public JndiDatasourceCreator jndi(){
    return new JndiDatasourceCreator();
  }

I am now getting error like this

Caused by: org.springframework.jdbc.datasource.lookup.DataSourceLookupFailureException: Failed to look up JNDI DataSource with name 'jdbc/sharedTender'; nested exception is javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file:  java.naming.factory.initial
    at org.springframework.jdbc.datasource.lookup.JndiDataSourceLookup.getDataSource(JndiDataSourceLookup.java:48)
    at se.mindspot.tender.backend.config.HibernateConfig.sharedDataSource(HibernateConfig.java:102)
    at se.mindspot.tender.backend.config.HibernateConfig$$EnhancerBySpringCGLIB$$ba1e5c30.CGLIB$sharedDataSource$7(<generated>)
    at se.mindspot.tender.backend.config.HibernateConfig$$EnhancerBySpringCGLIB$$ba1e5c30$$FastClassBySpringCGLIB$$755d2b99.invoke(<generated>)
    at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228)
    at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:358)
    at se.mindspot.tender.backend.config.HibernateConfig$$EnhancerBySpringCGLIB$$ba1e5c30.sharedDataSource(<generated>)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:162)
    ... 43 more
Caused by: javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file:  java.naming.factory.initial
    at javax.naming.spi.NamingManager.getInitialContext(Unknown Source)
    at javax.naming.InitialContext.getDefaultInitCtx(Unknown Source)
    at javax.naming.InitialContext.getURLOrDefaultInitCtx(Unkno

My JNDI creator class is here:

public class JndiDatasourceCreator {

    public JndiDatasourceCreator(){
        try {
            DriverManagerDataSource dataSource=null;
            final SimpleNamingContextBuilder builder = new SimpleNamingContextBuilder();
            dataSource = new DriverManagerDataSource();
            dataSource.setDriverClassName("org.mariadb.jdbc.Driver");
            dataSource.setUrl("jdbc:mysql://localhost:3306/rshared?autoReconnect=true");
            dataSource.setUsername("root");
            dataSource.setPassword("root");
            builder.bind("jdbc/sharedTender", dataSource);
            builder.activate();
        } catch (NamingException ex) {
            ex.printStackTrace();
        }
    }
}

Thanks for helping!!!

flopcoder
  • 1,195
  • 12
  • 25

0 Answers0