<<__Exception__>>
java.io.EOFException
	at java.io.DataInputStream.readFully(DataInputStream.java:197)
	at jeus.servlet.engine.WJPV1Registration.readRegstrationReply(WJPV1Registration.java:111)
	at jeus.servlet.engine.WebtoBConnectionManager.registerToWebtoB(WebtoBConnectionManager.java:239)
	at jeus.servlet.engine.WebtoBConnectionManager.createConnection(WebtoBConnectionManager.java:93)
	at jeus.servlet.connection.WebtoBConnector.run(WebtoBConnector.java:177)
	at java.lang.Thread.run(Thread.java:750)
<<__!Exception__>>
[2023.01.12 10:02:23][1] [cyedu1-180] [WEB-3456] Executing the servlet action failed.
<<__Exception__>>
javax.servlet.ServletException: java.lang.reflect.InvocationTargetException
	at org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:905)
	at org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:834)
	at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:786)
	at jeus.servlet.jsp.JspServletWrapper.executeServlet(JspServletWrapper.java:80)
	at jeus.servlet.engine.RequestDispatcherImpl.processCommonRequestDispatcher(RequestDispatcherImpl.java:475)
	at jeus.servlet.engine.RequestDispatcherImpl.include(RequestDispatcherImpl.java:572)
	at org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:160)
	at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:304)
	at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1286)
	at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1041)
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:984)
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901)
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
	at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:683)
	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:786)
	at jeus.servlet.engine.ServletWrapper.executeServlet(ServletWrapper.java:170)
	at jeus.servlet.engine.RequestDispatcherImpl.processCommonRequestDispatcher(RequestDispatcherImpl.java:475)
	at jeus.servlet.engine.RequestDispatcherImpl.include(RequestDispatcherImpl.java:572)
	at org.apache.taglibs.standard.tag.common.core.ImportSupport.acquireString(ImportSupport.java:314)
	at org.apache.taglibs.standard.tag.common.core.ImportSupport.doEndTag(ImportSupport.java:171)
	at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:786)
	at jeus.servlet.jsp.JspServletWrapper.executeServlet(JspServletWrapper.java:80)
	at jeus.servlet.engine.RequestDispatcherImpl.processCommonRequestDispatcher(RequestDispatcherImpl.java:475)
	at jeus.servlet.engine.RequestDispatcherImpl.include(RequestDispatcherImpl.java:572)
	at org.apache.taglibs.standard.tag.common.core.ImportSupport.acquireString(ImportSupport.java:314)
	at org.apache.taglibs.standard.tag.common.core.ImportSupport.doEndTag(ImportSupport.java:171)
	at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:786)
	at jeus.servlet.jsp.JspServletWrapper.executeServlet(JspServletWrapper.java:80)
	at jeus.servlet.engine.RequestDispatcherImpl.processCommonRequestDispatcher(RequestDispatcherImpl.java:475)
	at jeus.servlet.engine.RequestDispatcherImpl.doForward(RequestDispatcherImpl.java:392)
	at jeus.servlet.engine.RequestDispatcherImpl.forward(RequestDispatcherImpl.java:369)
	at org.apache.tiles.servlet.context.ServletTilesRequestContext.forward(ServletTilesRequestContext.java:241)
	at org.apache.tiles.servlet.context.ServletTilesRequestContext.dispatch(ServletTilesRequestContext.java:222)
	at org.apache.tiles.renderer.impl.TemplateAttributeRenderer.write(TemplateAttributeRenderer.java:44)
	at org.apache.tiles.renderer.impl.AbstractBaseAttributeRenderer.render(AbstractBaseAttributeRenderer.java:106)
	at org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:670)
	at org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:690)
	at org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:644)
	at org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:627)
	at org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:321)
	at org.springframework.web.servlet.view.tiles2.TilesView.renderMergedOutputModel(TilesView.java:112)
	at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:304)
	at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1286)
	at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1041)
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:984)
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901)
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
	at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:683)
	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:786)
	at jeus.servlet.engine.ServletWrapper.executeServlet(ServletWrapper.java:170)
	at jeus.servlet.filter.FilterChainImpl.internalDoFilter(FilterChainImpl.java:112)
	at jeus.servlet.filter.FilterChainImpl.doFilter(FilterChainImpl.java:86)
	at egovframework.com.sec.security.filter.EgovSpringSecurityLoginFilter.doFilter(EgovSpringSecurityLoginFilter.java:336)
	at jeus.servlet.filter.FilterChainImpl.internalDoFilter(FilterChainImpl.java:98)
	at jeus.servlet.filter.FilterChainImpl.doFilter(FilterChainImpl.java:86)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:317)
	at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:116)
	at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:91)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
	at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:127)
	at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:91)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
	at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:114)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
	at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:137)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
	at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:111)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
	at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:170)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
	at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
	at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:200)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
	at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:116)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
	at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:66)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
	at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:56)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
	at org.springframework.security.web.session.ConcurrentSessionFilter.doFilter(ConcurrentSessionFilter.java:155)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
	at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:105)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
	at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:214)
	at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:177)
	at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:347)
	at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:263)
	at jeus.servlet.filter.FilterChainImpl.internalDoFilter(FilterChainImpl.java:98)
	at jeus.servlet.filter.FilterChainImpl.doFilter(FilterChainImpl.java:86)
	at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:96)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
	at jeus.servlet.filter.FilterChainImpl.internalDoFilter(FilterChainImpl.java:98)
	at jeus.servlet.filter.FilterChainImpl.doFilter(FilterChainImpl.java:86)
	at egovframework.com.cmm.filter.HTMLTagFilter.doFilter(HTMLTagFilter.java:35)
	at jeus.servlet.filter.FilterChainImpl.internalDoFilter(FilterChainImpl.java:98)
	at jeus.servlet.filter.FilterChainImpl.doFilter(FilterChainImpl.java:86)
	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
	at jeus.servlet.filter.FilterChainImpl.internalDoFilter(FilterChainImpl.java:98)
	at jeus.servlet.filter.FilterChainImpl.doFilter(FilterChainImpl.java:86)
	at jeus.servlet.engine.ServletWrapper.execute(ServletWrapper.java:145)
	at jeus.servlet.engine.RequestProcessor.run(RequestProcessor.java:235)
	at jeus.util.pool.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:1299)
	at jeus.util.pool.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:1343)
	at jeus.servlet.engine.WebThreadPoolExecutor$WebRequestWorker.run(WebThreadPoolExecutor.java:340)
	at java.lang.Thread.run(Thread.java:750)
