我将超时设置为2秒,但代码运行了一分钟,然后转到@Named("test")
public class Test {
@Inject
@MyModelDB // Qualifier
private EntityManager em = null;
// A simple test of the datamodel...
public Long numberOfProjects() {
if (this.em != null) {
return ((BigDecimal) this.em.createNativeQuery("select count(*) from e_bo_projects").getSingleResult()).longValue();
}
return -1L;
}
}
而不是when others
。
when UTL_HTTP.transer_timeout
为什么没有捕获超时?
答案 0 :(得分:3)
您正在获得连接超时而不是传输超时。它来自BEGIN_REQUEST
,而不是GET_RESPONSE
;它没有转移任何东西,它只是试图打开到远程主机和端口的连接。如果您有一个连接以及请求/响应超过2秒的GET或POST,那么您会看到UTL_HTTP.transfer_timeout
。但是你看到的是传输层问题,而不是HTTP请求问题。
您可以捕获'HTTP失败'部分,但不是特定的TNS超时,因为它由UTL_HTTP处理:
DECLARE
...
http_failure exception;
pragma exception_init(http_failure, -29273);
BEGIN
...
EXCEPTION
WHEN UTL_HTTP.transfer_timeout
THEN
DBMS_OUTPUT.put_line ('Transfer timeout');
WHEN http_failure
THEN
DBMS_OUTPUT.put_line ('HTTP failure - timeout?');
RAISE;
END;
当你看到并查出更具体的错误时,你可以深入了解异常堆栈,但是不清楚你想要对具体原因做什么。大概你真的不想抓住这一切,你只是调试异常,为什么你设置的超时不起作用......
我不知道有什么方法可以改变超时的长度。因为它来自TNS,它看起来应该受sqlnet.outbound_connect_timeout
的影响,但你在sqlnet.ora
中设置了它,并且服务器在这种情况下似乎没有注意到它。它可能使用操作系统默认值。