powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Play 1.4 и реконнект к БД
41 сообщений из 41, показаны все 2 страниц
Play 1.4 и реконнект к БД
    #39317507
Migelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть микроприложение написанное на play-1.4.3 и работающее под tomcat-ом
Все, что делает - это принимает пост-запрос и отправляет его в процедуру БД (oracle)
Все работает, но есть одна проблема:
Если при старте приложения БД еще не работает(а оракл запускается всяко дольше), то томкэт пишет Error listenerStart и приложение больше не подымается. Если БД перезапустить во время работы то приложение также перестанет работать, пока его не перезапустишь.

Есть ли возможность сделать что-то типа lazy-коннекта и reconnect к БД?
...
Рейтинг: 0 / 0
Play 1.4 и реконнект к БД
    #39317512
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Migelle,

Воткните пул соединений с БД. И настройте в нем валидацию. Пул будет пересоздовать подключения. Покажите код работы с базой. Play это ведь Web фреймверк. Какое он вообще имеет отношение к вопрос? Или там ORM встроен?
...
Рейтинг: 0 / 0
Play 1.4 и реконнект к БД
    #39317535
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MigelleЕсть ли возможность сделать что-то типа lazy-коннекта и reconnect к БД?
странно админские проблемы тащить в код приложения.
У меня тоже на сайте оракл дольше стартует, но:
- перегружаю хостинг я раз в 2 года
- оракл каждый час не перегружают
- операционка сначала грузит оракл а потом томкат
MigelleЕсть ли возможность сделать что-то типа lazy-коннекта и reconnect к БД?
можно. Но опять таки юзверь ждать часики или сообщение будет?
Или ему экран затемнить с мессагой Ждите? ))
...
Рейтинг: 0 / 0
Play 1.4 и реконнект к БД
    #39317833
Migelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123- операционка сначала грузит оракл а потом томкат
У меня это разные машины.
Petro123Но опять таки юзверь ждать часики или сообщение будет?
Там нет юзверей вообще. Там железяки общаются, они подождут.
...
Рейтинг: 0 / 0
Play 1.4 и реконнект к БД
    #39317842
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Migelle,
программист?
Покажи код где у тебя ошибка.
Т.к. при синхронном POST ответа та машина не дождётся и все сообщения потеряются.
Слишком много вариантов решения.
Migelle. Там железяки общаются, они подождут.
каким образом железяка ждёт и накапливает свои желания?
...
Рейтинг: 0 / 0
Play 1.4 и реконнект к БД
    #39317844
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Migelle,
делай оракл доступным 24х7
...
Рейтинг: 0 / 0
Play 1.4 и реконнект к БД
    #39317850
Migelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BlazkowiczВоткните пул соединений с БД. И настройте в нем валидацию.
Пул настроен, но где там настроить валидацию? Ничего подобного в доке не нашел.

BlazkowiczПокажите код работы с базой.
Вот конфигурация из application.conf

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
db.default.driver=oracle.jdbc.driver.OracleDriver
db.default.url=jdbc:oracle:thin:@192.168.1.1:1521:oracle
db.default.user=user
db.default.pass=user_password
# Connections pool configuration :
db.pool.timeout=1000
db.pool.maxSize=30
db.pool.minSize=2



Вызов происходит так
Код: java
1.
2.
3.
        CallableStatement cs = DB.getConnection().prepareCall(PREPARE_CALL_REQUEST);
        cs.setString(3, params.get("body"));
        cs.executeQuery();



P.S. Проблема в том, что ява для меня почти темный лес, но приходится подправлять чужое приложение.
...
Рейтинг: 0 / 0
Play 1.4 и реконнект к БД
    #39317853
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Migelle,
то что 5 минут старта оракле и потеряются за это время записи от POST имеет значение?
...
Рейтинг: 0 / 0
Play 1.4 и реконнект к БД
    #39317864
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MigelleПроблема в том, что ява для меня почти темный лес
фигово.
Вот эти 3 строки должны быть многократно выполнянемыми даже после райзе в try
Код: java
1.
2.
3.
4.
CallableStatement cs = DB.getConnection().prepareCall(PREPARE_CALL_REQUEST);
cs.setString(3, params.get("body"));
try
cs.executeQuery();
...
Рейтинг: 0 / 0
Play 1.4 и реконнект к БД
    #39317877
Migelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123Migelle,
то что 5 минут старта оракле и потеряются за это время записи от POST имеет значение?
Проблема в том, что если в момент старта нет соединения с ораклом, приложение вообще не загружается

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Caused by: oracle.net.ns.NetException: Listener refused the connection with the following error:
ORA-12505, TNS:listener does not currently know of SID given in connect descriptor
.
<------>at oracle.net.ns.NSProtocol.connect(NSProtocol.java:399)
<------>at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1140)
<------>at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:340)
<------>... 31 more
Sep 29, 2016 10:33:38 AM org.apache.catalina.core.StandardContext start
SEVERE: Error listenerStart
Sep 29, 2016 10:33:38 AM org.apache.catalina.core.StandardContext start
SEVERE: Context [/testapp] startup failed due to previous errors
...
Рейтинг: 0 / 0
Play 1.4 и реконнект к БД
    #39317881
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MigelleПроблема в том, что если в момент старта нет соединения с ораклом, приложение вообще не загружается
я этот FW не знаю, но в общем случае надо вырубать код, пока не найдёшь строки инициализации коннекта к БД.
Приложение будет грузится.
...
Рейтинг: 0 / 0
Play 1.4 и реконнект к БД
    #39317892
Migelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123Вот эти 3 строки должны быть многократно выполнянемыми даже после райзе в try

Пересоединения не происходит вообще, сколько бы туда не стучалось запросов.
Только перезапуск томката/приложения решает проблему.


Я, конечно, поставлю какой-нибудь вотчдог, чтоб перегружал томкат, но некрасиво это.
...
Рейтинг: 0 / 0
Play 1.4 и реконнект к БД
    #39317895
Migelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123но в общем случае надо вырубать код, пока не найдёшь строки инициализации коннекта к БД.
Там нечего вырубать. Все, что относится к коннекции БД я уже описал. Вся коннекция происходит внутри фреймворка, за пределами приложения.
...
Рейтинг: 0 / 0
Play 1.4 и реконнект к БД
    #39317909
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MigelleP.S. Проблема в том, что ява для меня почти темный лес, но приходится подправлять чужое приложение.
Ну, начинается... Найдите Java программиста, пусть посмотрит ваш код и расставить try...catch где надо и как надо. Может и правда пул не нужен. Нужно чтобы ваш модуль не падал при ошибках.
...
Рейтинг: 0 / 0
Play 1.4 и реконнект к БД
    #39317920
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MigelleВся коннекция происходит внутри фреймворка, за пределами приложения
А кому счас легко?
Копать вплоть до своего наследника DB:
http://alvinalexander.com/java/jwarehouse/play-framework-2.3/framework/src/play-jdbc/src/main/scala/play/api/db/DB.scala.shtml
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
package play.api.db

import scala.language.reflectiveCalls

import play.api._
import play.api.libs._

import java.sql._
import javax.sql._

import com.jolbox.bonecp._
import com.jolbox.bonecp.hooks._
import scala.util.control.{ NonFatal, ControlThrowable }

/**
 * The Play Database API manages several connection pools.
 */
trait DBApi {


если там нет
DB.SetReconnect(true);
))
Если без единой твоей строчки в приложении с вызовом фреймворк уже падает, то это баг самого FW
...
Рейтинг: 0 / 0
Play 1.4 и реконнект к БД
    #39317933
Migelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BlazkowiczНужно чтобы ваш модуль не падал при ошибках.
Причем здесь модуль, если проблема в самом play. Приложение не загружается при старте томкэта. До вызовов моих функций дело не доходит. Соединение устанавливается внутри фреймворка.
...
Рейтинг: 0 / 0
Play 1.4 и реконнект к БД
    #39317937
Migelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123Если без единой твоей строчки в приложении с вызовом фреймворк уже падает, то это баг самого FW
Именно... :(
...
Рейтинг: 0 / 0
Play 1.4 и реконнект к БД
    #39317957
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MigelleПричем здесь модуль, если проблема в самом play. Приложение не загружается при старте томкэтаПроблема не в play, а в том, что разработчик не читал документацию по жизненному циклу сервлетов и запросов к ним.
Даже если нет желания реализовывать init(), всегда можно обернуть ошибку обращения к базе в 5xx коды. "Bad gateway" - то, что доктор прописал.
...
Рейтинг: 0 / 0
Play 1.4 и реконнект к БД
    #39317983
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Migelle,

Прежде чем винить фреймверк, давайте посмотрим на полный stacktraсe а не его обрубок. Eсли там только playframework, то увидим куда вклинится. Вообще народ пишет что при наличии @Entity он всегда ломится в базу.
...
Рейтинг: 0 / 0
Play 1.4 и реконнект к БД
    #39318005
dimonz80
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Migelle,


Там внутри c3p0 connection pool. Можно попробовать поиграться с параметрами, которые он принимает из application.conf

см тут и тут
...
Рейтинг: 0 / 0
Play 1.4 и реконнект к БД
    #39318012
dimonz80
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dimonz80Migelle,


Там внутри c3p0 connection pool. Можно попробовать поиграться с параметрами, которые он принимает из application.conf

см тут и тут

Хотя, судя по всему, не поможет. Пили свою инициализацию коннекшн пула. Пример в первой ссылке
...
Рейтинг: 0 / 0
Play 1.4 и реконнект к БД
    #39318042
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimonz80Хотя, судя по всему, не поможет. Пили свою инициализацию коннекшн пула. Пример в первой ссылке
Почему не поможет? Вроде то что нужно. Залочит все потоки, пока Оракл не подымется. Разве нет?
...
Рейтинг: 0 / 0
Play 1.4 и реконнект к БД
    #39318064
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если хост/сервис в дауне, то будет "connection timeout" на уровне IP-стека.
Любое необработанное исключение фатально при развёртывании контекста и крайне нежелательно при обработке запроса.
...
Рейтинг: 0 / 0
Play 1.4 и реконнект к БД
    #39318074
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovЕсли хост/сервис в дауне, то будет "connection timeout" на уровне IP-стека.
Любое необработанное исключение фатально при развёртывании контекста и крайне нежелательно при обработке запроса.
Это пул лезет в БД при первой инициализации?
Разве это правильно?
...
Рейтинг: 0 / 0
Play 1.4 и реконнект к БД
    #39318078
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Это пул лезет в БД при первой инициализации?
Разве это правильно?
Почему ты решил что пул? Нам пока тут стека еще не предъявили. В БД лезет playframework скорее всего.
...
Рейтинг: 0 / 0
Play 1.4 и реконнект к БД
    #39318079
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Неправильно, конечно, но простейший способ наступить на грабли - сделать "что-нибудь" в статическом блоке.
Код статического блока отработает в процессе загрузки класса, которая обязательно будет при развёртывании контекста и, если "что-нибудь" кинет исключение - контейнер напишет то, с чего началась ветка.
...
Рейтинг: 0 / 0
Play 1.4 и реконнект к БД
    #39318278
dimonz80
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowiczdimonz80Хотя, судя по всему, не поможет. Пили свою инициализацию коннекшн пула. Пример в первой ссылке
Почему не поможет? Вроде то что нужно. Залочит все потоки, пока Оракл не подымется. Разве нет?

Play сам по себе не нуждается в сервлет-контейнере и сам обеспечивает взаимодействие с HTTP при помощи jBoss Netty. У плея есть понятие "приложения" то есть т.е. некоторый контекст, через который обеспечивается основной функционал. Для приложения есть механизм плагинов, обеспечивающих доп функционал. Плагин реализует интерфейс PlayPlugin, в том числе и функцию onApplicationStart, которая выполняется при старте пириложения. Взаимодействие с БД реадизовано через плагин ( см тут DBPlugin
При старте приложения выполняется DBPlugin.onApplicationStart() который дергает DB.setConfigurations() который дергает DBConfig.configure() в котором то и происходит попытка зацепиться за БД и инициализация пула соединений


Приложение опционально может быть запаковано в WAR и размещено в сервлет-контейнере (как у автора). Тогда все описанное выше безобразие происходит при инициализации сервлета

Под спойлером DBConfig.configure() - виновник торжества. Пытается прицепиться дважды стачало просто через Connection, потом черер пул.


Код: 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.
  /**
     * Detects changes and reconfigures this dbConfig. Returns true if the
     * database was configured (Config info present. An exception is throwns if
     * the config process fails.
     */
    protected boolean configure() {

        // prefix used before all properties when loafing config. default is
        // 'db'
        String propsPrefix;
        if (defaultDbConfigName.equals(dbConfigName)) {
            propsPrefix = "db";
        } else {
            propsPrefix = "db_" + dbConfigName;
        }

        boolean dbConfigured = false;

        if (changed(propsPrefix)) {
            try {

                // We now know that we will either config the db, or fail with
                // exception
                dbConfigured = true;

                Properties p = Play.configuration;

                if (datasource != null) {
                    destroy();
                }

                boolean isJndiDatasource = false;
                String datasourceName = p.getProperty(propsPrefix, "");

                // Identify datasource JNDI lookup name by 'jndi:' or 'java:'
                // prefix
                if (datasourceName.startsWith("jndi:")) {
                    datasourceName = datasourceName.substring("jndi:".length());
                    isJndiDatasource = true;
                }

                if (isJndiDatasource || datasourceName.startsWith("java:")) {

                    Context ctx = new InitialContext();
                    datasource = (DataSource) ctx.lookup(datasourceName);

                } else {

                    // Try the driver
                    String driver = p.getProperty(propsPrefix + ".driver");
                    try {
                        Driver d = (Driver) Class.forName(driver, true, Play.classloader).newInstance();
                        DriverManager.registerDriver(new ProxyDriver(d));
                    } catch (Exception e) {
                        throw new Exception("Driver not found (" + driver + ")");
                    }

                    // Try the connection
                    Connection fake = null;
                    try {
                        if (p.getProperty(propsPrefix + ".user") == null) {
                            fake = DriverManager.getConnection(p.getProperty(propsPrefix + ".url"));
                        } else {
                            fake = DriverManager.getConnection(p.getProperty(propsPrefix + ".url"), p.getProperty(propsPrefix + ".user"),
                                    p.getProperty(propsPrefix + ".pass"));
                        }
                    } finally {
                        if (fake != null) {
                            fake.close();
                        }
                    }

                    ComboPooledDataSource ds = new ComboPooledDataSource();
                    ds.setDriverClass(p.getProperty(propsPrefix + ".driver"));
                    ds.setJdbcUrl(p.getProperty(propsPrefix + ".url"));
                    ds.setUser(p.getProperty(propsPrefix + ".user"));
                    ds.setPassword(p.getProperty(propsPrefix + ".pass"));
                    ds.setAcquireIncrement(Integer.parseInt(p.getProperty(propsPrefix + ".pool.acquireIncrement", "3")));
                    ds.setAcquireRetryAttempts(Integer.parseInt(p.getProperty(propsPrefix + ".pool.acquireRetryAttempts", "10")));
                    ds.setAcquireRetryDelay(Integer.parseInt(p.getProperty(propsPrefix + ".pool.acquireRetryDelay", "1000")));
                    ds.setCheckoutTimeout(Integer.parseInt(p.getProperty(propsPrefix + ".pool.timeout", "5000")));
                    ds.setBreakAfterAcquireFailure(
                            Boolean.parseBoolean(p.getProperty(propsPrefix + ".pool.breakAfterAcquireFailure", "false")));
                    ds.setMaxPoolSize(Integer.parseInt(p.getProperty(propsPrefix + ".pool.maxSize", "30")));
                    ds.setMinPoolSize(Integer.parseInt(p.getProperty(propsPrefix + ".pool.minSize", "1")));
                    ds.setInitialPoolSize(Integer.parseInt(p.getProperty(propsPrefix + ".pool.initialSize", "1")));
                    ds.setMaxIdleTimeExcessConnections(
                            Integer.parseInt(p.getProperty(propsPrefix + ".pool.maxIdleTimeExcessConnections", "0")));
                    ds.setIdleConnectionTestPeriod(
                            Integer.parseInt(p.getProperty(propsPrefix + ".pool.maxIdleConnectionTestPeriod", "10")));
                    ds.setMaxIdleTime(Integer.parseInt(p.getProperty(propsPrefix + ".pool.maxIdleTime", "0")));
                    ds.setTestConnectionOnCheckin(
                            Boolean.parseBoolean(p.getProperty(propsPrefix + ".pool.testConnectionOnCheckin", "true")));
                    ds.setTestConnectionOnCheckout(
                            Boolean.parseBoolean(p.getProperty(propsPrefix + ".pool.testConnectionOnCheckout", "false")));
                    ds.setDebugUnreturnedConnectionStackTraces(
                            Boolean.parseBoolean(p.getProperty(propsPrefix + ".pool.debugUnreturnedConnectionStackTraces", "false")));
                    ds.setLoginTimeout(Integer.parseInt(p.getProperty(propsPrefix + ".pool.loginTimeout", "0")));
                    ds.setMaxAdministrativeTaskTime(Integer.parseInt(p.getProperty(propsPrefix + ".pool.maxAdministrativeTaskTime", "0")));
                    ds.setMaxConnectionAge(Integer.parseInt(p.getProperty(propsPrefix + ".pool.maxConnectionAge", "0")));
                    ds.setMaxStatements(Integer.parseInt(p.getProperty(propsPrefix + ".pool.maxStatements", "0")));
                    ds.setMaxStatementsPerConnection(
                            Integer.parseInt(p.getProperty(propsPrefix + ".pool.maxStatementsPerConnection", "0")));
                    ds.setNumHelperThreads(Integer.parseInt(p.getProperty(propsPrefix + ".pool.numHelperThreads", "3")));
                    ds.setUnreturnedConnectionTimeout(
                            Integer.parseInt(p.getProperty(propsPrefix + ".pool.unreturnedConnectionTimeout", "0")));

                    if (p.getProperty(propsPrefix + ".testquery") != null) {
                        ds.setPreferredTestQuery(p.getProperty(propsPrefix + ".testquery"));
                    } else {
                        String driverClass = JPAPlugin.getDefaultDialect(propsPrefix, ds.getDriverClass());

                        /*
                         * Pulled from
                         * http://dev.mysql.com/doc/refman/5.5/en/connector-j-
                         * usagenotes-j2ee-concepts-connection-pooling.html Yes,
                         * the select 1 also needs to be in there.
                         */
                        if (driverClass.equals("play.db.jpa.MySQLDialect")) {
                            ds.setPreferredTestQuery("/* ping */ SELECT 1");
                        }
                    }

                    // This check is not required, but here to make it clear
                    // that nothing changes for people
                    // that don't set this configuration property. It may be
                    // safely removed.
                    if (p.getProperty("db.isolation") != null) {
                        ds.setConnectionCustomizerClassName(DBConfig.PlayConnectionCustomizer.class.getName());
                    }

                    datasource = ds;
                    url = ds.getJdbcUrl();
                    Connection c = null;
                    try {
                        c = ds.getConnection();
                    } finally {
                        if (c != null) {
                            c.close();
                        }
                    }
                    Logger.info("Connected to %s", ds.getJdbcUrl());

                }

                destroyMethod = p.getProperty(propsPrefix + ".destroyMethod", "");

            } catch (Exception e) {
                datasource = null;
                Logger.error(e, "Cannot connected to the database" + getConfigInfoString() + " : %s", e.getMessage());
                if (e.getCause() instanceof InterruptedException) {
                    throw new DatabaseException("Cannot connected to the database" + getConfigInfoString() + ". Check the configuration.",
                            e);
                }
                throw new DatabaseException("Cannot connected to the database" + getConfigInfoString() + ", " + e.getMessage(), e);
            }
        }

        return dbConfigured;
    }




Решить проблему можно 3 способами: сложным, простым и очень простым.

Сложный: пересобрать свой собственный Play с нужными правками и с ним пересобрать WAR
Простой: выкинуть play.db.DB и запилить ru.migelle.DB с инициализацией пула как вам надо (как примерно сделать есть под спойлером) + добавить ленивость. И зарефакторить play.db.DB -> ru.migelle.DB
Очень простой: уже советовали изменить приоритет/зависимости загрузки сервисов. что там у вас: init.d, systemd, windows, что-то еще?
...
Рейтинг: 0 / 0
Play 1.4 и реконнект к БД
    #39318288
Migelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dimonz80Простой: выкинуть play.db.DB и запилить ru.migelle.DB с инициализацией пула как вам надо (как примерно сделать есть под спойлером) + добавить ленивость. И зарефакторить play.db.DB -> ru.migelle.DB
Спасибо. Стало немного понятно куда копать. Буду пробовать.
dimonz80Очень простой: уже советовали изменить приоритет/зависимости загрузки сервисов. что там у вас: init.d, systemd, windows, что-то еще?
Это не подходит, т.к. томкэт с ораклом живут на разных машинах.
...
Рейтинг: 0 / 0
Play 1.4 и реконнект к БД
    #39318349
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimonz80Простой: выкинуть play.db.DB
ещё проще - выкинусть весь фреймворк. Который лезет в базу без единой строчки кода по вызову.
А потом при неудавшейся попытке не повторяет попытку инициализации. Хотя в его пуле вроде бы эта возможность есть.
Если уж разрабы решили сделать AutoConnect, то надо было сделать это свойство для новичков возле инициализации драйвера.
Чтобы его можно было сменить.
И третье, обеспечить возможность работать без пула.
...
Рейтинг: 0 / 0
Play 1.4 и реконнект к БД
    #39318354
dimonz80
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123dimonz80Простой: выкинуть play.db.DB
ещё проще - выкинусть весь фреймворк. Который лезет в базу без единой строчки кода по вызову

convention over configuration. Использовать встроенные примочки для БД никто не заставляет. Хошь, делай свой пул. Делов то.
...
Рейтинг: 0 / 0
Play 1.4 и реконнект к БД
    #39318358
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimonz80Petro123пропущено...
ещё проще - выкинусть весь фреймворк. Который лезет в базу без единой строчки кода по вызову
convention over configuration. Использовать встроенные примочки для БД никто не заставляет. Хошь, делай свой пул . Делов то.
Оценивать что данный фреймворк по данной фиче - Г., мне тоже никто не мешает.
Ешо позиционировали как Супер фреймворк для новичков.
...
Ты не ответил. Почему он валится при отсутствии коннекта и нужно перегружать?
...
Рейтинг: 0 / 0
Play 1.4 и реконнект к БД
    #39318361
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimonz80convention over configuration
зато умные слова мы писать умеем.
Удачи аффтару!
...
Рейтинг: 0 / 0
Play 1.4 и реконнект к БД
    #39318449
dimonz80
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123dimonz80пропущено...

convention over configuration. Использовать встроенные примочки для БД никто не заставляет. Хошь, делай свой пул . Делов то.
Оценивать что данный фреймворк по данной фиче - Г., мне тоже никто не мешает.
Ешо позиционировали как Супер фреймворк для новичков.
...
Ты не ответил. Почему он валится при отсутствии коннекта и нужно перегружать?

Валится при старте вот поэтому

валится когда недоступен только оракл вот тоэтому
Код: java
1.
2.
ds.setTestConnectionOnCheckout(
                            Boolean.parseBoolean(p.getProperty(propsPrefix + ".pool.testConnectionOnCheckout", "false")));



можно в application.conf прописать db.default.pool.testConnectionOnCheckout=false. Но проблемы полностью не решит, тк есть еще случай когда ребутается и оракл и томкат и томкат поднимается быстрее оракла.
...
Рейтинг: 0 / 0
Play 1.4 и реконнект к БД
    #39318455
dimonz80
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторможно в application.conf прописать db.default.pool.testConnectionOnCheckout=false.

Затупил! Надо так
Код: java
1.
 db.default.pool.testConnectionOnCheckout=true
...
Рейтинг: 0 / 0
Play 1.4 и реконнект к БД
    #39318467
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimonz80Но проблемы полностью не решит, тк есть еще случай когда ребутается и оракл и томкат и томкат поднимается быстрее оракла.
2 вопроса:
- У меня выше сайт на JNDI в GlassFish. Если оракл стартует позже АппСервер....или выпал из сети на пол часа, а потом появился. То нужно ли мне будет перегружать Веб приложение?
(я позже протестирую)
- Тот же самый вопрос при использовании банального JSP+jdbc
....
Тот случай выше что вы привели - СТАНДАРТНЫЙ случай для веб приложений.
...
Рейтинг: 0 / 0
Play 1.4 и реконнект к БД
    #39318479
dimonz80
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123dimonz80Но проблемы полностью не решит, тк есть еще случай когда ребутается и оракл и томкат и томкат поднимается быстрее оракла.
2 вопроса:
- У меня выше сайт на JNDI в GlassFish. Если оракл стартует позже АппСервер....или выпал из сети на пол часа, а потом появился. То нужно ли мне будет перегружать Веб приложение?
(я позже протестирую)
- Тот же самый вопрос при использовании банального JSP+jdbc
....
Тот случай выше что вы привели - СТАНДАРТНЫЙ случай для веб приложений.

Скорее всего нет. Поток свалится с эксепшном, а сервер приложений будет жить спокойно дальше.
Чего доказать-то пытаешься? Что древняя версия Play не очень? Ну Ок. Убелил.

Я разбирал конкретный случай для конкретной версии конкретного фреймворка со ссылкой на исходники, из которой вроде как понятно, почему при старте валится приложение если нет соединения с БД.
...
Рейтинг: 0 / 0
Play 1.4 и реконнект к БД
    #39318487
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimonz80Скорее всего нет. Поток свалится с эксепшном, а сервер приложений будет жить спокойно дальше.
ОК. Без Play работает всё отлично.
dimonz80Чего доказать-то пытаешься? Что древняя версия Play не очень? Ну Ок. Убелил.
Работа программиста такая. Программа должна работать как себе представляет программист.
Чтобы тем на 2 страницы не было.
Ничего личного)
...
Рейтинг: 0 / 0
Play 1.4 и реконнект к БД
    #39318498
dimonz80
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123dimonz80Скорее всего нет. Поток свалится с эксепшном, а сервер приложений будет жить спокойно дальше.
ОК. Без Play работает всё отлично.
dimonz80Чего доказать-то пытаешься? Что древняя версия Play не очень? Ну Ок. Убелил.
Работа программиста такая. Программа должна работать как себе представляет программист.
Чтобы тем на 2 страницы не было.
Ничего личного)