Caused by: java.lang.reflect.InvocationTargetException
	at jeus.servlet.jsp.InstanceManagerImpl.injectToInstance(InstanceManagerImpl.java:68)
	at jeus.servlet.jsp.InstanceManagerImpl.newInstance(InstanceManagerImpl.java:43)
	... 118 more

 

 

java.io.EOFException

at java.io.DataInputStream.readFully(DataInputStream.java:197) at jeus.servlet.engine.WJPV1Registration.readRegstrationReply(WJPV1Registration.java:111) at jeus.servlet.engine.WebtoBConnectionManager.registerToWebtoB(WebtoBConnectionManager.java:239) at jeus.servlet.engine.WebtoBConnectionManager.createConnection(WebtoBConnectionManager.java:93) at jeus.servlet.connection.WebtoBConnector.run(WebtoBConnector.java:177)


원인

JEUS WEBMain.xml<webtob-listener>- <thread-pool>의 min/max 값과

Webtob http.m *SERVER절의 MinProc/MaxProc값이 다를 때 발생

 

(http.m의 설정값이 더 크거나 같아야 함)

 

WEBMain.xml
http.m


 

JEUS WEBMain 또는 Domain.xml file 에서 Session 설정 적용해도

정상적으로 적용되지 않는 경우가 발생한다.

 

application에서 session timeout 을 설정하지 않았는지 확인해야 한다. 


세션 우선 순위 : application setting > server setting

 

web.xml > webcommon.xml > WEBMain.xml


[1순위]

/WEB-INF/web.xml

<web-app>

<session-config>

<session-timeout>60</session-timeout> [단위 : 분]

</session-config>

</web-app>


[2순위]

/WEB-INF/web.xml

${JEUS_HOME}/config/컨테이너명/엔진명/webcommon.xml

<web-app>

<session-config>

<session-timeout>30</session-timeout> [단위 : 분]

</session-config>


 

[3순위]

SERVLET_ENGINE/WEBMain.xml

 

<web-container>

<context-group>

...

<session-config>

<timeout>30</timeout> [단위 : 분]

<shared>false</shared>

</session-config>

...

</context-group>

</web-container>

 

session-cookie = true

세션을 전달하는 세션 트래킹의 방법으로 쿠키를 사용할 때 세션을 쿠키로 전달할지를 설정한다.


 

 

 

WAR 파일로 배포할 경우

 

JEUS에서 context path를 명시적으로 설정하지 않을 경우, 기본적으로 웹 애플리케이션의 WAR 파일 이름이 context path로 사용된다.

 

