camel jms not getting messages from IBM MQ - apache-camel

I have several camel microservices deployed to tomcat as individual war files. Each war file contains a unique camel route. One of the services accepts soap requests and puts a message onto a queue on IBM MQ. This works without a problem. The services which get these messages don't appear to pull the messages off the queue and forward them on. Each war file has the following as its IBM MQ configuration
<!-- Configure IBM MQ connection factory -->
<bean id="ibmMqConnectionFactory" class="com.ibm.mq.jms.MQConnectionFactory">
<property name="transportType" value="1"/>
<property name="hostName" value="${ibm.mq.host}"/>
<property name="port" value="${ibm.mq.port}"/>
<property name="channel" value="${ibm.mq.channel}"/>
<property name="queueManager" value="${ibm.qm.name}"/>
</bean>
<bean id="ibmMqPooledConnectionFactory" class="org.apache.activemq.jms.pool.PooledConnectionFactory" init-method="start" destroy-method="stop">
<property name="connectionFactory" ref="ibmMqConnectionFactory"/>
<property name="maxConnections" value="8"/>
<property name="maximumActiveSessionPerConnection" value="1"/>
<property name="expiryTimeout" value="30000"/>
<property name="idleTimeout" value="30000"/>
<property name="blockIfSessionPoolIsFull" value="false"/>
</bean>
<bean id="ibmMqConnectionFactorySecured" class="org.springframework.jms.connection.UserCredentialsConnectionFactoryAdapter">
<property name="targetConnectionFactory" ref="ibmMqPooledConnectionFactory"/>
<property name="username" value="${ibm.mq.username}"/>
<property name="password" value="${ibm.mq.password}"/>
</bean>
<bean id="ibmMqTransactionManager" class="org.springframework.jms.connection.JmsTransactionManager">
<property name="connectionFactory" ref="ibmMqConnectionFactorySecured" />
</bean>
<bean id="ibmMqJmsConfig" class="org.apache.camel.component.jms.JmsConfiguration">
<property name="connectionFactory" ref="ibmMqConnectionFactorySecured"/>
<property name="concurrentConsumers" value="4"/>
<property name="transacted" value="true"/>
<property name="transactionManager" ref="ibmMqTransactionManager" />
<property name="cacheLevelName" value="CACHE_NONE" />
</bean>
<bean id="ibmMq" class="org.apache.camel.component.jms.JmsComponent">
<property name="configuration" ref="ibmMqJmsConfig"/>
</bean>
An example of one of the camel routes which pulls a message of a queue looks like
<route id="cancellation-service-route" errorHandlerRef="deadLetterErrorHandler">
<from uri="{{cancellationService.queue}}"/>
<unmarshal ref="requestCancellationRequest"/>
<to uri="bean:cancellationTranslator?method=transform"/>
...
</route>
The route starts but does not pull messages off the queue.

I resolved the truncation issue by doing <convertBodyTo type="String" /> before sending the message to the queue. I suspect it is because the message is an UTF-8 ecoded xml message.

Related

PooledConnectionFactory - The session has already been closed

