2013-04-22 2 views
0

Oracle 데이터베이스에 액세스하기 위해 최대 절전 모드와 Glassfish를 사용하는 편안한 웹 서비스가 있습니다. 다시 실행중인 서비스를받을Oracle Listener가 계속 충돌하고 응답하지 않음

ORA-12519, TNS:no appropriate service handler found 
org.hibernate.exception.GenericJDBCException: Cannot open connection 
at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:91) 
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:79) 
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43) 
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:29) 
at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:363) 
at org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:122) 
at org.hibernate.jdbc.JDBCContext.connection(JDBCContext.java:125) 
at org.hibernate.transaction.JDBCTransaction.begin(JDBCTransaction.java:57) 
at org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.java:1308) 
at data.CommonUnitOfWork.<init>(CommonUnitOfWork.java:29) 
at data.UnitOfWorkFactory.createCommonUnitOfWork(UnitOfWorkFactory.java:14) 
at controller.UserController.getUser(UserController.java:97) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:601) 
at com.sun.jersey.spi.container.JavaMethodInvokerFactory$1.invoke(JavaMethodInvokerFactory.java:60) 
at com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$TypeOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:185) 
at com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:75) 
at com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:288) 
at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147) 
at com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:108) 
at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147) 
at com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:84) 
at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1469) 
at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1400) 
at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1349) 
at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1339) 
at com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:416) 
at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:537) 
at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:708) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:770) 
at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1550) 
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:281) 
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175) 
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655) 
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595) 
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:161) 
at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:331) 
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231) 
at com.sun.enterprise.v3.services.impl.ContainerMapper$AdapterCallable.call(ContainerMapper.java:317) 
at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:195) 
at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:860) 
at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:757) 
at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1056) 
at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:229) 
at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137) 
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104) 
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90) 
at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79) 
at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54) 
at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59) 
at com.sun.grizzly.ContextTask.run(ContextTask.java:71) 
at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532) 
at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513) 
at java.lang.Thread.run(Thread.java:722) 


Caused by: java.sql.SQLException: Listener refused the connection with the following error: 
ORA-12519, TNS:no appropriate service handler found 
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:113) 
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:263) 
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:389) 
at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:454) 
at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:165) 
at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:35) 
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:802) 
at java.sql.DriverManager.getConnection(DriverManager.java:579) 
at java.sql.DriverManager.getConnection(DriverManager.java:190) 
at org.hibernate.connection.DriverManagerConnectionProvider.getConnection(DriverManagerConnectionProvider.java:110) 
at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:360) 
... 51 more 

그리고 유일한 해결책 리스너를 다시 시작하는 것입니다 그러나, 몇 가지 간단한 거래 (몇 가지 간단한 쿼리와 검색 일부 데이터) 후, 오라클 리스너는 다음과 같은 오류에 응답하지 않게됩니다 .

미리 도움을 주셔서 감사합니다.

편집 : 오라클 버전은 11g이며 Java 웹 서비스는 Java입니다. 리스너는 데이터베이스에있는 테이블의 5 개 미만 행 (약 10 개 열로 구성됨)을 검색하기 위해 적은 수의 쿼리 (예 : 4 또는 5)를 실행하는 몇 분의 작업 후에 응답하지 않게됩니다. 그 일은 그다지 무거운 것이 아닙니다. 데이터베이스는 약 20 개의 테이블로 구성됩니다. 일부 쿼리에서 2 개 또는 3 개의 테이블 사이에 hibernate의 조건을 사용하여 조인을 수행합니다.이 조건은 복잡하지 않고 "과부하"로 간주되어서는 안됩니다.

편집 2 : 이 모델은 일종의 UnitOfWorkFactory를 사용하여 저장소 패턴을 구현합니다. 각 요청 (예 : 새 개체 만들기, 기존 개체 편집 또는 검색)에서 모델은 unitOfWork를 만듭니다.이 개체에서는 최대 절전 모드 세션이 만들어지고 작업을 수행 한 다음 세션을 닫습니다.

+0

설명에 Oracle 버전, 플랫폼, 사용중인 JDBC 연결 풀링, 연결 빈도, 완료된 작업 유형, 작은 조회, 장기 실행 작업과 같은 중요한 정보가 부족합니다. –

+0

@ik_zelf 답변 해 주셔서 감사합니다. 게시물에 세부 정보를 추가했습니다. "jdbc 연결 풀링 사용 중"에서 무엇을 의미하는지 말해 줄 수 있습니까? – Pejman

+1

모든 작업이 새 세션을 만들거나 연결 풀에서 세션을 사용할 수 있습니까? (연결은 심각한 성능 저하를 가져오고 가능한 한 막아야합니다.) 청취자는 일반적으로 세션을 만드는 데 도움이됩니다. 해당 세션은 응용 프로그램의 glassfish에서 연결 풀을 정의하여 다시 사용해야합니다. –

답변

1

연결 풀을 사용해야합니다. 이렇게하면 불필요하고 많은 비용이 드는 데이터베이스에 다시 연결되는 것을 방지 할 수 있습니다. 예제 체크 용 here and page down to "First create a JDBC Connection Pool" 데이터베이스에 대한 연결을 생성하는 것은 전체 시스템 성능을 크게 저하시키는 매우 시간 소모적 인 작업입니다. 이는 직렬화 프로세스이기 때문입니다.

연결 풀을 사용하면 리스너 자체가 잠시 작동하지 않아도 응용 프로그램에서 사용할 수있는 세션이 항상 있는지 확인해야합니다.