Во-первых, я не уверен, что поведение происходит от Liferay или Tomcat.Liferay/Tomcat «hot-deploy» закрывает соединение JNDI, как я могу держать его открытым?
У меня есть портлет в Liferay, который использует JNDI-соединение и шаблон JDBC, настроенный с использованием Spring (я не использую Liferay service builder или что-либо из Liferay, я просто использую его как контейнер портлета).
Когда я запускаю сервер, соединение JNDI работает (я могу получить данные из базы данных). Когда я «горячо развертываю» свой портлет WAR в liferay, соединение закрывается. Так что, когда я пытаюсь получить доступ к данным, я получаю эту ошибку:
java.sql.SQLException: Data source is closed
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1362)
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044)
конфигурации DataSource (который сканируется с помощью компонента сканирования заявления):
@Bean
public DataSource myDbDataSource() {
String jndiName = "java:comp/env/jdbc/MyDB";
try {
Context jndi = new InitialContext();
DataSource ds = (DataSource) jndi.lookup(jndiName);
return ds;
} catch (NamingException e) {
throw new IllegalStateException(e.getMessage(), e);
}
}
Конфигурация JdbcTemplate (от DAO класс)
private JdbcTemplate jdbcTemplate;
private DataSource myDbDataSource;
@Autowired
public void setDataSource(DataSource myDbDataSource) {
this.jdbcTemplate = new JdbcTemplate(myDbDataSource);
this.myDbDataSource = myDbDataSource;
}
Доступ к данным (из класса DAO):
@Override
public List<MyObject> findAllObjects() {
String sql = "SELECT * FROM objects";
List<MyObject> objects = (List<MyObject>) jdbcTemplate.query(sql,
new BeanPropertyRowMapper<MyObject>(MyObject.class));
return lobjects;
}
Когда я вызываю методы «findAllObjects» с контроллера, это работает до тех пор, пока я не переустановит мой портлет WAR. Тогда, если я использую точку останова внутри метода, я вижу, что соединение закрыто (closed = true).
В любом случае, я могу восстановить соединение?
Это была спасательная жизнь - очень ценится +1 – user2124871