I face an exception and see the following getting logged when using the org.apache.activemq.pool.PooledConnectionFactory for producing messages to an AMQ Queue -
Caused by: java.lang.IllegalStateException: The session has already been closed
at org.apache.activemq.jms.pool.PooledSession.safeGetSessionHolder(PooledSession.java:482) ~[activemq-jms-pool-5.14.3.jar:5.14.3]
at org.apache.activemq.jms.pool.PooledSession.getInternalSession(PooledSession.java:382) ~[activemq-jms-pool-5.14.3.jar:5.14.3]
at org.apache.activemq.jms.pool.PooledSession.createQueue(PooledSession.java:197) ~[activemq-jms-pool-5.14.3.jar:5.14.3]
It also shows up as :
Caused by: javax.jms.IllegalStateException: The Session is closed
at org.apache.activemq.ActiveMQSession.checkClosed(ActiveMQSession.java:771) ~[activemq-client-5.14.3.jar:5.14.3]
at org.apache.activemq.ActiveMQSession.createQueue(ActiveMQSession.java:1329) ~[activemq-client-5.14.3.jar:5.14.3]
at org.apache.activemq.jms.pool.PooledSession.createQueue(PooledSession.java:197) ~[activemq-jms-pool-5.14.3.jar:5.14.3]
A few points to note:
The parameter timeBetweenExpirationCheckMillis was added recently to the bean and the exceptions started showing up only after this change.
My code uses the same connection pool for all consumers and producers.
For AMQ interactions, I also use concurrent consumers in several places.
The beans for the connection and the pool are as follows:
<bean id="jmsPooledConnectionFactory" class="org.apache.activemq.pool.PooledConnectionFactory" init-method="start" destroy-method="stop" >
<property name="maxConnections" value="40" />
<property name="connectionFactory" ref="smiConnectionFactory" />
<property name="timeBetweenExpirationCheckMillis" value="300000" />
</bean>
<bean id="smiConnectionFactory" class="org.apache.activemq.ActiveMQSslConnectionFactory">
<property name="brokerURL" value="<ssl_protocol_broker>" />
<property name="userName" value="***********" />
<property name="password" value="***********" />
<property name="trustStore" value="************"/>
<property name="trustStorePassword" value="***********" />
<property name="keyStore" value="***********"/>
<property name="keyStorePassword" value="***********" />
<property name="optimizeAcknowledge" value="true" />
<property name="dispatchAsync" value="true" />
<property name="alwaysSessionAsync" value="true" />
<property name="useAsyncSend" value="true" />
<property name="watchTopicAdvisories" value="false" />
<property name="prefetchPolicy" ref="prefetchPolicy" />
</bean>
<bean id="prefetchPolicy" class="org.apache.activemq.ActiveMQPrefetchPolicy">
<property name="durableTopicPrefetch" value="2000" />
<property name="topicPrefetch" value="32766" />
<property name="queuePrefetch" value="0" />
</bean>
**UPDATE 1:**
Active MQ version : 5.14.5

Spring batch, unable to write on oracle database

this is my xml file configuration.
<batch:job id="pdgRecallJob">
<batch:step id="stepTmpRecall">
<batch:tasklet>
<batch:chunk reader="readFileRecall" processor="" writer="tmpRecallWriter" commit-interval="10000">
</batch:chunk>
</batch:tasklet>
</batch:step>
</batch:job>
<bean id="tmpRecall" class="it.mef.pdg.batch.model.TmpRecall" scope="prototype" />
<bean id="readFileRecall" class="org.springframework.batch.item.file.FlatFileItemReader">
<property name="strict" value="false" />
<property name="resource" value="classpath:/properties/RECALLPDG_*.txt"/>
<property name="lineMapper">
<bean class="org.springframework.batch.item.file.mapping.DefaultLineMapper">
<property name="lineTokenizer">
<bean class="org.springframework.batch.item.file.transform.DelimitedLineTokenizer">
<property name="delimiter" value=";"/>
<property name="names" value="appNomeFile, appCodFisc, appRata, appImporto, appIscrizione, appNumTitolo,
appProgQuota, appAnnoEmissione, appCodEnte, appEsitoMef, appStatoFile, appDpt, appPostazione, appNLotto,
appDLotto, appNomeFileOrigine" />
</bean>
</property>
<property name="fieldSetMapper">
<bean class="org.springframework.batch.item.file.mapping.BeanWrapperFieldSetMapper">
<property name="prototypeBeanName" value="tmpRecall" />
</bean>
</property>
</bean>
</property>
</bean>
<bean id="tmpRecallWriter" class="org.springframework.batch.item.database.JdbcBatchItemWriter">
<property name="dataSource" ref="dataSource" />
<property name="sql">
<value>
<![CDATA[
INSERT INTO APP_TMP_RECALL(APP_NOME_FILE,APP_COD_FISC,APP_RATA,APP_IMPORTO,APP_ISCRIZIONE,APP_NUM_TITOLO,APP_PROGR_QUOTA,APP_ANNO_EMISSIONE,APP_COD_ENTE,APP_ESITO_MEF,APP_STATO_FILE,APP_DPT,APP_POSTAZIONE,APP_NLOTTO,APP_DLOTTO,APP_NOME_FILE_ORIGINE)
VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)
]]>
</value>
</property>
<property name="itemPreparedStatementSetter">
<bean class="it.mef.pdg.batch.items.TmpRecallPreparedStatementSetter" />
</property>
</bean>
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource" />
</bean>
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="oracle.jdbc.OracleDriver" />
<property name="url" value="${db.url}" />
<property name="username" value="${db.user}" />
<property name="password" value="${db.pass}" />
</bean>
Then my itemPreparedStatementSetter Class:
final class TmpRecallPreparedStatementSetter implements ItemPreparedStatementSetter<TmpRecall>{
public void setValues(TmpRecall tmp, PreparedStatement ps) throws SQLException {
ps.setString(1, tmp.getAppNomeFile());
ps.setString(2, tmp.getAppCodFisc());
ps.setInt(3, tmp.getAppRata());
ps.setDouble(4, tmp.getAppImporto());
ps.setString(5, tmp.getAppIscrizione());
ps.setInt(6, tmp.getAppNumTitolo());
ps.setString(7, tmp.getAppProgQuota());
ps.setInt(8, tmp.getAppAnnoEmissione());
ps.setString(9, tmp.getAppCodEnte());
ps.setString(10, tmp.getAppEsitoMef());
ps.setString(11, tmp.getAppStatoFile());
ps.setString(12, tmp.getAppDpt());
ps.setInt(13, tmp.getAppPostazione());
ps.setInt(14, tmp.getAppNLotto());
ps.setDate(15, tmp.getAppDLotto());
ps.setInt(16, tmp.getAppNLotto());
}
}
My batch seems to work then I have final status COMPLETED, but it doesn't write no record inside my table.
I'm using jdk 1.5, ojdbc5-11.2.0.3.jar.
Either is there something I'm missing in my xml conf or any bean is not ok?
I was thinking that might be even a mismatch in Date field in table.
You don't currently have an item processor, which (I think) is needed to pass records from the reader to the writer. Since you are not doing any processing (that is, your reader produces the same type that your writer consumes), I think you could use a PassThroughItemProcessor here.

