Почему мой файл jndi.properties не загружается при развертывании .war на tomcat? - PullRequest
0 голосов
/ 09 февраля 2020

В моем весеннем веб-приложении, созданном с использованием maven, есть следующий файл main/resources/jndi.properties.

java.naming.security.authentication=simple
java.naming.provider.url=ldap://192.168.0.22:389/dc=company,dc=in
java.naming.security.principal=cn=admin,dc=company,dc=in
java.naming.security.credentials=1234
java.naming.factory.initial=com.sun.jndi.ldap.LdapCtxFactory

У меня есть 2 метода c.

Метод getMongodbConfig() использует жестко заданные спецификации среды:

    public static MongodbConfig getMongodbConfig() throws NamingException {

    // jndi.properties file though getting properly loaded in standalone application, it is not getting loaded by default in java ee containers
    Hashtable<String, String> env = new Hashtable<>();
    env.put("java.naming.security.authentication","simple");
    env.put("java.naming.provider.url","ldap://192.168.0.22:389/dc=company,dc=in");
    env.put("java.naming.security.principal","cn=admin,dc=company,dc=in");
    env.put("java.naming.security.credentials","1234");
    env.put("java.naming.factory.initial","com.sun.jndi.ldap.LdapCtxFactory");
    DirContext ctx = new InitialDirContext(env);

    // lookup the object in the naming service
    MongodbConfig retrievedMongodbConfig = lookup(ctx, MONGODB_CONFIG_DISTINGUISH_NAME);

    logger.info("Host: {}, port: {}", retrievedMongodbConfig.getHost(), retrievedMongodbConfig.getPort());

    ctx.close();

    return retrievedMongodbConfig;
}

Метод getMongodbConfigFromJNDIProperties() пытается использовать спецификации среды из файла jndi.properties.

public static MongodbConfig getMongodbConfigFromJNDIProperties() throws NamingException {

    // jndi.properties file though getting properly loaded in standalone application, it is not getting loaded by default in java ee containers
    DirContext ctx = new InitialDirContext();

    // lookup the object in the naming service
    MongodbConfig retrievedMongodbConfig = lookup(ctx, MONGODB_CONFIG_DISTINGUISH_NAME);

    logger.info("Host: {}, port: {}", retrievedMongodbConfig.getHost(), retrievedMongodbConfig.getPort());

    ctx.close();

    return retrievedMongodbConfig;
}

Оба вышеупомянутых метода успешно работают, когда я запускаю эти методы как автономное приложение. Но когда я собираю .war и развертываю как веб-приложение, getMongodbConfig() работает нормально, но я получаю следующее исключение при использовании getMongodbConfigFromJNDIProperties()

 javax.naming.NameNotFoundException: Name [cn=mongodbConfig,cn=production,cn=environment,cn=config,cn=tech] is not bound in this Context. Unable to find [cn=mongodbConfig,cn=production,cn=environment,cn=config,cn=tech]

Итак, как мне сделать мой getMongodbConfigFromJNDIProperties() даже в мое веб-приложение?

Редактировать: я создаю .war-файл своего проекта и развертываю в каталоге webapps tomcat 8, на всякий случай, если эта информация критична.

...