Пытался помочь, не выходя за рамки вводных данных. Работаем с тем, что есть, как говорится.
...
Рейтинг: 0 / 0
Play 1.4 и реконнект к БД
    #39318509
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimonz80,
а в последней версии там как с этим? Не в курсе?
...
Рейтинг: 0 / 0
Play 1.4 и реконнект к БД
    #39318529
dimonz80
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123dimonz80,
а в последней версии там как с этим? Не в курсе?

При старте тоже отваливается если БД недоступна))) Если БД пропадает после старта, то ничего страшного. Ругается ексепшнами пока не переконнектится.

Собственный пул делается в пару строк. Для доп базы на Pervasive SQL, ктоторая переодически бывает в отключке сделал вот так ( на скале правда)

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
 
    import play.api.db.Databases
    import play.api.Play.current
   
   // параметры берем из application.conf
    val driverClass = current.configuration.getString("pervasive.driver").getOrElse("com.pervasive.jdbc.v2.Driver")
    val url = current.configuration.getString("pervasive.url").getOrElse("jdbc:pervasive://localhost:1583/DB;encoding=cp866")

    lazy val PervasiveDB = Databases(driverClass, url, "default", Map("hikaricp.connectionTestQuery" -> "select 1"))



Используется так же как и обычный play.api.db.DB

Код: java
1.
2.
3.
4.
5.
6.
7.
  PervasiveDB.withConnection { implicit connection =>
     ........
  }

  PervasiveDB.withTransaction { implicit connection =>
     ........
  }
...
Рейтинг: 0 / 0
Play 1.4 и реконнект к БД
    #39318560
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimonz80,
OK
спс.
Удачи!
...
Рейтинг: 0 / 0
41 сообщений из 41, показаны все 2 страниц
Форумы / Java [игнор отключен] [закрыт для гостей] / Play 1.4 и реконнект к БД
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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