Я хочу работать с 2+ bean-компонентами с доступом к базе данных, но у меня проблемы с доступом к той же базе данных.
Мое первое соединение работает нормально, я получаю результаты, которые хочу.
@DataSourceDefinition(
name = "java:global/***/***",
className = "org.apache.derby.jdbc.ClientDataSource",
url = "jdbc:derby://localhost:1527/***",
databaseName = "***",
user = "***",
password = "***"
)
@Named(value = "userRepo")
@SessionScoped
public class UserRepo implements Serializable {
@Resource(lookup = "java:global/***/***")
DataSource dataSource;
public boolean validate() throws SQLException {
ResultSet rs = null;
if (dataSource == null) {
throw new SQLException("Unable to obtain DataSource");
}
Connection connection = dataSource.getConnection();
if (connection == null) {
throw new SQLException("Unable to connect to DataSource");
}
try {
PreparedStatement ps = connection.prepareStatement("select
email, password from customer " + "where email=? and
password=?");
ps.setString(1, getEmail());
ps.setString(2, getPassword());
rs = ps.executeQuery();
while (rs.next()) {
tempEmail = rs.getString("email");
tempPassword = rs.getString("password");
}
} // end try
finally {
connection.close();
}
}
Когда я пытаюсь использовать это для другого компонента с тем же методом, он не возвращает желаемых результатов (даже с точно таким же запросом)
@DataSourceDefinition(
name = "java:global/***/***",
className = "org.apache.derby.jdbc.ClientDataSource",
url = "jdbc:derby://localhost:1527/***",
databaseName = "***",
user = "***",
password = "***"
)
@Named(value = "customer")
@SessionScoped
public class Customer implements Serializable {
@Resource(lookup = "java:global/***/***")
DataSource dataSource;
...
...
}
Я пытался: удалить закрытие соединения, добавить бин UserRepo с @Inject
и использовать его источник данных с userRepo.dataSource
, но не повезло.
Полагаю, я могу создавать все запросы в bean-компоненте "UserRepo", но это кажется ужасно плохой практикой кодирования, и с бог-классами трудно работать.
Есть ли какой-нибудь способ, которым я могу работать с этими двумя отдельными бобами? Инъекция не будет проблемой.