【问题标题】:Database Connection via WebLogic通过 WebLogic 连接数据库
【发布时间】:2012-06-05 23:51:03
【问题描述】:

所以我有一个 MySQL 数据库,并且我在连接到该数据库的 WebLogic 本地实例上有一个数据源。我正在尝试编写一些简单的连接和查询的客户端代码。我在从数据源获取连接时遇到问题。到目前为止,这是我的代码。我正在运行 WebLogic 12c。

    import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Hashtable;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;

public class ConnectionTest {

    public static void main(String... args) {
        ConnectionTest tCon = new ConnectionTest();
        tCon.TestConnection();

    }

    public void TestConnection() {
        Context ctx = null;
        Connection conn = null;
        Statement stmt = null;
        ResultSet rs = null;

        try {
            Hashtable<String, String> props = new Hashtable<String, String>();

            props.put("java.naming.factory.initial",
                    "weblogic.jndi.WLInitialContextFactory");
            props.put("java.naming.provider.url", "t3://localhost:7001");
            props.put("java.naming.security.principal", "weblogic");
            props.put("java.naming.security.credentials", "welcome1");
            ctx = new InitialContext(props);
            DataSource ds = (DataSource) ctx.lookup("RegexDB");
            System.out.println(ds);
            DAO dao = new DAO();
            conn = ds.getConnection();
            stmt = conn.createStatement();
            stmt.execute("select * from regular_ex");
            rs = stmt.getResultSet();
            ArrayList<HashMap<String, Object>> results = dao
                    .resultSetToArrayList(rs);
            dao.printArrayList(results);
            stmt.close();
            conn.close();
        } catch (NamingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (stmt != null)
                    stmt.close();
                if (conn != null)
                    conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

    }
}

这在ds.getConnection() 失败,但有以下异常:

java.lang.ClassCastException: weblogic.jdbc.common.internal.ConnectionEnv cannot be cast to java.io.Serializable
    at weblogic.iiop.IIOPOutputStream.writeObject(IIOPOutputStream.java:2285)
    at weblogic.utils.io.ObjectStreamClass.writeFields(ObjectStreamClass.java:414)
    at weblogic.corba.utils.ValueHandlerImpl.writeValueData(ValueHandlerImpl.java:235)
    at weblogic.corba.utils.ValueHandlerImpl.writeValueData(ValueHandlerImpl.java:225)
    at weblogic.corba.utils.ValueHandlerImpl.writeValue(ValueHandlerImpl.java:182)
    at weblogic.iiop.IIOPOutputStream.write_value(IIOPOutputStream.java:1983)
    at weblogic.iiop.IIOPOutputStream.write_value(IIOPOutputStream.java:2021)
    at weblogic.iiop.IIOPOutputStream.writeObject(IIOPOutputStream.java:2285)
    at weblogic.jdbc.common.internal.RmiDataSource_WLSkel.invoke(Unknown Source)
    at weblogic.rmi.internal.BasicServerRef.invoke(BasicServerRef.java:695)
    at weblogic.rmi.cluster.ClusterableServerRef.invoke(ClusterableServerRef.java:230)
    at weblogic.rmi.internal.BasicServerRef$1.run(BasicServerRef.java:520)
    at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:363)
    at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:146)
    at weblogic.rmi.internal.BasicServerRef.handleRequest(BasicServerRef.java:516)
    at weblogic.rmi.internal.wls.WLSExecuteRequest.run(WLSExecuteRequest.java:118)
    at weblogic.work.ExecuteThread.execute(ExecuteThread.java:256)
    at weblogic.work.ExecuteThread.run(ExecuteThread.java:221)

我的构建路径中有 wlclient.jar、wlsafclient.jar 和 weblogic.jar。我已经尝试了添加/删除这些罐子的各种组合,但无论我做什么,我仍然会遇到同样的错误。任何帮助将不胜感激。

【问题讨论】:

  • 删除所有 jar 并只使用 weblogic.jar 确保您从 \server\lib 目录中获取 jar
  • 我已经试过了。这些罐子来自我的服务器安装。如果我只使用 weblogic.jar,我会得到以下异常:线程“main”java.lang.NoClassDefFoundError 中的异常:weblogic/security/subject/AbstractSubject
  • 我必须尝试使用​​ weblogic 12c,我只是使用 Weblogic 10 运行了相同的代码,并且仅使用 weblogic.jar 就可以正常工作
  • 根据这个论坛帖子:kr.forums.oracle.com/forums/thread.jspa?threadID=940386,你需要构建和使用这个jar:wlfullclient.jar。这解释了如何构建它:docs.oracle.com/cd/E12839_01/web.1111/e13717/jarbuilder.htm

标签: java mysql weblogic weblogic12c


【解决方案1】:

在做了一些研究之后,我正在删除我的旧答案并重新开始。

Oracle Doc for WebLogic Standalone Clients 中有一个很大的客户端类型表。对于列出的每种类型的客户端,该表显示了所需的 jar 文件。对于某些类型的客户端,您需要构建一个额外的 jar (wlfullclient.jar) 并将其包含在内。

希望这会有所帮助。

【讨论】:

  • 您是否在 JSP 中执行此操作?我必须为我的初始上下文设置属性值,因为它只是一个客户端 java 应用程序。
  • 是的,一分钟前这里有来自 mprabhat 的评论,解释说我的代码只有在 Web 应用程序中运行时才能工作。这就解释了为什么这对你不起作用。
  • 在研究了一下问题后完全重写了我的答案。
  • 宾果游戏!现在就像一个魅力。感谢您的帮助!
  • 我创建了 wlfullclient.jar,并删除了所有其他 jar。我重新编译,它工作。当我构建 wlfullclient.jar 时,一定有一个缺失的类。
【解决方案2】:

我也遇到过这个问题,我尝试将“wlfullclient.jar”添加到我的目录来修复它,但我在 weblogic 安装文件夹中没有找到这个 jar 文件。

但最后我使用 setDomainEnv.cmd 从 weblogic 中设置了所有必需的 jar 文件,它工作正常。在这里,我们不必关心是否需要哪些 jar 文件,它会简单地为您的程序设置所有需要的 jar 文件的类路径。

我正在使用 Weblogic 11g。

【讨论】:

【解决方案3】:

在 Weblogic 12c 中,将 weblogic.jar 文件复制到其他目录。将文件重命名为 weblogic-classes.jar,然后使用 wljarbuilder 构建 jar 文件。

将新创建的 wlfullclient.jar 文件添加到 eclipse 中的类路径中。

【讨论】:

    【解决方案4】:

    构建 wlfullclient.jar 并将这个 jar 添加到构建路径中。 它为我解决了这个问题。 顺便说一句,与 Weblogic 10.3 中的 weblogic.jar 相比,Weblogic 12 中的 weblogic.jar 缺少一些类

    【讨论】:

      猜你喜欢
      • 2018-06-25
      • 1970-01-01
      • 2017-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多