How to use Camel to get message from remote WMQ and place message in ActiveMQ?

I have been looking at these for days and still haven't have mush success.
I have install and run activeMQ on a server. Created a queue called "testUpdate". I also have another queue on another server, let call this "forward" and this is on the IBM MQ (WMQ).
So we have testUpdate on ActiveMQ and forward on WMQ. I want the message on forward queue to be placed into testUpdate queue. Trying to use Camel for this process.
So the setup in ActiveMQ has an XML(activemq.xml) that I can place spring beans and configure to do the routing. In this xml, I added http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd to the xmlns and then added
import resource="camel.xml"
In this new xml, I have the following:
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">
<route>
<description>Example Camel Route</description>
<from uri="mqseries:forward"/>
<to uri="activemq:testUpdate"/>
</route>
</camelContext>
<bean id="mqseries" class="com.ibm.mq.jms.MQQueueConnectionFactory">
<property name="transportType" value="1"/>
<property name="hostName" value="172.00.12.21/>
<property name="port" value="xyza"/>
<property name="queueManager" value="manager"/>
<property name="channel" value="srvcChannel"/>
</bean>
<!--
Lets configure some Camel endpoints
http://camel.apache.org/components.html
-->
<!-- configure the camel activemq component to use the current broker -->
<bean id="activemq" class="org.apache.activemq.camel.component.ActiveMQComponent" >
<property name="connectionFactory">
<bean class="org.apache.activemq.ActiveMQConnectionFactory">
<property name="brokerURL" value="vm://amq-broker?create=false"/>
<property name="userName" value="${activemq.username}"/>
<property name="password" value="${activemq.password}"/>
</bean>
</property>
</bean>
</beans>
I added the jar file com.ibm.mq.allclient.jar into the lib folder of ActiveMQ. When running the program, I am getting this exception:
java.lang.ClassNotFoundException: javax.jms.JMSRuntimeException
It sounds like I am missing the websphere jar file? Is this correct?
I use both IBM MQ and ActiveMQ on a regular basis. This example below will show you some sample configuration options. Please make sure you configure these to your own use cases.
//ActiveMQ connection factory
<bean id="activemq" class="org.apache.activemq.camel.component.ActiveMQComponent" destroy-method="doStop">
<property name="configuration">
<bean class="org.apache.camel.component.jms.JmsConfiguration">
<property name="concurrentConsumers" value="1" />
<property name="maxConcurrentConsumers" value="1" />
<property name="acceptMessagesWhileStopping" value="true" />
<property name="acknowledgementModeName" value="CLIENT_ACKNOWLEDGE" />
<property name="cacheLevelName" value="CACHE_CONSUMER" />
<property name="connectionFactory">
<bean class="org.apache.activemq.pool.PooledConnectionFactory" init-method="start" destroy-method="stop">
<property name="maxConnections" value="1" />
<property name="MaximumActiveSessionPerConnection" value="500" />
<property name="connectionFactory">
<bean class="org.apache.activemq.ActiveMQConnectionFactory">
<property name="brokerURL" value="${activemq1.brokerUrl}" />
<property name="userName" value="${activemq1.username}" />
<property name="password" value="${activemq1.password}" />
<property name="redeliveryPolicy">
<bean class="org.apache.activemq.RedeliveryPolicy">
<property name="maximumRedeliveries" value="-1" />
</bean>
</property>
</bean>
</property>
</bean>
</property>
</bean>
</property>
</bean>
//IBM MQ connection factory
<bean id="ibmmq" class="org.apache.camel.component.jms.JmsComponent" destroy-method="doStop">
<property name="concurrentConsumers" value="1" />
<property name="maxConcurrentConsumers" value="1" />
<property name="connectionFactory">
<bean class="org.springframework.jms.connection.SingleConnectionFactory" destroy-method="destroy">
<constructor-arg>
<bean class="com.ibm.mq.jms.MQQueueConnectionFactory">
<property name="transportType" value="1" />
<property name="channel" value="${channel}" />
<property name="hostName" value="${hostname}" />
<property name="port" value="${port}" />
<property name="queueManager" value="${queueManager}" />
</bean>
</constructor-arg>
</bean>
</property>
</bean>
You can use jms component to consume the message from IBM MQ and use activemq component to post it to ActiveMQ
have a look at the following links
http://camel.apache.org/jms.html
http://camel.apache.org/activemq.html
Thanks,
Gibu
You can use users camel extra component https://github.com/camel-extra/camel-extra/blob/master/components/camel-wmq/README.md to get messages from wmq without using the JMS wrapping and then send messages to ActiveMQ with custom camel component https://camel.apache.org/components/latest/activemq-component.html. See also a similar topic Apache Camel with IBM MQ.