ex) example.war 파일로 배포된 애플리케이션의 경우, context path는 /example 이 된다.

 

ROOT.war라는 이름으로 애플리케이션을 배포하면, 그 애플리케이션은 root context path, 즉 /에서 서비스되는데, 이럴 경우 웹 브라우저에 서버의 도메인 이름만 입력해도 해당 애플리케이션에 접근할 수 있게 된다.

 

 

app2.war 구성

  •   app2.war
    • app 
      • test2.jsp
1. 배포된 app2.war 의 파일 명인  'app2' 가 context path로 설정됨
2. app2.war 파일 내 app 디렉토리가 있고 하위에 test2.jsp가 있으므로 하위 경로까지 URL에 모두 입력하여 호출

디렉토리로 배포할 경우

 

.war 파일이 아닌 디렉토리로 애플리케이션을 배포할 때, 그 디렉토리의 이름이 기본적으로 context path로 사용된다.

 

ROOT라는 이름의 디렉토리를 사용하여 애플리케이션을 배포하면, 그 애플리케이션은 루트 경로 즉, /에서 접근 가능하게 된다.

ACCESS / DENY 설정

Client에서 접속을 시도할 때, 특정 IP address 나 newtork/netmask 들을 기준으로 요청에 대한 ACCESS/DENY를 설정할 수 있다.

    • 요청 허용과 제한이 적용되는 순서 설정
    • ACCESS 절은 DIRECTORY/URI/EXT/TCPGW 절에 적용될 수 있으며, 각각에서 정의한 리소스를 허용 또는 제어한다. 

예시

ACCESS 절 추가

#WebtoB
vi http.m

#ACESS절 추가
*ACCESS
#특정 IP만 DENY, 그 외 모든 IP 허용
access1  Order = "allow, deny", Allow = "all"
access2  Order = "deny, allow", Deny = "[IP 1],[IP 2]",Allow = "[IP 1],[", 
access3  Order = "allow, deny", Allow = "211.1.1.0/255.255.255.0"
access4  Order = "deny, allow", Deny = "211.1.1.30"
access5  Order = "allow, deny", Allow = "all",Deny = "211.1.1.30"

ACCESS 절은 Order 옵션의 순서에 따라 설정이 다르게 적용된다.

allow, deny : Method> Allow> AllowIf> Deny> DenyIf 순서로 match 한다.

deny, allow : Method > Deny > DenyIf > Allow > AllowIf 순서로 match 한다.

vi http.m

*ACCESS
access1  Order = "allow, deny", Allow = "all"
access2  Order = "allow, deny", Allow = "211.1.1.10, 211.1.1.20"
access3  Order = "allow, deny", Allow = "211.1.1.0/255.255.255.0"
access4  Order = "deny, allow", Deny = "211.1.1.30"
access5  Order = "allow, deny", Allow = "all",Deny = "211.1.1.30"

 

필수 옵션 ACCESS name = <string> Access 절의 이름을 임의로 정할 수 있다.
선택 옵션 Method = <literal> 적용 할 HTTP 메소드를 설정한다.
MethodException = <literal> 제외 할 HTTP 메소드를 설정한다.  
Order = <literal>    
Default - "Deny,Allow" Allow, AllowIf, Deny, DenyIf, Method가 적용되는 순서를 설정한다 (하단 표 참조)  
Allow = <literal> 요청이 허용되는 IP 주소나 network/netmask들을 설정  
Deny = <literal> 요청이 거절되는 IP 주소나 network/netmask들을 설정  

 


GOTOEXT = Y 설정이 들어가 있는 경우

GOTOEXT = Y 설정이 있는 경우, JEUS를 거치지 않고 바로 WebtoB로 요청을 처리하기 때문에 URI로 요청이 가지 않는다.

이럴 경우, 요청을 받는 해당 vhost에 rewrite 설정을 통하여 특정 IP에 대한 요청을 처리해야 한다.

  • URLRewrite
  • URLRewriteConfig
vi http.m

v_test          DOCROOT="/home/webtob5/webtob/docs/",
                HOSTNAME = "mail.test.com",
                HOSTALIAS = "192.168.40.137",
                PORT = "80",
                ServiceOrder = "uri,ext",
                ERRORDOCUMENT = "403,404,503",
                METHOD = "GET, POST, -HEAD, -OPTIONS",
                #Headers = "gzip,cors_all",
                #Headers ="security,X-XSS,X-Content,strict,X-Download",
                **URLRewrite = Y,
                URLRewriteConfig = "$WEBTOBDIR/config/rewrite.conf",**
                LOGGING = "acc_test",
                ERRORLOG = "err_test"
