Исключение безопасности при переходе от 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.

--Гордон

Другие вопросы по тегам