IllegalAccessError в Linux (suse 10) - PullRequest
       3

IllegalAccessError в Linux (suse 10)

1 голос
/ 24 октября 2011

enter code here мы используем банку c3p0 для пула базы данных. Теперь из кода c3p0 приходит следующее исключение

Причина: java.lang.IllegalAccessError: попытка доступа к классу com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource $ 1 из класса com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource в com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource.setUpPropertyEvents (AbstractPoolBackedDataSource.java:74) в com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource. (AbstractPoolBackedDataSource.java:63) в com.mchange.v2.c3p0.ComboPooledDataSource. (ComboPooledDataSource.java:109) в com.mchange.v2.c3p0.ComboPooledDataSource. (ComboPooledDataSource.java:105)

Теперь в AbstractPoolBackedDataSource.java (строка 74) PropertyChangeListener l = новый PropertyChangeListener ()

PropertyChangeListener l = new PropertyChangeListener()
{
public void propertyChange( PropertyChangeEvent evt )
{ resetPoolManager(); }
};

Итак, PropertyChangeListener является внутренним классом здесь .. AbstractPoolBackedDataSource $ 1 PropertyChangeListener является классом java java.beans.PropertyChangeListener !!

В чем может быть причина? Это происходит только в Linux (suse 10). В Windows все работает нормально (jdk 1.6_10 и jre 1.6_20). Я пробовал с различными комбинациями JDK, JRE (JDK 1.6_25 и т. Д.)

1 Ответ

1 голос
/ 25 октября 2011

Я решил проблему с помощью проб и ошибок.

Также я обнаружил, что это не является надежным, как я подозревал ранее.Это легко воспроизводимо и выглядит как потенциальная ошибка загрузки классов (хотя я не уверен, что это происходит в равноденствии или в java !!).

Прежде чем объяснять решение, позвольте мне описать сценарий более подробно.

Наш код развернут в среде osgi (equinox).Есть два пакета, которые используют jar c3p0 для пула базы данных, и один из них экспортирует пакеты c3p0.Этот пакет запускается раньше другого.

Теперь, согласно спецификации osgi, загрузчик классов osgi должен поддерживать отдельные экземпляры загрузчика классов для отдельных пакетов.Теперь, когда второй пакет пытается загрузить классы из jar c3p0, его загрузчик классов может обнаружить (из родительского делегирования), что классы уже загружены !!Но они загружаются из другого контекста, что вызывает нарушение прав доступа.

Это первоначальные выводы, я попытаюсь отладить код затмения и, возможно, углублюсь в него.После изменения порядка запуска комплекта это разрешается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...