How to connect apache ignite node by static ip address - java

I have got a hetzner server with config:
<bean id="ignite-configuration" class="org.apache.ignite.IgniteSpringBean">
<property name="configuration">
<bean class="org.apache.ignite.configuration.IgniteConfiguration">
<property name="peerClassLoadingEnabled" value="true"/>
<property name="igniteInstanceName" value="statistic-server"/>
<property name="discoverySpi">
<bean class="org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi">
<property name="ipFinder">
<bean class="org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder">
<property name="addresses">
<list>
<value>127.0.0.1:47500..47509</value>
</list>
</property>
</bean>
</property>
</bean>
</property>
</bean>
</property>
</bean>
I want to connect my Laptop to server like a server node. On my laptop I have next config:
<property name="discoverySpi">
<bean class="org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi">
<property name="ipFinder">
<bean class="org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder">
<property name="addresses">
<list>
<value>hetzner_ip_address:47500..47509</value>
</list>
</property>
</bean>
</property>
<property name="addressResolver">
<bean class="org.apache.ignite.configuration.BasicAddressResolver">
<constructor-arg>
<map>
<entry key="192.168.1.10" value="laptop_static_ip_address"/>
</map>
</constructor-arg>
</bean>
</property>
</bean>
</property>
Can I connect servers behind NAT by static ip address and how can I do this?

It's not very clear weather you have a client or server node behind NAT, but actually in Ignite a server node can sometimes establish connection with a client node, so you need to make sure that connections are allowed in both directions.
In case of NAT this means that in addition to AddressResolver you need to configure port forwarding on the router, or use SSH tunnel.

Related

Could not open JDBC Connection for transaction

