У меня есть вопрос о контексте конфигурации в Tomcat 8. Я мигрирующий проект от Tomcat 7 до 8 и имеет необычную проблему: если изменить ничего в конфигурации я поймал ошибку:Переход к Tomcat 8: InstanceAlreadyExistsException DataSource
"2015-02-03 12:05:48,310 FIRST_ADMIN ERROR web.context.ContextLoader:331
-> Context initialization failed org.springframework.jmx.export.UnableToRegisterMBeanException:
Unable to register MBean [[email protected]]
with key 'dataSource'; nested exception is
javax.management.InstanceAlreadyExistsException:
Catalina:type=DataSource,host=localhost,context=/first-
admin,class=javax.sql.DataSource,name="jdbc/datasource/first"
Часть контекста:
<Resource name="jdbc/datasource/first"
auth="Container"
type="javax.sql.DataSource"
poolPreparedStatements="true"
initialSize="25"
maxActive="100"
maxIdle="100"
minIdle="25"
username="us"
password="pa"
driverClassName="com.mysql.jdbc.Driver"
validationQuery="select 1"
testOnBorrow="true"
url="jdbc:mysql://localhost:3306/firstproject?useUnicode=true&characterEncoding=UTF-8&profileSQL=false&autoSlowLog=false&slowQueryThresholdMillis=100&autoReconnect=true"/>
Таким образом, это работает в коте 7 без каких-либо проблем. В Tomcat 8 я могу решить эту проблему в 2-мя способами:
- Добавив к ресурсу:
singleton = "false";
- Добавив к ресурсу:
factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
Если я четко понимаю, кот создает источник данных для моего приложения и для jmx, но в Tomcat 7 это был единственный объект, в Tomcat 8 он должен быть другим. Поэтому мой вопрос: почему эта ситуация произошла? Я не мог найти информацию об этом изменении документации. И мне интересно, что лучше: создать одиночный источник данных (я так думаю) или создать несколько по фабрике.
Какие версии tomcat 7 (from) и tomcat 8 (to)? Можете ли вы также добавить свой web.xml? Является ли ваше приложение использующим вышеупомянутое заявление в его собственном файле context.xml (META-INF) - если да, можете ли вы опубликовать это? Btw при использовании ресурса JDBC singleton должен быть «true», – swinkler