Hazelcast Blueprint Camel Karaf

I am new to hazelcast and trying to implement hazelcast using blueprint and karaf.
I am stuck at the first step in creating the instance although it working for me using just spring.
When I run the bundle on karaf, it times out.
Please ignore typo error in bean class name except the hazelcast ones as I changed the name for security purpose.
Here is my bluprint
<?xml version="1.0" encoding="UTF-8"?>
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:cm="http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.0.0"
xmlns:ext="http://aries.apache.org/blueprint/xmlns/blueprint-ext/v1.0.0"
xmlns:camel="http://camel.apache.org/schema/blueprint" xmlns:hz="http://www.hazelcast.com/schema/spring"
xsi:schemaLocation="
http://www.osgi.org/xmlns/blueprint/v1.0.0 http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd
http://camel.apache.org/schema/blueprint http://camel.apache.org/schema/blueprint/camel-blueprint.xsd
http://www.hazelcast.com/schema/spring http://www.hazelcast.com/schema/spring/hazelcast-spring-3.5.xsd
">
<bean id="loaderCacheManager" class="com.LoaderCacheManagerImpl">
<property name="template" ref="producerTemplate" />
</bean>
<bean id="mconStatusMessage" class="com.impl.MCONStatusMessageImpl" />
<bean id="headerLookupResponseAggregator"
class="com.aggregator.HeaderLookupResponseAggregator" />
<bean id="headerLookupRequestProcessor" depends-on="producerTemplate"
class="com.processor.HeaderLookupRequestProcessor">
<property name="loaderCacheManager" ref="loaderCacheManager" />
<property name="assetObjidSQL" value="${lookup.asset_objid}" />
<property name="wlanConfigSQL" value="${lookup.wlan_config}" />
<property name="tlserrWpaEaptlsCodeSQL" value="${lookup.tlserr_wpa_eaptls_code}" />
<property name="currentDateSQL" value="${lookup.CurrentDate}" />
<property name="hdrObjidSQL" value="${lookup.HdrObjid}" />
<property name="deviceIdSQL" value="${device.lookup}" />
</bean>
<bean id="headerLookupResponseProcessor" depends-on="producerTemplate"
class="com.processor.HeaderLookupResponseProcessor">
<property name="loaderCacheManager" ref="loaderCacheManager" />
</bean>
<bean id="mconReferenceLookupProcessor"
class="com.processor.MCONReferenceLookupProcessor">
<property name="mconLookupQuerySQL" value="${MCON_LOOKUP_QUERY}" />
</bean>
<bean id="mconInsertDetailParamProcessor"
class="com.processor.MCONInsertDetailParamProcessor">
<property name="mconInsertQuery" value="${MCON_INSERT_QUERY}" />
</bean>
<bean id="rowCountAggregator"
class="com.aggregator.RowCountAggregator" />
<bean id="headerInsertSQLProcessor"
class="com.eaderInsertSQLProcessor">
<property name="headerInsertSQL" value="${Loader.InsertHeader}" />
</bean>
<bean id="postLoadSQLProcessor"
class="com.ostLoadSQLProcessor">
<property name="updateMCSAssetSQL" value="${PostLoader.updateCMUStatus}" />
</bean>
<bean id="hazelCacheDao" class="com.cache.ResetVehicleInitial" />
<hz:hazelcast id="instance">
<hz:config>
<hz:network port="5701" port-auto-increment="false">
<hz:join>
<hz:multicast enabled="false" />
</hz:join>
</hz:network>
<hz:map name="rmdMap" read-backup-data="true">
<hz:map-store enabled="true" write-delay-seconds="3"
initial-mode="EAGER" implementation="hazelCacheDao" />
</hz:map>
</hz:config>
</hz:hazelcast>
</blueprint>
Below is my referred maploader class. For now I am return null in all the methods for testing purpose.
public class ResetVehicleInitial implements MapLoader<String, String>{
private static final String DIRECT_LOAD_RESET_VEHICLE_INITIAL="direct:loadResetVehicleInitial";
#EndpointInject(uri=DIRECT_LOAD_RESET_VEHICLE_INITIAL)
private ProducerTemplate loadResetVehicleInitial;
#Override
public String load(String arg0) {
// TODO Auto-generated method stub
return null;
}
#Override
public Map<String, String> loadAll(Collection<String> vehicleintial) {
// TODO Auto-generated method stub
System.out.println("hello");
List loadValues = loadResetVehicleInitial.requestBody(DIRECT_LOAD_RESET_VEHICLE_INITIAL, vehicleintial, List.class);
System.out.println(loadValues);
return null;
}
#Override
public Iterable<String> loadAllKeys() {
// TODO Auto-generated method stub
return null;
}
}
After suggestion from Jereme, I modified my xml according to java class:
<?xml version="1.0" encoding="UTF-8"?>
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:cm="http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.0.0"
xmlns:ext="http://aries.apache.org/blueprint/xmlns/blueprint-ext/v1.0.0"
xmlns:camel="http://camel.apache.org/schema/blueprint" xmlns:hz="http://www.hazelcast.com/schema/spring"
xsi:schemaLocation="
http://www.osgi.org/xmlns/blueprint/v1.0.0 http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd
http://camel.apache.org/schema/blueprint http://camel.apache.org/schema/blueprint/camel-blueprint.xsd
http://www.hazelcast.com/schema/spring http://www.hazelcast.com/schema/spring/hazelcast-spring-3.5.xsd
">
<bean id="loaderCacheManager" class="com.LoaderCacheManagerImpl">
<property name="template" ref="producerTemplate" />
</bean>
<bean id="mconStatusMessage" class="com.impl.MCONStatusMessageImpl" />
<bean id="headerLookupResponseAggregator"
class="com.aggregator.HeaderLookupResponseAggregator" />
<bean id="headerLookupRequestProcessor" depends-on="producerTemplate"
class="com.processor.HeaderLookupRequestProcessor">
<property name="loaderCacheManager" ref="loaderCacheManager" />
<property name="assetObjidSQL" value="${lookup.asset_objid}" />
<property name="wlanConfigSQL" value="${lookup.wlan_config}" />
<property name="tlserrWpaEaptlsCodeSQL" value="${lookup.tlserr_wpa_eaptls_code}" />
<property name="currentDateSQL" value="${lookup.CurrentDate}" />
<property name="hdrObjidSQL" value="${lookup.HdrObjid}" />
<property name="deviceIdSQL" value="${device.lookup}" />
</bean>
<bean id="headerLookupResponseProcessor" depends-on="producerTemplate"
class="com.processor.HeaderLookupResponseProcessor">
<property name="loaderCacheManager" ref="loaderCacheManager" />
</bean>
<bean id="mconReferenceLookupProcessor"
class="com.processor.MCONReferenceLookupProcessor">
<property name="mconLookupQuerySQL" value="${MCON_LOOKUP_QUERY}" />
</bean>
<bean id="mconInsertDetailParamProcessor"
class="com.processor.MCONInsertDetailParamProcessor">
<property name="mconInsertQuery" value="${MCON_INSERT_QUERY}" />
</bean>
<bean id="rowCountAggregator"
class="com.aggregator.RowCountAggregator" />
<bean id="headerInsertSQLProcessor"
class="com.eaderInsertSQLProcessor">
<property name="headerInsertSQL" value="${Loader.InsertHeader}" />
</bean>
<bean id="postLoadSQLProcessor"
class="com.ostLoadSQLProcessor">
<property name="updateMCSAssetSQL" value="${PostLoader.updateCMUStatus}" />
</bean>
<bean id="hazelCacheDao" class="com.ge.trans.loader.qnx.cache.ResetVehicleInitial"/>
<bean id="instance" class="com.hazelcast.core.Hazelcast"
factory-method="newHazelcastInstance">
<constructor-arg>
<bean class="com.hazelcast.config.Config">
<property name="groupConfig">
<bean class="com.hazelcast.config.GroupConfig">
<property name="name" value="local" />
<property name="password" value="local" />
</bean>
</property>
<property name="networkConfig">
<bean class="com.hazelcast.config.NetworkConfig">
<property name="port" value="7001" />
<property name="portAutoIncrement" value="true" />
<property name="join">
<bean class="com.hazelcast.config.JoinConfig">
<property name="multicastConfig">
<bean class="com.hazelcast.config.MulticastConfig">
<property name="enabled" value="false" />
</bean>
</property>
<property name="tcpIpConfig">
<bean class="com.hazelcast.config.TcpIpConfig">
<property name="enabled" value="true" />
<property name="members" value="3.192.20.22, 3.192.18.110" />
</bean>
</property>
</bean>
</property>
</bean>
</property>
<property name="mapConfigs">
<map>
<entry key="dataSyncDetails">
<bean class="com.hazelcast.config.MapConfig">
<property name="name" value="rmdMap" />
<property name="backupCount" value="2" />
<property name="timeToLiveSeconds" value="0" />
<property name="evictionPolicy" value="LRU" />
<property name="maxIdleSeconds" value="0" />
<property name="evictionPercentage" value="25" />
<property name="maxSizeConfig">
<bean class="com.hazelcast.config.MaxSizeConfig">
<property name="size" value="10000"></property>
<property name="maxSizePolicy" value="USED_HEAP_PERCENTAGE"></property>
</bean>
</property>
<property name="mapStoreConfig">
<bean class="com.hazelcast.config.MapStoreConfig">
<property name="enabled" value="true"></property>
<property name="writeDelaySeconds" value="0"></property>
<property name="implementation" ref="hazelCacheDao" />
<property name="initialLoadMode" value="EAGER"></property>
</bean>
</property>
</bean>
</entry>
</map>
</property>
</bean>
</constructor-arg>
</bean>
</blueprint>
But getting the following error now:
org.osgi.service.blueprint.container.ComponentDefinitionException: Unable to validate xml
at org.apache.aries.blueprint.parser.Parser.validate(Parser.java:288)[9:org.apache.aries.blueprint.core:1.0.1.redhat-610379]
at org.apache.aries.blueprint.container.BlueprintContainerImpl.doRun(BlueprintContainerImpl.java:317)[9:org.apache.aries.blueprint.core:1.0.1.redhat-610379]
at org.apache.aries.blueprint.container.BlueprintContainerImpl.run(BlueprintContainerImpl.java:261)[9:org.apache.aries.blueprint.core:1.0.1.redhat-610379]
at org.apache.aries.blueprint.container.BlueprintExtender.createContainer(BlueprintExtender.java:270)[9:org.apache.aries.blueprint.core:1.0.1.redhat-610379]
at org.apache.aries.blueprint.container.BlueprintExtender.modifiedBundle(BlueprintExtender.java:233)[9:org.apache.aries.blueprint.core:1.0.1.redhat-610379]
at org.apache.aries.util.tracker.hook.BundleHookBundleTracker$Tracked.customizerModified(BundleHookBundleTracker.java:500)[11:org.apache.aries.util:1.0.1.redhat-610379]
at org.apache.aries.util.tracker.hook.BundleHookBundleTracker$Tracked.customizerModified(BundleHookBundleTracker.java:433)[11:org.apache.aries.util:1.0.1.redhat-610379]
at org.apache.aries.util.tracker.hook.BundleHookBundleTracker$AbstractTracked.track(BundleHookBundleTracker.java:725)[11:org.apache.aries.util:1.0.1.redhat-610379]
at org.apache.aries.util.tracker.hook.BundleHookBundleTracker$Tracked.bundleChanged(BundleHookBundleTracker.java:463)[11:org.apache.aries.util:1.0.1.redhat-610379]
at org.apache.aries.util.tracker.hook.BundleHookBundleTracker$BundleEventHook.event(BundleHookBundleTracker.java:422)[11:org.apache.aries.util:1.0.1.redhat-610379]
at org.apache.felix.framework.util.SecureAction.invokeBundleEventHook(SecureAction.java:1103)[org.apache.felix.framework-4.0.3.redhat-610379.jar:]
at org.apache.felix.framework.util.EventDispatcher.createWhitelistFromHooks(EventDispatcher.java:696)[org.apache.felix.framework-4.0.3.redhat-610379.jar:]
at org.apache.felix.framework.util.EventDispatcher.fireBundleEvent(EventDispatcher.java:484)[org.apache.felix.framework-4.0.3.redhat-610379.jar:]
at org.apache.felix.framework.Felix.fireBundleEvent(Felix.java:4650)[org.apache.felix.framework-4.0.3.redhat-610379.jar:]
at org.apache.felix.framework.Felix$4.run(Felix.java:2123)[org.apache.felix.framework-4.0.3.redhat-610379.jar:]
at org.apache.felix.framework.Felix.runInContext(Felix.java:2147)[org.apache.felix.framework-4.0.3.redhat-610379.jar:]
at org.apache.felix.framework.Felix.startBundle(Felix.java:2121)[org.apache.felix.framework-4.0.3.redhat-610379.jar:]
at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:955)[org.apache.felix.framework-4.0.3.redhat-610379.jar:]
at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:942)[org.apache.felix.framework-4.0.3.redhat-610379.jar:]
at org.apache.karaf.features.internal.FeaturesServiceImpl.installFeatures(FeaturesServiceImpl.java:474)[22:org.apache.karaf.features.core:2.3.0.redhat-610379]
at org.apache.karaf.features.internal.FeaturesServiceImpl.installFeature(FeaturesServiceImpl.java:404)[22:org.apache.karaf.features.core:2.3.0.redhat-610379]
at org.apache.karaf.features.internal.FeaturesServiceImpl.installFeature(FeaturesServiceImpl.java:400)[22:org.apache.karaf.features.core:2.3.0.redhat-610379]
at org.apache.karaf.features.command.InstallFeatureCommand.doExecute(InstallFeatureCommand.java:62)[26:org.apache.karaf.features.command:2.3.0.redhat-610379]
at org.apache.karaf.features.command.FeaturesCommandSupport.doExecute(FeaturesCommandSupport.java:41)[26:org.apache.karaf.features.command:2.3.0.redhat-610379]
at org.apache.karaf.shell.console.OsgiCommandSupport.execute(OsgiCommandSupport.java:39)[17:org.apache.karaf.shell.console:2.3.0.redhat-610379]
at org.apache.felix.gogo.commands.basic.AbstractCommand.execute(AbstractCommand.java:35)[17:org.apache.karaf.shell.console:2.3.0.redhat-610379]
at org.apache.felix.gogo.runtime.CommandProxy.execute(CommandProxy.java:78)[15:org.apache.felix.gogo.runtime:0.11.0.redhat-610379]
at org.apache.felix.gogo.runtime.Closure.executeCmd(Closure.java:477)[15:org.apache.felix.gogo.runtime:0.11.0.redhat-610379]
at org.apache.felix.gogo.runtime.Closure.executeStatement(Closure.java:403)[15:org.apache.felix.gogo.runtime:0.11.0.redhat-610379]
at org.apache.felix.gogo.runtime.Pipe.run(Pipe.java:108)[15:org.apache.felix.gogo.runtime:0.11.0.redhat-610379]
at org.apache.felix.gogo.runtime.Closure.execute(Closure.java:183)[15:org.apache.felix.gogo.runtime:0.11.0.redhat-610379]
at org.apache.felix.gogo.runtime.Closure.execute(Closure.java:120)[15:org.apache.felix.gogo.runtime:0.11.0.redhat-610379]
at org.apache.felix.gogo.runtime.CommandSessionImpl.execute(CommandSessionImpl.java:89)[15:org.apache.felix.gogo.runtime:0.11.0.redhat-610379]
at org.apache.karaf.shell.console.jline.Console.run(Console.java:189)[17:org.apache.karaf.shell.console:2.3.0.redhat-610379]
at org.apache.karaf.shell.console.jline.DelayedStarted.run(DelayedStarted.java:61)[17:org.apache.karaf.shell.console:2.3.0.redhat-610379]
Caused by: org.xml.sax.SAXParseException: cvc-complex-type.2.4.a: Invalid content was found starting with element 'constructor-arg'. One of '{"http://www.osgi.org/xmlns/blueprint/v1.0.0":description, "http://www.osgi.org/xmlns/blueprint/v1.0.0":argument, "http://www.osgi.org/xmlns/blueprint/v1.0.0":property, WC[##other:"http://www.osgi.org/xmlns/blueprint/v1.0.0"]}' is expected.
at org.apache.xerces.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source)[:]
at org.apache.xerces.util.ErrorHandlerWrapper.error(Unknown Source)[:]
at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)[:]
at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)[:]
at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)[:]
at org.apache.xerces.impl.xs.XMLSchemaValidator$XSIErrorReporter.reportError(Unknown Source)[:]
at org.apache.xerces.impl.xs.XMLSchemaValidator.reportSchemaError(Unknown Source)[:]
at org.apache.xerces.impl.xs.XMLSchemaValidator.handleStartElement(Unknown Source)[:]
at org.apache.xerces.impl.xs.XMLSchemaValidator.startElement(Unknown Source)[:]
at org.apache.xerces.jaxp.validation.DOMValidatorHelper.beginNode(Unknown Source)[:]
at org.apache.xerces.jaxp.validation.DOMValidatorHelper.validate(Unknown Source)[:]
at org.apache.xerces.jaxp.validation.DOMValidatorHelper.validate(Unknown Source)[:]
at org.apache.xerces.jaxp.validation.ValidatorImpl.validate(Unknown Source)[:]
at javax.xml.validation.Validator.validate(Unknown Source)[:2.3.0.redhat-610379]
at org.apache.aries.blueprint.parser.Parser.validate(Parser.java:285)[9:org.apache.aries.blueprint.core:1.0.1.redhat-610379]
... 34 more
You can't mix "spring namespaces" in a blueprint configuration, at least with the current version of aries (which, apparently, you are using)
You should create an HazelcastInstance in a java class, without the help of the 'hz' namespace.
Moreover :
Gemini blueprint, another implementation of blueprint, support the
use of spring namespace in a blueprint file
Spring DM, (which is now obsolete but still work with spring <= 3..), can either support the use of spring namespace, in a spring configuration in META-INF/spring
I have seen an experimental support of spring namespace in aries blueprint, but i have never tryied it personnally, it's a work-in-progress (i haven't seen any "official communication" about this feature)

Spring + Hibernate + Spring

I've a project of Spring and Hibernate, but that use a lot of conections to my database (MYSQL). I know that I should implement a C3P0 to manage Pool conection but i dont know how?. Plase take me a help.
Hibernate's config:
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost/oasis"/>
<property name="username" value="root"/>
<property name="password" value="mysql"/>
</bean>
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="packagesToScan">
<list>
<value>com.app.oasis.model.base</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
</bean>
<tx:annotation-driven/>
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
Where do I have to add the C3P0 config?
Add the C3P0 jar file (download from c3p0 website or use maven) to your classpath and create your dataSource using com.mchange.v2.c3p0.ComboPooledDataSource
<bean id="dataSource"
class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass" value="com.mysql.jdbc.Driver"/>
<property name="jdbcUrl" value="jdbc:mysql://localhost/oasis"/>
<property name="user" value="root"/>
<property name="password" value="mysql"/>
<!-- Various configuration properties can be set here -->
</bean>

Resources