У меня проблема с развертыванием решения Spring boot 2.2.1 на Websphere 8.5.5.16 - PullRequest
0 голосов
/ 24 февраля 2020

[2/24/20 12: 20: 41: 747 EAT] 00000075 SystemErr R Причина: com.ibm.ws.webcontainer.exception.WebAppNotLoadedException: не удалось загрузить веб-приложение: не удалось загрузить веб-приложение: не удалось запустить веб-сайт сервер ;; Вложенное исключение - org.springframework.beans.factory.UnsatisfiedDependencyException: Ошибка при создании bean-компонента с именем '; webSecurityConfig' ;: Неудовлетворенная зависимость, выраженная через поле '; userDetailsService' ;;; Вложенное исключение - org.springframework.beans.factory.UnsatisfiedDependencyException: Ошибка при создании bean-компонента с именем '; userDetailsServiceImpl' ;: Неудовлетворенная зависимость, выраженная через поле '; userRepo' ;;; Вложенное исключение: org.springframework.beans.factory.BeanCreationException: Ошибка создания компонента с именем '; userRepo' ;: Ошибка постобработки определения объединенного компонента ;; вложенное исключение: java .lang.NoSuchMethodError: javax / persistence / PersistenceContext.synchronization (;); Ljavax / persistence / SynchronizationType ;; (; загружено из файла: / C: / Program Files (; x86); / IBM / WebSphere / AppServer / plugins / javax.j2ee.persistence.jar от org.eclipse.osgi.internal.baseadaptor. DefaultClassLoader@cdc1acc9) вызывается из класса org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor $ PersistenceElement (; загружается из файла: / C: / Program%; 20Files%; 20 (; x86); / IBM / WebSphere / AppServer / Profiles / AppSrv01 /installedApps/myserverNode01Cell/mcomm-0_0_1-SNAPSHOT_war.ear/mcomm-0.0.1-SNAPSHOT.war/WEB-INF/lib/spring-orm-5.2.1.RELEASE.jar от com.ibm.ws.classloader. CompoundClassLoader@e9512a60 [war: mcomm-0_0_1-SNAPSHOT_war / mcomm-0.0.1-SNAPSHOT.war]

Мой репозиторий

publi c Интерфейс UserRepo расширяет JpaRepository {

User findByUsername(String username);

List<User> findByApprovedAndDeletedAndDeleteApproved(Boolean approved,Boolean deleted,Boolean deleteapproved);

List<User> findByDeletedAndDeleteApproved(Boolean deleted,Boolean deleteapproved);

@Procedure
public void ADD_PASSWORD_HISTORY(Long id, String passwd);
@Procedure
public int SP_CHECK_PASS_REUSE(Long usrid, String passwd);
@Procedure
public void UN_EDIT_PASSWORD(Long id);

}

Моя служба

@ Служба публикации c Класс UserDetailsServiceImpl реализует UserDetailsService {

@Autowired
private UserRepo userRepo=null;

public UserDetails loadUserByUsername(String username){     
    User user = userRepo.findByUsername(username);
    if(user==null){
        throw new UsernameNotFoundException("Username not found");
    }

    return new org.springframework.security.core.userdetails.User(user.getUsername(),user.getPassword(),
            true,true,true,true,getGrantedAuthorities(user));
}

private List<GrantedAuthority> getGrantedAuthorities(User user){
    List<GrantedAuthority> authorities = new ArrayList<GrantedAuthority>();
    for(GrantedAuthority roles : user.getAuthorities()){    
        authorities.add(new SimpleGrantedAuthority(((Role) roles).getName()));
    }
    return authorities;
}

}

1 Ответ

0 голосов
/ 24 февраля 2020

Похоже, что версия развернутой вами пружинной системы зависит от уровня JPA spe c, отличного от того, который включен в WebSphere - NoSuchMethodError немного трудно читать с проблемами кодирования, но я почти уверен, что это говорит следующее:

javax/persistence/PersistenceContext loaded from C:/Program Files (x86)/IBM/WebSphere/AppServer/plugins/javax.j2ee.persistence.jar

вызывается из

org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor$PersistenceElement loaded from C:/Program Files (x86)/IBM/WebSphere/AppServer/profiles/AppSrv01/installedApps/myserverNode01Cell/mcomm-0_0_1-SNAPSHOT_war.ear/mcomm-0.0.1-SNAPSHOT.war/WEB-INF/lib/spring-orm-5.2.1.RELEASE.jar

Версия PersistenceContext, включенная в WebSphere, не содержит метод synchronization () или, по крайней мере, с теми же аргументами и / или тип возврата. Скорее всего, это означает, что вам нужно будет принести свой собственный API JPA (а затем и свою собственную совместимую реализацию) и сделать его видимым для приложений в предпочтении реализации сервера. Самый безопасный способ сделать это - упаковать jar-файлы JPA в общую библиотеку, выбрать в библиотеке параметр «использовать изолированный загрузчик классов» и связать библиотеку с вашим WAR-модулем. Обратите внимание, что изолированные разделяемые библиотеки не могут «видеть» вещи в приложении, с которым они связаны, поэтому вам нужно убедиться, что у классов в библиотеке есть все их непосредственные иждивенцы.

...