小编Ala*_*air的帖子

将javamail会话传输保持打开是否可以接受?

我的应用程序需要临时发送电子邮件.我正在使用javamail的getDefaultSession和getTransport来发送消息,并且它都按预期工作.

但是我注意到发送可能需要很长时间 - 每次发送最多7秒.如果我打破了这些步骤,就像这样:

Transport transport = session.getTransport("smtp");
transport.connect();
transport.sendMessage( msg, addresses )
transport.close();
Run Code Online (Sandbox Code Playgroud)

...我可以看到,每次都是几乎所有时间的connect()调用.

我发现的所有例子都是这样做的 - 获得传输,连接,发送,断开连接.但当然,它们都是单拍的例子,或者只需一次通话即可发送大批电子邮件.

我以为我可以让连接保持打开状态,如下所示:

Transport transport = session.getTransport("smtp");
if (!transport.isConnected())
    transport.connect();
transport.sendMessage( msg, addresses )
Run Code Online (Sandbox Code Playgroud)

(这里有一个变种,这里:java邮件保持传输对象连接).

我最终必须在某种关闭钩子中关闭它.而且我可能必须有一个后备(如果连接丢失但传输没有实现).但有没有理由不在应用程序生命周期内将其保持开放状态?

谢谢,阿拉斯泰尔

java jakarta-mail

16
推荐指数
1
解决办法
9957
查看次数

JPA Pessimistic Lock尝试永远不会超时

我试图在JPA中使用Pessimistic锁定,而在Postgres数据库中使用Hibernate 3.我无法锁定超时 - 它似乎永远挂起.

这是一个例子:

EntityManagerFactory factory; 

// (initialise the factory )

EntityManager em1 = factory.createEntityManager();
EntityManager em2 = factory.createEntityManager();

// em1 gets a lock

EntityTransaction transaction1 = em1.getTransaction();
transaction1.begin();
MyObject object1 = em1.find( MyObject.class, 1, LockModeType.PESSIMISTIC_READ );

// em2 tries for a lock

Map<String,Object> timeoutProperties = new HashMap<String,Object>();
timeoutProperties.put("javax.persistence.lock.timeout", 5000);

EntityTransaction transaction2 = em2.getTransaction();
transaction2.begin();
MyObject object2 = em2.find( MyObject.class, 1, LockModeType.PESSIMISTIC_READ, timeoutProperties );

// After five seconds I expect em2 to bail out, but it never does.

transaction1.rollback(); …
Run Code Online (Sandbox Code Playgroud)

postgresql hibernate jpa pessimistic-locking

6
推荐指数
1
解决办法
8033
查看次数