Невозможно развернуть на Weblogic - PullRequest
1 голос
/ 04 октября 2019

Я пытался применить все решения в этих вопросах:

Tomcat против Weblogic JNDI Lookup

Невозможно получить доступ к источнику данных weblogic из java с префиксом jdbc/

NameNotFoundException: при попытке поиска 'jdbc' только при публикации из Eclipse Kepler, но не в Indigo

javax.naming.NameNotFoundException: покапри попытке поиска 'jdbc.teradata' не удалось найти подконтекст 'jdbc'. Решено '';оставшееся имя 'jdbc / teradata'

javax.naming.NameNotFoundException: при попытке поиска jdbc

Weblogic javax.naming.NameNotFoundException при запускеприложение

но они не решили мою проблему. Я использую Spring MVC, Maven (многомодульный проект) и WebLogic. Это моя структура пакетов:

enter image description here

Это мой web.xml:

<web-app xmlns="http://java.sun.com/xml/ns/javaee"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_4_0.xsd"
      version="4.0">
      <resource-ref>
    <description>ConsipDataSource</description>
    <res-ref-name>jdbc/ConsipGfrDS</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
</resource-ref>
</web-app>

Это мой weblogic.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<weblogic-web-app
    xmlns="http://xmlns.oracle.com/weblogic/weblogic-web-app"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="
        http://xmlns.oracle.com/weblogic/weblogic-web-app http://http://www.oracle.com/technology/weblogic/weblogic-web-app/1.1/weblogic-web-app.xsd">

<resource-description>
    <jndi-name>ConsipGfrDS</jndi-name>
    <res-ref-name>jdbc/ConsipGfrDS</res-ref-name>
</resource-description>

</weblogic-web-app>

А это моя веблогическая консоль с источником данных Jdbc:

enter image description here

Метод bean-компонента моего класса конфигурации:

@Bean
    public DataSource dataSource() throws NamingException {
        Context ctx = new InitialContext();
        return (DataSource)ctx.lookup("jdbc/ConsipGfrDS");

    }

У меня есть исключение:

[ERROR] Target state: deploy failed on Server AdminServer
[ERROR] javax.naming.NameNotFoundException: Unable to resolve 'jdbc.ConsipGfrDS'. Resolved 'jdbc'; remaining name 'ConsipGfrDS'

Можете ли вы помочь мне решить эту ошибку?

Спасибо большое!

Ответы [ 2 ]

1 голос
/ 05 октября 2019

Это старомодный JNDI, и у вас здесь есть пара проблем.

Ваш web.xml правильно определил

<res-ref-name>jdbc/ConsipGfrDS</res-ref-name>

Эти ссылки на ресурсы определяют имена в JNDI java:comp/envпространство имен, также известное как пространство имен среды компонента, которое является локальным для вашего веб-приложения. Это означает, что полное имя JNDI вашего источника данных в вашем веб-приложении на самом деле java:comp/env/jdbc/ConsipGfrDS, поэтому ваш код поиска должен быть:

@Bean
public DataSource dataSource() throws NamingException {
    Context ctx = new InitialContext();
    return (DataSource)ctx.lookup("java:comp/env/jdbc/ConsipGfrDS");
}

Пока у нас есть платформа независимая (т.е. сервер приложений) код. Вы правильно вставили зависимую * платформу в платформу в файл weblogic.xml.

Однако здесь кроется ваша вторая проблема. weblogic.xml содержит небольшую ошибку. В предоставленном вами образе веб-логической консоли, показывающем конфигурацию источника данных JDBC, указано, что имя JNDI jdbc/ConsipGfrDS. Поэтому обновите его следующим образом:

<?xml version="1.0" encoding="UTF-8" ?>
<weblogic-web-app
    xmlns="http://xmlns.oracle.com/weblogic/weblogic-web-app"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="
        http://xmlns.oracle.com/weblogic/weblogic-web-app http://http://www.oracle.com/technology/weblogic/weblogic-web-app/1.1/weblogic-web-app.xsd">

    <resource-description>
        <!-- match jndi name in weblogic -->
        <jndi-name>jdbc/ConsipGfrDS</jndi-name>
        <!-- match res-ref-name name in web.xml -->
        <res-ref-name>jdbc/ConsipGfrDS</res-ref-name>
    </resource-description>

</weblogic-web-app>

Веселитесь!

1 голос
/ 05 октября 2019

Вы зарегистрировали свой источник данных под именем " jndi / ConsipGfrDS", но ищете " jdbc / ConsipGfrDS". Используйте одно (независимо от того, какое, но одно и то же) имя в обоих случаях.

Я бы предложил использовать в JNDI имя " jdbc / ConsipGfrDS", потому что это будет прощесортировать объекты, если в JNDI много объектов.

...