vi rewrite.conf

RewriteCond %{REQUEST_URI} !error ## 무한 redirect 방지
RewriteCond %{REMOTE_ADDR} ^139.xx.xx.132$ ##특정 ip 
RewriteRule . <https://xxx.go.kr/err/error.html> ##호출 url 페이지

즉, IP가 139.xx.xx.132로 들어오는 요청에 대해 https://xxx.go.kr/err/error.html errorpage로 redirect 시키겠다는 의미이다.

WebtoB는 Apache와 동일한 형식으로 로그를 기록하고 있으며 포맷도 동일하게 사용한다.


WebtoB 로그 구분

- syslog

  WebtoB Engine에서 남기는 로그로 WebtoB의 이상 유무를 체크하여 로그로 남긴다.

  특이한 이상이 없는 한 많은 로그를 남기지 않는다.

  일별로 생성되며 기본위치는 $WEBTOBDIR/log/syslog 이다.

 

- errorlog

  클라이언트가 웹으로 접속하여 호출 시 에러가 발생하는 모든 uri 정보를 남긴다.

  일별로 생성되며 기본위치는  $WEBTOBDIR/log/errorlog 이다.

 

- accesslog

  클라이언트가 웹으로 접속 시 호출하는 모든 요청정보를 남긴다.

  요청이 많으면 파일크기가 상당히 커지므로 로그 관리에서 access log 관리가 가장 중요하다.

  일별로 생성되며 기본위치는  $WEBTOBDIR/log/accesslog이다.

 


WebtoB 로그 포맷

webtob는 기본 로그 포맷으로 3가지 alias를 제공하고 있다.

  • Default
  • COMMON
  • COMBINED

보안 취약점 조치를 위해 WebtoB Access log의 포맷 변경이 필요할 경우 DEFAULT -> COMBINED로 변경하면 된다.

 

 

Default : [요청 IP] [요청처리를 완료한 시간] [HTTP Request의 Request line 전체] [HTTP Status Code] [헤더를 제외한 응답의 Byte] [요청 처리하는데 소요된 시간 ms]

 


USERLOGFORMAT 설정

WebtoB5 에서는 공통으로 사용될 로그 포맷을 설정할 수 있도록 *USERLOGFORMAT 절을 제공하고 있다.

기존 VHOST가 많을 경우에 동일한 포맷을 설정하고자 할 때 해당 *USERLOGFORMAT 절에 사용자가 로그 포맷을 설정하고 *LOGGING 절에서 해당 설정 포맷을 사용할 수 있도록 하였다.

 

*LOGGING
log1        Format = "format1", FileName = "C:/TmaxSoft/WebtoB4.1.9.1/log/access.log",
            Option = "sync"
            ...
*USERLOGFORMAT
format1     Format = "%h %l %u %t \"%r\" %s %b" 



JEUS 설치 JAVA 버전과 jeus.properties 내 JAVA 버전이 동일하지만

/etc/hosts에 설정된 IP 또는 hostname이 서버 IP 또는 Hostname 과 불일치 할 경우

 


java.lang.ExceptionInInitializerError
        at jeus.tool.console.console.jeus.JeusJMXConsoleContext.onCreate(JeusJMXConsoleContext.java:261)
        at jeus.tool.console.console.jeus.JeusJMXConsole.<init>(JeusJMXConsole.java:69)
        at jeus.tool.console.console.ConsoleMain.main(ConsoleMain.java:8)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at jeus.server.Bootstrapper.callMainMethod(Bootstrapper.java:590)
        at jeus.server.Bootstrapper.callMain(Bootstrapper.java:597)
        at jeus.server.Bootstrapper.main(Bootstrapper.java:145)
        at jeus.tool.console.ConsoleBootstrapper.main(ConsoleBootstrapper.java:11)
Caused by: java.lang.NullPointerException
        at jeus.util.net.NetworkConstants.<clinit>(NetworkConstants.java:88)
        ... 11 more

 



jeus.properties 내 JAVA버전이 JEUS 설치 버전보다 낮을 경우

 

Exception in thread "main" java.lang.UnsupportedClassVersionError: jeus/server/Bootstrapper : Unsupported major.minor version 52.0
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:808)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:443)
        at java.net.URLClassLoader.access$100(URLClassLoader.java:65)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:349)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:348)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:430)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:326)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:363)
        at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:482)

 

 




jeus.properties 내 JAVA버전이 JEUS 설치 버전보다 높을 경우

 

