Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Помогите найти ошибку / 7 сообщений из 7, страница 1 из 1
27.10.2017, 09:13
    #39542979
718
718
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите найти ошибку
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;
import oracle.jdbc.OracleCallableStatement;
import oracle.jdbc.OracleConnection;
import oracle.jdbc.OracleDriver;
import oracle.jdbc.pool.OracleConnectionCacheManager;
import oracle.jdbc.pool.OracleDataSource;



public final class ODS
{
  private static final String CACHE_NAME = "ODS@" + Project.rootPath;
  
  private static final String FILE_NAME = "WEB-INF/Connection.properties";
  private static final long SYS_LOGIN_ID = -1;
  private static OracleDataSource ods = null;
  private static OracleConnectionCacheManager occm = null;
  
  private static Properties prop;
  
  public static final CoreException authException = new CoreException("Сеанс не авторизован", true);
  
  static
  {
    try {
      DriverManager.registerDriver(new OracleDriver());
    }
    catch (SQLException e) {
      e.printStackTrace(System.err);
    }
  }
  
  public ODS() {}
  
  public static synchronized void init() throws Exception { if (ods == null) {
      prop = loadParams();
      
      ods = new OracleDataSource();
      ods.setDriverType("thin");
      setProperties(prop);
      
      ods.setConnectionCachingEnabled(true);
      ods.setConnectionCacheName(CACHE_NAME);
      
      occm = OracleConnectionCacheManager.getConnectionCacheManagerInstance();
      if (occm.existsCache(CACHE_NAME))
        occm.removeCache(CACHE_NAME, 0);
      occm.createCache(CACHE_NAME, ods, prop);
    }
  }
  
  public static synchronized void done() throws Exception
  {
    if (ods != null) {
      ods.close();
      ods = null;
    }
  }
  
  public static void reinit(Properties prop) throws Exception
  {
    done();
    init();
  }
  
  public static void clearSessions() throws Exception
  {
    OracleConnection conn = getConnection();
    


    conn.close();
  }
  
  private static void setProperties(Properties prop)
    throws Exception
  {
    ods.setServerName(prop.getProperty("HostName"));
    ods.setPortNumber(Integer.parseInt(prop.getProperty("Port")));
    ods.setDatabaseName(prop.getProperty("SID"));
    ods.setUser(prop.getProperty("UserName"));
    ods.setPassword(prop.getProperty("Password"));
  }
  
  private static void initConnection(OracleConnection conn, long loginId) throws Exception
  {
    try (OracleCallableStatement cs = (OracleCallableStatement)conn.prepareCall("Begin Core_Global.Init_Connection(?); End;")) {
      cs.setLong(1, loginId);
      cs.execute();
    }
  }
  



  public static OracleConnection getConnection(long loginId)
    throws Exception
  {
    OracleConnection conn = null;
    
    if (loginId == 0) {
      throw authException;
    }
    
    for (int try_count = 0; try_count < 3; try_count++) {
      conn = (OracleConnection) ods.getConnection();
      if (conn != null) break;
      Thread.sleep(300);
    }
    if (conn == null) {
      if (occm.getNumberOfAvailableConnections(CACHE_NAME) == 0) {
        throw new Exception("Количество связей с БД превысило максимум");
      }
      reinit(prop);
      
      for (int try_count = 0; try_count < 3; try_count++) {
        conn = (OracleConnection)ods.getConnection();
        if (conn != null) break;
        Thread.sleep(300);
      }
      if (conn == null) {
        throw new Exception("Соединение с БД потеряно");
      }
    }
    conn.setAutoCommit(false);
    initConnection(conn, loginId);
    return conn;
  }
  



  public static OracleConnection getConnection()
    throws Exception
  {
    return getConnection(-1);
  }
  

  public static OracleConnection createConnection()
    throws Exception
  {
    Properties prop1 = loadParams();
    OracleConnection conn = (OracleConnection)DriverManager.getConnection(
      "jdbc:oracle:thin:@" + prop1.getProperty("HostName") + ":" + 
      prop1.getProperty("Port") + ":" + prop1.getProperty("SID"), 
      prop1.getProperty("UserName"), prop1.getProperty("Password"));
    
    conn.setAutoCommit(false);
    initConnection(conn, -1);
    return conn;
  }
  




  public static void putConnection(OracleConnection conn)
  {
    if (conn != null) {
      try {
        conn.rollback();
      } catch (SQLException localException) {}
      try {
        conn.close();
      }
      catch (SQLException localException1) {}
    }
  }
  


  public static Properties loadParams()
    throws Exception
  {
    Properties prop2 = new Properties();
    try (FileInputStream f = new FileInputStream(Project.rootPath + "WEB-INF/Connection.properties")) {
      prop2.load(f);
    }
    return prop2;
  }
  



  public static void storeParams(Properties prop)
    throws Exception
  {
    try (FileOutputStream f = new FileOutputStream(Project.rootPath + "WEB-INF/Connection.properties")) {
      prop.store(f, null);
    }
  }
}



При отладке получаю ошибку
ODS.getConnection(ODS.java:113)
ODS.getConnection(ODS.java:143)

в чем может быть причина
...
Рейтинг: 0 / 0
27.10.2017, 12:19
    #39543144
SQL2008
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите найти ошибку
718При отладке получаю ошибку
ODS.getConnection(ODS.java:113)
ODS.getConnection(ODS.java:143)

в чем может быть причина

Включаю экстрасенсорные возможности - ошибки в 113 и 143 строках в файле ODS.
...
Рейтинг: 0 / 0
27.10.2017, 12:23
    #39543148
SQL2008
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите найти ошибку
А вот это что?

Код: java
1.
2.
3.
4.
5.
  public static OracleConnection getConnection()
    throws Exception
  {
    return getConnection(-1);
  }
...
Рейтинг: 0 / 0
27.10.2017, 12:28
    #39543151
SQL2008
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите найти ошибку
Код: java
1.
2.
3.
4.
5.
6.
7.
  private static void initConnection(OracleConnection conn, long loginId) throws Exception
  {
    try (OracleCallableStatement cs = (OracleCallableStatement)conn.prepareCall("Begin Core_Global.Init_Connection(?); End;")) {
      cs.setLong(1, loginId);
      cs.execute();
    }
  }


Try без catch... далее смотреть неинтересно.
Извините.
...
Рейтинг: 0 / 0
27.10.2017, 21:01
    #39543541
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите найти ошибку
SQL2008
Код: java
1.
2.
3.
4.
5.
6.
7.
  private static void initConnection(OracleConnection conn, long loginId) throws Exception
  {
    try (OracleCallableStatement cs = (OracleCallableStatement)conn.prepareCall("Begin Core_Global.Init_Connection(?); End;")) {
      cs.setLong(1, loginId);
      cs.execute();
    }
  }


Try без catch... далее смотреть неинтересно.
Извините.
"Новый" синтаксис для освобождения ресурсов.
При чем тут catch ?
...
Рейтинг: 0 / 0
28.10.2017, 08:52
    #39543635
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите найти ошибку
Весь стектрейс смотреть не пробовал?
...
Рейтинг: 0 / 0
28.10.2017, 14:32
    #39543685
Igor4IV
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите найти ошибку
SQLException - if a database access error occurs
Ошибка доступа к БД

Варианты:
1. Логин/пароль не подходят
2. По указанному адресу нет БД
3. Указанный адрес не доступен
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Помогите найти ошибку / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]