Исключение безопасности при переходе от toplink к eclipselink в glassfish 2.1
Мое приложение работает нормально с toplink, но мне нужны некоторые функции eclipselink, поэтому я решил поменяться местами.
Я поменял провайдера в persistence.xml
чтобы:
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
и добавил следующее свойство (хотя я не уверен, нужно ли это):
<property name="eclipselink.target-server" value="SunAS9"/>
Я пробовал упаковку eclipselink.jar
с моим приложением, и я попытался положить его в $GFHOME/lib
и добавив его к суффиксу classpath через интерфейс пользователя glassfish. Что бы я ни делал, я получаю:
Exception [EclipseLink-28018] (Eclipse Persistence Services - 1.1.3.v20091002-r5404): org.eclipse.persistence.exceptions.EntityManagerSetupException
Exception Description: Predeployment of PersistenceUnit [MYAPP] failed.
Internal Exception: java.security.AccessControlException: access denied (java.lang.RuntimePermission createClassLoader)
javax.persistence.PersistenceException: Exception [EclipseLink-28018] (Eclipse Persistence Services - 1.1.3.v20091002-r5404): org.eclipse.persistence.exceptions.EntityManagerSetupException
Exception Description: Predeployment of PersistenceUnit [MYAPP] failed.
Internal Exception: java.security.AccessControlException: access denied (java.lang.RuntimePermission createClassLoader)
at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.predeploy(EntityManagerSetupImpl.java:878)
at org.eclipse.persistence.jpa.PersistenceProvider.createContainerEntityManagerFactory(PersistenceProvider.java:216)
at com.sun.enterprise.server.PersistenceUnitLoaderImpl.load(PersistenceUnitLoaderImpl.java:149)
at com.sun.enterprise.server.PersistenceUnitLoaderImpl.load(PersistenceUnitLoaderImpl.java:84)
at com.sun.enterprise.server.AbstractLoader.loadPersistenceUnits(AbstractLoader.java:895)
at com.sun.enterprise.server.ApplicationLoader.doLoad(ApplicationLoader.java:184)
at com.sun.enterprise.server.TomcatApplicationLoader.doLoad(TomcatApplicationLoader.java:126)
<snip>
Caused by: Exception [EclipseLink-28018] (Eclipse Persistence Services - 1.1.3.v20091002-r5404): org.eclipse.persistence.exceptions.EntityManagerSetupException
Exception Description: Predeployment of PersistenceUnit [MYAPP] failed.
Internal Exception: java.security.AccessControlException: access denied (java.lang.RuntimePermission createClassLoader)
at org.eclipse.persistence.exceptions.EntityManagerSetupException.predeployFailed(EntityManagerSetupException.java:210)
... 82 more
Caused by: java.security.AccessControlException: access denied (java.lang.RuntimePermission createClassLoader)
at java.security.AccessControlContext.checkPermission(AccessControlContext.java:323)
at java.security.AccessController.checkPermission(AccessController.java:546)
at java.lang.SecurityManager.checkPermission(SecurityManager.java:532)
at java.lang.SecurityManager.checkCreateClassLoader(SecurityManager.java:594)
at java.lang.ClassLoader.<init>(ClassLoader.java:202)
at java.security.SecureClassLoader.<init>(SecureClassLoader.java:53)
at com.sun.enterprise.loader.EJBClassLoader$DelegatingClassLoader.<init>(EJBClassLoader.java:1368)
at com.sun.enterprise.loader.EJBClassLoader.copy(EJBClassLoader.java:384)
at com.sun.enterprise.server.PersistenceUnitInfoImpl.getNewTempClassLoader(PersistenceUnitInfoImpl.java:216)
at org.eclipse.persistence.platform.server.ServerPlatformBase.getNewTempClassLoader(ServerPlatformBase.java:477)
at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.predeploy(EntityManagerSetupImpl.java:741)
... 81 more
и приложение не развертывается.
Изменить - я попытался изменить настройки безопасности, но столкнулся с другой проблемой
Я хотел бы, хотя следующее (уже в server.policy) позволило быeclipselink.jar
полный доступ, но, видимо, нет.
// Core server classes get all permissions by default
grant codeBase "file:${com.sun.aas.installRoot}/lib/-" {
permission java.security.AllPermission;
};
Я добавил следующее:
grant {
permission java.security.AllPermission;
};
И теперь я получаю:
WARNING: "IOP00810257: (MARSHAL) Could not load class org.eclipse.persistence.indirection.IndirectList"
на стороне клиента
Редактировать, что я только что понял, это GlassFish v2.1 - заставить Application Client и Eclipselink работать вместе? и убедившись, что баночка связана с приложением, она теперь работает.
1 ответ
Основная причина в том, что GlassFish работает с включенным SecurityManager, а EclipseLink не имеет всех необходимых разрешений для запуска в GlassFish V2. TopLink Essentials предоставляется специальные разрешения для GlassFish, и для решения вашей проблемы просто распространите эти разрешения на EclipseLink. В этом блоге подробно рассказывается о том, как настроить политику безопасности для GlassFish.
--Гордон