-Djava.endorsed.dirs=/home/jeus8_1/jeus8_5/lib/endorsed is not supported. Endorsed standards and standalone APIs
in modular form will be supported via the concept of upgradeable modules.
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.

 

ISSUE

클라이언트가 웹 페이지 호출 시 페이지가 정상적으로 작동하지 않음

JEUS Container Log 확인결과  failed because of java.net.SocketTimeoutException: Read timed out 발생

 

 

TimeOut?

프로그램이 특정 시간 내에 성공적으로 수행되지 않아서 진행이 자동적으로 중단되는 것

응답을 무한대로 기다릴 수 없기 때문에 기다리는 시간을 정해주어야 한다.

 

Read TimeOut (단위 ms)

JEUS에서 Web Connection을 통해 Web Server와 커넥션을 맺는다.

ReadTimeOut 시간을 설정하여 Web Server로부터 아무런 메시지가 오지 않는다면 커넥션에 문제가 있다고 간주하고 새 커넥션을 맺는다.

 

SvrChkTime

서버와의 연결이 정상인지 확인하기 위해 체크하는 시간을 설정하며 방화벽을 사이에 두고 연결된 JEUS와의 연결을 확인하는 데 사용된다.

 

SvrChkTime을 설정하고 서비스 요청이 없는 Ready 상태의 커넥션에 대해서 연속된 2회의 SvrChkTime에 의한 KeepAlive 요청에도 응답이 없으면 해당 커넥션에 이상이 발생했다고 인식하고 해당 커넥션을 단절하여 서비스 분배에서 제외한다.

 

 

■ http.m

*Server 절의 해당 Server에 설정한다.

설정 확인

wsadmin -i

cfg -svr


Read-timeout 산출 공식


(SvrChkTime X 2000) - 10000

 


 

JEUS Resource Leak 확인 방법


Resource Leak?

다수의 사용자가 사용하는 WAS 환경에서는 서비스가 지연되는 경우가 많다.

application 내 소스 내에서 close() 한 곳이 없다면 지속적으로 코드를 사용하게 된다.

지속되는 리소스 누수를 방지하기 위해 WAS에서 Resource Leak가 발생하면 로그 내에서 사용자에게 경고 메시지를 보내주는 설정을 할 수 있다.

여러 Resource Leak 중 DB Connection Pool 의 모든 Connection이 사용되거나 반납되지 않아 지연됐을 때의 로그와 경로를 기록한다.


Resource Leak 징후

  1. 속도 저하: 애플리케이션 작업의 긴 세션(몇 시간 또는 하루일 수 있음) 후에 UI가 느려진다.
  2. 웹 페이지가 충돌한다.
  3. 앱이 자주 일시 중지된다.
  4. JS HEAP이 시작된 것보다 높게 끝난다.
  5. 노드 크기 및/또는 리스너 크기가 증가한다.

jeus5,6 version

DB 누수 확인 명령어

find ./ -name “JeusServer*.log” | xartgs egrep “not closed|Request URI”|grep -v X

Invocation Manager 설정

Invocation manager는 엔진 컨테이너에서 서블릿/JSP, EJB Stateless Session Bean, 그리고 MDB와 같은 Stateless 메소드를 호출하는 동안 사용하는 외부 리소스(external resource)인 JDBC 커넥션Webt 커넥션을 추적하여 커넥션이 닫히지 않은 경우 모드에 따라 적절한 처리를 해준다.

Invocaiton manager는 JEUSMain.xml의 각 엔진 컨테이너 요소 하위에 하나의 **<invocation-manager-action>**으로 설정

#JEUSMain.xml
<jeus-system>
    <node>
        . . .
        <engine-container>
            . . .
            **<invocation-manager-action>
                AutoClose
            </invocation-manager-action>**
            . . .
        </engine-container>
        . . .
    </node>
    . . .
</jeus-system>

설정값 설명

NoAction 기능을 사용하지 않는다.
Warning 만약 하나의 자원이 Stateless 메소드 호출 동안 사용되었지만 반환할 때 닫지 않게 될 경우 이벤트가 컨테이너 로그에 Warning 메시지로 기록된다.
AutoClose 만약 하나의 자원이 Stateless 메소드 호출 동안 사용되었으나 반환할 때 닫히지 않는다면 자원이 자동적으로 닫힌다.

JEUS7,8

DB 누수 확인 명령어

find ./ -name “JeusServer*.log” | xartgs egrep “not closed|subject:”|grep -v X

Invocation Manager 설정

webadmin → Servers → 설정할 컨테이너 선택 → Basic → Action on Resource Leak

+ Recent posts