不可能部署在Weblogic上

时间:2019-10-04 19:59:15

标签: java maven spring-mvc deployment weblogic

我尝试将所有解决方案应用于这些问题:

Tomcat vs Weblogic JNDI Lookup

Unable to access weblogic datasource from java with prefix jdbc/

NameNotFoundException: While trying to lookup 'jdbc' only when publishing from Eclipse Kepler but not Indigo

javax.naming.NameNotFoundException: While trying to lookup 'jdbc.teradata' didn't find subcontext 'jdbc'. Resolved ''; remaining name 'jdbc/teradata'

javax.naming.NameNotFoundException:while trying to lookup jdbc

Weblogic javax.naming.NameNotFoundException while running application

但是他们没有解决我的问题。 我正在使用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数据源的weblogic控制台:

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 个答案:

答案 0 :(得分:1)

您已经使用名称“ jndi / ConsipGfrDS”注册了数据源,但使用“ jdbc / ConsipGfrDS”进行了查找。在两种情况下都使用一个名称(无论什么名称,但要相同)。

我建议您在JNDI中使用名称“ jdbc / ConsipGfrDS”,因为如果JNDI中有许多对象,则将更容易将对象分类。

答案 1 :(得分:1)

这是老式的JNDI,您在这里遇到一些问题。

您的web.xml定义正确

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

这些资源引用在JNDI java:comp/env命名空间中定义名称,否则称为Web应用程序本地的组件环境命名空间。这意味着您的Web应用程序中数据源的完整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");
}

到目前为止,我们拥有独立于平台的 (即应用服务器)代码。您已正确将平台 dependent 部分推入weblogic.xml文件中。

但这是您的第二个问题所在。 weblogic.xml包含一个小错误。您提供的显示JDBC DataSource配置的weblogic控制台映像显示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>

玩得开心!