문제

몇 달 전에 사양이 출시 되었기 때문에 여전히 인기가 없다는 것을 알고 있습니다.

나는 아직 용접을 "설치"하지 않았고, 그냥 읽고 있습니다.이 질문 으로이 중요한 점을 정확하게 이해하고 싶습니다.

제 3 자 항아리에있는 콩의 해상도는 <alternatives> 당신의 beans.xml?

그렇지 않은 경우, 가지고 있지 않은 타사 라이브러리의 콩을 사용하는 방법 beans.xml ?

ClassPath에 항아리를 넣는 것이 없으면 작동하지 않습니다. beans.xml 그들의 META-INF, 당신은 타사 파티 항아리에게는 진실을 만들 수 없습니다. (보다 주제에 대한 개빈 킹의 게시물)

도움이 되었습니까?

해결책

왜 그렇게 복잡하다고 생각합니까?

그 타사 수업을위한 프로듀서 메모드를 만듭니다.

PDF 파일을 자동으로 가져 와서 팩스마다 보내는 제 3 자 라이브러리가 있다고 가정 해 봅시다.

private @Inject PdfFaxService faxService;

코드에서는 단순히 제작자 방법을 제공 할 수 있습니다. pdffaxservice는 stationeless에서 작동하므로 우리는 그것을 만들 수 있다고 안전하게 가정 할 수 있습니다. @ApplicationScoped:

public @Produces @ApplicationScoped PdfFaxService createFaxService() {
  return new PdfFaxService(initparameters);
}

어딘가에.

HTH.

다른 팁

an에 대한 나의 이해 대안 다른 배포 환경 (예 : 테스트 환경)에서 사용할 수있는 인터페이스의 다른 구현에 대한 대안입니다. an 대안 콩은 주석을 달아 선언합니다 @Alternative.

주어진 배포 시나리오에서 대안을 사용하려면 <alternatives> CDI 배포 디스크립터의 요소 META-INF/beans.xml. 이것은 가능합니다 @Alternative 기본적으로 비활성화되는 콩.

활성화되면 컨테이너가 주어진 주입 지점에 대한 모호한 의존성을 찾으면 주입 할 수있는 대안을 살펴보고 정확히 하나가 있으면이 대안을 선택하십시오.

다시 말해, 대안 교체하는 좋은 방법입니다 기존 구현 배포 시간에 다른 하나와 함께. 교체 할 것이 없다면 대안이 필요하지 않으며 항아리를 클래스 경로에 올려 놓으십시오. 이것이 정확히 당신의 질문인지 확실하지 않지만, 나는 타사 항아리의 개념에 대해 의심합니다.

2.1.4. 대안, 4.6. 대안 그리고 4.7. 불만족스럽고 모호한 종속성을 고정합니다 (그러나 나는 이것이 당신이 읽고있는 것 같아요).

업데이트: 추가 질문에 답변합니다.

그렇지 않은 경우 Beans.xml이없는 제 3 자 라이브러리에서 콩을 사용하는 방법

이것은 일어날 수 없습니다. 콩 아카이브에는 bean.xml 섹션에 자세히 설명 된대로 (비어 있음) 15.6. 포장 및 배포 문서 :

CDI는 특별 배포 아카이브를 정의하지 않습니다. 항아리, EJB 자르 또는 전쟁에 콩을 포장 할 수 있습니다. 그러나 아카이브 ~ 해야 하다"콩 아카이브"가 되십시오. 즉, 콩이 포함 된 각 아카이브는 beans.xml 에서 META-INF 클래스 경로의 디렉토리 또는 WEB-INF 웹 루트의 디렉토리 (전쟁 아카이브 용). 파일이 비어있을 수 있습니다. 아카이브에 배치 된 콩 beans.xml 응용 프로그램에서 파일을 사용할 수 없습니다.

그런 다음 불만족스럽고 모호한 의존성을 고치려면 앞에서 언급 한 4.7 절을 참조하십시오.

Update 2: 사용하는 것 같습니다 BeforeBeanDiscovery.addAnnotatedType() Bean 발견 중에 고려해야 할 다른 클래스를 추가 할 수 있습니다. (BeforeBeanDiscovery 이벤트입니다)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top