값 비싼 처리를 수행하고 클라이언트에게 미래를 반환하는 비동기 메서드가 포함 된 상태 비 저장 EJB-3.1 세션 Bean을 사용하므로 준비가 완료되면 처리 결과를 표시 할 수 있습니다. :@Asynchronous 메서드 결과를 기다리는 JBoss 6 소켓 제한 시간
@Asynchronous
@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
public Future<String> importModules() {
String result = doSomeHeavyStuff();
return new AsyncResult<String>(result);
}
이 빈은 보스 6 인스턴스에서 실행하고 스윙 클라이언트에서 원격 호출 : 처리가 일반적으로 성공적으로 완료하는 동안
final Future<String> termination =
Proxy.getProxy().getMenfpImportService().importModules();
SwingWorker<String, Object> worker = new SwingWorker<String, Object>() {
@Override
protected String doInBackground() {
/* ... */
if (termination.isDone()) {
return termination.get();
}
/* ... */
}
/* ... */
}
, 어떤 계산을 완료하는 데 이상 300 초 정도 걸릴.
10:26:16,301 INFO Application:1150 - Execution exception during modules import:
java.util.concurrent.ExecutionException: org.jboss.remoting.InvocationFailureException: Socket timed out. Waited 300000 milliseconds for response while calling on InvokerLocator [socket://degotte:3873/?timeout=300000]; nested exception is:
java.net.SocketTimeoutException: Read timed out
at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:222)
at java.util.concurrent.FutureTask.get(FutureTask.java:83)
at org.jboss.ejb3.async.spi.AsynchronousClientFuture.get(AsynchronousClientFuture.java:113)
at org.jboss.ejb3.async.impl.util.concurrent.LocalJvmSerializableFutureWrapper.get(LocalJvmSerializableFutureWrapper.java:161)
at lu.lippmann.forminitiale.client.gui.Application$2.doInBackground(Application.java:1137)
at lu.lippmann.forminitiale.client.gui.Application$2.doInBackground(Application.java:1)
at javax.swing.SwingWorker$1.call(SwingWorker.java:277)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at javax.swing.SwingWorker.run(SwingWorker.java:316)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)
불행하게도, @Asynchronous 주석이 어떤 정보를 제공하지 않습니다 이러한 계산에
는 JBoss의 소켓 타임 아웃 termination.get()를 호출 할 때 계산 결과 대신 ExecutionException를받을 클라이언트의 원인 구성 옵션.제 질문은 클라이언트 서버 통신 소켓 시간 초과를 늘릴 수있는 방법과 비동기 메서드 호출 중에 설정된 연결에 대해서만 가능한 경우에 관한 질문입니다.
덕분에, Nayan Wadekar에 의해 게시 토마스
JBoss 소켓 시간 초과 구성에 대해서는 http://docs.jboss.org/jbossremoting/docs/guide/2.5/html/chapter-configuration.html을 참조하십시오. –
감사합니다. 이미 도움이되었습니다. 적어도 그것은 위의 예제에서 ExecutionExceptions를 제거하는 소켓 타임 아웃을 전체적으로 증가시킬 수 있습니다. – tzangerl