Prerequisites
- You should have install java 1.8 or above.
- You should have IDE installed in your PC in my case I'm using IntelliJ IDEA.
- Your PC should setup Maven installed and configured.
- Your PC should install and setup SQLServer.
- Checkout base project from JPA project as code base.
Application module Dependency
First Lets add relevant dependencies in to Application POM file. Following is the full feature file content and updated part on bold font. Since we are using ActiveMQ we need to add relevant dependency for that.
<?xml version="1.0" encoding="UTF-8"?>
<features name="osgi-customer-management-${project.version}" xmlns="http://karaf.apache.org/xmlns/features/v1.3.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://karaf.apache.org/xmlns/features/v1.3.0 http://karaf.apache.org/xmlns/features/v1.3.0">
<feature name="osgi-customer-management-datasource" version="${project.version}">
<config name="org.ops4j.datasource-customer-management">
osgi.jdbc.driver.class=com.microsoft.sqlserver.jdbc.SQLServerDriver
osgi.jdbc.driver.name=mssql
databaseName=customer-management
url=jdbc:sqlserver://LAPTOP-E0A1RCAN:1433;databaseName=customer-management
user=nirmal
password=Test123_
dataSourceName=customer-management
org.apache.karaf.features.configKey = org.ops4j.datasource-customer-management
</config>
<capability>osgi.service;javax.persistence.EntityManager;objectClass=javax.sql.DataSource;osgi.jndi.service.name=customer-management</capability><!--;effective:=active-->
</feature>
<feature name="Model" version="${project.version}">
<feature>transaction</feature>
<feature>jndi</feature>
<feature>pax-jdbc-config</feature>
<feature>pax-jdbc-h2</feature>
<feature>pax-jdbc-mssql</feature>
<feature>pax-jdbc-pool-dbcp2</feature>
<feature>jdbc</feature>
<feature>pax-jms-pool</feature>
<feature>pax-jms-config</feature>
<feature>camel-activemq</feature>
<feature>artemis-jms-client</feature>
<feature>pax-jms-artemis</feature>
<feature>camel-blueprint</feature>
<feature>camel-jms</feature>
<feature>camel-activemq</feature>
<feature>pax-jms-activemq</feature>
<feature dependency="true">aries-blueprint</feature>
<feature version="[2,3)">jpa</feature>
<feature version="[5,6)">hibernate</feature>
<bundle>mvn:com.fuse.hibernate.example/Model/${project.version}</bundle>
</feature>
<feature name="Service" version="${project.version}">
<feature version="${project.version}">Model</feature>
<bundle>mvn:com.fuse.hibernate.example/Service/${project.version}</bundle>
<capability>osgi.service;objectClass=javax.persistence.spi.PersistenceProvider;effective:=active;javax.persistence.provider=org.hibernate.jpa.HibernatePersistenceProvider</capability>
</feature>
<feature name="Application" version="${project.version}">
<feature version="${project.version}">Model</feature>
<feature version="${project.version}">Service</feature>
<bundle>mvn:com.fuse.hibernate.example/Application/${project.version}</bundle>
</feature>
</features>
<features name="osgi-customer-management-${project.version}" xmlns="http://karaf.apache.org/xmlns/features/v1.3.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://karaf.apache.org/xmlns/features/v1.3.0 http://karaf.apache.org/xmlns/features/v1.3.0">
<feature name="osgi-customer-management-datasource" version="${project.version}">
<config name="org.ops4j.datasource-customer-management">
osgi.jdbc.driver.class=com.microsoft.sqlserver.jdbc.SQLServerDriver
osgi.jdbc.driver.name=mssql
databaseName=customer-management
url=jdbc:sqlserver://LAPTOP-E0A1RCAN:1433;databaseName=customer-management
user=nirmal
password=Test123_
dataSourceName=customer-management
org.apache.karaf.features.configKey = org.ops4j.datasource-customer-management
</config>
<capability>osgi.service;javax.persistence.EntityManager;objectClass=javax.sql.DataSource;osgi.jndi.service.name=customer-management</capability><!--;effective:=active-->
</feature>
<feature name="Model" version="${project.version}">
<feature>transaction</feature>
<feature>jndi</feature>
<feature>pax-jdbc-config</feature>
<feature>pax-jdbc-h2</feature>
<feature>pax-jdbc-mssql</feature>
<feature>pax-jdbc-pool-dbcp2</feature>
<feature>jdbc</feature>
<feature>pax-jms-pool</feature>
<feature>pax-jms-config</feature>
<feature>camel-activemq</feature>
<feature>artemis-jms-client</feature>
<feature>pax-jms-artemis</feature>
<feature>camel-blueprint</feature>
<feature>camel-jms</feature>
<feature>camel-activemq</feature>
<feature>pax-jms-activemq</feature>
<feature dependency="true">aries-blueprint</feature>
<feature version="[2,3)">jpa</feature>
<feature version="[5,6)">hibernate</feature>
<bundle>mvn:com.fuse.hibernate.example/Model/${project.version}</bundle>
</feature>
<feature name="Service" version="${project.version}">
<feature version="${project.version}">Model</feature>
<bundle>mvn:com.fuse.hibernate.example/Service/${project.version}</bundle>
<capability>osgi.service;objectClass=javax.persistence.spi.PersistenceProvider;effective:=active;javax.persistence.provider=org.hibernate.jpa.HibernatePersistenceProvider</capability>
</feature>
<feature name="Application" version="${project.version}">
<feature version="${project.version}">Model</feature>
<feature version="${project.version}">Service</feature>
<bundle>mvn:com.fuse.hibernate.example/Application/${project.version}</bundle>
</feature>
</features>
Defining the ActiveMQ endpoint in BluePrint
We can add ActiveMQ endpoint in to our BlurPrint.xml file in the Application module. We just need to modify following content which colored in bold.
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" xmlns:jpa="http://aries.apache.org/xmlns/jpa/v2.0.0" xmlns:tx="http://aries.apache.org/xmlns/transactions/v1.2.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 https://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">
<jpa:enable />
<tx:enable-annotations />
<service ref="personService" interface="com.fuse.hibernate.example.service.PersonService" />
<bean id="personService" class="com.fuse.hibernate.example.service.PersonServiceImpl" />
<bean
class="com.fuse.hibernate.example.app.ExchangeProcessor" id="exchangeProcessor">
<property name="personService" ref="personService"/>
</bean>
<bean id="activemq" class="org.apache.activemq.camel.component.ActiveMQComponent">
<property name="brokerURL" value="tcp://localhost:61616"/>
</bean>
<camelContext xmlns="http://camel.apache.org/schema/blueprint"
id="cbr-example-context" >
<route id="cbr-route" >
<from uri="file:work/cbr/input" />
<log message="Sending order ${file:name} to another country" />
<log id="logStatusIncident" message="OrderDetails Call ${body}"/>
<to uri="file:work/cbr/output/others" />
<convertBodyTo type="java.lang.String"/>
<process ref="exchangeProcessor"/>
<log message="${body}" />
</route>
<route id="ACTIVEMQ">
<from uri="activemq:queue:inbound.queue"/>
<process ref="exchangeProcessor"/>
<log message="${body}" />
</route>
</camelContext>
</blueprint>
Explanation of the route "ACTIVEMQ"
It will read messages from "inbound.queue" and then it will pass to the "exchangeProcessor" which have the responsibility of saving the message that passing from the queue.
Installing in to FUSE 7.4
We can use same set of commands except one new dependency addition code. In order to add dependencies first we have to run the fuse.bat file and then go to the console and enter following commands one by one. Only the third command new from previous post.
osgi:install -s mvn:com.microsoft.sqlserver/mssql-jdbc/7.4.1.jre8
osgi:install -s mvn:org.ops4j.pax.jdbc/pax-jdbc-mssql/1.3.5
osgi:install -s mvn:org.apache.cxf/cxf-rt-rs-client/3.0.4.redhat-621084
Then lets install application by entering following commands one by one
feature:repo-add mvn:com.fuse.hibernate.example/Feature/1.0-SNAPSHOT/xml
feature:install osgi-customer-management-datasource
feature:install Model
feature:install Service
feature:install Application
Then after "list" command you should be able to see all the things we installed. Similar to below figure.
After Successful installation LIST command should return something similar to this. |
You can verify by accessing http://localhost:8181/cxf/ link you should be able to see following UI in browser.
http://localhost:8181/cxf/ output once successfully installed the Application |
Now you can click the WADL link and see the defined endpoints in there.
WADL output for defined REST service.
|
If you check the "http://localhost:8181/hawtio/camel/routes" then you should be able to see similar figure to below figure.
hawtio camel routes |
In order to demonstrate this we need to have ActiveMQ server run in our local PC. First lets download it from official web page in following location. Then extract it in to your local PC and then go to apache-activemq-5.15.11\bin\win64 location from extraction parent directory. Then run the activemq.bat to start our ActiveMQ server.
Then you can go to http://localhost:8161/admin/queues.jsp URL and see your available Queues in PC. Since we have note created any you suppose to see similar page as bellow.
Then you can enter "inbound.queue" as Queue Name and then clieck Create button. after it successfully created queue you could be able to see the newly created ActiveMQ queue "inbound.queue" as show in bellow.
Test the functionality
We can test the functionality by sending new message in to "" queue as mentioned follows. First go to ActiveMQ web console(you need to provide login details) Then click on send To link inline with your created queue.
Click Send To link as show on figure |
Then past following structured xml in message box as show in below figure.
<Person> <name>nirmal</name> <city>Seatle</city> <country>USA</country></Person>
Then click on the send button. Now you can check the database and you should be able to see persist person data as show below.
No comments:
Post a Comment