6.4. Leveraging Jakarta EE


서비스 공급자는 공급자를 가리키도록 META-INF/services 파일을 올바르게 설정하는 한 모든 자karta EE 구성 요소 내에 패키징할 수 있습니다. 예를 들어, 공급자가 타사 라이브러리를 사용해야 하는 경우, 공급자를 북마트 내에 패키지하고 이러한 타사 라이브러리를 후자의 lib/ 디렉토리에 저장할 수 있습니다. 또한 공급자 ScanSettings는 Egresss, WARS 및 EARs가 JBoss EAP 환경에서 사용할 수 있는 jboss-deployment-structure.xml 파일을 사용할 수 있습니다. 이 파일에 대한 자세한 내용은 JBoss EAP 설명서를 참조하십시오. 이를 통해 다른 미세한 동작 중에서 외부 종속성을 가져올 수 있습니다.

ProviderFactory 구현은 일반 java 오브젝트여야 합니다. 그러나 현재는 공급자 클래스 구현을 Stateful Egresss로 지원합니다. 이렇게 하면 됩니다.

@Stateful
@Local(EjbExampleUserStorageProvider.class)
public class EjbExampleUserStorageProvider implements UserStorageProvider,
        UserLookupProvider,
        UserRegistrationProvider,
        UserQueryProvider,
        CredentialInputUpdater,
        CredentialInputValidator,
        OnUserCache
{
    @PersistenceContext
    protected EntityManager em;

    protected ComponentModel model;
    protected KeycloakSession session;

    public void setModel(ComponentModel model) {
        this.model = model;
    }

    public void setSession(KeycloakSession session) {
        this.session = session;
    }


    @Remove
    @Override
    public void close() {
    }
...
}

@Local 주석을 정의하고 해당 공급자 클래스를 지정합니다. 이 작업을 수행하지 않으면 NodePort에서 공급자 인스턴스를 올바르게 프록시하지 않으며 공급자가 작동하지 않습니다.

공급자의 close() 메서드에 @Remove 주석을 넣습니다. 그러지 않으면 상태 저장 빈이 정리되지 않으며 결국 오류 메시지가 표시될 수 있습니다.

ProviderFactory 의 Ixmplementations는 일반 java 객체여야 합니다. 팩토리 클래스는 create() 메서드에서 Stateful NodePort의 JNDI 조회를 수행합니다.

public class EjbExampleUserStorageProviderFactory
        implements UserStorageProviderFactory<EjbExampleUserStorageProvider> {

    @Override
    public EjbExampleUserStorageProvider create(KeycloakSession session, ComponentModel model) {
        try {
            InitialContext ctx = new InitialContext();
            EjbExampleUserStorageProvider provider = (EjbExampleUserStorageProvider)ctx.lookup(
                     "java:global/user-storage-jpa-example/" + EjbExampleUserStorageProvider.class.getSimpleName());
            provider.setModel(model);
            provider.setSession(session);
            return provider;
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

© 2024 Red Hat, Inc.