Jdbc повторно использует источник данных в другом бине с JSF - PullRequest
0 голосов
/ 13 мая 2018

Я хочу работать с 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", но это кажется ужасно плохой практикой кодирования, и с бог-классами трудно работать.

Есть ли какой-нибудь способ, которым я могу работать с этими двумя отдельными бобами? Инъекция не будет проблемой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...