2012-05-31 2 views
2

Итак, у меня есть база данных MySQL, и у меня есть источник данных для локального экземпляра WebLogic, который подключен к этой базе данных. Я пытаюсь написать код клиента, который будет просто подключаться и запрашивать. У меня возникают проблемы с получением соединения с источником данных. Вот мой код. Я запускаю WebLogic 12c.Подключение к базе данных через WebLogic

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 в моем buildpath. Я пробовал всевозможные комбинации добавления/удаления этих банок, но я все равно получаю ту же ошибку, независимо от того, что я делаю. Любая помощь будет принята с благодарностью.

+0

удалите все банки и просто используйте weblogic.jar, чтобы убедиться, что вы берете банку из каталога \ server \ lib – mprabhat

+0

Я уже пробовал это. Эти банки связаны с установкой моего сервера. Если я использую только weblogic.jar, я получаю следующее исключение: Исключение в потоке «main» java.lang.NoClassDefFoundError: weblogic/security/subject/AbstractSubject –

+0

Я должен попробовать с weblogic 12c, я просто использовал тот же код с Weblogic 10, и он корректно работал с weblogic.jar – mprabhat

ответ

2

После выполнения некоторых исследований я удаляю свой старый ответ и начинаю с конца.

В Oracle Doc for WebLogic Standalone Clients имеется большая таблица типов клиентов. Для каждого из перечисленных типов клиентов в таблице указаны необходимые файлы jar. Для определенных типов клиентов вам необходимо создать дополнительную банку (wlfullclient.jar) и включить ее.

Надеюсь, что это поможет.

+0

Я добавил пример кода к моему ответу. –

+0

Вы делаете это в JSP? Я должен установить значения свойств для исходного контекста в моем, поскольку это просто клиентское Java-приложение. –

+0

Да, вчера был комментарий от mprabhat, который объяснил, что мой код будет работать только при запуске в веб-приложении. Поэтому это объясняет, почему это не сработает для вас. –

0

У меня также есть эта проблема, и я попытался добавить «wlfullclient.jar» в мой каталог, чтобы исправить это, но я не нашел этот файл jar в папке установки weblogic.

Но в конце я установил все необходимые файлы jar из weblogic, используя setDomainEnv.cmd, и он отлично работает. Здесь нам не нужно заботиться о том, какие файлы jar требуется или нет, он просто установит путь к классу для всего необходимого файла jar для вашей программы.

Я использую Weblogic 11g.

0

В Weblogic 12c скопируйте файл weblogic.jar в другой каталог. Переименуйте файл в weblogic-classes.jar, а затем создайте файл jar с помощью wljarbuilder.

Добавьте вновь созданный файл wlfullclient.jar в свой путь класса в eclipse.

0

Создайте wlfullclient.jar и добавьте только эту банку в путь сборки. Он решил проблему для меня. Кстати, у weblogic.jar из Weblogic 12 отсутствуют некоторые классы по сравнению с weblogic.jar из Weblogic 10.3

Смежные вопросы