18장. JAX-RS 엔드포인트 구성
초록
이 장에서는 Blueprint XML과 Spring XML에서 JAX-RS 서버 엔드포인트를 인스턴스화하고 구성하는 방법과 XML에서 JAX-RS 클라이언트 엔드포인트(클라이언트 프록시 빈)를 인스턴스화하고 구성하는 방법도 설명합니다.
18.1. JAX-RS Server 엔드 포인트 구성
18.1.1. JAX-RS Server Endpoint 정의
18.1.1.1. 기본 서버 끝점 정의
XML에서 JAX-RS 서버 끝점을 정의하려면 최소한 다음을 지정해야 합니다.
-
XML에서 끝점을 정의하는 데 사용되는
jaxrs:server
요소.jaxrs:
네임스페이스 접두사는 Blueprint 및 Spring의 다양 한 네임스페이스에 각각 매핑됩니다. jaxrs:server
요소의address
특성을 사용하여 JAX-RS 서비스의 기본 URL입니다. 끝점 배포 방법에 영향을 주는 주소 URL을 지정하는 두 가지 다른 방법이 있습니다.상대 URL- 예를 들어
/customers
. 이 경우 끝점은 기본 HTTP 컨테이너에 배포되며 엔드포인트의 기본 URL은 CXF 서블릿 기본 URL을 지정된 상대 URL과 결합하여 암시적으로 가져옵니다.예를 들어, JAX-RS 엔드포인트를 Fuse 컨테이너에 배포하는 경우 지정된
/customers
URL이 URL로 확인됩니다. http://Hostname:8181/cxf/customers(컨테이너가 기본8181
포트를 사용하고 있다고 가정함).-
절대 URL인 경우 (예:
http://0.0.0.0:8200/cxf/customers
) 이 경우 JAX-RS 엔드포인트에 대해 새 HTTP 리스너 포트가 열립니다(아직 열려 있지 않은 경우). 예를 들어 Fuse의 컨텍스트에서 JAX-RS 엔드포인트를 호스트하기 위해 새 Undertow 컨테이너가 암시적으로 생성됩니다. 특수 IP 주소0.0.0.0
은 와일드카드 역할을 하며 현재 호스트에 할당된 호스트 이름(Multi-homed 호스트 시스템에서 유용할 수 있음)과 일치합니다.
-
JAX-RS 서비스의 구현을 제공하는 하나 이상의 JAX-RS 루트 리소스 클래스입니다. 리소스 클래스를 지정하는 가장 간단한 방법은
jaxrs:serviceBeans
요소 내에 나열하는 것입니다.
18.1.1.2. Blueprint 예
다음 Blueprint XML 예제에서는 상대 주소를 지정하는 JAX-RS 엔드포인트를 정의하는 방법을 보여줍니다. /customers
(기본 HTTP 컨테이너로 배포 가능)는 service.CustomerService
리소스 클래스에 의해 구현됩니다.
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxrs="http://cxf.apache.org/blueprint/jaxrs" xmlns:cxf="http://cxf.apache.org/blueprint/core" xsi:schemaLocation=" http://www.osgi.org/xmlns/blueprint/v1.0.0 https://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd http://cxf.apache.org/blueprint/jaxrs http://cxf.apache.org/schemas/blueprint/jaxrs.xsd http://cxf.apache.org/blueprint/core http://cxf.apache.org/schemas/blueprint/core.xsd "> <cxf:bus> <cxf:features> <cxf:logging/> </cxf:features> </cxf:bus> <jaxrs:server id="customerService" address="/customers"> <jaxrs:serviceBeans> <ref component-id="serviceBean" /> </jaxrs:serviceBeans> </jaxrs:server> <bean id="serviceBean" class="service.CustomerService"/> </blueprint>
18.1.1.3. Blueprint XML 네임스페이스
Blueprint에서 JAX-RS 엔드포인트를 정의하려면 일반적으로 다음과 같은 XML 네임스페이스가 필요합니다.
접두사 | 네임스페이스 |
---|---|
(기본값) | |
| |
|
18.1.1.4. Spring 예
다음 Spring XML 예제에서는 상대 주소 /customers
(기본 HTTP 컨테이너에 배포)를 지정하고 service.CustomerService
리소스 클래스에 의해 구현되는 JAX-RS 엔드포인트를 정의하는 방법을 보여줍니다.
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxrs="http://cxf.apache.org/jaxrs" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd"> <jaxrs:server id="customerService" address="/customers"> <jaxrs:serviceBeans> <ref bean="serviceBean"/> </jaxrs:serviceBeans> </jaxrs:server> <bean id="serviceBean" class="service.CustomerService"/> </beans>
18.1.1.5. XML 네임스페이스 스프링
Spring에서 JAX-RS 엔드포인트를 정의하려면 일반적으로 다음과 같은 XML 네임스페이스가 필요합니다.
접두사 | 네임스페이스 |
---|---|
(기본값) | |
| |
|
18.1.1.6. Spring XML 자동 검색
(spring only) JAX-RS 루트 리소스 클래스를 명시적으로 지정하는 대신 Spring XML을 사용하면 자동 검색을 구성할 수 있으므로 특정 Java 패키지가 리소스 클래스( @Path
에서 주석이 달린 클래스) 및 모든 검색된 리소스 클래스가 자동으로 엔드포인트에 연결됩니다. 이 경우 jaxrs:server
요소에서 address
속성과 basePackages
속성만 지정해야 합니다.
예를 들어 a.b.c
Java 패키지에서 모든 JAX-RS 리소스 클래스를 사용하는 JAX-RS 엔드포인트를 정의하려면 다음과 같이 Spring XML에서 엔드포인트를 정의할 수 있습니다.
<jaxrs:server address="/customers" basePackages="a.b.c"/>
자동 검색 메커니즘은 지정된 Java 패키지에서 찾은 모든 JAX-RS 공급자 클래스도 엔드포인트에 검색하고 설치합니다.
18.1.1.7. Spring XML의 라이프사이클 관리
(spring only) Spring XML을 사용하면 빈 요소에서 scope
속성을 설정하여 빈의 라이프사이클을 제어할 수 있습니다
. Spring에서 다음 범위 값을 지원합니다.
singleton
- (기본값) 모든 곳에서 사용되며 Spring 컨테이너의 전체 수명 동안 지속되는 단일 빈 인스턴스를 생성합니다.
prototype
-
빈이 다른 빈에 삽입될 때마다 또는 빈 레지스트리에서
getBean()
을 호출하여 빈을 가져올 때 새 빈 인스턴스를 생성합니다. 요청
- (웹 인식 컨테이너에서만 사용 가능) 빈에서 호출되는 모든 요청에 대해 새 빈 인스턴스를 생성합니다.
session
- (웹 인식 컨테이너에서만 사용 가능) 단일 HTTP 세션의 수명 동안 새 빈을 생성합니다.
globalSession
- (웹 인식 컨테이너에서만 사용 가능) 포 틀릿 간에 공유되는 단일 HTTP 세션의 수명 동안 새 빈을 생성합니다.
Spring 범위에 대한 자세한 내용은 빈 범위에 대한 Spring 프레임워크 설명서 를 참조하십시오.
jaxrs:serviceBeans
요소를 통해 JAX-RS 리소스 빈을 지정하는 경우 Spring 범위가 제 대로 작동하지 않습니다. 이 경우 리소스 빈에 scope
속성을 지정하면 scope
속성이 효과적으로 무시됩니다.
빈 범위가 JAX-RS 서버 끝점 내에서 제대로 작동하도록 하려면 서비스 팩토리에서 제공하는 간접 수준이 필요합니다. 빈 범위를 구성하는 가장 간단한 방법은 다음과 같이 jaxrs:server
요소의 bean
특성을 사용하여 리소스 빈을 지정하는 것입니다.
<beans ... > <jaxrs:server id="customerService" address="/service1" beanNames="customerBean1 customerBean2"/> <bean id="customerBean1" class="demo.jaxrs.server.CustomerRootResource1" scope="prototype"/> <bean id="customerBean2" class="demo.jaxrs.server.CustomerRootResource2" scope="prototype"/> </beans>
위 예제에서는 두 개의 리소스 빈, customerBean1
및 customerBean2
를 구성합니다. beanNames
특성은 리소스 빈 ID의 공백으로 구분된 목록으로 지정됩니다.
궁극적인 수준의 유연성을 위해 jaxrs:serviceFactories
요소를 사용하여 JAX-RS 서버 엔드포인트를 구성할 때 서비스 팩토리 개체를 명시적으로 정의할 수 있습니다. 이러한 보다 자세한 접근 방식은 기본 서비스 팩토리 구현을 사용자 지정 구현으로 교체할 수 있다는 이점이 있으므로 빈 라이프사이클을 궁극적으로 제어할 수 있습니다. 다음 예제에서는 다음 방법을 사용하여 두 리소스 빈인 customerBean1
및 customerBean2
를 구성하는 방법을 보여줍니다.
<beans ... > <jaxrs:server id="customerService" address="/service1"> <jaxrs:serviceFactories> <ref bean="sfactory1" /> <ref bean="sfactory2" /> </jaxrs:serviceFactories> </jaxrs:server> <bean id="sfactory1" class="org.apache.cxf.jaxrs.spring.SpringResourceFactory"> <property name="beanId" value="customerBean1"/> </bean> <bean id="sfactory2" class="org.apache.cxf.jaxrs.spring.SpringResourceFactory"> <property name="beanId" value="customerBean2"/> </bean> <bean id="customerBean1" class="demo.jaxrs.server.CustomerRootResource1" scope="prototype"/> <bean id="customerBean2" class="demo.jaxrs.server.CustomerRootResource2" scope="prototype"/> </beans>
단일턴 라이프사이클이 아닌 경우 org.apache.cxf.service. invoker bean을 구현하고 등록하는 것이 좋습니다( jaxrs:server/jaxrs:invoker
요소에서 참조하여 인스턴스를 등록할 수 있음).
18.1.1.8. WADL 문서 연결
jaxrs:server
요소의 docLocation
속성을 사용하여 WADL 문서를 JAX-RS 서버 끝점과 선택적으로 연결할 수 있습니다. 예를 들면 다음과 같습니다.
<jaxrs:server address="/rest" docLocation="wadl/bookStore.wadl"> <jaxrs:serviceBeans> <bean class="org.bar.generated.BookStore"/> </jaxrs:serviceBeans> </jaxrs:server>
18.1.1.9. 스키마 검증
JAX-B 형식의 메시지 콘텐츠를 설명하는 외부 XML 스키마가 있는 경우 jaxrs:schemaLocations
요소를 통해 이러한 외부 스키마를 JAX-RS 서버 끝점과 연결할 수 있습니다.
예를 들어 서버 끝점과 WADL 문서를 연결하고 수신되는 메시지에 대해 스키마 유효성 검사를 활성화하려면 다음과 같이 연결된 XML 스키마 파일을 지정할 수 있습니다.
<jaxrs:server address="/rest" docLocation="wadl/bookStore.wadl"> <jaxrs:serviceBeans> <bean class="org.bar.generated.BookStore"/> </jaxrs:serviceBeans> <jaxrs:schemaLocations> <jaxrs:schemaLocation>classpath:/schemas/a.xsd</jaxrs:schemaLocation> <jaxrs:schemaLocation>classpath:/schemas/b.xsd</jaxrs:schemaLocation> </jaxrs:schemaLocations> </jaxrs:server>
또는 지정된 디렉토리에 모든 스키마 파일 *.xsd
를 포함하려는 경우 다음과 같이 디렉터리 이름만 지정할 수 있습니다.
<jaxrs:server address="/rest" docLocation="wadl/bookStore.wadl"> <jaxrs:serviceBeans> <bean class="org.bar.generated.BookStore"/> </jaxrs:serviceBeans> <jaxrs:schemaLocations> <jaxrs:schemaLocation>classpath:/schemas/</jaxrs:schemaLocation> </jaxrs:schemaLocations> </jaxrs:server>
이러한 방식으로 스키마를 지정하는 것은 일반적으로 JAX-B 스키마에 액세스해야 하는 모든 종류의 기능에 유용합니다.
18.1.1.10. 데이터 바인딩 지정
jaxrs:dataBinding
요소를 사용하여 메시지 본문을 요청 및 응답 메시지에서 인코딩하는 데이터 바인딩을 지정할 수 있습니다. 예를 들어 JAX-B 데이터 바인딩을 지정하려면 다음과 같이 JAX-RS 끝점을 구성할 수 있습니다.
<jaxrs:server id="jaxbbook" address="/jaxb"> <jaxrs:serviceBeans> <ref bean="serviceBean" /> </jaxrs:serviceBeans> <jaxrs:dataBinding> <bean class="org.apache.cxf.jaxb.JAXBDataBinding"/> </jaxrs:dataBinding> </jaxrs:server>>
Aegis 데이터 바인딩을 지정하려면 다음과 같이 JAX-RS 끝점을 구성할 수 있습니다.
<jaxrs:server id="aegisbook" address="/aegis"> <jaxrs:serviceBeans> <ref bean="serviceBean" /> </jaxrs:serviceBeans> <jaxrs:dataBinding> <bean class="org.apache.cxf.aegis.databinding.AegisDatabinding"> <property name="aegisContext"> <bean class="org.apache.cxf.aegis.AegisContext"> <property name="writeXsiTypes" value="true"/> </bean> </property> </bean> </jaxrs:dataBinding> </jaxrs:server>
18.1.1.11. JMS 전송 사용
HTTP 대신 JMS 메시징 라이브러리를 전송 프로토콜로 사용하도록 JAX-RS를 구성할 수 있습니다. JMS 자체는 전송 프로토콜이 아니 므로 실제 메시징 프로토콜은 사용자가 구성하는 특정 JMS 구현에 따라 다릅니다.
예를 들어 다음 Spring XML 예제에서는 JMS 전송 프로토콜을 사용하도록 JAX-RS 서버 엔드포인트를 구성하는 방법을 보여줍니다.
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jms="http://cxf.apache.org/transports/jms" xmlns:jaxrs="http://cxf.apache.org/jaxrs" xsi:schemaLocation=" http://cxf.apache.org/transports/jms http://cxf.apache.org/schemas/configuration/jms.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd"> <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"/> <bean id="ConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory"> <property name="brokerURL" value="tcp://localhost:${testutil.ports.EmbeddedJMSBrokerLauncher}" /> </bean> <jaxrs:server xmlns:s="http://books.com" serviceName="s:BookService" transportId= "http://cxf.apache.org/transports/jms" address="jms:queue:test.jmstransport.text?replyToName=test.jmstransport.response"> <jaxrs:serviceBeans> <bean class="org.apache.cxf.systest.jaxrs.JMSBookStore"/> </jaxrs:serviceBeans> </jaxrs:server> </beans>
이전 예제에 대한 다음 사항에 유의하십시오.
-
JMS 구현- JMS 구현은 Apache ActiveMQ 연결 팩토리 개체를 인스턴스화하는
ConnectionFactory
빈에서 제공합니다. 연결 팩토리를 인스턴스화한 후에는 자동으로 기본 JMS 구현 계층으로 설치됩니다. -
JMS 구성 또는 대상 개체-Apache CXF는 JMS 대상 개체( JMS 소비자를 나타내는) 또는 JMS 대상 오브젝트를 암시적으로 인스턴스화합니다. 이 오브젝트는 setttings
xmlns:s="http://books.com"
속성(네임 스페이스 접두사 정의) 및serviceName="s:BookService"
(QName 정의)를 통해 정의된 QName으로 고유하게 식별되어야 합니다. -
전송 ID-에서 JMS 전송을 선택하려면
transportId
특성을http://cxf.apache.org/transports/jms
로 설정해야 합니다. -
JMS address-the
jaxrs:server/@address
속성은 표준화된 구문을 사용하여 보낼 JMS 대기열 또는 JMS 주제를 지정합니다. 이 구문에 대한 자세한 내용은 https://tools.ietf.org/id/draft-merrick-jms-uri-06.txt 에서 참조하십시오.
18.1.1.12. 확장 매핑 및 언어 매핑
JAX-RS 서버 끝점은 파일 접미사(URL에서 표시됨)를 MIME 콘텐츠 유형 헤더에 자동으로 매핑하도록 구성하고 언어 접미사를 언어 유형 헤더에 매핑할 수 있습니다. 예를 들어 다음 형식의 HTTP 요청을 고려하십시오.For example, consider a HTTP request of the following form:
GET /resource.xml
다음과 같이 .xml
접미사를 자동으로 매핑하도록 JAX-RS 서버 끝점을 구성할 수 있습니다.
<jaxrs:server id="customerService" address="/"> <jaxrs:serviceBeans> <bean class="org.apache.cxf.jaxrs.systests.CustomerService" /> </jaxrs:serviceBeans> <jaxrs:extensionMappings> <entry key="json" value="application/json"/> <entry key="xml" value="application/xml"/> </jaxrs:extensionMappings> </jaxrs:server>
이전 서버 끝점에서 HTTP 요청을 수신하면 type, application/xml
의 새 콘텐츠 유형 헤더를 자동으로 생성하고 리소스 URL에서 .xml
접미사를 제거합니다.
언어 매핑의 경우 다음 형식의 HTTP 요청을 고려하십시오.For the language mapping, consider a HTTP request of the following form:
GET /resource.en
다음과 같이 JAX-RS 서버 끝점을 구성하여 .en
접미사가 자동으로 매핑할 수 있습니다.
<jaxrs:server id="customerService" address="/"> <jaxrs:serviceBeans> <bean class="org.apache.cxf.jaxrs.systests.CustomerService" /> </jaxrs:serviceBeans> <jaxrs:languageMappings> <entry key="en" value="en-gb"/> </jaxrs:languageMappings> </jaxrs:server>
이전 서버 끝점에서 HTTP 요청을 수신하면 값이 en-gb
인 새 허용 언어 헤더를 자동으로 생성하고 리소스 URL에서 .en
접미사를 제거합니다.
18.1.2. jaxrs:server 속성
18.1.2.1. 속성
표 18.1. “JAX-RS Server Endpoint Attributes” jaxrs:server
요소에서 사용 가능한 특성을 설명합니다.
속성 | 설명 |
---|---|
| 다른 구성 요소에서 끝점을 참조하는 데 사용할 수 있는 고유 식별자를 지정합니다.Specifies a unique identifier that other configuration elements can use to refer to the endpoint. |
| HTTP 끝점의 주소를 지정합니다. 이 값은 서비스 계약에 지정된 값을 재정의합니다. |
| (spring only) JAX-RS 루트 리소스 클래스 및/또는 JAX-RS 공급자 클래스를 검색하도록 검색되는 Java 패키지 목록을 쉼표로 구분하여 지정하여 자동 검색을 활성화합니다. |
|
JAX-RS 루트 리소스 빈의 공백으로 구분된 빈 ID 목록을 지정합니다. Spring XML의 컨텍스트에서 루트 리소스 빈 요소에 |
| 서비스에서 사용하는 메시지 바인딩의 ID를 지정합니다. 유효한 바인딩 ID 목록은 23장. Apache CXF 바인딩 ID 에서 제공됩니다. |
| 서비스 엔드포인트를 관리하는 데 사용되는 버스를 구성하는 Spring 빈의 ID를 지정합니다. 이 기능은 공통 기능 세트를 사용하도록 여러 끝점을 구성할 때 유용합니다. |
| 외부 WADL 문서의 위치를 지정합니다. |
|
모델 스키마를 classpath 리소스로 지정합니다(예: |
|
서비스가 자동으로 게시되어야 하는지 여부를 지정합니다. |
|
자동 생성된 WADL 인터페이스의 |
|
(spring only) Spring 에서 자동 검색에 대한 서비스 주석 클래스 이름을 지정합니다. 이 옵션을 |
|
JAX-RS 서비스를 구현하는 JAX-RS 루트 리소스 클래스의 이름을 지정합니다. 이 경우 클래스는 Blueprint 또는 Spring이 아닌 Apache CXF에 의해 인스턴스화됩니다. Blueprint 또는 Spring에서 클래스를 인스턴스화하려면 대신 |
|
JMS 전송이 사용되는 특수한 경우 JAX-RS 엔드포인트에 대한 서비스 QName( |
|
|
|
비표준 전송 계층(HTTP 대신)을 선택하기 위한 것입니다. 특히 이 속성을 |
|
(spring only) 빈이 추상 빈인지 여부를 지정합니다. 추상화 빈은 구체적인 빈 정의를 위해 부모 역할을 하며 인스턴스화되지 않습니다. 기본값은 |
| (spring only) 끝점을 인스턴스화하기 전에 끝점을 인스턴스화하는 데 의존하는 빈 목록을 지정합니다. |
18.1.3. jaxrs:server 하위 요소
18.1.3.1. 하위 요소
표 18.2. “JAX-RS Server Endpoint Child Elements” jaxrs:server
요소의 하위 요소에 대해 설명합니다.
요소 | 설명 |
---|---|
|
서비스에 사용되는 Java |
| Apache CXF의 고급 기능을 구성하는 빈 목록을 지정합니다. 빈 참조 목록 또는 포함된 빈 목록을 제공할 수 있습니다. |
| 사용되지 않음. |
| 끝점에서 사용하는 데이터 바인딩을 구현하는 클래스를 지정합니다.Specifies the class implementing the data binding used by the endpoint. 이는 포함된 빈 정의를 사용하여 지정합니다. 자세한 내용은 “데이터 바인딩 지정” 에서 참조하십시오. |
| 인바운드 요청을 처리하는 인터셉터 목록을 지정합니다. 자세한 내용은 VII 부. Apache CXF 인터셉터 개발 에서 참조하십시오. |
| 인바운드 오류 메시지를 처리하는 인터셉터 목록을 지정합니다. 자세한 내용은 VII 부. Apache CXF 인터셉터 개발 에서 참조하십시오. |
| 아웃바운드 응답을 처리하는 인터셉터 목록을 지정합니다. 자세한 내용은 VII 부. Apache CXF 인터셉터 개발 에서 참조하십시오. |
| 아웃바운드 오류 메시지를 처리하는 인터셉터 목록을 지정합니다. 자세한 내용은 VII 부. Apache CXF 인터셉터 개발 에서 참조하십시오. |
| 서비스에서 사용하는 org.apache.cxf.service. invoker 인터페이스의 구현을 지정합니다. [a] |
|
이 끝점과 연결된 JAX-RS 루트 리소스의 라이프사이클에 대한 최대 제어 수준을 제공합니다. 이 요소의 하위 항목( |
| 끝점에 전달되는 속성의 Spring 맵을 지정합니다. 이러한 속성은 MTOM 지원 활성화와 같은 기능을 제어하는 데 사용할 수 있습니다. |
|
이 요소의 하위 항목은 |
|
리소스 모델의 기본 요소( |
|
이 엔드포인트에서 직접 리소스 모델을 정의합니다(즉, 이 |
|
이 끝점에 하나 이상의 사용자 지정 JAX-RS 공급자를 등록할 수 있습니다. 이 요소의 자식은 |
|
REST 호출의 URL이 파일 확장으로 종료되면 이 요소를 사용하여 특정 콘텐츠 유형과 자동으로 연결할 수 있습니다. 예를 들어 |
|
REST 호출의 URL이 언어 접미사로 끝나는 경우 이 요소를 사용하여 특정 언어에 매핑할 수 있습니다. 예를 들어 |
|
XML 메시지 콘텐츠 유효성 검사에 사용되는 하나 이상의 XML 스키마를 지정합니다.Specifies one or more XML schemas used for validating XML message content. 이 요소에는 하나 이상의 |
| 들어오는 URL 경로를 특정 리소스 클래스 또는 메서드에 일치시키는 데 사용되는 알고리즘을 구현하는 사용자 지정 리소스 비교기를 등록할 수 있습니다. |
|
클래스 이름에서 여러 리소스를 만들려면 |
[a]
invoker 구현은 서비스가 호출되는 방법을 제어합니다. 예를 들어 서비스 구현의 새 인스턴스에서 각 요청을 처리했는지 또는 상태가 호출 간에 보존되는지 여부를 제어합니다.
|