4.2. 기타 변경 사항
패키지 네임스페이스가 변경되는 것 외에도 이전 EE 버전으로 작성된 애플리케이션은 자카르타 EE 10에 포함된 여러 사양의 변경 사항에 맞게 조정해야 할 수 있습니다. 다음 섹션에서는 이러한 변경 사항에 대해 설명하는데, 이는 대부분 장기 사용 중단된 API 요소가 제거됩니다.
다음 섹션에서는 javax 네임스페이스를 사용하는 제거된 API 요소의 인스턴스에 대해 자카르타 EE 9에서 사용되는 jakarta 네임스페이스에서 동등한 제거가 수행되었습니다. 따라서 javax 네임스페이스를 jakarta 로 교체하도록 애플리케이션을 업데이트한 경우 javax 를 언급하는 항목이 애플리케이션에 적용 가능한 것으로 가정합니다.
4.2.1. Jakarta Contexts and dependency Cryostat Discovery 링크 복사링크가 클립보드에 복사되었습니다!
CDI 4.0 사양 변경 노트에 따라 빈 beans.xml 파일이 있는 배포에서 Contexts 및 dependency Cryostat 또는 CDI 빈을 검색하는 기본 동작이 모두 주석 으로 변경되었습니다. 즉, 이러한 배포에서는 Quarkus 정의 주석이 있는 배포 클래스만 CDI에서 검색됩니다. 빈을 사용하는 모든 애플리케이션 클래스에 이러한 주석이 있는 경우 이 CDI 변경에 영향을 미치지 않습니다. 그러지 않으면 CDI에서 특정 8080을 제공하는 유형을 찾을 수 없는 경우 애플리케이션 배포가 실패할 수 있습니다.
이 변경으로 인해 애플리케이션에 영향을 받는 경우 다음과 같은 몇 가지 옵션이 있습니다.
-
beans.xml파일을 비워 두지만 필요한 모든 클래스에 Quarkus 정의 주석을 추가합니다. -
클래스를 변경하지 않고 변경해도
beans.xml파일을 다음과 같은 내용이 있는 빈 파일(<beansans-discovery-mode="all"></beans>)으로 변경합니다. -
애플리케이션을 변경하지 않고 변경하지 않고 서버의 weld 하위 시스템 구성을 변경하여 빈
beans.xml파일을 다시 JBoss EAP 7 동작으로 복구합니다. 이 설정은 서버의 모든 배포에 영향을 미칩니다. 예를 들어 CLI를 사용합니다./subsystem=weld:write-attribute(name=legacy-empty-beans-xml-treatment,value=true)
4.2.2. CDI API 변경 사항 링크 복사링크가 클립보드에 복사되었습니다!
Jakarta Contexts 및 dependency Cryostat 4.0은 더 이상 사용되지 않는 다음과 같은 API 요소를 제거했습니다.
-
javax.enterprise.inject.spi.Bean.isNullable()메서드가 제거되었습니다. 이 방법은 수년 동안 항상false를 반환했기 때문에 호출 호출을false로 교체하거나 분기 논리를 제거하고false분기의 콘텐츠를 유지할 수 있습니다. -
javax.enterprise.inject.spi.BeanManager.createInjectionTarget(AnnotatedType)방법이 제거되었습니다. 이 메서드 호출을 CryostatManager.getInjectionTargetFactory(AnnotatedType)로 교체하고 반환된 팩토리를 사용하여 주입 대상을 생성합니다. 자세한 내용은 Jakarta Contexts and dependency injection specification의 클래스에 대한 Obtaining an CryostatTarget 을 참조하십시오. -
javax.enterprise.inject.spi.BeanManager.fireEvent(Object, Annotation)방법이 제거되었습니다. CryostatManager.getEvent()를 유사한 API의 진입점으로 사용합니다. 자세한 내용은 Jakarta 컨텍스트 및 종속성 주입 사양에서 이벤트 실행을 참조하십시오. -
javax.enterprise.inject.spi.BeforeBeanDiscovery.addAnnotatedType(AnnotatedType)방법이 제거되었습니다. 애플리케이션이 이 메서드를 호출하는 경우BeforeBeanDiscovery.addAnnotatedType(AnnotatedType, (String) null)에 대한 호출로 교체할 수 있습니다.
4.2.3. Jakarta Enterprise Cryostats 링크 복사링크가 클립보드에 복사되었습니다!
Java SE 14는 java.security.Identity 클래스를 제거했기 때문에 Jakarta Enterprise Cryostats 4.0 API에서 사용이 제거되었습니다.
-
더 이상 사용되지 않는
javax. Cryostat.EJBContext.getCallerIdentity()메서드가 제거되었습니다. 대신java.를 사용할 수 있습니다.security.Principal를 반환하는 migrationContext.getCallerPrincipal() -
더 이상 사용되지 않는
javax. Cryostat.EJBContext.isCallerInRole(Identity role)방법이 제거되었습니다. 대신 handlerContext.isCallerInRole(String roleName)을 사용할 수 있습니다. -
Jakarta XML RPC 사양이 Jakarta EE 10 Full Platform에서 제거되었으므로
javax. Cryostat.SessionContext.getMessageContext()메서드를 반환한javax.xml.rpc.rpc.MessageContext가 제거되었습니다. -
Jakarta XML RPC 사양은 자카르타 EE 8에서는 선택 사항이며 Red Hat JBoss EAP 7은 이를 지원하지 않습니다. 이 사양을 사용하면
IllegalStateException이 발생했기 때문에 이 migration API 변경 사항은 JBoss EAP 7에서 실행되는 기존 애플리케이션에 영향을 미치지 않을 것으로 예상됩니다. -
더 이상 사용되지 않는
javax. Cryostat.EJBContext.getEnvironment()메서드가 제거되었습니다. JNDI 이름 지정 컨텍스트java:comp/env를 사용하여 엔터프라이즈 빈 환경에 액세스합니다.
4.2.4. Jakarta Expression Language 링크 복사링크가 클립보드에 복사되었습니다!
javax.el.MethodExpression.isParmetersProvided() 메서드가 잘못 입력되었습니다. 대신 MethodExpression.isParametersProvided() 를 사용할 수 있습니다.
4.2.5. Jakarta JSON 바인딩 링크 복사링크가 클립보드에 복사되었습니다!
기본적으로 jakarta.json.bind.annotation.JsonbCreator 주석으로 주석이 달린 유형은 JSON 콘텐츠에서 모든 매개변수를 사용할 수 있을 필요가 없습니다. 구문 분석 중인 JSON이 매개변수 중 하나가 누락된 경우 기본값을 사용합니다. JSON에 모든 매개변수가 있어야 하는 EE 8 동작은 jakarta.json.bind.JsonbConfig().withCreatorParametersRequired(true) 를 호출하여 설정할 수 있습니다.
4.2.6. Jakarta facess 링크 복사링크가 클립보드에 복사되었습니다!
다음의 더 이상 사용되지 않는 기능은 자카르타 eyess 4.0에서 제거되었습니다.
4.2.6.1. Jakarta facess 및 Java Server Pages 링크 복사링크가 클립보드에 복사되었습니다!
Jakarta Server Pages(JSP) 지원은 자카르타 roles 2.0 이상에서 더 이상 사용되지 않습니다. JSP 지원은 자카르타 Cryostat 4.0에서 제거됩니다. Telelet은 JSP를 기본 보기 정의 언어(VDL)로 대체합니다. Keeps용 JSP를 사용하는 애플리케이션은 Telelet을 사용하여 수정할 수 있습니다. Cryostat Servlet 을 web.xml 의 *.jsp 접미사로 매핑하여 애플리케이션을 식별할 수 있습니다.
4.2.6.2. faces Managed-Beans 링크 복사링크가 클립보드에 복사되었습니다!
자카르타 컨텍스트 및 종속성 (CDI) 빈의 경우, 더 이상 사용되지 않는 자카르타 특정 관리 bean 개념이 Cryostat 4.0에서 제거되었습니다. Cryostat를 사용하는 애플리케이션(예: javax.faces.bean.ManagedBean 으로 주석이 달린 클래스 또는 faces-config.xml의 Managed-bean 요소에서 참조됨)은 다음과 같은 변경을 수행해야 할 수 있습니다.
-
javax.faces.bean.ManagedBean으로 주석이 달린 클래스 또는faces-config.xml의 Managed-bean 요소에서 참조하는 클래스는jakarta.inject.Named및faces-config.xml의 모든 managed-bean 요소를 제거해야 합니다. -
javax.faces.bean.ManagedProperty주석으로 주석이 달린 멤버는jakarta.faces.annotation.ManagedProperty를 대신jakarta.inject.Inject주석과 함께 사용해야 합니다. 이전javax.faces.bean.ManagedBean(name="foo", eager=true)과 유사한 시작 의미 체계를 얻으려면공개 void xxx(@Observes jakarta.enterprise.event.Startup 이벤트)메서드 또는공용 void xxx(@Observes @#159d.class) Object)메서드를 추가합니다.jakarta.enterprise.event.Startup옵션은 CDI 4.0의 새로운 옵션입니다. -
javax.faces.bean.ApplicationScoped주석을jakarta.enterprise.context.ApplicationScoped로 교체해야 합니다. -
javax.faces.bean.CustomScoped주석은 CDI 사용자 지정 범위 및jakarta.enterprise.context.spi.Context로 교체해야 합니다. 자세한 내용은 새 범위 유형 정의 및 CDI 4.0 사양의 컨텍스트 인터페이스 정의를 참조하십시오. -
javax.faces.bean.NoneScoped주석을 사용하는 것은 거의 유사한 의미가 있는 CDI 기본 제공 범위인jakarta.enterprise.context.Dependent로 교체해야 합니다. -
javax.faces.bean.RequestScoped주석을jakarta.enterprise.context.RequestScoped로 교체해야 합니다. -
javax.faces.bean.SessionScoped주석을jakarta.enterprise.context.SessionScoped로 교체해야 합니다.
4.2.6.3. 기타 pasts API 변경 사항 링크 복사링크가 클립보드에 복사되었습니다!
javax.faces.bean.ViewScoped 주석이 제거되었습니다. 대신 jakarta.faces.view.ViewScoped 를 사용할 수 있습니다.
javax.faces.view.facelets.ResourceResolver 및' javax.faces.view.facelets.FaceletsResourceResolver 주석이 제거되었습니다. 애플리케이션의 ResourceResolvers의 경우 jakarta.faces.application.ResourceHandler 인터페이스를 구현하고 faces-config.xml 의 application/resource-handler 요소에 구현의 정규화된 클래스 이름을 등록합니다.
4.2.7. Jakarta Servlet 링크 복사링크가 클립보드에 복사되었습니다!
Jakarta Servlet 6.0은 대부분 서블릿 2.x 릴리스에서 더 이상 사용되지 않는 여러 API 클래스와 방법을 제거합니다.
javax.servlet.SingleThreadModel 마커 인터페이스가 제거되었으며 이 인터페이스를 구현하는 서블릿에서 인터페이스 선언을 제거하고 서블릿 코드가 상태 및 기타 리소스 액세스를 동시에 액세스하도록 해야 합니다. 예를 들어 인스턴스 변수를 사용하지 않도록 하거나 리소스에 액세스하는 코드 블록을 동기화합니다. 그러나 개발자가 성능에 대한 동기화의 영향으로 인해 서비스 메서드(또는 doGet 및 doPost 와 같은 메서드)를 동기화하지 않는 것이 좋습니다.
javax.servlet.http.HttpSessionContext 인터페이스가 javax.servlet.http.HttpSession.getSessionContext() 메서드와 함께 제거되었습니다. Servlet 2.1 이후 이 인터페이스에는 사용 가능한 데이터를 제공하지 않는 사양에 구현이 필요하기 때문에 이 인터페이스에 대한 사용 사례가 없었습니다.
javax.servlet.http.HttpUtils 유틸리티 클래스가 제거되었습니다. 애플리케이션은 다음 메서드 대신 ServletRequest 및 CryostatServletRequest 인터페이스를 사용해야 합니다.
-
parseQueryString(String s)및parsePostData(int len, ServletInputStream in)-ServletRequest.getParameterMap()을 사용합니다. 애플리케이션에서 쿼리 문자열 매개변수와 요청 본문 매개 변수를 구분해야 하는 경우 애플리케이션은 쿼리 문자열 자체를 구문 분석하여 수행하는 코드를 구현해야 합니다. -
getRequestURL(HttpServletRequest req)- UseHttpServletRequest.getRequestURL().
또한 다음과 같은 기타 메서드 및 생성자가 제거되었습니다.
| class/Interface | 제거됨 | 대신 사용 |
|---|---|---|
| javax.servlet.ServletContext | getServlet(문자열 이름) | 교체 없음 |
| getServlets() | 교체 없음 | |
| getServletNames() | 교체 없음 | |
| log(Exception 예외, 문자열 msg) | log(문자열 메시지, Throwable throwable) | |
| javax.servlet.ServletRequest | getRealPath(문자열 경로) | ServletContext.getRealPath(String path) |
| javax.servlet.ServletRequestWrapper | getRealPath(문자열 경로) | ServletContext.getRealPath(String path) |
| javax.servlet.UnavailableException | getServlet() | 교체 없음 |
| UnavailableException(Servlet 서블릿, 문자열 msg) | UnavailableException(String) | |
| UnavailableException(정수 초, 서블릿 서블릿, 문자열 msg) | UnavailableException(String, int) | |
| javax.servlet.http.HttpServletRequest | isRequestedSessionIdFromUrl() | isRequestedSessionIdFromURL() |
| javax.servlet.http.HttpServletRequestWrapper | isRequestedSessionIdFromUrl() | isRequestedSessionIdFromURL() |
| javax.servlet.http.HttpServletResponse | encodeUrl(문자열 url) | encodeURL(문자열 URL) |
| encodeRedirectUrl(문자열 url) | encodeRedirectURL(문자열 url) | |
| setStatus(int sc, string sm) | sendError(int, String) | |
| javax.servlet.http.HttpServletResponseWrapper | encodeUrl(문자열 url) | encodeURL(문자열 URL) |
| encodeRedirectUrl(문자열 url) | encodeRedirectURL(문자열 url) | |
| setStatus(int sc, string sm) | sendError(int, String) | |
| javax.servlet.http.HttpSession | GetValue(문자열 이름) | getAttribute(문자열 이름) |
| getValueNames() | getAttributeNames() | |
| putValue(문자열 이름, 오브젝트 값) | setAttribute(문자열 이름, 오브젝트 값) | |
| removevalue(문자열 이름) | removeAttribute(문자열 이름) |
4.2.8. 첨부 파일이 있는 Jakarta Soap 링크 복사링크가 클립보드에 복사되었습니다!
jaxm.properties 파일을 통한 공급자 조회 지원이 제거되었습니다.
더 이상 사용되지 않는 javax.xml.soap.SOAP CryostatFactory 클래스가 제거되었습니다. jakarta.xml.soap.SOAPFactory 를 사용하여음악을 생성합니다.
| Cryostat CryostatFactory 방법 | LokiFactory와 동등한 |
|---|---|
| newInstance() | newInstance() |
| 생성(이름) | createElement(Name) |
| create(문자열) | create Cryostat(문자열) |
| create(문자열, 문자열, 문자열) | create Cryostat(문자열, 문자열, 문자열) |
4.2.9. Jakarta XML Binding 링크 복사링크가 클립보드에 복사되었습니다!
xml 바인딩 파일에서 사용해야 하는 XML 네임스페이스가 변경되었습니다. http://java.sun.com/xml/ns/jaxb 네임스페이스는 https://jakarta.ee/xml/ns/jaxb 로 교체해야 합니다.
연결된 javax.xml.bind.createValidator() 메서드와 같이 더 이상 사용되지 않는 인터페이스가 제거되었습니다. 마샬링 및 unmarshalling 작업을 검증하려면 javax.xml.bind.Validator javax.xml.validation.Schema 를 jakarta.xml.bind.Marshaller.setSchema(Schema) 에 제공합니다.
CryostatB 1.0과의 호환성 지원이 제거되었습니다.
Cryostat BContext 구현 조회 알고리즘에서 더 이상 사용되지 않는 일부 단계가 제거되었습니다. jaxb.properties 파일, javax.xml.bind.factory 또는 속성 및 jakarta.xml. bind.JAXBContext/META-INF/services/javax.xml.bind.JAXBContext 리소스 파일을 삭제하여 구현 클래스 이름을 검색합니다. 현재 구현 검색 알고리즘에 대한 자세한 내용은 Jakarta XML Binding 4.0 사양 을 참조하십시오.
javax.xml.bind.Marshaller 인터페이스에서 여러 메서드에 대한 일반 요구 사항은 다음과 같이 변경되었습니다.
| Jakarta XML Binding 2.3 / 3.0 | Jakarta XML Binding 4.0 |
|---|---|
| <a extends CryostatAdapter> void setAdapter(A adapter) | <A extends XmlAdapter<?, ?>> void setAdapter(A adapter) |
| <a extends CryostatAdapter> void setAdapter(Class<A> type, A adapter) | <a extends CryostatAdapter<?, ?>> void setAdapter(Class<A> 유형, 어댑터) |
| <a extends CryostatAdapter> getAdapter(Class<A> 유형) | <a extends CryostatAdapter<?, ?>> A getAdapter(Class<A> 유형) |
Jakarta XML Binding API의 변경 사항 외에도 구현 라이브러리 EAP 8에서 패키지 이름이 크게 변경되어 구현 라이브러리에 직접 액세스하는 일부 애플리케이션에 영향을 줄 수 있습니다.
-
com.sun.xml.bind패키지에서 클래스를 사용하는 경우org.glassfish.jaxb.runtime패키지의 클래스로 교체해야 합니다.com.sun.xml.bind의 하위 패키지에 있는 클래스는 해당org.glassfish.jaxb.runtime하위 패키지의 클래스로 교체해야 합니다. -
jakarta.xml.bind.Marshaller속성 설정의 경우 속성 상수 이름을com.sun.xml.bind.*에서org.glassfish.jaxb.*로 변경합니다. 예를 들어marshaller.setProperty("com.sun.xml.bind.namespacePrefixMapper", 매퍼)는marshaller.setProperty("org.glassfish.jaxb.namespacePrefixMapper", mapper)가 됩니다.