У меня есть проект JPA, который раньше работал. В этом месяце я добавил некоторые данные в своей базе данных. Когда я выполняю обычное задание (я раньше работал на предыдущих месяцах), я получаю эту ошибку:
Исключение [TOPLINK-4002] (Основы Oracle TopLink - 2.0.1 (Создают b09d-fcs (12/06/2007))): oracle.toplink.essentials.exceptions. Внутренняя исключительная ситуация DatabaseException: java.sql. SQLException: Сетевая ошибка IOException: Адрес, уже используемый: Код ошибки подключения: 0
Я проверил свой LocalPersistenceFacade, содержащий большинство методов, которые я называю путем печати счетчика, и я получаю точное количество закрытых и открытых связей там: 457. И затем мои катастрофические отказы задания. Обычно, Это должно пойти до 601 а не 457.
На стороне базы данных нет никакой информации, связанной с возможным катастрофическим отказом. Все, кажется, корректно, но в моем коде Java говорится что-то еще.
У кого-то была какая-либо идея?
С уважением, Jean
Насколько я понимаю, вы открываете / закрываете соединение для каждой строки, и проблема, с которой вы сталкиваетесь, выглядит как описанная в на этой странице :
Возможные причины
При запуске большого объема данные через карты, которые имеют несколько функций . Windows не закрывает соединения достаточно быстро, что вызывает исключение сетевого ввода-вывода.
Рекомендации
Измените следующие два значения в реестре Windows:
Это значение изменяет диапазон портов , которые Windows использует для открытия соединений. Автор по умолчанию он разрешает только порт 5000 . Изменив это значение, Windows сможет открыть больше портов , прежде чем потребуется повторно использовать порт начало. Каждое соединение использует порт , поэтому оно начинается с 1025 и поднимается до этого значения . Когда он достигает максимального значения , он возвращается к 1025 и пытается снова открыть этот порт.
Системный ключ:
HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ Tcpip \ Parameters
Имя: MaxUserPort Тип: REG_DWORD
Значение: 5000 -65534Это позволит «освободить» закрытые порты быстрее. По умолчанию Windows оставляет порт в состоянии TIME_WAIT на 240 секунд. Это может вызвать проблемы, если для параметра MaxPort установлено значение, при котором новое соединение будет использовать "более старый" порт , который не был удален из состояния TIME_WAIT пока что. Уменьшая это значение, вы ускоряете освобождение соединений .
Системный ключ:
HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ Tcpip \ Parameters
Имя значения: TcpTimedWaitDelay Data
Тип: Значение REG_DWORD Данные: 30-300
Симптомы и введенное изменение - больше строк - полностью совпадают. Однако, хотя предлагаемая «рекомендация» может решить проблему, я рекомендую использовать пул соединений (используйте автономный пул соединений, например c3p0 или DBCP ). Это решит проблему и повысит производительность.