Сценарий запуска устанавливает java.ext.dirs
для своего собственного набора каталогов (специфичных для приложения), но пропускает «нормальный» каталог расширений ($JAVA_HOME/jre/lib/ext/
), в котором находится sunjce_provider.jar
. Это объясняет вашу первую мысль (копирование файла Jar в каталог lib делает его снова видимым). Это легко воспроизвести.
Что касается второго пункта, я думаю, что это связано с файлом политики, который сценарий запуска устанавливает с параметром -Djava.security.policy
. Доступны ли некоторые поставщики или нет, зависит от файлов политики. Файл политики по умолчанию делает поставщика SunJCE доступным, но, поскольку сценарии запуска требуют нестандартный файл политики по умолчанию, тогда все идет. Я предлагаю вам взглянуть на этот файл политики.
Например, в моей системе (Ubuntu Linux с Sun JVM 1.6.0_20 в комплекте с Ubuntu) файл политики по умолчанию находится в /etc/java-6-sun/security/java.security
и содержит (среди прочего) следующие строки:
security.provider.1=sun.security.provider.Sun
security.provider.2=sun.security.rsa.SunRsaSign
security.provider.3=com.sun.net.ssl.internal.ssl.Provider
security.provider.4=com.sun.crypto.provider.SunJCE
security.provider.5=sun.security.jgss.SunProvider
security.provider.6=com.sun.security.sasl.Provider
security.provider.7=org.jcp.xml.dsig.internal.dom.XMLDSigRI
security.provider.8=sun.security.smartcardio.SunPCSC
, которые определяют, какие провайдеры должны быть доступны по умолчанию. Исходя из ваших симптомов, я считаю, что файл пользовательской политики сделал SunJCE недоступным, если он не был явно зарегистрирован (что понятно, поскольку сценарий запуска также удалил доступ к файлу Jar, содержащему SunJCE ...).