I would like to report a configuration problem that seems strange to me.
Here's the application context configuration file I'm using
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">
<context:annotation-config/>
<bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:jdbc.properties</value>
</list>
</property>
</bean>
<bean id="processingStratagyContainer" class="ru.rt.mnp.translator.converter.process.ProcessingStratagyContainer">
<property name="fileProcessingStratagyMap">
<map>
<entry key="Port_Increment" value-ref="portIncrementProcessingStratagy"/>
<entry key="Return_Increment" value-ref="returnIncrementProcessingStratagy"/>
<entry key="Port_All" value-ref="portAllProcessingStratagy"/>
</map>
</property>
</bean>
<!--�������� ������������������ ������������������ ������������-->
<bean id="portIncrementProcessingStratagy"
class="ru.rt.mnp.translator.converter.process.PortIncrementProcessingStratagy">
<property name="rowSizeColumnPosition" value="11"/>
<property name="columnBindings">
<map>
<!--first has index 0-->
<entry key="1" value="number[java.lang.String]"/>
<entry key="5" value="old_route[java.lang.String]"/>
<entry key="6" value="new_route[java.lang.String]"/>
<entry key="9" value="region_code[java.lang.String]"/>
<entry key="10" value="port_date[java.util.Date]{yyyy-MM-dd'T'HH:mm:ssXXX}"/>
</map>
</property>
</bean>
<bean id="returnIncrementProcessingStratagy"
class="ru.rt.mnp.translator.converter.process.ReturnIncrementProcessingStratagy">
<property name="rowSizeColumnPosition" value="9"/>
<property name="columnBindings">
<map>
<!--first has index 0-->
<entry key="1" value="number[java.lang.String]"/>
<entry key="5" value="old_route[java.lang.String]"/>
<entry key="6" value="new_route[java.lang.String]"/>
<entry key="7" value="region_code[java.lang.String]"/>
<entry key="8" value="port_date[java.util.Date]{yyyy-MM-dd'T'HH:mm:ssXXX}"/>
</map>
</property>
</bean>
<bean id="portAllProcessingStratagy"
class="ru.rt.mnp.translator.converter.process.PortAllProcessingStratagy">
<property name="rowSizeColumnPosition" value="6"/>
<property name="columnBindings">
<map>
<!--first has index 0-->
<entry key="0" value="number[java.lang.String]"/>
<entry key="3" value="new_route[java.lang.String]"/>
<entry key="4" value="region_code[java.lang.String]"/>
<entry key="5" value="port_date[java.util.Date]{yyyy-MM-dd'T'HH:mm:ssXXX}"/>
</map>
</property>
</bean>
<bean id="postProcessingStratagyContainer" class="ru.rt.mnp.translator.converter.postprocess.PostProcessingStratagyContainer">
<property name="postProcessingStratagableMap">
<map>
<entry key="Port_Increment" value-ref="mnpTrfPartPostProcessingStratagy"/>
<entry key="Return_Increment" value-ref="mnpTrfPartPostProcessingStratagy"/>
<entry key="Port_All" value-ref="mnpTrfFullPostProcessingStratagy"/>
<entry key="IncrementCounter" value-ref="incrementCounterPostProcessingStratagy"/>
<entry key="HistoryRequestFull" value-ref="historyRequestFullPostProcessingStratagy"/>
<entry key="HistoryRequestPart" value-ref="historyRequestPartPostProcessingStratagy"/>
</map>
</property>
</bean>
<bean id="mnpTrfPartPostProcessingStratagy"
class="ru.rt.mnp.translator.converter.postprocess.MnpTrfPartPostProcessingStratagy" >
<property name="placeInPostProcessingChain" value="1"/>
</bean>
<bean id="mnpTrfFullPostProcessingStratagy"
class="ru.rt.mnp.translator.converter.postprocess.MnpTrfFullPostProcessingStratagy" >
<property name="placeInPostProcessingChain" value="2"/>
</bean>
<bean id="incrementCounterPostProcessingStratagy"
class="ru.rt.mnp.translator.converter.postprocess.IncrementCounterPostProcessingStratagy" >
<property name="placeInPostProcessingChain" value="9"/>
</bean>
<bean id="historyRequestFullPostProcessingStratagy"
class="ru.rt.mnp.translator.converter.postprocess.HistoryRequestFullPostProcessingStratagy" >
<property name="placeInPostProcessingChain" value="4"/>
</bean>
<bean id="historyRequestPartPostProcessingStratagy"
class="ru.rt.mnp.translator.converter.postprocess.HistoryRequestPartPostProcessingStratagy">
<property name="placeInPostProcessingChain" value="3"/>
</bean>
<bean id="convertTask" class="ru.rt.mnp.translator.converter.job.ConvertTask"/>
<bean id="testTask" class="ru.rt.mnp.translator.converter.job.TestTask"/>
<bean id="historyRequestTask" class="ru.rt.mnp.translator.converter.job.HistoryRequestTask"/>
**<bean id="dataSource" class="org.springframework.jdbc.datasource.SingleConnectionDataSource">
<property name="driverClassName" value="org.postgresql.Driver"/>
<property name="url" value="${url}"/>
<property name="username" value="****"/>
<property name="password" value="****"/>
</bean>**
<tx:annotation-driven transaction-manager="transactionManager"/>
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<bean id="mnpHistoryDao" class="ru.rt.mnp.translator.converter.storage.MnpHistoryDao">
<property name="jdbcTemplate" ref="jdbcTemplate"/>
</bean>
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<constructor-arg name="dataSource" ref="dataSource"/>
</bean>
<!-- specifing class and method that is going to be called on a specified
time basis -->
<bean id="convertJob"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="convertTask"/>
<property name="targetMethod" value="execute"/>
</bean>
<bean id="convertTestJob"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="testTask"/>
<property name="targetMethod" value="execute"/>
</bean>
<bean id="historyRequestJob"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="historyRequestTask"/>
<property name="targetMethod" value="execute"/>
</bean>
<!-- simple trigger specify repeat interval and delay time -->
<bean id="cronTrigger"
class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail" ref="convertJob"/>
<!--<property name="cronExpression" value="0 5 0,2,4,6,8,10,12,14,16,18,20,22 ? * *"/>-->
<property name="cronExpression" value="0 15,45 * ? * *"/>
<property name="startDelay" value="1000"/>
</bean>
<bean id="cronTestTrigger"
class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail" ref="convertTestJob"/>
<property name="cronExpression" value="0 0/10 * ? * *"/>
<property name="startDelay" value="1000"/>
</bean>
<bean id="cronHistoryRequestTrigger"
class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail" ref="historyRequestJob"/>
<property name="cronExpression" value="0/10 * * ? * *"/>
<property name="startDelay" value="1000"/>
</bean>
<!-- scheduler factory bean to bind,the executing code and time intervals
together -->
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="configLocation" value="classpath:quartz.properties"/>
<property name="jobDetails">
<list>
<ref bean="convertJob"/>
<ref bean="convertTestJob"/>
<ref bean="historyRequestJob"/>
</list>
</property>
<property name="triggers">
<list>
<ref bean="cronTrigger"/>
<ref bean="cronTestTrigger"/>
<ref bean="cronHistoryRequestTrigger"/>
</list>
</property>
</bean>
But when run the converting action, i have this error:
Problems with processing file /***.zip
org.springframework.transaction.CannotCreateTransactionException:
Could not open JDBC Connection for transaction; nested exception is
java.sql.SQLException: Connection was closed in
SingleConnectionDataSource. Check that user code checks shouldClose()
before closing Connections, or set 'suppressClose' to 'true'
at org.springframework.jdbc.datasource.DataSourceTransactionManager.doBegin(DataSourceTransactionManager.java:241)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:372)
at org.springframework.transaction.interceptor.TransactionAspectSupport.createTransactionIfNecessary(TransactionAspectSupport.java:417)
at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:255)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:94)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
at com.sun.proxy.$Proxy5.processFile(Unknown Source)
at ru.rt.mnp.translator.converter.job.ConvertTask.execute(ConvertTask.java:69)
at sun.reflect.GeneratedMethodAccessor12.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at org.springframework.util.MethodInvoker.invoke(MethodInvoker.java:273)
at org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean$MethodInvokingJob.executeInternal(MethodInvokingJobDetailFactoryBean.java:311)
at org.springframework.scheduling.quartz.QuartzJobBean.execute(QuartzJobBean.java:113)
at org.quartz.core.JobRunShell.run(JobRunShell.java:207)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:560)
Caused by: java.sql.SQLException: Connection was closed in
SingleConnectionDataSource. Check that user code checks shouldClose()
before closing Connections, or set 'suppressClose' to 'true'
at org.springframework.jdbc.datasource.SingleConnectionDataSource.getConnection(SingleConnectionDataSource.java:189)
at org.springframework.jdbc.datasource.DataSourceTransactionManager.doBegin(DataSourceTransactionManager.java:203)
Can anyone explain me what is the problem ?
What should i do to fix this?
Thank you!
I had to use SingleConnectionDataSource in a web application using SpringBoot. We were also using an ORM package for all db transactions and I had this same issue even with suppressClose configured to true. It works fine during the first login, but when the connection is left idle for a long time, then the below error occurs.
The error was
java.sql.SQLException: Connection was closed in SingleConnectionDataSource. Check that user code checks shouldClose() before closing Connections, or set 'suppressClose' to 'true'
at org.springframework.jdbc.datasource.SingleConnectionDataSource.getConnection(SingleConnectionDataSource.java:167)
Finally configuring the data source as a session scoped object resolved it. It was a singleton before, re-configuring it to session scope resolved the issue.
<bean id="dataSource" class="org.springframework.jdbc.datasource.SingleConnectionDataSource" scope="session">

Apache Ignite nodes fail: Failed to read magic header

Apache Ignite servers deployed on two machines automatically shut down. No concrete clue in logs. I am able to see following warning message in log file :
[00:35:14,047][WARNING][tcp-disco-sock-reader-#86379%null%][TcpDiscoverySpi] Failed to read magic header (too few bytes received) [rmtAddr=/10.96.36.48:47830, locAddr=/10.96.36.48:47500]
How can i debug and solve this issue ?
Configuration:
<bean id="grid.cfg" class="org.apache.ignite.configuration.IgniteConfiguration">
<property name="peerClassLoadingEnabled" value="true"/>
<property name="cacheConfiguration">
<list>
<bean class="org.apache.ignite.configuration.CacheConfiguration">
<property name="name" value="xyxCache" />
<property name="writeSynchronizationMode" value="FULL_SYNC" />
<property name="cacheMode" value="REPLICATED" />
<property name="rebalanceMode" value="SYNC" />
<property name="readFromBackup" value="true" />
<property name="startSize" value="150000" />
<property name="evictionPolicy">
<bean class="org.apache.ignite.cache.eviction.lru.LruEvictionPolicy">
<property name="maxSize" value="1000000" />
</bean>
</property>
</bean>
</list>
</property>
<property name="discoverySpi">
<bean class="org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi">
<property name="ipFinder">
<bean class="org.apache.ignite.spi.discovery.tcp.ipfinder.multicast.TcpDiscoveryMulticastIpFinder">
<property name="addresses">
<list>
<value>10.96.36.48:47500</value>
<value>10.96.36.214:47500</value>
</list>
</property>
</bean>
</property>
</bean>
</property>
</bean>
Check which process on 10.96.36.48 machine binded to port 47830.
For example, netstat -lnp will list the pid and process name next to each listening port. This will work under Linux.
This usually happens if some other application like telnet connects to the port.
Please share your configuration and setup details, without which it is not possible to answer any further.

Can't retrieve data when using IP address as URL for my web app

I have a working web application built using the following technologies:
Spring MVC, Java, Hibernate, Oracle Database.
It works fine when I use http://localhost:8080/WebAppName. However, when I use http://:8080/WebAppName, it cannot pull any data. Logs show that there no attempt at all to access the database server.
I tried changing the config of the server.xml in tomcat (as I have found in several questions similar to my problem), such as adding useIPVHosts="true", resolveHosts="true", address="0.0.0.0". All didn't work.
Perhaps there are other configuration files that I need to check/change. Any suggestions will be greatly appreciated. Thanks in advance.
Below is my hibernate configuration:
<bean id="dataSourceDEV1" class="org.apache.commons.dbcp2.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
<property name="url" value="jdbc:oracle:thin:#//rac-hr-qa:20001/WBD1" />
<property name="username" value="workbrain" />
<property name="password" value="xxxxxxxxxx" />
</bean>
<bean id="sessionFactoryDEV1"
class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSourceDEV1" />
<property name="configLocation"
value="classpath:/com/safeway/web/resources/dev1-hibernate.cfg.xml" />
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.Oracle9Dialect</prop>
<prop key="hibernate.id.new_generator_mappings">false</prop>
</props>
</property>
<property name="packagesToScan">
<list>
<value>com.safeway.web.dao</value>
</list>
</property>
</bean>
<bean id="transactionManagerDEV1"
class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactoryDEV1" />
</bean>
<hibernate-configuration>
<session-factory>
<property name="hbm2ddl.auto">validate</property>
<property name="dialect">org.hibernate.dialect.Oracle9Dialect</property>
<property name="show_sql">true</property>
<property name="connection.pool_size">5</property>
<property name="temp.use_jdbc_metadata_defaults">false</property>
<property name="hibernate.jdbc.use_get_generated_keys">true</property>
<mapping class="com.safeway.model.CalculationGroup"></mapping>
<mapping class="com.safeway.model.CalcGroupVesrion"></mapping>
<mapping class="com.safeway.model.CalcGroupHistory"></mapping>
</session-factory>
</hibernate-configuration>
You need to use an ip address with the port.
http://:8080/WebAppName
should be
http://127.0.0.1:8080/WebAppName
for the IP address of localhost.

Issue with CachingConnectionFactory and DefaultMessageListenerContainer

It is mentioned in the documentation of DefaultMessageListenerContainer class that it is not recommended to use CachingConnectionFactory with dynamic scaling. While searching, I have encountered following link:
Why DefaultMessageListenerContainer should not use CachingConnectionFactory?
Here found a comment from Gary Russell that
the problem is with caching consumers when using variable concurrency in the container; we can end up with a live consumer "stuck" in the cache".
We have used DefaultMessageListenerContainer and CachingConnectionFactory together so this is surely a problem from above link.
We are encountering problems with our application having following behaviour:
TCP ZeroWindow network congestion
TCP RESET from application server to MQ
DB connection grows during the issue while different transactions halt
Messages in certain queues gets built up
We have following code configuration :
In ibmmq-context.xml file:
<!-- WebSphere MQ Connection Factory -->
<bean id="appMqConnectionFactory" class="com.ibm.mq.jms.MQConnectionFactory">
<property name="hostName">
<value>${ibmmq.ip}</value>
</property>
<property name="port">
<value>${ibmmq.port}</value>
</property>
<property name="queueManager">
<value>${ibmmq.queuemanager}</value>
</property>
<property name="channel">
<value>${ibmmq.channel}</value>
</property>
<property name="clientReconnectOptions">
<util:constant static-field="com.ibm.msg.client.wmq.WMQConstants.WMQ_CLIENT_RECONNECT"/>
</property>
<property name="transportType" ref="appTransport"/>
</bean>
<!-- A cached connection -->
<bean id="appCachedConnectionFactory" class="org.springframework.jms.connection.CachingConnectionFactory">
<property name="targetConnectionFactory" ref="appMqConnectionFactory"/>
<property name="sessionCacheSize" value="${jms.session.cachesize}"/>
</bean>
<!-- Use native MQ classes. -->
<bean id="appTransport" class="org.springframework.beans.factory.config.FieldRetrievingFactoryBean">
<property name="staticField">
<value>com.ibm.mq.jms.JMSC.MQJMS_TP_CLIENT_MQ_TCPIP</value>
</property>
</bean>
In jms-context file:
<bean id="bankListener" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
<property name="connectionFactory" ref="cachedConnectionFactory" />
<property name="destination" ref="transactionResponseDestination" />
<property name="messageListener" ref="thirdpartyService" />
<property name="autoStartup" value="false"/>
<property name="taskExecutor" ref="listenerExecutor"/>
<property name="concurrency" value="20-30"/>
</bean>
There are 6 such listeners like bankListener and each of the listeners has concurrency value, varies from 10-40
<bean id="listenerExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
<property name="maxPoolSize" value="140"/>
<property name="corePoolSize" value="100"/>
<property name="queueCapacity" value="30"/>
<property name="threadNamePrefix" value="jms-listener-task-"/>
<property name="threadGroupName" value="jms-listener-tasks"/>
</bean>
and jms-context.xml file uses ibmmq-context.xml file.
And to note, we have used IBM MQ 7.1, Spring 4.2.8, spring-integration-core as 4.3.1.RELEASE and JBoss EAP 6.4.10
We are planning to fix this by following way:
<bean id="bankListener" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
<property name="connectionFactory" ref="appMqConnectionFactory" />
<property name="destination" ref="transactionResponseDestination" />
<property name="messageListener" ref="thirdpartyService" />
<property name="autoStartup" value="false"/>
<property name="taskExecutor" ref="listenerExecutor"/>
<property name="concurrency" value="20-30"/>
</bean>
My request:
Please review the configuration and let me know is there anything else to be changed.
Could you please also explain our application behaviour(above 4 points - a to d) with our current configuration with CachingConnectionFactory and DefaultMessageListenerContainer
Thanks in advance for your help.
Try setting:
cachingConnectionFactory.setCacheConsumers(false);
Or in Spring it should be:
<bean id="appCachedConnectionFactory" class="org.springframework.jms.connection.CachingConnectionFactory">
...
<property name="cacheConsumers" value="false"/>
...
</bean>

Spring Routing-source and connection pooling

I am using spring Routing data source as explained here and things works well. Now, I want to add connection pooling (Apache DBCP). I changed the basic data source to the connection pool data source. well, It does not work.
On the server start-up I see that connection pooling is happening and I can debug Apache's code, but then, when I am trying to access the DB through my code, I go to the routing data source, and from there to the DriverManager class to get a connection - completely ignoring Apache's code.
<bean id="catalogDataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="${jdbc.driverClass}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.user}" />
<property name="password" value="${jdbc.pwd}" />
</bean>
<bean id="pool" class="org.apache.commons.pool.impl.GenericObjectPool">
<property name="minEvictableIdleTimeMillis"><value>300000</value></property>
<property name="timeBetweenEvictionRunsMillis"><value>60000</value></property>
</bean>
<bean id="dsConnectionFactory" class="org.apache.commons.dbcp.DataSourceConnectionFactory">
<constructor-arg><ref bean="catalogDataSource"/></constructor-arg>
</bean>
<bean id="poolableConnectionFactory" class="org.apache.commons.dbcp.PoolableConnectionFactory">
<constructor-arg index="0"><ref bean="dsConnectionFactory"/></constructor-arg>
<constructor-arg index="1"><ref bean="pool"/></constructor-arg>
<constructor-arg index="2"><null/></constructor-arg>
<constructor-arg index="3"><null/></constructor-arg>
<constructor-arg index="4"><value>false</value></constructor-arg>
<constructor-arg index="5"><value>true</value></constructor-arg>
</bean>
<bean id="pooledDS" class="org.apache.commons.dbcp.PoolingDataSource" depends-on="poolableConnectionFactory">
<constructor-arg><ref bean="pool"/></constructor-arg>
</bean>
<bean id="routingDataSource" class="something that derived from RoutingDataSource">
<property name="defaultTargetDataSource" ref="pooledDS"/>
<property name="targetDataSources">
<map key-type="java.lang.Integer">
</map>
</property>
</bean>
Can you help me please - what did I do wrong?

Categories