부하 분산 웹 서버를 통해 나머지 URL을 방문하는 데 문제가 있습니다 (두 개의 응용 프로그램 서버로 2 개의 웹 서버 전달 요청). 설정이 단일 웹 서버에서 단일 jboss 응용 프로그램 서버로 설정되면이 문제가 발생하지 않습니다.고유 한 난처한 JBoss resteasy 오류 - 리소스를 찾을 수 없습니다.
package com.testing.game;
import java.io.Serializable;
import com.fasterxml.jackson.annotation.JsonInclude;
import javax.ws.rs.Consumes;
import javax.ws.rs.DefaultValue;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import org.apache.log4j.Logger;
@Path("/game")
@JsonInclude(JsonInclude.Include.NON_NULL)
public class GameRest implements Serializable{
/**
*
*/
private static final long serialVersionUID = 9029403154444232148L;
private final static Logger logger = Logger.getLogger(GameRest.class);
@GET
@Path("/userStatus")
@Produces(MediaType.APPLICATION_JSON)
public UserReportStatus getUserStatus(
@QueryParam("userId") @DefaultValue("") String userId){
logger.info("received request getReportStatus " + userId);
GameService gs = new GameService();
return gs.getUserReportStatus(userId);
}
}
다음은 web.xml 파일의 주요 내용이다 : 내 나머지 서비스에 따라
16:02:46,711 DEBUG [org.jboss.resteasy.core.SynchronousDispatcher] (http-/30.31.32.33:8080-14) PathInfo: //AppName/rest/game/userStatus
16:02:46,711 DEBUG [org.jboss.resteasy.core.SynchronousDispatcher] (http-/30.31.32.33:8080-14) Failed executing GET //AppName/rest/game/userStatus: org.jboss.resteasy.spi.NotFoundException: Could not find resource for relative : //AppName/rest/game/userStatus of full path: http://stg.testing.com//AppName/rest/game/userStatus?userId=99984029883634
at
org.jboss.resteasy.core.registry.RootSegment.matchChildren(RootSegment.java:360) [resteasy-jaxrs-2.3.3.Final-redhat-1.jar:2.3.3.Final-redhat-1]
at org.jboss.resteasy.core.registry.RootSegment.matchRoot(RootSegment.java:374) [resteasy-jaxrs-2.3.3.Final-redhat-1.jar:2.3.3.Final-redhat-1]
at org.jboss.resteasy.core.registry.RootSegment.matchRoot(RootSegment.java:367) [resteasy-jaxrs-2.3.3.Final-redhat-1.jar:2.3.3.Final-redhat-1]
at org.jboss.resteasy.core.ResourceMethodRegistry.getResourceInvoker(ResourceMethodRegistry.java:315) [resteasy-jaxrs-2.3.3.Final-redhat-1.jar:2.3.3.Final-redhat-1]
at org.jboss.resteasy.core.SynchronousDispatcher.getInvoker(SynchronousDispatcher.java:173) [resteasy-jaxrs-2.3.3.Final-redhat-1.jar:2.3.3.Final-redhat-1]
at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:118) [resteasy-jaxrs-2.3.3.Final-redhat-1.jar:2.3.3.Final-redhat-1]
at org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.service(ServletContainerDispatcher.java:208) [resteasy-jaxrs-2.3.3.Final-redhat-1.jar:2.3.3.Final-redhat-1]
at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:55) [resteasy-jaxrs-2.3.3.Final-redhat-1.jar:2.3.3.Final-redhat-1]
at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:50) [resteasy-jaxrs-2.3.3.Final-redhat-1.jar:2.3.3.Final-redhat-1]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:847) [jboss-servlet-api_3.0_spec-1.0.1.Final-redhat-1.jar:1.0.1.Final-redhat-1]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:329) [jbossweb-7.0.16.Final-redhat-1.jar:]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.16.Final-redhat-1.jar:]
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:275) [jbossweb-7.0.16.Final-redhat-1.jar:]
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161) [jbossweb-7.0.16.Final-redhat-1.jar:]
at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:153) [jboss-as-web-7.1.2.Final-redhat-1.jar:7.1.2.Final-redhat-1]
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:155) [jbossweb-7.0.16.Final-redhat-1.jar:]
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) [jbossweb-7.0.16.Final-redhat-1.jar:]
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) [jbossweb-7.0.16.Final-redhat-1.jar:]
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:368) [jbossweb-7.0.16.Final-redhat-1.jar:]
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877) [jbossweb-7.0.16.Final-redhat-1.jar:]
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:679) [jbossweb-7.0.16.Final-redhat-1.jar:]
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:931) [jbossweb-7.0.16.Final-redhat-1.jar:]
at java.lang.Thread.run(Thread.java:662) [rt.jar:1.6.0_37]
됩니다 : 다음
는오류 나는 제이보스 애플리케이션 서버 로그에서 볼 메시지입니다
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:.. id="WebApp_ID" version="2.5">
<display-name>AppName_Axis1</display-name>
<!-- Auto scan REST service -->
<context-param>
<param-name>resteasy.scan</param-name>
<param-value>true</param-value>
</context-param>
<!-- this need same with resteasy servlet url-pattern -->
<context-param>
<param-name>resteasy.servlet.mapping.prefix</param-name>
<param-value>/rest</param-value>
</context-param>
<listener>
<listener-class>
org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap</listener-class>
</listener>
<servlet>
<display-name>Apache-Axis Servlet</display-name>
<servlet-name>AxisServlet</servlet-name>
<servlet-class>org.apache.axis.transport.http.AxisServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>AxisServlet</servlet-name>
<url-pattern>/servlet/AxisServlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>AxisServlet</servlet-name>
<url-pattern>*.jws</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>AxisServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
<servlet>
<display-name>Axis Admin Servlet</display-name>
<servlet-name>AdminServlet</servlet-name>
<servlet-class>org.apache.axis.transport.http.AdminServlet</servlet-class>
<load-on-startup>100</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>AdminServlet</servlet-name>
<url-pattern>/servlet/AdminServlet</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>resteasy-servlet</servlet-name>
<servlet-class>
org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>resteasy-servlet</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
</web-app>
예상되는 결과는 다음과 같습니다. 부하가 분산 된 웹 서버를 통해 갈 때 내가 얻을 수 있도록 http://30.31.32.33:8080/AppName/rest/game/userStatus?userId=99984029883634
실제 결과와 같은 응용 프로그램 서버의 IP 주소에 요청을 할 때
{"status":"Yes","dob":"01/01/1934","userName":"John Doe","reportStatus":"No"}
내가 위의 올바른 결과가 있습니다 :
HTTP Status 404 - Could not find resource for relative : //AppName/rest/game/userStatus of full path: http://stg.testing.com//AppName/rest/game/userStatus?userId=99984029883634
웹 서버 URL에 요청할 때 위의 결과가 나타납니다. http://stg.testing.com/AppName/rest/game/userStatus?userId=99984029883634
참고 : 나는 hosts 파일에서 웹 서버의 IP 주소로 stg.testing.com을 할당하여 테스트했습니다.
다음은 httpd.conf 파일에서 app 서버의 이름/IP 주소가 표시되는 위치의 설정입니다.
<Proxy balancer://stgsilo stickysession=JSESSIONID>
BalancerMember http://30.31.32.33:8080/ min=10 max=100 route=node1 loadfactor=1
BalancerMember http://30.31.32.34:8080/ min=10 max=100 route=node2 loadfactor=1
</proxy>
<Proxy balancer://stgsiloadmin stickysession=JSESSIONID>
BalancerMember http://30.31.32.33:9990/ min=10 max=100 route=node1 loadfactor=1
BalancerMember http://30.31.32.34:9990/ min=10 max=100 route=node2 loadfactor=1
</Proxy>
ProxyPass/balancer://stgsilo/
ProxyPass /console balancer://stgsiloadmin/console
ProxyPass /management balancer://stgsiloadmin/management
ProxyPassReverse/http://30.31.32.33:8080
ProxyPassReverse/http://30.31.32.34:8080
ProxyPassReverse /console http://30.31.32.33:9990/console
ProxyPassReverse /console http://30.31.32.34:9990/console
ProxyPassReverse /management http://30.31.32.33:9990/management
ProxyPassReverse /management http://30.31.32.34:9990/management
<Proxy *BATCHJOB*>
Order Deny,Allow
Allow from 30.
Deny from all
</Proxy>
<Proxy *-WS*>
Order Deny,Allow
Allow from all
</Proxy>
내 응용 프로그램 서버로 jboss 7.1.2를 사용하고 웹 서버로 apache를 사용하고 있습니다. 이 Rest 앱은 백엔드에서 축 비누 웹 서비스 클라이언트를 사용합니다. 따라서 web.xml에 axis 관련 문이 있습니다. 두 경우 모두 비누 클라이언트가 작동하는지 확인했습니다. 나는 때문에 내가 보스 수정을 위해 위의 세 가지 권장 사항을 시도 here 및 here 웹 서버 문제 (자동 프로그램 응용하기 전에 슬래시이 앞으로 추가) 또는 here 나열된 것과 같은 JBoss의 문제,이 경우 확실하지 않다 여전히 동일한 오류가 있습니다. 오류의 원인을 확인하는 데 도움이 될 것입니다.
업데이트 : 컨텍스트 루트 아래 별도의 디렉토리에 서블릿을 삽입하고 서블릿을로드 밸런서에서 연결할 수 있습니다. 그래서 지금은 이것이 하드웨어 문제가 아니라 소프트웨어 문제라고 가정합니다. 또한 org.jboss.resteasy.core.SynchronousDispatcher가 요청 동안 로그마다 호출되기 때문에 404가 아니라 내부 슬래시로 인해 슬래시가 두 번 발생한다고 가정합니다. 어떤 도움이 유용 할 것입니다. 미리 감사드립니다.