Совместное использование ссылки на базу данных между несколькими RemoteServiceServlet в GWT - PullRequest
0 голосов
/ 26 мая 2011

Я работаю над GWT-приложением, которое требует соединения с базой данных MySQL.Я могу сделать это успешно для сервлета.Однако мне требуется несколько «RemoteServiceServlets» для совместного использования одной ссылки Conection, поскольку создание новой каждый раз не имеет смысла.

Как я могу добиться этого?

Ответы [ 2 ]

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

Совместное использование одного соединения JDBC в среде сервлета, к которой обращаются несколько пользователей, может иметь серьезные последствия: http://forums.oracle.com/forums/thread.jspa?threadID=554427

В двух словах: одно соединение представляет одного пользователя СУБД, выполняющего одну серию запросов и / или обновлений, с одной действующей транзакцией в любой момент момент.

Таким образом, в основном в среде сервлетов вы должны использовать пул соединений JDBC, где вы получаете новое соединение из пула повторно используемых соединений, но одно соединение используется только одним сервлетом за раз. Вот пример реализации: http://java.sun.com/developer/onlineTraining/Programming/JDCBook/conpool.html

0 голосов
/ 26 мая 2011

Если вы хотите использовать Spring, я бы предложил попробовать описанный здесь подход http://pgt.de/2009/07/17/non-invasive-gwt-and-spring-integration-reloaded/, который я использовал для некоторых своих проектов в GWT.

Добавьте вашу конфигурацию контекста Spring вваш файл web.xml

<context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>/WEB-INF/application-context.xml</param-value>
</context-param>

<listener>
  <listener-class>org.springframework.web.context.ContextLoaderListener
  </listener-class>
</listener>

Определите ваш источник данных в контекстном файле

<bean id="dataSource" destroy-method="close"
  class="org.apache.commons.dbcp.BasicDataSource">
    <property name="driverClassName" value="${jdbc.driverClassName}" />
    <property name="url" value="${jdbc.url}" />
    <property name="username" value="${jdbc.username}" />
    <property name="password" value="${jdbc.password}" />
</bean>

Расширьте свои сервлеты

public class AutoinjectingRemoteServiceServlet extends RemoteServiceServlet {

@Override
public void init(ServletConfig config) throws ServletException {
    super.init(config);
    WebApplicationContext ctx = WebApplicationContextUtils.getRequiredWebApplicationContext(config.getServletContext());
    AutowireCapableBeanFactory beanFactory = ctx.getAutowireCapableBeanFactory();
    beanFactory.autowireBean(this);
}

}

И затем используйте ваш источник данных в качествефасоль во всех ваших сервлетах

public class MyServiceImpl extends AutoinjectingRemoteServiceServlet implements MyService {

  @Autowired
  private DataSource dataSource;

  ...
...