Реализация подключения к сеансу БД с использованием JPA-персистентности в Spring - PullRequest
1 голос
/ 02 мая 2011

Привет всем. Мы разрабатываем приложение в Struts2-Spring-JPA. В этом приложении мы используем sessions.xml и persistence.xml для управления сеансами Oracle DB.() метод, мы инициализируем переменную serverSession.

здесь я прикрепил коды, которые мы используем в проекте.

В конструкторе Impl

serverSession=getSession();

и в методах выполнения процедур

</p> <pre><code> try { createConnection(serverSession); /* call stored procudure */ StoredProcedureCall call = new StoredProcedureCall(); call.setProcedureName("ORACLE_USP"); call.addNamedArgumentValue("ARG1", value); call.addNamedOutputArgument("OUTPUTVAL", "P_OUTPUTVAL", Integer.class); ValueReadQuery query = new ValueReadQuery(); query.setCall(call); actionplanforum_id = (Integer) serverSession.executeQuery(query); } catch (DatabaseException e) { LOGGER.error("DatabaseException" + e); } finally { releaseJTSCon(serverSession); } protected ServerSession getSession() throws Exception { ServerSession sSession = (ServerSession) SessionManager.getManager().getSession("dbsession"); if (!sSession.isConnected()) { sSession.connect(); } return sSession; } public void createConnection(ServerSession sSession) { if (!sSession.isLoggedIn()) { sSession.login(); } } protected void releaseJTSCon(ServerSession sSession) { try { sSession.releaseJTSConnection(); }catch (DatabaseException e) { LOGGER.error("Error in releasing DB connection resources"); }

Является ли это правильным подходом без использования EntityManger, при использовании этого подхода, когда приходит больше трафика?у меня много ораторских соединений, открытых в оракуле (в основном на холостом ходу).

Может ли кто-нибудь помочь в реализации правильного подхода.

1 Ответ

2 голосов
/ 02 мая 2011

Используете ли вы JPA или собственный API?

Чтобы сделать это с JPA, вам просто нужно:

StoredProcedureCall call = ...
Query query = em.unwrap(JpaEntityManager).createQuery(call); // or use getDelegate() if JPA 1.0.
List result = query.getResultList();

Если вы собираетесь использовать собственный API, тогда ваш кодв не правильно.Удалите вызов connect () и вызов releaseJTSConnection (), ни один из них не является API-методом, API-интерфейс определяется в интерфейсах Session, UnitOfWork и Server.Удалите login (), так как возвращение сеанса из SessionManager уже должно быть подключено.Вы должны приобрести и освободить ClientSession от ServerSession для выполнения запроса и, возможно, UnitOfWork, если вы хотите, чтобы запрос был транзакционным.

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