Mam pytanie odnośnie konfiguracji kontekstu w Tomcat 8. I migrowania projektu z Tomcat 7 do 8 i mają nietypowy problem: jeśli zmiana nic w config złapałem błąd:Migracja do 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"
Część z kontekstu:
<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"/>
Tak, to prace w Tomcat 7 bez żadnego problemu. W Tomcat 8 mogę rozwiązać ten problem na 2 sposoby:
- Dodając do zasobu:
singleton = "false";
- Dodając do zasobu:
factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
Gdybym jasno zrozumieć tomcat tworzy źródło danych dla mojej aplikacji i dla jmx, ale w Tomcat 7 był to pojedynczy obiekt, w Tomcat 8 musi być inny. Moje pytanie brzmi: dlaczego taka sytuacja się wydarzyła? Nie mogłem znaleźć żadnych informacji o tej zmianie w dokumentacji. I jestem interesujący, co jest lepsze: utwórz pojedyncze źródło danych (tak mi się wydaje) lub utwórz kilka fabrycznie.
Jakie są wersje tomcat 7 (z) i tomcat 8 (to)? Czy możesz również dodać swój web.xml? Czy twoja aplikacja używa powyższej deklaracji w swoim pliku context.xml (META-INF) - jeśli tak, możesz to opublikować? Btw przy użyciu zasobu JDBC, singleton musi być "prawdziwy" – swinkler