<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-8621947959552664387</id><updated>2026-08-21T12:58:17.924+02:00</updated><title type='text'>Mighty Middleware</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://saumajitdas.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8621947959552664387/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://saumajitdas.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>- Saumajit (http://saumajitdas.blogspot.com/)</name><uri>http://www.blogger.com/profile/07382150935096179034</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6qi93v-aNPC1o6Z0ZTap6RPlGjui-v_puEhrzcE118t-WxhhHjrLm9tiSnO2IbY7AOVmBarqN1K47wbUamo6vDj4CVXXYeCX-R1oDmJ4J2C5US5OYeqWenP2aQ5h5Ew/s113/Capture.PNG'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>15</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8621947959552664387.post-5434023104467969249</id><published>2020-02-12T04:15:00.000+01:00</published><updated>2020-02-12T06:33:44.793+01:00</updated><title type='text'>Cloud vs. Cloud Native</title><content type='html'>&lt;h3&gt;
&lt;span style=&quot;color: #202261; font-family: &amp;quot;arial&amp;quot; , sans-serif;&quot;&gt;Introduction&lt;/span&gt;&lt;/h3&gt;
&lt;span style=&quot;color: #202261; font-family: &amp;quot;arial&amp;quot; , sans-serif;&quot;&gt;These days everyone is moving “On cloud”. Having many cloud vendors with lucrative offers of TCO reduction, does deploying your application in cloud makes you cloud-ready?&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #202261; font-family: &amp;quot;arial&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #202261; font-family: &amp;quot;arial&amp;quot; , sans-serif;&quot;&gt;“Cloud Native” is more than just moving part or all of your applications to a cloud vendor. This requires a completely different approach towards application architecture, application development, team alignment, infrastructure etc. etc. Let’s take a deep dive to understand what actually “Cloud Native Architecture” means and why it is important.&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #202261; font-family: &amp;quot;arial&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;color: #202261; font-family: &amp;quot;arial&amp;quot; , sans-serif;&quot;&gt;By definition: “Cloud Native” is an approach for architecture, development and deployment of applications; which takes the characteristics and nature of the cloud into account - resulting in processes and workflows that fully take advantage of the platform.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #202261; font-family: &amp;quot;arial&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;color: #202261; font-family: &amp;quot;arial&amp;quot; , sans-serif;&quot;&gt;So what does fully taking advantage of the cloud means?&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #202261; font-family: &amp;quot;arial&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;h3&gt;
&lt;span style=&quot;color: #202261; font-family: &amp;quot;arial&amp;quot; , sans-serif;&quot;&gt;Cloud Brings Microservice&lt;/span&gt;&lt;/h3&gt;
&lt;span style=&quot;color: #202261; font-family: &amp;quot;arial&amp;quot; , sans-serif;&quot;&gt;Traditional on-premise infrastructure used to be a centralized system. To all intents and purposes, everything was in one place. However, in cloud servers, databases etc. are distributed. In this context, if you simply migrate your existing application from traditional on-premise server to the cloud, it won’t give you much ROI from your migration. It will be simply as equal to as changing your hardware on-premise (or may be worse in sense they are no longer one centralized system any more).This is because applications those were hosted on on-premise servers were built as monoliths. Applications were including every feature and service that was meant to make them a single, big lump of code. Current day, with microservice architecture, applications are being built as a collection of distributed services, which compliments the distributed nature of the cloud perfectly. This approach gives individual microservices the advantage to automate in all possible ways to maximize the efficiency and minimize the cost &amp;amp; effort:&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #202261; font-family: &amp;quot;arial&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;color: #202261; font-family: &amp;quot;arial&amp;quot; , sans-serif;&quot;&gt;·&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;b&gt;Auto Provisioning&lt;/b&gt;: Automatically provisioning environments as code&lt;/span&gt;&lt;br /&gt;

&lt;span style=&quot;color: #202261; font-family: &amp;quot;arial&amp;quot; , sans-serif;&quot;&gt;·&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;b&gt;Auto Scaling&lt;/b&gt;: Tracking utilization of various modules/services within your application and scale up/down resources automatically whenever &amp;amp; wherever required&lt;/span&gt;&lt;br /&gt;

&lt;span style=&quot;color: #202261; font-family: &amp;quot;arial&amp;quot; , sans-serif;&quot;&gt;·&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;b&gt;Auto Redundancy&lt;/b&gt;: Cloud Native applications are resilient to failure, by nature. In the event of a service degradation, application instances move to another server or data center&amp;nbsp;automatically and seamlessly.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #202261; font-family: &amp;quot;arial&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;color: #202261; font-family: &amp;quot;arial&amp;quot; , sans-serif;&quot;&gt;So, Cloud with microservices provide more granular means of deploying resources required for maintaining performance &amp;amp; reliability (SLA). While it’s possible to just migrate your existing monolith application with its legacy codebase to a cloud platform, however you won’t be able to get any of the benefits of being truly “Cloud Native”.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #202261; font-family: &amp;quot;arial&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;h3&gt;
&lt;span style=&quot;color: #202261; font-family: &amp;quot;arial&amp;quot; , sans-serif;&quot;&gt;Microservices Brings Containers&lt;/span&gt;&lt;/h3&gt;
&lt;span style=&quot;color: #202261; font-family: &amp;quot;arial&amp;quot; , sans-serif;&quot;&gt;The main driving factor for the rise of underlying container ecosystem (e.g. Docker, CoreOS rkt, Mesos, LXC etc.) is the microservices architecture. Managing your applications as a collection of individual (micro) services has implications on infrastructure. Since every service in a microservices application needs to be a self-contained unit, they need their own allocation of computing, memory, and network resources. From a cost and management point of view, it is not feasible to multiply 10 or 100 times the number of VMs to host individual (micro) services of your application&amp;nbsp;as you move to the cloud. This is where containers come into the existence. Containers lightweight, standalone, executable package of software that includes everything (in right amount) needed to run an application: code, runtime, system tools, system libraries and settings. They make great alternative to VMs for packaging microservices, enabling the benefits mentioned above.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #202261; font-family: &amp;quot;arial&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;h3&gt;
&lt;span style=&quot;color: #202261; font-family: &amp;quot;arial&amp;quot; , sans-serif;&quot;&gt;Container Brings Service Mesh Capabilities&lt;/span&gt;&lt;/h3&gt;
&lt;span style=&quot;color: #202261; font-family: &amp;quot;arial&amp;quot; , sans-serif;&quot;&gt;With introduction of microservice and container; services have become more agile and location transparent. So the “Cloud Native” architecture demands more mesh or collaboration capabilities from services.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #202261; font-family: &amp;quot;arial&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;color: #202261; font-family: &amp;quot;arial&amp;quot; , sans-serif;&quot;&gt;Let’s imagine that you are running an application that invokes other services or within your Cloud Native application different modules / (micro) services interacting with each other over a REST API or Thrift API. In order to make a request, your consumer needs to know the location of the provider service instance. In a traditional application running on a few hardware servers in a data center, the service locations are relatively static. For example, your code can read the network locations from a configuration file that is occasionally updated. In a modern, “Cloud Native” Microservice driven application, where main ideology is to run anywhere transparently, this is a much more difficult problem to solve. Because Service instances have dynamically assigned network locations. Moreover, the set of service instances changes dynamically for Auto Scaling, failures, and upgrades. Consequently, your client code needs to use a more elaborate service discovery mechanism.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #202261; font-family: &amp;quot;arial&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;color: #202261; font-family: &amp;quot;arial&amp;quot; , sans-serif;&quot;&gt;This bring the considerations to re imagine&amp;nbsp;the dynamic discovery patterns (e.g. Client‑Side Discovery Pattern, Server‑Side Discovery Pattern etc.), Service registry, Circuit breakers, API Gateway etc.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #202261; font-family: &amp;quot;arial&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;color: #202261; font-family: &amp;quot;arial&amp;quot; , sans-serif;&quot;&gt;There are bunch of open source projects that help to design better mesh or collaboration capabilities for services. E.g.&amp;nbsp;Zuul, Eureka, Hystrix, Ribbon, Gravitee&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #202261; font-family: &amp;quot;arial&amp;quot; , sans-serif;&quot;&gt;&lt;span style=&quot;color: #202261; font-family: &amp;quot;arial&amp;quot; , sans-serif;&quot;&gt;etc.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #202261; font-family: &amp;quot;arial&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;h3&gt;
&lt;span style=&quot;color: #202261; font-family: &amp;quot;arial&amp;quot; , sans-serif;&quot;&gt;Cloud, Microservice, Containers, Service Mesh together Brings “Cloud Native” Tools&lt;/span&gt;&lt;/h3&gt;
&lt;span style=&quot;color: #202261; font-family: &amp;quot;arial&amp;quot; , sans-serif;&quot;&gt;The fundamental change in infrastructure with introduction of cloud demands a change in tools as well. Legacy tools those were built to manage tasks across a few hardware servers in a data center, can no longer sustain the complexity of microservices running in containers across the cloud. While cutting across a distributed containerized microservice based application, simple things like latency optimization, RCA of the backend, E2E monitoring etc can be complex. The resource consumption of each microservice needs to be metered to ensure degrading SLA for one service don’t affect others.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #202261; font-family: &amp;quot;arial&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;color: #202261; font-family: &amp;quot;arial&amp;quot; , sans-serif;&quot;&gt;There are bunch of open source projects that help run microservice applications. E.g.&amp;nbsp;Kubernetes, Containerd, Fluentd, Prometheus, Envoyproxy, CoreDNS, Jaegertracing, Vitess&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #202261; font-family: &amp;quot;arial&amp;quot; , sans-serif;&quot;&gt;etc.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #202261; font-family: &amp;quot;arial&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;h3&gt;
&lt;span style=&quot;color: #202261; font-family: &amp;quot;arial&amp;quot; , sans-serif;&quot;&gt;Cloud, Microservice &amp;amp; Containers together Brings Devops&lt;/span&gt;&lt;/h3&gt;
&lt;span style=&quot;color: #202261; font-family: &amp;quot;arial&amp;quot; , sans-serif;&quot;&gt;Traditional application require different teams for each stage of an application’s lifecycle e.g. Development, DBA, QA, System Admin, RM, PM etc. with each team having their own goals and priorities. Team’s priorities often clash, and it takes a toll on the overall application delivery &amp;amp; maintenance.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #202261; font-family: &amp;quot;arial&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;color: #202261; font-family: &amp;quot;arial&amp;quot; , sans-serif;&quot;&gt;With introduction of cloud, microservices &amp;amp; containers, team structures can be realigned to reflect the change in application development, deployment &amp;amp; maintenance architecture.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #202261; font-family: &amp;quot;arial&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;color: #202261; font-family: &amp;quot;arial&amp;quot; , sans-serif;&quot;&gt;Modern software delivery teams are small and cross-functional fitting perfectly into “two pizza rule”. Teams are structured and organized by the services they support. This keeps team’s agile, improving collaboration and decision-making. It also eliminates the accountability issues, whereby teams can renounce responsibility for a feature after it is moves on from their team, but before it is released.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #202261; font-family: &amp;quot;arial&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;h4&gt;
&lt;span style=&quot;color: #202261; font-family: &amp;quot;arial&amp;quot; , sans-serif;&quot;&gt;Cloud Native Release&lt;/span&gt;&lt;/h4&gt;
&lt;span style=&quot;color: #202261; font-family: &amp;quot;arial&amp;quot; , sans-serif;&quot;&gt;With the right architecture to build applications, the right tools to manage them, and the right team structure to bring it all together, the comprehensive effect is that Cloud Native Applications has become more agile &amp;amp; frequent in terms of their releases. In essence, there is no longer any major releases, since every release affects a single (micro) service, or a couple of (micro) services at most. Due to the limited scope for every release, the find &amp;amp; fix are easy now. With capability automatic rollback tools, it is much easier to revert to the previous stable release when a new release fails.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #202261; font-family: &amp;quot;arial&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;color: #202261; font-family: &amp;quot;arial&amp;quot; , sans-serif;&quot;&gt;Autonomous independent teams can ship updates to the services they own without any conflict with other teams. With multiple teams simultaneously releasing updates to services frequently, the pace of deployment is sky high. Netflix engineers deploy code thousands of times per day.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #202261; font-family: &amp;quot;arial&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;color: #202261; font-family: &amp;quot;arial&amp;quot; , sans-serif;&quot;&gt;The biggest advantage of a “Cloud Native” architecture is that it takes a concept to rollout (Time to Market) in the quickest possible time.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #202261; font-family: &amp;quot;arial&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;h3&gt;
&lt;span style=&quot;color: #202261; font-family: &amp;quot;arial&amp;quot; , sans-serif;&quot;&gt;Conclusion&lt;/span&gt;&lt;/h3&gt;
&lt;span style=&quot;color: #202261; font-family: &amp;quot;arial&amp;quot; , sans-serif;&quot;&gt;“Cloud Native” architecture is more than just migrating your existing application to any cloud instance. It goes way further to change the way application is architected, planned &amp;amp; provisioned into the infrastructure, effectively monitored and maintained.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #202261; font-family: &amp;quot;arial&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;color: #202261; font-family: &amp;quot;arial&amp;quot; , sans-serif;&quot;&gt;You can start your modernization journey (if not yet started) with an application modernization assessment and then a single pilot project, allowing you to become familiar with this approach before growing your cloud adoption further over time.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #202261; font-family: &amp;quot;arial&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;color: #202261; font-family: &amp;quot;arial&amp;quot; , sans-serif;&quot;&gt;Next time you hear someone talking about cloud, stop and think if it really mean “Cloud Native”.&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://saumajitdas.blogspot.com/feeds/5434023104467969249/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://saumajitdas.blogspot.com/2020/02/cloud-vs.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8621947959552664387/posts/default/5434023104467969249'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8621947959552664387/posts/default/5434023104467969249'/><link rel='alternate' type='text/html' href='http://saumajitdas.blogspot.com/2020/02/cloud-vs.html' title='Cloud vs. Cloud Native'/><author><name>- Saumajit (http://saumajitdas.blogspot.com/)</name><uri>http://www.blogger.com/profile/07382150935096179034</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6qi93v-aNPC1o6Z0ZTap6RPlGjui-v_puEhrzcE118t-WxhhHjrLm9tiSnO2IbY7AOVmBarqN1K47wbUamo6vDj4CVXXYeCX-R1oDmJ4J2C5US5OYeqWenP2aQ5h5Ew/s113/Capture.PNG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8621947959552664387.post-5797306603934445371</id><published>2017-08-30T09:39:00.000+02:00</published><updated>2017-08-30T09:39:09.041+02:00</updated><title type='text'>Integrating business process automation engine with existing TIBCO EMS</title><content type='html'>In todays world of business process automation, many of us are using WebSphere Process Server as their Integrating business process automation engine. However the need arises to integrate with existing messaging infrastructure. Today we will see, how to integrate TIBCO Enterprise Message Service, with WebSphere Process Server.&lt;br /&gt;
&lt;br /&gt;
WebSphere Process Server is a business process integration server that helps you solve complex business flows and a platform that you can use to connect to various technologies. Businesses seeking to use WebSphere Process Server to implement these complex business processes have to be connected to other back-end or front-end systems in order for these business processes to work properly. TIBCO Enterprise Message Service (EMS) is a common messaging resource used by businesses. Since EMS supports JMS, we will use the JMS support of WebSphere Process Server to bind to EMS.&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgiOSGte2TgyymTB4AauA887kG-KcetUl4xAzwIDitQIzg8NxW55fSXdFdgOHl9sLpZ65m4W7r1jaLR1Puem7t_32NIqNajSJ-cWmwkezGuc_ViwCWvIi1_4lgCcI87dV_tVLioNIb7xpA/s1600/arch1.gif&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5574517261681384578&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgiOSGte2TgyymTB4AauA887kG-KcetUl4xAzwIDitQIzg8NxW55fSXdFdgOHl9sLpZ65m4W7r1jaLR1Puem7t_32NIqNajSJ-cWmwkezGuc_ViwCWvIi1_4lgCcI87dV_tVLioNIb7xpA/s400/arch1.gif&quot; style=&quot;cursor: hand; cursor: pointer; height: 120px; width: 400px;&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Presuming our enviroment running the following versions of WID, EMS &amp;amp; WPS on Windows 32 bit: &lt;br /&gt;
&lt;br /&gt;
WebSphere Integration Developer V6.0.x. &lt;br /&gt;
TIBCO EMS server. &lt;br /&gt;
WebSphere Process Server V6&lt;br /&gt;
&lt;br /&gt;
Steps to follow:&lt;br /&gt;
&lt;br /&gt;
A. Configuring EMS and WebSphere Process Server&lt;br /&gt;
A.1. Start the EMS server &lt;br /&gt;
A.2. Create the EMS administered objects &lt;br /&gt;
A.3. Configure WebSphere Process Server for the EMS &lt;br /&gt;
A.4. Add EMS as a JMS provider to WebSphere Process Server &lt;br /&gt;
A.5. Configure the JNDI bindings for the EMS Connection Factories for WebSphere Application Server &lt;br /&gt;
A.6. Configure the JNDI bindings for TIBCO Enterprise Message Service Destinations for WebSphere Application Server &lt;br /&gt;
A.7. Create the Listener Ports for EMS &lt;br /&gt;
A.8. Create the Connection Factories and Destinations for WebSphere Default Messaging&lt;br /&gt;
B. Creating a business process&lt;br /&gt;
C. Creating the TIBCO EMS Message Producer&lt;br /&gt;
D. Configuring the Resource references&lt;br /&gt;
E. Creating the TIBCO Message Receiver Message Drive Bean (MDB)&lt;br /&gt;
F. Building and running the sample&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A. Configuring EMS and WebSphere Process Server&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A.1. Start the EMS server&lt;br /&gt;
&lt;br /&gt;
Install the EMS &lt;br /&gt;
Choose Start =&amp;gt; All Programs =&amp;gt; TIBCO =&amp;gt; TIBCO EMS Evaluation Version =&amp;gt; Start EMS Server &lt;br /&gt;
Choose Start =&amp;gt; All Programs =&amp;gt; TIBCO =&amp;gt; TIBCO EMS Evaluation Version =&amp;gt; Start EMS Server Administration Tool &lt;br /&gt;
Type in connect and press Enter &lt;br /&gt;
Press Enter for login and password (no security configured), and you will see a message saying connected to tcp://localhost:7222 and the same as the command prompt &lt;br /&gt;
&lt;br /&gt;
A.2. Create the EMS administered objects&lt;br /&gt;
&lt;br /&gt;
Start the admin tool and enter the following commands: &lt;br /&gt;
Create factory sample.XAQCF xaqueue. &lt;br /&gt;
Create queue sample.Q1.&lt;br /&gt;
&lt;br /&gt;
A.3. Configure WebSphere Process Server for the EMS JNDI provider&lt;br /&gt;
&lt;br /&gt;
Create a text file called jndi.properties in the directory: &lt;install_root&gt;\AppServer\lib\ext &lt;br /&gt;Add the following line into the file:&lt;br /&gt;  java.naming.factory.url.pkgs=com.tibco.tibjms.naming &lt;br /&gt;Save the jndi.propertiesfile &lt;br /&gt;&lt;br /&gt;A.4. Add EMS as a JMS provider to WebSphere Process Server &lt;br /&gt;&lt;br /&gt;Start Process Server &lt;br /&gt;Start the Process Server Administrative Console &lt;br /&gt;Expand Resources and choose Generic JMS Providers &lt;br /&gt;Click New &lt;br /&gt;Enter the following values for the given properties:&lt;br /&gt;  Name= TIBCO&lt;br /&gt;  Description= TIBCO Enterprise Message Service&lt;br /&gt;  Classpath= (location of tibjms.jar)&lt;br /&gt;  External Initial Context Factory= com.tibco.tibjms.naming.TibjmsInitialContextFactory&lt;br /&gt;  External Provider URL= tibjmsnaming://localhost:7222 &lt;br /&gt;Click OK &lt;br /&gt;Click Save on the task bar at the top of the console window &lt;br /&gt;stop, and restart WebSphere Application Server&lt;br /&gt;&lt;br /&gt;A.5. Configure the JNDI bindings for the EMS Connection Factories for WebSphere Application Server&lt;br /&gt;&lt;br /&gt;Expand Resources and choose Generic JMS Providers &lt;br /&gt;In the content pane, choose TIBCO &lt;br /&gt;Scroll down and choose JMS Connection Factories &lt;br /&gt;Click New &lt;br /&gt;Enter the following values for the given properties: &lt;br /&gt;  Name= TIBCOConnectionFactory &lt;br /&gt;  Type= QUEUE &lt;br /&gt;  JNDI Name= jms/ConnectionFactory &lt;br /&gt;  Description= Sample Queue ConnectionFactory &lt;br /&gt;  External JNDI Name= sample.XAQCF &lt;br /&gt;Click OK &lt;br /&gt;Click Save on the task bar of the Administrative Console (and Save again to confirm) &lt;br /&gt;stop, and restart the WebSphere Application Server&lt;br /&gt;&lt;br /&gt;A.6. Configure the JNDI bindings for TIBCO Enterprise Message Service destinations for the WebSphere Application Server &lt;br /&gt;&lt;br /&gt;Expand Resources and choose Generic JMS Providers &lt;br /&gt;In the content pane, choose TIBCO &lt;br /&gt;Scroll down and choose JMS Destinations &lt;br /&gt;Click New &lt;br /&gt;Enter the following values for the given properties: &lt;br /&gt;  Name= Q1 &lt;br /&gt;  Type= QUEUE &lt;br /&gt;  JNDI Name= jms/Q1 &lt;br /&gt;  Description= Sample Listen Queue &lt;br /&gt;  External JNDI Name= sample.Q1 &lt;br /&gt;Click OK &lt;br /&gt;Click Save on the task bar of the Administrative Console (and Save again to confirm) &lt;br /&gt;stop and restart the WebSphere Application Server &lt;br /&gt;&lt;br /&gt;A.7. Create Listener Ports for EMS&lt;br /&gt;&lt;br /&gt;Expand Servers and choose Application Servers &lt;br /&gt;In the content pane, choose the name of the application server &lt;br /&gt;In the Additional Properties Table, select Message Listener Service &lt;br /&gt;In the content pane, select Listener Ports &lt;br /&gt;In the content pane, click New &lt;br /&gt;Enter the following values for the given listener port properties: &lt;br /&gt;  Name= TIBCOPtoPListenerPort &lt;br /&gt;  Initial State= Started &lt;br /&gt;  Description= Listener Port for TIBCO Point to Point &lt;br /&gt;  ConnectionFactory JNDI Name= jms/ConnectionFactory &lt;br /&gt;  Destination JNDI Name= jms/Q1 &lt;br /&gt;Click OK &lt;br /&gt;Click Save on the task bar of the Administrative Console (and Save again to confirm) &lt;br /&gt;stop and restart the application server to have the changes take effect&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;Verify that the new listener ports are in their proper initial state&lt;br /&gt;expand Servers =&amp;gt; Application Servers=&amp;gt; &lt;server_name&gt;=&amp;gt; Message Listener Service=&amp;gt; Listener Ports&lt;br /&gt;TIBCO listener ports should have a solid green arrow, indicating as started&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;A.8. Create Connection Factories and Destinations for WebSphere Default Messaging&lt;br /&gt;&lt;br /&gt;Create a Service Integration Bus&lt;br /&gt;  name=  MyBus&lt;br /&gt;  Destination names= TIBCO_WPS_Queue&lt;br /&gt;Create a JMS Queue Connection Factory &lt;br /&gt;  Name= MyQueueConnectionFactory &lt;br /&gt;  JNDI Name= jms/MyConnectionFactory &lt;br /&gt;  Bus= MyBus &lt;br /&gt;Create JMS Connection Factory &lt;br /&gt;  Name= TibcoConnectionFactory &lt;br /&gt;  JNDI Name= jms/TibcoConnectionFactory &lt;br /&gt;  Bus= MyBus &lt;br /&gt;Create a JMS Queue &lt;br /&gt;  Name= TIBCO_WPS_JMS_Queue &lt;br /&gt;  JNDI= Name jms/tibcowpsq &lt;br /&gt;  Queue Name= TIBCO_WPS_Queue &lt;br /&gt;  Bus= MyBus &lt;br /&gt;Create a JMS Activation Spec &lt;br /&gt;  Name= TIBCO_WPS_AS &lt;br /&gt;  JNDI Name= eis/tibcowpsas &lt;br /&gt;  Destination Type= Queue &lt;br /&gt;  Destination JNDI name= jms/tibcowpsq &lt;br /&gt;  Bus= MyBus&lt;/server_name&gt;&lt;/install_root&gt;&lt;br /&gt;
&lt;install_root&gt;&lt;server_name&gt;&lt;br /&gt;&lt;/server_name&gt;&lt;/install_root&gt;
&lt;install_root&gt;&lt;server_name&gt;&lt;br /&gt;&lt;/server_name&gt;&lt;/install_root&gt;
&lt;install_root&gt;&lt;server_name&gt;&lt;br /&gt;&lt;/server_name&gt;&lt;/install_root&gt;
To Be Continued &amp;nbsp;...&lt;br /&gt;
&lt;br /&gt;
(Sorry didn&#39;t get time to finish. But I promise to finish some day ;))&lt;br /&gt;
Note: For WPS &amp;amp; WID tutorial you may refer http://www.webagesolutions.com/knowledgebase/waskb/waskb019/</content><link rel='replies' type='application/atom+xml' href='http://saumajitdas.blogspot.com/feeds/5797306603934445371/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://saumajitdas.blogspot.com/2017/08/integrating-business-process-automation.html#comment-form' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8621947959552664387/posts/default/5797306603934445371'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8621947959552664387/posts/default/5797306603934445371'/><link rel='alternate' type='text/html' href='http://saumajitdas.blogspot.com/2017/08/integrating-business-process-automation.html' title='Integrating business process automation engine with existing TIBCO EMS'/><author><name>- Saumajit (http://saumajitdas.blogspot.com/)</name><uri>http://www.blogger.com/profile/07382150935096179034</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6qi93v-aNPC1o6Z0ZTap6RPlGjui-v_puEhrzcE118t-WxhhHjrLm9tiSnO2IbY7AOVmBarqN1K47wbUamo6vDj4CVXXYeCX-R1oDmJ4J2C5US5OYeqWenP2aQ5h5Ew/s113/Capture.PNG'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgiOSGte2TgyymTB4AauA887kG-KcetUl4xAzwIDitQIzg8NxW55fSXdFdgOHl9sLpZ65m4W7r1jaLR1Puem7t_32NIqNajSJ-cWmwkezGuc_ViwCWvIi1_4lgCcI87dV_tVLioNIb7xpA/s72-c/arch1.gif" height="72" width="72"/><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8621947959552664387.post-267184416720975949</id><published>2012-04-10T08:42:00.005+02:00</published><updated>2012-04-10T09:03:36.325+02:00</updated><title type='text'>Using Hudson as CI tool on WLS</title><content type='html'>One of the key concept of Service Oriented Architechture is that services are no longer built to last, but rather built to change.&lt;br /&gt;&lt;br /&gt;In software engineering, continuous integration (CI) implements continuous processes of applying quality control — small pieces of effort, applied frequently. Continuous integration aims to improve the quality of software, and to reduce the time taken to deliver it, by replacing the traditional practice of applying quality control after completing all development.&lt;br /&gt;&lt;br /&gt;Now if we follow SOA principles, then the design and implementation should be optimized. However what SOA doesn&#39;t address is how we build, deploy, test and finally released that code into production.&lt;br /&gt;&lt;br /&gt;This is where a CI tool (details of CI can be found &lt;a href=&quot;http://en.wikipedia.org/wiki/Continuous_integration&quot;&gt;here&lt;/a&gt;) comes very useful.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://hudson-ci.org/&quot;&gt;Hudson&lt;/a&gt; is such a continuous integration (CI) tool written in Java, which runs in a servlet container, such as Apache Tomcat or the WebLogic application server. It supports SCM tools including CVS, Subversion, Git and Clearcase and can execute Apache Ant and Apache Maven based projects, as well as arbitrary shell scripts and Windows batch commands.&lt;br /&gt;&lt;br /&gt;In the following steps we will see how to configure Hudson on WebLogic (Due to Weblogic&#39;s class loading structure, if the hudson.war is directly deployed, the application will fail to startup. This is to because there are jar conflicts between Hudson and Weblogic. To get around the issue, we use the FilteringClassLoader mechanism so that specific hudson jars get priority in the classpath over Weblogic&#39;s jars).&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Versions&lt;/b&gt;&lt;br /&gt;-----------&lt;br /&gt;Hudson: 2.2.0&lt;br /&gt;WebLogic: 10.3.1 (11g R1)&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Steps&lt;/b&gt;:&lt;br /&gt;-----------&lt;br /&gt;1&amp;gt; Downnload Hudson Binary (2.2.0) from &lt;a href=&quot;http://hudson-ci.org/downloads/war/&quot;&gt;here&lt;/a&gt;&lt;br /&gt;2&amp;gt; Unzip downloaded hudson.zip&lt;br /&gt;3&amp;gt; Go inside the unzipped location and make a .war file from the content (jar -cvf hudson.war .)&lt;br /&gt;4&amp;gt; copy the hudson war to a directory (e.g. E:\installers\hudson) and create another folder (META-INF) in it.&lt;br /&gt;5&amp;gt; add application.xml and weblogic-application.xml in the META-INF directory&lt;br /&gt;&lt;br /&gt;application.xml&lt;br /&gt;===============&lt;br /&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjtjlYNTxDnjl5zbrYD6FsHxCMMT2MUFEhrs15fm2vVL3EP_kPY-d9yjfoDfKCDbyEj5VAVL2jxuH7Zyxjouq8pbgvQg7214OI7X2J8i1mE65XCyCNMLHSnze9jdlXuLsJbErnOKhJOQPM/s1600/1.JPG&quot;&gt;&lt;img style=&quot;cursor:pointer; cursor:hand;width: 400px; height: 154px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjtjlYNTxDnjl5zbrYD6FsHxCMMT2MUFEhrs15fm2vVL3EP_kPY-d9yjfoDfKCDbyEj5VAVL2jxuH7Zyxjouq8pbgvQg7214OI7X2J8i1mE65XCyCNMLHSnze9jdlXuLsJbErnOKhJOQPM/s400/1.JPG&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5729661964417087938&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;weblogic-application.xml&lt;br /&gt;========================&lt;br /&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQMMkWEwNwhQA6Lo1SO8y3hYgWEKpoSpgSQcyXms4QptCxiEnQITTrOcOXMjWvuNdSXS0gjgfUyY8cJGq9hF3ddGKABZaVqxifLBs4eVr7Cntj-OoibkXn5S7Jt7ZJ7DRug1cZ6i-K39I/s1600/2.JPG&quot;&gt;&lt;img style=&quot;cursor:pointer; cursor:hand;width: 400px; height: 193px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQMMkWEwNwhQA6Lo1SO8y3hYgWEKpoSpgSQcyXms4QptCxiEnQITTrOcOXMjWvuNdSXS0gjgfUyY8cJGq9hF3ddGKABZaVqxifLBs4eVr7Cntj-OoibkXn5S7Jt7ZJ7DRug1cZ6i-K39I/s400/2.JPG&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5729662134230330434&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;6&amp;gt; Repackage the complete content in hudson.ear and deply in WebLogic&lt;br /&gt;7&amp;gt; Access the Hudson on http://&amp;lt;server_ip&amp;gt;:&amp;lt;port&amp;gt;/hudson&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjyhgsvGbZGLhO8pHspzhKc__IhN36oIMrgpYvtWmnBigYdF5XdqZmkVGS_mEt64WkR-rSOcxIbM6HAX2yz6W_omk7BkpHciOqaZ-XreYlGYls1Md9dOQzqn33OyIlg8PrSgceekWEd4dg/s1600/3.JPG&quot;&gt;&lt;img style=&quot;cursor:pointer; cursor:hand;width: 400px; height: 258px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjyhgsvGbZGLhO8pHspzhKc__IhN36oIMrgpYvtWmnBigYdF5XdqZmkVGS_mEt64WkR-rSOcxIbM6HAX2yz6W_omk7BkpHciOqaZ-XreYlGYls1Md9dOQzqn33OyIlg8PrSgceekWEd4dg/s400/3.JPG&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5729664175654461522&quot; /&gt;&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://saumajitdas.blogspot.com/feeds/267184416720975949/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://saumajitdas.blogspot.com/2012/04/using-hudson-as-ci-tool-on-wls.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8621947959552664387/posts/default/267184416720975949'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8621947959552664387/posts/default/267184416720975949'/><link rel='alternate' type='text/html' href='http://saumajitdas.blogspot.com/2012/04/using-hudson-as-ci-tool-on-wls.html' title='Using Hudson as CI tool on WLS'/><author><name>- Saumajit (http://saumajitdas.blogspot.com/)</name><uri>http://www.blogger.com/profile/07382150935096179034</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6qi93v-aNPC1o6Z0ZTap6RPlGjui-v_puEhrzcE118t-WxhhHjrLm9tiSnO2IbY7AOVmBarqN1K47wbUamo6vDj4CVXXYeCX-R1oDmJ4J2C5US5OYeqWenP2aQ5h5Ew/s113/Capture.PNG'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjtjlYNTxDnjl5zbrYD6FsHxCMMT2MUFEhrs15fm2vVL3EP_kPY-d9yjfoDfKCDbyEj5VAVL2jxuH7Zyxjouq8pbgvQg7214OI7X2J8i1mE65XCyCNMLHSnze9jdlXuLsJbErnOKhJOQPM/s72-c/1.JPG" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8621947959552664387.post-2138032589312467575</id><published>2012-04-09T07:54:00.018+02:00</published><updated>2012-04-09T10:50:04.999+02:00</updated><title type='text'>Enabling OSB to support X.509 token identity</title><content type='html'>In cryptography, X.509 is an ITU-T standard for a public key infrastructure (PKI) and Privilege Management Infrastructure (PMI). X.509 specifies, amongst other things, standard formats for public key certificates, certificate revocation lists, attribute certificates, and a certification path validation algorithm. Further detail is available &lt;a href=&quot;http://en.wikipedia.org/wiki/X.509&quot;&gt;here&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;With OSB supporting X.509 certificates, guarantees that the hosts with which OSB communicates with are the ones that it expects.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Adding X.509 Support to the WebLogic Default Identity Asserter&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Since OSB uses the underlying framework that is supplied by WLS, by setting the default identity asserter within WLS to accept X.509 certificates, we can allow users and/or processes to present X.509 certificates to identify themselves. To do this, we need to access the WebLogic Server console and open the Security Realm -&amp;gt; Providers -&amp;gt; Authentication tab.&lt;br /&gt;&lt;br /&gt;&lt;img style=&quot;WIDTH: 400px; HEIGHT: 175px; CURSOR: hand&quot; id=&quot;BLOGGER_PHOTO_ID_5729290352886353458&quot; border=&quot;0&quot; alt=&quot;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjcEQTr5xRR9TWR41lc9ZmuSC9VOetfnIzF5TRWrToIrlCnJERlwG-BYM8Ua9j5f-cgamyJ8j1-EDPxzNBpjT2b7i_2K7pHLJoiICsvcwxoiaZXFM4PZmJ5SvYhQqUH0QDefcgNqLR267I/s400/1.jpg&quot; /&gt;&lt;br /&gt;&lt;br /&gt;within the Default Identity Asserter, under the common tab, move the X.509 token type from the available list to the chosen list.&lt;br /&gt;&lt;br /&gt;&lt;img style=&quot;WIDTH: 315px; HEIGHT: 400px; CURSOR: hand&quot; id=&quot;BLOGGER_PHOTO_ID_5729290520457155234&quot; border=&quot;0&quot; alt=&quot;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjRXNo4H0XfMmFqH7-M9peOz66v9bAobe2lryYnV10VrkqXMTwhAFp5zlNoo-vE0n_SidP96xjHdcqbC4Zk0AShdX5A_3WzgdU5NPcHrCMnjnDQEIQ67NZ7-X1JpyQrhu4D2RfbBVwqW6c/s400/2.jpg&quot; /&gt;&lt;br /&gt;&lt;br /&gt;Then under the Provider Specific tab, check the use of the Default Name Mapper. This checks that the certificates mapped to the user has not expired.&lt;br /&gt;&lt;br /&gt;&lt;img style=&quot;WIDTH: 324px; HEIGHT: 400px; CURSOR: hand&quot; id=&quot;BLOGGER_PHOTO_ID_5729280187789899186&quot; border=&quot;0&quot; alt=&quot;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTJly0HelfK2MUnD7rjGGxOpHZCKhSgRqjL_L_aunRPHNw_VhhBEoZrwznFmzYuOguoxpwrX3Yq3JhLy49uEiGudSjZZBgz2dewQEWHWAnciGIg3UNehv5XgMF1GccuNYH3awYI0lbzic/s400/3.jpg&quot; /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Adding WebLogic PKI Credential Mapping Provider&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;A Credential Mapping provider allows WebLogic Server to log into a remote system on behalf of a subject that has already been authenticated. You must have one Credential Mapping provider in a security realm, and you can configure multiple Credential Mapping providers in a security realm. It is only one of the types of credential mapper that are available. For this example we will need to have a keystore available. To do this you might need to use the keytool command.&lt;br /&gt;&lt;br /&gt;The basic steps to create a keystores (jks) using keytool can be referred in the jdk documents, for reference the following are four easily usable commands to create identity, trust stores along with a certificate (self signed)&lt;br /&gt;&lt;br /&gt;keytool -genkey -alias test -keyalg RSA -keysize 1024 -dname &quot;cn=L-0219016978.XXX.com,ou=Consulting,o=XXX&quot; -keypass password -keystore identity.jks -storepass password&lt;br /&gt;keytool -selfcert -v -alias test -keypass password -keystore identity.jks -storepass password -storetype JKS&lt;br /&gt;keytool -export -v -alias test -file rootCA.der -keystore identity.jks -storepass password&lt;br /&gt;keytool -import -v -trustcacerts -alias test -file rootCA.der -keystore trust.jks -storepass password&lt;br /&gt;&lt;br /&gt;To configure a Credential Mapping Provider, we need to add a new provider in the security realm, under Providers -&amp;gt; Credential Mapping, by clicking “New”&lt;br /&gt;&lt;br /&gt;&lt;img style=&quot;WIDTH: 400px; HEIGHT: 205px; CURSOR: hand&quot; id=&quot;BLOGGER_PHOTO_ID_5729281824705402370&quot; border=&quot;0&quot; alt=&quot;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVCBPc0xZD11ZObyHOUXMHW19OG54Vr85n4W2mt03wGtwSwa0ouMtmWIb6o-eWZIbLp29GbpVd_n1nGSahqAskuyVnNCM3pe51X_riYk-nfFj4OPKAgK1Q9ixTxBpucXkiEosysjlhcoY/s400/4.jpg&quot; /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img style=&quot;WIDTH: 400px; HEIGHT: 300px; CURSOR: hand&quot; id=&quot;BLOGGER_PHOTO_ID_5729282270182486818&quot; border=&quot;0&quot; alt=&quot;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgFMZpUMflzWIEVb4T0eamdQljh7SwP5OZrUkKgnKW14f8F8h9QgxTaQX1iJOeuFvjyqF0zHr3T6FSpklyEwdIMmX0LlLvqqdTZXJsEmheNyo_mUQCYHIybIguuiSuQX8mHIdOgB931azE/s400/5.jpg&quot; /&gt;&lt;br /&gt;&lt;br /&gt;Once, the PKI Credential Mapper is created, configure it as below.&lt;br /&gt;&lt;br /&gt;&lt;img style=&quot;WIDTH: 400px; HEIGHT: 308px; CURSOR: hand&quot; id=&quot;BLOGGER_PHOTO_ID_5729287102679737874&quot; border=&quot;0&quot; alt=&quot;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjiJNqOMcdGtHOA4wN42vHv8Q2HS3z2Lodbrf4GYRH3hBC8wzOYTRYoPSUgPxFTUfCVr-SmT0Bj3QAPZ6Y47Eg3wHwiybcOWE68YIZsXa069sY8zVl2TFbY3Pa5unOcJGkCtMWQgseYBmc/s400/6.jpg&quot; /&gt;&lt;br /&gt;&lt;br /&gt;The type of keystore will by JKS and the keystore filename/password will be the ones given while using keytool to create the keystore.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Configuring OSB Inbound WebServices&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;img style=&quot;WIDTH: 400px; HEIGHT: 209px; CURSOR: hand&quot; id=&quot;BLOGGER_PHOTO_ID_5729287793817751282&quot; border=&quot;0&quot; alt=&quot;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLgYiy_X2OKACgaaJFKdY6K8UshSvdZUvSC5uCEE6XA_c49-J5871Dg4g4gLi3ytBL88AStR9UQ_ZCyp6gdRHeZUKsFwikG0NfXNtGfsFJ8PlE_KomoloukYx_n2M4c1IL4Qe2ZGDdxcU/s400/7.jpg&quot; /&gt;&lt;br /&gt;&lt;br /&gt;Within the web services security list, the default_x509_handler is the one that we need to change (to use the newly created keystore).&lt;br /&gt;&lt;br /&gt;&lt;img style=&quot;WIDTH: 400px; HEIGHT: 206px; CURSOR: hand&quot; id=&quot;BLOGGER_PHOTO_ID_5729288190413659330&quot; border=&quot;0&quot; alt=&quot;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQthJn9f5a-oN-RfJia7I96slusN_Itp_jwmuWWJpsZ0av8oCbfbI-DMd4RYp_ZaWoLVTVh4z0kOgq2k2VUxMDbav6mdxBjgjAKAH7xXcDjjE8_qz9QMcUig1otUZn4m3PPRpxIMkVDVI/s400/8.jpg&quot; /&gt;&lt;br /&gt;&lt;br /&gt;Nw we need to set up the Token Handler Property of UseX509ForIdentity to be true.&lt;br /&gt;&lt;br /&gt;&lt;img style=&quot;WIDTH: 400px; HEIGHT: 369px; CURSOR: hand&quot; id=&quot;BLOGGER_PHOTO_ID_5729288598126075186&quot; border=&quot;0&quot; alt=&quot;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg4QqYkVl7xC5c2GJKCW6MgIzNXSSHgmb3y7bpgwDTGj6cCwPue42NlflmqNLnKcvuo6cOnvqf3LNvnr9-YtHk6IkFlypiWb5Aibef7zIIQ2_p711qu73Yrq-uC7H5ayY_r9iQXUC1NSOo/s400/9.jpg&quot; /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Configuring WebLogic for SSL&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;The next step is to configure WebLogic Server for SSL, using the same keystore.&lt;br /&gt;&lt;br /&gt;&lt;img style=&quot;WIDTH: 400px; HEIGHT: 393px; CURSOR: hand&quot; id=&quot;BLOGGER_PHOTO_ID_5729289249280305346&quot; border=&quot;0&quot; alt=&quot;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhz_RxKDq6JNM9vL1wvTiQxFesWNNrp6bRT3IajNvD0dSwDinBF1sMt-Am6swH3LS9RSPI-7mC59ZnwNMUDVmto9mUWHSIxF_710SZFAbtkqwljilfoKd6HLzqKllinFGax3PamzqtCzBM/s400/10.jpg&quot; /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img style=&quot;WIDTH: 400px; HEIGHT: 285px; CURSOR: hand&quot; id=&quot;BLOGGER_PHOTO_ID_5729289549423221602&quot; border=&quot;0&quot; alt=&quot;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWWN5pNk8bCXD54uifN_TkQ90-u-ckovd5Jr34bfiF5rXOuisbfpQiV7XJLMg6jDqAaCPtQ-Rm7Abo3iW4O3IJNovdgaI2o_0aZyyOk4_dpT4l9yHM_gzv8Yo9Up869zdCUzgROp0tbr8/s400/11.jpg&quot; /&gt;&lt;br /&gt;&lt;br /&gt;Next step is to create an user that is contained within certificate from the keystore. After these dynamic changes, server need to be restarted&lt;br /&gt;&lt;br /&gt;Once we complete the above mentioned steps, our OSB system is ready to suppot the X.509 token identity.&lt;br /&gt;&lt;br /&gt;Further reference can be pointed to Oracle WebLogic Documentation:&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://docs.oracle.com/cd/E13222_01/wls/docs103/ConsoleHelp/taskhelp/webservices/webservicesecurity/CreateDefaultWSSConfig.html&quot;&gt;http://docs.oracle.com/cd/E13222_01/wls/docs103/ConsoleHelp/taskhelp/webservices/webservicesecurity/CreateDefaultWSSConfig.html&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://docs.oracle.com/cd/E13222_01/wls/docs103/ConsoleHelp/taskhelp/webservices/webservicesecurity/UseX509ForIdentity.html&quot;&gt;http://docs.oracle.com/cd/E13222_01/wls/docs103/ConsoleHelp/taskhelp/webservices/webservicesecurity/UseX509ForIdentity.html&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://saumajitdas.blogspot.com/feeds/2138032589312467575/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://saumajitdas.blogspot.com/2012/04/enabling-osb-to-support-x509-token.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8621947959552664387/posts/default/2138032589312467575'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8621947959552664387/posts/default/2138032589312467575'/><link rel='alternate' type='text/html' href='http://saumajitdas.blogspot.com/2012/04/enabling-osb-to-support-x509-token.html' title='Enabling OSB to support X.509 token identity'/><author><name>- Saumajit (http://saumajitdas.blogspot.com/)</name><uri>http://www.blogger.com/profile/07382150935096179034</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6qi93v-aNPC1o6Z0ZTap6RPlGjui-v_puEhrzcE118t-WxhhHjrLm9tiSnO2IbY7AOVmBarqN1K47wbUamo6vDj4CVXXYeCX-R1oDmJ4J2C5US5OYeqWenP2aQ5h5Ew/s113/Capture.PNG'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjcEQTr5xRR9TWR41lc9ZmuSC9VOetfnIzF5TRWrToIrlCnJERlwG-BYM8Ua9j5f-cgamyJ8j1-EDPxzNBpjT2b7i_2K7pHLJoiICsvcwxoiaZXFM4PZmJ5SvYhQqUH0QDefcgNqLR267I/s72-c/1.jpg" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8621947959552664387.post-6116960688710492073</id><published>2011-10-11T10:56:00.008+02:00</published><updated>2011-10-11T19:42:02.754+02:00</updated><title type='text'>Enterprise Integration using Web Services</title><content type='html'>&lt;div align=&quot;left&quot;&gt;From last couple of days, while working on an integration activity I was going through some of the Enterprise Integration Patters (EIP) and was also having couple of round of discussion with my clients. During this period of time I got the idea of writing some notes on this topic so that if anyone is already working on this can get some help from the post (read &quot;can help me by giving me back some new ideas&quot;).&lt;br /&gt;&lt;br /&gt;EI has numerous patterns and we will be looking most importantly the webservice based models in this post.&lt;br /&gt;&lt;br /&gt;There are two principal architectures for Web service interfaces&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;A&amp;gt; Synchronous Web services&lt;br /&gt;B&amp;gt; Asynchronous Web services&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;These two architectures are distinguished by their way of request/response handling pattern. With synchronous services, clients invoke a request on a service and then suspend activity to wait for a response. With asynchronous services, clients initiate a request to a service and then resume their processing without waiting for a response. The service handles the client request and returns a response when available later. Upon availability of the response, the client retrieves the response for further processing.&lt;br /&gt;&lt;br /&gt;However a Web service may combine synchronous and asynchronous architecture depending upon the types of work, the service performs and the available technologies.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;A&amp;gt; Synchronous Web Services&lt;br /&gt;&lt;br /&gt;&lt;/strong&gt;Synchronous services are characterized by the client invoking a service and then waiting for a response to the request. Since the client suspends its own processing after making request, this approach is best when the service can process the request in a small amount of time. Synchronous services are also best when applications require a more immediate response to a request. Web services that rely on synchronous communication are usually RPC-oriented. Generally, consider using an RPC-oriented approach for synchronous Web services.&lt;br /&gt;&lt;br /&gt;A credit card service, used in an e-commerce application, is a good example of a synchronous service. Typically, a client (the e-commerce application) invokes the credit card service with the credit card details and then waits for the approval or denial of the credit card transaction. The client cannot continue its processing until the transaction completes, and obtaining credit approval is a prerequisite to completing the transaction.&lt;br /&gt;&lt;br /&gt;A stock quote Web service is another example of a synchronous service. A client invokes the quote service with a particular stock symbol and waits for the stock price response.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align=&quot;left&quot;&gt;&lt;img style=&quot;TEXT-ALIGN: center; MARGIN: 0px auto 10px; WIDTH: 400px; DISPLAY: block; HEIGHT: 157px; CURSOR: hand&quot; id=&quot;BLOGGER_PHOTO_ID_5662169574339590738&quot; border=&quot;0&quot; alt=&quot;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiw8nfXaAqXRl_Ueujkx0p4tzBS_gwepAan714bSrFOMdb6xQahfQ4qGx3SIf8-x1zjP5tfk1Zof-7FKM6UnGm_NqpPNtKfM0wfZ5YEJaTeDgf31oRVgACiGVdWP6jfA5LPWR1zxUC0Iwo/s400/1.jpg&quot; /&gt;&lt;/p&gt;&lt;br /&gt;&lt;div align=&quot;left&quot;&gt;Pic: synchronous webservice model&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div align=&quot;left&quot;&gt;Synchronous Web service mostly leverages the JAX-RPC servlet endpoint. Client makes the request to the servlet endpoint and then the servlet delegates the request to the service&#39;s appropriate business logic, which may reside in the service&#39;s Web tier or EJB tier. The service&#39;s business logic processes the request (It may access the business data through a persistence mechanism, if required) and When it completes its processing, formulates a response which is then returned to the client through the JAX-RPC servlet endpoint.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align=&quot;left&quot;&gt;&lt;img style=&quot;TEXT-ALIGN: center; MARGIN: 0px auto 10px; WIDTH: 400px; DISPLAY: block; HEIGHT: 239px; CURSOR: hand&quot; id=&quot;BLOGGER_PHOTO_ID_5662174787899812322&quot; border=&quot;0&quot; alt=&quot;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiEJhDFh6TMjM69i3vcrDHkbYP7xuZ-s7wSEdMAOnLJriUyQKUEaUxPZhIzwPFdQFGN1lWssKj7gT7m20QpgiYbmyHwF2wGbwFt5kqsqsQWwHwgvqEFSE2KLnJP1ro-G5DxzBwyBoBllTA/s400/2.jpg&quot; /&gt;Pic: Synchronous webservice with JAX-RPC&lt;/p&gt;&lt;br /&gt;&lt;p align=&quot;left&quot;&gt;A synchronous architecture like this also has the facility to expose a Web service interface to an existing J2EE application that may already have a browser/wireless/rich client interface.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;B&amp;gt; Asynchronous Web Services&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;With asynchronous services, the client generates the request but doesn&#39;t wait for the response. Often, with these services, the client does not want to wait for the response because it may take a significant amount of time for the service to process the request and the nenxt operation is not directly dependent on the response (unlike the credit card response for the e-commerce application during check out).&lt;br /&gt;&lt;br /&gt;Generally, an asynchronous class of services is used for document-oriented approaches.&lt;br /&gt;&lt;br /&gt;A travel desk service is a good example of a document-oriented service that might get benefitted by using asynchronous communication, where the client sends a document to the travel service (may be for requesting arrangements for a particular trip or reimbursement for a trip). Based on the document&#39;s content and/or the workflow defined within the business logic of the service, it starts processing. Since the travel service might perform time-consuming steps in its normal workflow, the client cannot afford to pause and wait for these steps to complete.&lt;br /&gt;&lt;br /&gt;So far so good. The synchronous calls are easy enough, since we do not need to think about a way out of delayed response tracking. Now in case of Asynchronous calls the service may make the result to the client&#39;s request, available in one of two ways:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;1&amp;gt;&lt;/strong&gt; the client that invoked the service periodically checks the status of the request using the ID that was provided at the time the request was submitted. (This is also known as polling.)&lt;br /&gt;&lt;strong&gt;2&amp;gt;&lt;/strong&gt; If the client itself is a Web service peer, the service calls back the client&#39;s service with the result. &lt;/p&gt;&lt;br /&gt;&lt;p&gt;While designing the architecture of asynchronous webservice based integration, we can think of multiple design patterns. &lt;img style=&quot;TEXT-ALIGN: center; MARGIN: 0px auto 10px; WIDTH: 400px; DISPLAY: block; HEIGHT: 202px; CURSOR: hand&quot; id=&quot;BLOGGER_PHOTO_ID_5662286120978793234&quot; border=&quot;0&quot; alt=&quot;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRafhktij2xe9lcqiuR7Sd1wG9ipzwvMAtiY3VEpVqqZVcj3eYEFhyqJ2o5rKIgL7R1pOqBjPwowZ13USHPK6m8Dv8jzHSyDv7f_zq4raueQB-qNaODsua5d-VeSYXYqCXaKznViA7BR4/s400/1.JPG&quot; /&gt; The above architecture shows one of the recommended approaches to achieve asynchronous communication. In this architecture, the client sends a request to the JAX-RPC servlet endpoint on the web container. The servlet endpoint delegates the client&#39;s request to the appropriate business logic of the service. It does so by sending the request as a JMS message to a designated queue or topic. The JMS layer (along with the message-driven beans) makes asynchronous communication possible.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhz2W6sezTOgMx419n7noo0Tku2Gh3Av2NaWTHKMmwkzsK7DBXfmvW2EBGVf0_HTumpYq_QSsAfqiijlG5f-pScFj1rZg5CyosUeiuvtQJLzxlMgEi9JKVgPvVN0MQ93tWYNRYzzxmjzU0/s1600/3.JPG&quot;&gt;&lt;img style=&quot;TEXT-ALIGN: center; MARGIN: 0px auto 10px; WIDTH: 400px; DISPLAY: block; HEIGHT: 232px; CURSOR: hand&quot; id=&quot;BLOGGER_PHOTO_ID_5662286797403169650&quot; border=&quot;0&quot; alt=&quot;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhz2W6sezTOgMx419n7noo0Tku2Gh3Av2NaWTHKMmwkzsK7DBXfmvW2EBGVf0_HTumpYq_QSsAfqiijlG5f-pScFj1rZg5CyosUeiuvtQJLzxlMgEi9JKVgPvVN0MQ93tWYNRYzzxmjzU0/s400/3.JPG&quot; /&gt;&lt;/a&gt;The above architecture shows the scenario in case the client itself is a Web service peer. The client application (which could be a direct client or another web container) generates a request and sends it via JMS to the Processing Center (Service A). &quot;Service A&quot; has a Web service invoker that sends the request to the destination application&#39;s Web service endpoint (Service B). The endpoint receives the request and acknowledges the receipt by sending an ID back to the service invoker. Later, when the supplier application fulfills the request, its Web service invoker sends the result to &quot;service A&quot; endpoint. &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;As I mentioned earlier, there could be numerous approaches to achieve this pattern and the above mentioned are only two of them. In case you are interested to add anything, please feel free to write note on the post.&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://saumajitdas.blogspot.com/feeds/6116960688710492073/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://saumajitdas.blogspot.com/2011/10/enterprise-integration-using-web.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8621947959552664387/posts/default/6116960688710492073'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8621947959552664387/posts/default/6116960688710492073'/><link rel='alternate' type='text/html' href='http://saumajitdas.blogspot.com/2011/10/enterprise-integration-using-web.html' title='Enterprise Integration using Web Services'/><author><name>- Saumajit (http://saumajitdas.blogspot.com/)</name><uri>http://www.blogger.com/profile/07382150935096179034</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6qi93v-aNPC1o6Z0ZTap6RPlGjui-v_puEhrzcE118t-WxhhHjrLm9tiSnO2IbY7AOVmBarqN1K47wbUamo6vDj4CVXXYeCX-R1oDmJ4J2C5US5OYeqWenP2aQ5h5Ew/s113/Capture.PNG'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiw8nfXaAqXRl_Ueujkx0p4tzBS_gwepAan714bSrFOMdb6xQahfQ4qGx3SIf8-x1zjP5tfk1Zof-7FKM6UnGm_NqpPNtKfM0wfZ5YEJaTeDgf31oRVgACiGVdWP6jfA5LPWR1zxUC0Iwo/s72-c/1.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8621947959552664387.post-8109232255098866551</id><published>2011-09-04T20:18:00.018+02:00</published><updated>2011-10-11T19:38:54.491+02:00</updated><title type='text'>SOA concept and role of an ESB in it</title><content type='html'>This posts is influenced by my one of my recent discussion about Service Oriented IT trends with couple of my friends. Since SOA being a recent buzz word and with couple of very good implementation of it present in current market from some of the software giants, it has become absolute necessity to understand the concept first.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;FONT-WEIGHT: bold&quot;&gt;Service-Oriented Architecture&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Service-Oriented Architecture (SOA) has emerged as the leading IT agenda for infrastructure reformation, to optimize service delivery and ensure efficient business process management. Part of the paradigm shift of SOA are fundamental changes in the way IT infrastructure is designed—moving away from an application infrastructure to a converged service infrastructure. Service-Oriented Architecture enables discrete functions contained in enterprise applications to be organized as layers of interoperable, standards-based shared “services” that can be combined and reused in composite applications and processes.&lt;br /&gt;&lt;br /&gt;In addition, this architectural approach also allows the incorporation of services offered by external service providers into the enterprise IT architecture. As a result, enterprises are able to unlock key business information in disparate silos, in a cost-effective manner. By organizing enterprise IT around services instead of around applications, SOA helps companies achieve faster time-to-service and respond more flexibly to fast-paced changes in business requirements.&lt;br /&gt;&lt;br /&gt;In recent years, many enterprises have evolved from exploring pilot projects using ad-hoc adoption of SOA and expanded to a defined repeatable approach for optimized enterprise-wide SOA deployments. All layers of an IT SOA architecture have become service-enabled and comprise of presentation services, business processes, business services, data services, and shared services.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;TEXT-ALIGN: center&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhoy1FOgkBua0F69HIC6AEytnv28L7Yzs5rheQWz2xGDOFf8xTgbYT2KZRHatHpPrwAy49eTnTij-6EfPLz0B61-s0m4fskkCQOBEbRL6DXg02Uo0hzDYvr4SWboGYzTun_5Uaf1v41K6E/s1600/1.bmp&quot;&gt;&lt;img style=&quot;WIDTH: 400px; HEIGHT: 256px; CURSOR: pointer&quot; id=&quot;BLOGGER_PHOTO_ID_5648573241764705538&quot; border=&quot;0&quot; alt=&quot;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhoy1FOgkBua0F69HIC6AEytnv28L7Yzs5rheQWz2xGDOFf8xTgbYT2KZRHatHpPrwAy49eTnTij-6EfPLz0B61-s0m4fskkCQOBEbRL6DXg02Uo0hzDYvr4SWboGYzTun_5Uaf1v41K6E/s400/1.bmp&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;TEXT-ALIGN: center&quot;&gt;Fig: SOA Conceptual Architecture&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;TEXT-ALIGN: left&quot;&gt;&lt;span style=&quot;FONT-WEIGHT: bold&quot;&gt;Service Mediation Challenges&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;A major challenge for SOA initiatives is attributed to the inherently heterogeneous multi-vendor IT landscape in many enterprises, and the resultant individual silos of business information. Rather than incur the cost and complexity of replacing disparate components of legacy infrastructure, enterprises often choose to extend existing business applications as services for use in other business processes and applications.&lt;br /&gt;&lt;br /&gt;The influx of Web service interfaces to functionality within existing packaged applications, often introduces services that do not adhere to established service and compliance guidelines. This is especially true if the services are published from core enterprise systems such as CRMs, Data Warehouses, and ERPs.&lt;br /&gt;&lt;br /&gt;In the absence of robust and comprehensive service infrastructure solutions, developers have used a variety of “middleware” technologies to support program-to-program communication, such as object request brokers (ORBs), message-oriented middleware (MOM), remote procedure calls (RPC). More recently, IT infrastructure developers hard-coded complex integration logic as point-to-point connections to web services, in order to integrate disparate applications and processes. This inevitably resulted in complex service sprawls within enterprise IT environments. The following figure illustrates a typical static service integration scenario.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;TEXT-ALIGN: center&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjyK7Zlr6b3Vd2ePPfyv6R1j9YjJWRxi8oh7F3t3FP5XwFsNHcMMO2ey-dGpcP_a4r9h8eXIEact5GQ87XCtdMDZhhGx6a7E_HL3-YIQfYesJ4c1_9up2t4rxB7-qwzJXp5zaEEKKiMdNc/s1600/2.bmp&quot;&gt;&lt;img style=&quot;TEXT-ALIGN: center; MARGIN: 0px auto 10px; WIDTH: 400px; DISPLAY: block; HEIGHT: 266px; CURSOR: pointer&quot; id=&quot;BLOGGER_PHOTO_ID_5648574184837215490&quot; border=&quot;0&quot; alt=&quot;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjyK7Zlr6b3Vd2ePPfyv6R1j9YjJWRxi8oh7F3t3FP5XwFsNHcMMO2ey-dGpcP_a4r9h8eXIEact5GQ87XCtdMDZhhGx6a7E_HL3-YIQfYesJ4c1_9up2t4rxB7-qwzJXp5zaEEKKiMdNc/s400/2.bmp&quot; /&gt;&lt;/a&gt;Fig: Service Sprawl Challenge&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;TEXT-ALIGN: left&quot;&gt;&lt;/div&gt;&lt;/div&gt;The following are other service related challenges attributed to heterogeneous IT architectures:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Tightly-coupled business services integration due to complex and rigid hard-wired connections&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Difficulty managing deployed services due to disparate protocols and applications involved&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;High total cost of ownership for the enterprise&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Impaired ability to reuse services&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Inherent replication of transport, transformation, security, and routing details&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Exponential redevelopment and redeployment efforts when service end-point interfaces change&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Inevitable service disruption that significantly impact service consumers&lt;/li&gt;&lt;/ul&gt;Enterprise architects and web service modelers with goals to streamline IT infrastructure now require enterprise service capabilities that address the following IT needs:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;Simplify access and updates to data residing in different sources&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Reuse services developed across the enterprise and effectively manage their lifecycle&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Provide dynamic configuration of complex integration logic and message routing behavior&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Enable run-time configuration capabilities into the service infrastructure&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Ensure consistent use of the enterprise services&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Ensure enterprise services are secure and comply with IT policies&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Monitor and audit service usage and manage system outages&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style=&quot;FONT-WEIGHT: bold&quot;&gt;Composite Applications and Service Layering&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;In an SOA initiative, composition is an integral part of achieving business flexibility through the ability to leverage existing assets in higher-order functions.Within a mature SOA environment, complete business applications are composed using existing services to quickly meet the business needs. Flexibility in the service provisioning process, is achieved by avoiding coding logic in service implementations.&lt;br /&gt;&lt;br /&gt;Many organizations develop services at very granular levels and the proliferation of many small specific services are difficult to compose into broader logical services. Layering of Services is as a way of breaking out of the limitations of monolithic applications and shortening development, release and test cycles. By defining a layered approach to service definition and construction, the service infrastructure team can achieve the right mix of granular and course-grained services required to meet their current and future business demands. Service Layers typically comprise of the following services:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;Physical Services: that may represent functions that retrieve data in its raw form&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Canonical Services: that may define a standard view of information for the organization, leveraging industry-standard formats and supporting a very wide data footprint&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Logical Services: that provide a more client-specific granular view of information, generated at compile time using highly-optimized queries&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Application Services: that are consumed directly by applications in a line-of-business dependent fashion and may be exposed through presentation services&lt;/li&gt;&lt;/ul&gt;&lt;span style=&quot;FONT-WEIGHT: bold&quot;&gt;Service Bus Component of SOA&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The core of SOA success depends on an Enterprise Service Bus (ESB) that supports dynamic synergy and alignment of business process interactions, continual evolution of existing services and rapid addition of new ones. To realize the benefits of SOA, it is imperative that IT organizations include a robust and intelligent service intermediary that provides a layer of abstraction to mask the complexities of service integration in heterogeneous IT environments, typical in today’s enterprises. While an intermediary layer of abstraction previously implied a platform for customizing enterprise applications, today it implies toolkits for service customization and scalable infrastructures that support loosely coupled service interactions with a focus on service mediation.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;TEXT-ALIGN: center&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEieuCzrvaNbkV8j8HV60S2IMZY_HtWlzcHnET_dqbScpRiaCYF_PSNpbgCsOIoGcxF8pXNdlRFvplENqy7eu8RJ5xU1jjs5m1ujylTbNcmmPqmbSEjhq5HGQa2XDomhliDs9NIUqdN5BMU/s1600/3.bmp&quot;&gt;&lt;img style=&quot;TEXT-ALIGN: center; MARGIN: 0px auto 10px; WIDTH: 400px; DISPLAY: block; HEIGHT: 141px; CURSOR: pointer&quot; id=&quot;BLOGGER_PHOTO_ID_5648576121361818162&quot; border=&quot;0&quot; alt=&quot;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEieuCzrvaNbkV8j8HV60S2IMZY_HtWlzcHnET_dqbScpRiaCYF_PSNpbgCsOIoGcxF8pXNdlRFvplENqy7eu8RJ5xU1jjs5m1ujylTbNcmmPqmbSEjhq5HGQa2XDomhliDs9NIUqdN5BMU/s400/3.bmp&quot; /&gt;&lt;/a&gt;Fig: Enterprise Service Bus&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;ESBs have been instrumental in the evolution of integrated middleware infrastructure technology by combining features from previous technologies with new services, such as message validation, transformation, content-based routing, security and load balancing. ESBs use industry standards for most of the services they provide, thus facilitating cross-platform interoperability and becoming the logical choice for companies looking to implement SOA.&lt;br /&gt;&lt;br /&gt;An ESB provides an efficient way to build and deploy enterprise SOA. ESB is a concept that has gained the attention of architects and developers, as it provides an effective approach to solving common SOA hurdles associated with service orchestration, application data synchronization, and business activity monitoring. In its most basic form, an ESB offers the following key features:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;Web services: support for SOAP, WSDL and UDDI, as well as emerging standards such as WS-Reliable Messaging and WS-Security&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Messaging: asynchronous store-and-forward delivery with multiple qualities of service&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Data transformation: XML to XML&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Content-based routing: publish and subscribe routing across multiple types of sources and destinations&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Platform-neutral: connect to any technology in the enterprise, e.g. Java, .Net, mainframes, and databases&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;TEXT-ALIGN: center&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhEUZrqmlcIbtp8F5nAZAmbIaeLNz1ojEIX9PBuxxBjUz1OG3q7SCvqzNb6I2XZclRg_ogzjJ_xZaWwxsPqkHGRtcvswZPnoLyTLvv6bspaFu8eQNzwiKS6vj6jLINQ3ALRh4Mul1O9RXc/s1600/4.bmp&quot;&gt;&lt;img style=&quot;TEXT-ALIGN: center; MARGIN: 0px auto 10px; WIDTH: 400px; DISPLAY: block; HEIGHT: 227px; CURSOR: pointer&quot; id=&quot;BLOGGER_PHOTO_ID_5648576881423740226&quot; border=&quot;0&quot; alt=&quot;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhEUZrqmlcIbtp8F5nAZAmbIaeLNz1ojEIX9PBuxxBjUz1OG3q7SCvqzNb6I2XZclRg_ogzjJ_xZaWwxsPqkHGRtcvswZPnoLyTLvv6bspaFu8eQNzwiKS6vj6jLINQ3ALRh4Mul1O9RXc/s400/4.bmp&quot; /&gt;&lt;/a&gt;Fig: ESB Architecture&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;TEXT-ALIGN: left&quot;&gt;A robust SOA suite offers:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;Adapters, to enable connectivity into packaged and custom enterprise applications, as well as leading technologies.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Distributed query engine, for easily enabling the creation of data services out of heterogeneous data sources&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Service orchestration engine, for both long-running (stateful) and short-running (stateless) processes&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Application development tools, to enable the rapid creation of user-facing applications&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Presentation services, to enable the creation of personalized portals that aggregate services from multiple sources&lt;/li&gt;&lt;/ul&gt;Using ESBs offers greater flexibility for enterprises to connect heterogeneous resources, by eliminating the need for brittle high-maintenance point-to-point connections. Adding an ESB intermediary between service consumers and service providers, shields them from the implementation details of underlying service end-point interfaces, reducing or eliminating the redevelopment and redeployment impacts at the service-consumer level.&lt;br /&gt;&lt;br /&gt;Best in class enterprises have achieved SOA success by harnessing high-speed enterprise-ready ESB intermediaries that strategically integrate service mediation capabilities and business process management functionality. Recognizing the significance of operational service management as a critical SOA success factor, they have implemented solutions that provide enterprise-class service scalability, reliability, customization and security. By adopting such solutions built specifically for management and governance of an SOA service lifecycle, these enterprises have obtained the following business benefits:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;Minimized costs by accelerating SOA deployment initiatives&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Ensured customer satisfaction by assurance of continuous service availability&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Insulated service consumers to changes in service infrastructure by virtualizing service end points&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Maximized ROI by leveraging shared services infrastructure and using consistent modeling methodologies&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Reduced integration burden by simplifying service interactions&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Improved effectiveness of SOA initiatives through accurate run-time governance of shared services&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Justification of SOA spending by inventory and tracking of run-time services&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Accurate cost benefit decisions by measuring the benefit or cost avoidance obtained through SOA&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;div style=&quot;TEXT-ALIGN: center&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPDVRuD18xdtMbPW4IC3lKLp5x57nLwjA2Q7JX-hMeRkcU1EeTKRFT9tAEGXoA-XnCLcO3nHGHy0jPntt6ql3lPLTIYhDTtYbn824MfMG1FZpQsYDLP2r6Ck6Tly1l9ywSpAWk2DGNzNE/s1600/5.bmp&quot;&gt;&lt;img style=&quot;TEXT-ALIGN: center; MARGIN: 0px auto 10px; WIDTH: 400px; DISPLAY: block; HEIGHT: 169px; CURSOR: pointer&quot; id=&quot;BLOGGER_PHOTO_ID_5648577835521556210&quot; border=&quot;0&quot; alt=&quot;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPDVRuD18xdtMbPW4IC3lKLp5x57nLwjA2Q7JX-hMeRkcU1EeTKRFT9tAEGXoA-XnCLcO3nHGHy0jPntt6ql3lPLTIYhDTtYbn824MfMG1FZpQsYDLP2r6Ck6Tly1l9ywSpAWk2DGNzNE/s400/5.bmp&quot; /&gt;&lt;/a&gt;Fig: Enterprise Integration for SOA&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;TEXT-ALIGN: left&quot;&gt;&lt;br /&gt;Hope this will help to understand the concept and drive of the SOA initiative. My many thanks to one of the leading SOA implementation vendor document to put up this post together. &lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saumajitdas.blogspot.com/feeds/8109232255098866551/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://saumajitdas.blogspot.com/2011/09/soa-concept-and-role-of-esb-in-it-this.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8621947959552664387/posts/default/8109232255098866551'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8621947959552664387/posts/default/8109232255098866551'/><link rel='alternate' type='text/html' href='http://saumajitdas.blogspot.com/2011/09/soa-concept-and-role-of-esb-in-it-this.html' title='SOA concept and role of an ESB in it'/><author><name>- Saumajit (http://saumajitdas.blogspot.com/)</name><uri>http://www.blogger.com/profile/07382150935096179034</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6qi93v-aNPC1o6Z0ZTap6RPlGjui-v_puEhrzcE118t-WxhhHjrLm9tiSnO2IbY7AOVmBarqN1K47wbUamo6vDj4CVXXYeCX-R1oDmJ4J2C5US5OYeqWenP2aQ5h5Ew/s113/Capture.PNG'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhoy1FOgkBua0F69HIC6AEytnv28L7Yzs5rheQWz2xGDOFf8xTgbYT2KZRHatHpPrwAy49eTnTij-6EfPLz0B61-s0m4fskkCQOBEbRL6DXg02Uo0hzDYvr4SWboGYzTun_5Uaf1v41K6E/s72-c/1.bmp" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8621947959552664387.post-6056544431750851906</id><published>2010-09-28T21:10:00.009+02:00</published><updated>2011-10-07T07:28:52.629+02:00</updated><title type='text'>Browsing your destinations using Hermes</title><content type='html'>When we talk about the Messaging Middleware, administering the destinations is a must-have feature. A lot of queries come &#39;How to browse, search, copy, and delete messages from destinations&#39;...&lt;br /&gt;&lt;br /&gt;The WebLogic Server Administration Console comes with the feature to monitor and view JMS messages from WebLogic 9.x onwards.  However it is a web-based (console) tool that is optimized for configuration, not monitoring and development testing. It can not do some advanced JMS activities like copy messages from one queue to another very easily. HermesJMS is an extensible console that helps you interact with JMS providers making it easy to browse or search queues and topics, copy messages around and delete them. It fully integrates with JNDI letting you discover administered objects stored, create JMS sessions from the connection factories and use any destinations found. Many providers include a plug-in that uses the native API to do non-JMS things like getting queue depths (and other statistics) or finding queue and topic names.&lt;br /&gt;&lt;br /&gt;This little but powerful tool works with many of the popular JMS providers such as WebLogic JMS, Tibco EMS, JBoss MQ, Sonic MQ, WebSphere MQ, OpenJMS, SAP etc.&lt;br /&gt;&lt;br /&gt;In this post we will see how to get Hermes installed and configured for use with WebLogic JMS.&lt;br /&gt;&lt;br /&gt;1&gt; Download the installer from &lt;a href=&quot;http://sourceforge.net/projects/hermesjms/files/&quot;&gt;HERE&lt;/a&gt;&lt;br /&gt;2&gt; Run “java –jar hermes-installer-1.13.jar” (at the time of writing this post the version available is 1.13, you may have a different JAR file name) in the directory where you have placed the installer jar.&lt;br /&gt;3&gt; Edit the &lt;HERMES_HOME&gt;/bin/hermes.bat or hermes.sh and set JAVA_HOME (if you do not have it set at the System level)&lt;br /&gt;4&gt; Create JMS module &gt; Connection Factory &gt; Destination (If you have an already existing Destination on WLS, then you may skip this point).&lt;br /&gt;5&gt; Launch Hermes by calling the hermes.bat&lt;br /&gt;6&gt; Right click on “sessions” and select “new -&gt; New session”&lt;br /&gt;7&gt; Go to the “providers” tab at the bottom and add a “group” called “weblogic10” and a “library” specifying your path to weblogic.jar. Select “Don’t Scan” when prompted. (I am using WLS 10.0 GA for this posting)&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh3d7o9To1AVzyWNJsqP19QlpOu67Ta84x4VWGz-ZbjCedgDoCffVHO14PlN7j0lvQEHzBU3qJRCXhaiACEqRfoS_X6hpasd8fIrf9fMUMXBrZ24UsLuoqN1UGDXSFAG7L_Or2XPeB8LX0/s1600/11.JPG&quot;&gt;&lt;img style=&quot;cursor:pointer; cursor:hand;width: 392px; height: 400px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh3d7o9To1AVzyWNJsqP19QlpOu67Ta84x4VWGz-ZbjCedgDoCffVHO14PlN7j0lvQEHzBU3qJRCXhaiACEqRfoS_X6hpasd8fIrf9fMUMXBrZ24UsLuoqN1UGDXSFAG7L_Or2XPeB8LX0/s400/11.JPG&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5522044323593079490&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;8&gt; Save the configuration.&lt;br /&gt;9&gt; Click on the “Sessions” tab. Enter a name for the session (in this case “examplesQCF”). Select “BEA WebLogic” for the “Plug In” section from the dropdown. In the “Connection Factory”, select “weblogic10” for the loader. For the properties values refer the below image (binding, URL and credentials would be specific to your WLS settings).&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjk5xuntnoxrTuZ70a4coJ9f_cgrl1S-WuOCWcMLMdMhVUklot476EqODhjD8-1XJHwjMUc-GzGuB93zfOgtcDS51BocLfH9nTTkpB4CmoOQOVlJ3WijAWl9H_sm8MZ4V76C-pW09MUFEE/s1600/12.JPG&quot;&gt;&lt;img style=&quot;cursor:pointer; cursor:hand;width: 302px; height: 400px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjk5xuntnoxrTuZ70a4coJ9f_cgrl1S-WuOCWcMLMdMhVUklot476EqODhjD8-1XJHwjMUc-GzGuB93zfOgtcDS51BocLfH9nTTkpB4CmoOQOVlJ3WijAWl9H_sm8MZ4V76C-pW09MUFEE/s400/12.JPG&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5522044528489531426&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;10&gt; Now right click on the newly created “examplesQCF” session and select Discover. It would list all the available destinations under the examplesQCF session.&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj35G_0GiJZc5sQn-Elp7MvrxVGXKhym_rTWZxvaCXOiaQWz1WkYyGsHXFLsAY6dNJ46LAseiHEZkW52nR9OnT2gv3IQI0ZUY-Skz93jU48AXDC9jwuVIyfhi1A2FbMsh8_57q2h4h0nFc/s1600/13.JPG&quot;&gt;&lt;img style=&quot;cursor:pointer; cursor:hand;width: 210px; height: 289px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj35G_0GiJZc5sQn-Elp7MvrxVGXKhym_rTWZxvaCXOiaQWz1WkYyGsHXFLsAY6dNJ46LAseiHEZkW52nR9OnT2gv3IQI0ZUY-Skz93jU48AXDC9jwuVIyfhi1A2FbMsh8_57q2h4h0nFc/s400/13.JPG&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5522044630087405954&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;11&gt; Now right click on a single entry under the Session and select “Browse”, you should be able to see the contents of the queue.&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUQjkbfqu7AZXBlWWpriYM-V0v5ckIBTkds5bCs9QJIGz9KsSW7rGQ_G8m8H6nOIkR5IRysCW5SCcckM6qPaL61TvaxPEI1Vdfz3dTsrSMG5R5l5uL7HdDVlkrmKiXuzzoggXaH9ClLII/s1600/14.JPG&quot;&gt;&lt;img style=&quot;cursor:pointer; cursor:hand;width: 400px; height: 209px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUQjkbfqu7AZXBlWWpriYM-V0v5ckIBTkds5bCs9QJIGz9KsSW7rGQ_G8m8H6nOIkR5IRysCW5SCcckM6qPaL61TvaxPEI1Vdfz3dTsrSMG5R5l5uL7HdDVlkrmKiXuzzoggXaH9ClLII/s400/14.JPG&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5522044778035648674&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;If you are able to see something very similar like the snapshot above, that mean you have configured the Hermes properly.</content><link rel='replies' type='application/atom+xml' href='http://saumajitdas.blogspot.com/feeds/6056544431750851906/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://saumajitdas.blogspot.com/2010/09/browsing-your-destinations.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8621947959552664387/posts/default/6056544431750851906'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8621947959552664387/posts/default/6056544431750851906'/><link rel='alternate' type='text/html' href='http://saumajitdas.blogspot.com/2010/09/browsing-your-destinations.html' title='Browsing your destinations using Hermes'/><author><name>- Saumajit (http://saumajitdas.blogspot.com/)</name><uri>http://www.blogger.com/profile/07382150935096179034</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6qi93v-aNPC1o6Z0ZTap6RPlGjui-v_puEhrzcE118t-WxhhHjrLm9tiSnO2IbY7AOVmBarqN1K47wbUamo6vDj4CVXXYeCX-R1oDmJ4J2C5US5OYeqWenP2aQ5h5Ew/s113/Capture.PNG'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh3d7o9To1AVzyWNJsqP19QlpOu67Ta84x4VWGz-ZbjCedgDoCffVHO14PlN7j0lvQEHzBU3qJRCXhaiACEqRfoS_X6hpasd8fIrf9fMUMXBrZ24UsLuoqN1UGDXSFAG7L_Or2XPeB8LX0/s72-c/11.JPG" height="72" width="72"/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8621947959552664387.post-4614170497787311745</id><published>2010-07-27T20:11:00.006+02:00</published><updated>2011-10-07T07:28:52.629+02:00</updated><title type='text'>What is a connector (resource adapter)?</title><content type='html'>Connectors as the name specifies, are nothing but the way of connecting to different components of an enterprise infrastructure more like an USB (plug and play) components. And the specification it adheares to is the Java Connector Architecture (JCA).&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhD2OhgW4PzJAeI3xqBQDBuMN_n9KVzRREVxw5igTUuzeHW3KO03S3rdu2DpP_dJU4t6h1esHndvBm5N123Figlft3V-HG1nHs97F70oMmKHtxwpPEuUgLDJ8iOpfaMdZq9z0H1OSNOJZM/s1600/connector.JPG&quot;&gt;&lt;img style=&quot;cursor:pointer; cursor:hand;width: 400px; height: 194px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhD2OhgW4PzJAeI3xqBQDBuMN_n9KVzRREVxw5igTUuzeHW3KO03S3rdu2DpP_dJU4t6h1esHndvBm5N123Figlft3V-HG1nHs97F70oMmKHtxwpPEuUgLDJ8iOpfaMdZq9z0H1OSNOJZM/s400/connector.JPG&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5498650919018296210&quot; /&gt;&lt;/a&gt;&lt;br /&gt;The J2EE Connector Architecture defines standard Java interfaces for simplifying the integration of enterprise applications with J2EE-based Java applications. With these interfaces, Java developers can access existing databases, ERP applications and legacy systems. The connector, also known as a &quot;resource adapter,&quot; appears as a component library that the developer can access via Java programming language.&lt;br /&gt;&lt;br /&gt;The JCA has two basic components, the Common Client Interface (CCI) and a set of system-specific services. An adapter developer provides an interface to CCI along with its side of the system contracts specified as part of the connector architecture. The application server vendor implements its side of the system contracts as part of its base J2EE platform.&lt;br /&gt;&lt;br /&gt;CCI is a programming interface that application developers and client programs can use to connect and access back-end systems. It is a low-level API and similar to JDBC. Unlike JDBC, however, CCI can work with nonrelational systems. CCI manages the flow of data between the application and the back-end system and does not have any visibility into what the container and the application server are doing. Although it is possible for application developers to call the CCI directly, in most cases, an application developer will write to an abstraction layer, provided by the connector provider or enterprise application integration (EAI) framework vendor, to simplify the development process.&lt;br /&gt;&lt;br /&gt;On the platform side, JCA defines a set of service contracts that a connector developer can expect will be available to the adapter at application runtime. Like CCI, the specification defines what services need to be present, and again, it is up to the application server vendor to provide the actual implementation.&lt;br /&gt;&lt;br /&gt;To enable seamless integration with an application server, a resource adapter must abide by guidelines, known as system-level contracts. These contracts specify how a system external to the J2EE platform can integrate with it by supporting basic functions that are handled by the J2EE container. There are three major categories of these functions:&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Connection management&lt;/u&gt;&lt;br /&gt;The connection management contract allows applications to connect to an EIS. It also enables the application server to utilize pooling.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Transaction management&lt;/u&gt;&lt;br /&gt;The transaction management contact allows an application to manage and perform transactional access across one to many EIS resource managers.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Security&lt;/u&gt;&lt;br /&gt;The security contract provides support for secure access to the EIS.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;How to build your own adapter&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;In this post we will try to demonstrate how to implement a JCA adapter - a set of classes with which a J2EE application server targets a particular enterprise system. A JCA adapter functions similarly to how a JDBC driver connects to databases. Developing a full-featured JCA adapter is a complex task. However, by the end, you will understand a basic JCA adapter&#39;s construction, and grasp the effort required to build your own.&lt;br /&gt;&lt;br /&gt;This sample adapter will actually connect to an enterprise system. It only implements (for demonstration purpose) the interfaces required to deploy an adapter and look up a connection. (And we are not going to use Common Client Interfaces [CCI] either).&lt;br /&gt;&lt;br /&gt;The adapter includes two class categories:&lt;br /&gt;&lt;br /&gt;Managed classes: The application server calls managed classes to perform the connection management, required only if the application server is managing the connection through a connection pool.&lt;br /&gt;&lt;br /&gt;Physical connection classes: These classes can get called by the managed classes to establish the connection to an EIS (enterprise information systems).&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;MyManagedConnectionFactory&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;With the MyManagedConnectionFactory class, which implements the ManagedConnectionFacytory interface, you create the MyConnectionFactory and MyManagedConnection classes. The MyManagedConnectionFactory class is the main entry point for the application server to invoke the adapter:&lt;br /&gt;&lt;br /&gt;package org.acme.jca;&lt;br /&gt;import java.io.PrintWriter;&lt;br /&gt;import java.io.Serializable;&lt;br /&gt;import java.sql.DriverManager;&lt;br /&gt;import java.util.Iterator;&lt;br /&gt;import java.util.Set;&lt;br /&gt;import javax.resource.ResourceException;&lt;br /&gt;import javax.resource.spi.*;&lt;br /&gt;import javax.security.auth.Subject;&lt;br /&gt;public class MyManagedConnectionFactory&lt;br /&gt;    implements ManagedConnectionFactory, Serializable&lt;br /&gt;{&lt;br /&gt;    public MyManagedConnectionFactory() {&lt;br /&gt;        System.out.println(&quot;In MyManagedConnectionFactory.constructor&quot;);&lt;br /&gt;    }&lt;br /&gt;    public Object createConnectionFactory(ConnectionManager cxManager) throws ResourceException {&lt;br /&gt;        System.out.println(&quot;In MyManagedConnectionFactory.createConnectionFactory,1&quot;);&lt;br /&gt;        return new MyDataSource(this, cxManager);&lt;br /&gt;    }&lt;br /&gt;    public Object createConnectionFactory() throws ResourceException {&lt;br /&gt;              System.out.println(&quot;In MyManagedConnectionFactory.createManagedFactory,2&quot;);&lt;br /&gt;        return new MyDataSource(this, null);&lt;br /&gt;    }&lt;br /&gt;    public ManagedConnection createManagedConnection(Subject subject, ConnectionRequestInfo info) {&lt;br /&gt;        System.out.println(&quot;In MyManagedConnectionFactory.createManagedConnection&quot;);&lt;br /&gt;        return new MyManagedConnection(this, &quot;test&quot;);&lt;br /&gt;    }&lt;br /&gt;    public ManagedConnection matchManagedConnections(Set connectionSet, Subject subject, ConnectionRequestInfo info)&lt;br /&gt;        throws ResourceException&lt;br /&gt;    {&lt;br /&gt;        System.out.println(&quot;In MyManagedConnectionFactory.matchManagedConnections&quot;);&lt;br /&gt;        return null;&lt;br /&gt;    }&lt;br /&gt;    public void setLogWriter(PrintWriter out) throws ResourceException {&lt;br /&gt;        System.out.println(&quot;In MyManagedConnectionFactory.setLogWriter&quot;);&lt;br /&gt;    }&lt;br /&gt;    public PrintWriter getLogWriter() throws ResourceException {&lt;br /&gt;        System.out.println(&quot;In MyManagedConnectionFactory.getLogWriter&quot;);&lt;br /&gt;        return DriverManager.getLogWriter();&lt;br /&gt;    }&lt;br /&gt;    public boolean equals(Object obj) {&lt;br /&gt;        if(obj == null)&lt;br /&gt;            return false;&lt;br /&gt;        if(obj instanceof MyManagedConnectionFactory)&lt;br /&gt;        {&lt;br /&gt;            int hash1 = ((MyManagedConnectionFactory)obj).hashCode();&lt;br /&gt;            int hash2 = hashCode();&lt;br /&gt;            return hash1 == hash2;&lt;br /&gt;        }&lt;br /&gt;        else&lt;br /&gt;        {&lt;br /&gt;            return false;&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;    public int hashCode()&lt;br /&gt;    {&lt;br /&gt;              return 1;&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;MyManagedConnection&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The MyManagedConnection class implements the ManagedConnection interface. MyManagedConnection encapsulates the adapter&#39;s physical connection, in this case the MyConnection class:&lt;br /&gt;&lt;br /&gt;package org.acme.jca;&lt;br /&gt;import java.io.PrintWriter;&lt;br /&gt;import java.sql.Connection;&lt;br /&gt;import java.sql.SQLException;&lt;br /&gt;import java.util.*;&lt;br /&gt;import javax.resource.NotSupportedException;&lt;br /&gt;import javax.resource.ResourceException;&lt;br /&gt;import javax.resource.spi.*;&lt;br /&gt;import javax.security.auth.Subject;&lt;br /&gt;import javax.transaction.xa.XAResource;&lt;br /&gt;public class MyManagedConnection&lt;br /&gt;  implements ManagedConnection&lt;br /&gt;{&lt;br /&gt;     private MyConnectionEventListener myListener;&lt;br /&gt;     private String user;&lt;br /&gt;     private ManagedConnectionFactory mcf;&lt;br /&gt;     private PrintWriter logWriter;&lt;br /&gt;     private boolean destroyed;&lt;br /&gt;     private Set connectionSet;&lt;br /&gt;  MyManagedConnection(ManagedConnectionFactory mcf, String user)&lt;br /&gt;  {&lt;br /&gt;    System.out.println(&quot;In MyManagedConnection&quot;);&lt;br /&gt;    this.mcf = mcf;&lt;br /&gt;    this.user = user;&lt;br /&gt;    connectionSet = new HashSet();&lt;br /&gt;    myListener = new MyConnectionEventListener(this);&lt;br /&gt;  }&lt;br /&gt;  private void throwResourceException(SQLException ex)&lt;br /&gt;    throws ResourceException&lt;br /&gt;  {&lt;br /&gt;    ResourceException re = new ResourceException(&quot;SQLException: &quot; +&lt;br /&gt;ex.getMessage());&lt;br /&gt;    re.setLinkedException(ex);&lt;br /&gt;    throw re;&lt;br /&gt;  }&lt;br /&gt;  public Object getConnection(Subject subject, ConnectionRequestInfo&lt;br /&gt;connectionRequestInfo)&lt;br /&gt;    throws ResourceException&lt;br /&gt;  {&lt;br /&gt;    System.out.println(&quot;In MyManagedConnection.getConnection&quot;);&lt;br /&gt;    MyConnection myCon = new MyConnection(this);&lt;br /&gt;    addMyConnection(myCon);&lt;br /&gt;    return myCon;&lt;br /&gt;  }&lt;br /&gt;  public void destroy()&lt;br /&gt;  {&lt;br /&gt;        System.out.println(&quot;In MyManagedConnection.destroy&quot;);&lt;br /&gt;        destroyed = true;&lt;br /&gt;  }&lt;br /&gt;  public void cleanup()&lt;br /&gt;   {&lt;br /&gt;        System.out.println(&quot;In MyManagedConnection.cleanup&quot;);&lt;br /&gt;  }&lt;br /&gt;  public void associateConnection(Object connection)&lt;br /&gt;   {&lt;br /&gt;        System.out.println(&quot;In MyManagedConnection.associateConnection&quot;);&lt;br /&gt;  }&lt;br /&gt;  public void addConnectionEventListener(ConnectionEventListener listener)&lt;br /&gt;  {&lt;br /&gt;        System.out.println(&quot;In MyManagedConnection.addConnectionEventListener&quot;);&lt;br /&gt;    myListener.addConnectorListener(listener);&lt;br /&gt;  }&lt;br /&gt;  public void removeConnectionEventListener(ConnectionEventListener listener)&lt;br /&gt;  {&lt;br /&gt;        System.out.println(&quot;In MyManagedConnection.removeConnectionEventListener&quot;);&lt;br /&gt;    myListener.removeConnectorListener(listener);&lt;br /&gt;  }&lt;br /&gt;  public XAResource getXAResource()&lt;br /&gt;    throws ResourceException&lt;br /&gt;  {&lt;br /&gt;        System.out.println(&quot;In MyManagedConnection.getXAResource&quot;);&lt;br /&gt;    return null;&lt;br /&gt;  }&lt;br /&gt;  public LocalTransaction getLocalTransaction()&lt;br /&gt;  {&lt;br /&gt;           System.out.println(&quot;In MyManagedConnection.getLocalTransaction&quot;);&lt;br /&gt;      return null;&lt;br /&gt;  }&lt;br /&gt;  public ManagedConnectionMetaData getMetaData()&lt;br /&gt;    throws ResourceException&lt;br /&gt;  {&lt;br /&gt;    System.out.println(&quot;In MyManagedConnection.getMetaData&quot;);&lt;br /&gt;    return new MyConnectionMetaData(this);&lt;br /&gt;  }&lt;br /&gt;  public void setLogWriter(PrintWriter out)&lt;br /&gt;    throws ResourceException&lt;br /&gt;  {&lt;br /&gt;        System.out.println(&quot;In MyManagedConnection.setLogWriter&quot;);&lt;br /&gt;    logWriter = out;&lt;br /&gt;  }&lt;br /&gt;  public PrintWriter getLogWriter()&lt;br /&gt;    throws ResourceException&lt;br /&gt;  {&lt;br /&gt;        System.out.println(&quot;In MyManagedConnection.getLogWriter&quot;);&lt;br /&gt;    return logWriter;&lt;br /&gt;  }&lt;br /&gt;  Connection getMyConnection()&lt;br /&gt;    throws ResourceException&lt;br /&gt;  {&lt;br /&gt;        System.out.println(&quot;In MyManagedConnection.getMyConnection&quot;);&lt;br /&gt;    return null;&lt;br /&gt;  }&lt;br /&gt;  boolean isDestroyed()&lt;br /&gt;  {&lt;br /&gt;        System.out.println(&quot;In MyManagedConnection.isDestroyed&quot;);&lt;br /&gt;    return destroyed;&lt;br /&gt;  }&lt;br /&gt;  String getUserName()&lt;br /&gt;  {&lt;br /&gt;        System.out.println(&quot;In MyManagedConnection.getUserName&quot;);&lt;br /&gt;    return user;&lt;br /&gt;  }&lt;br /&gt;  void sendEvent(int eventType, Exception ex)&lt;br /&gt;  {&lt;br /&gt;        System.out.println(&quot;In MyManagedConnection.sendEvent,1&quot;);&lt;br /&gt;    myListener.sendEvent(eventType, ex, null);&lt;br /&gt;  }&lt;br /&gt;  void sendEvent(int eventType, Exception ex, Object connectionHandle)&lt;br /&gt;  {&lt;br /&gt;        System.out.println(&quot;In MyManagedConnection.sendEvent,2 &quot;);&lt;br /&gt;    myListener.sendEvent(eventType, ex, connectionHandle);&lt;br /&gt;  }&lt;br /&gt;  void removeMyConnection(MyConnection myCon)&lt;br /&gt;  {&lt;br /&gt;        System.out.println(&quot;In MyManagedConnection.removeMyConnection&quot;);&lt;br /&gt;    connectionSet.remove(myCon);&lt;br /&gt;  }&lt;br /&gt;  void addMyConnection(MyConnection myCon)&lt;br /&gt;  {&lt;br /&gt;        System.out.println(&quot;In MyManagedConnection.addMyConnection&quot;);&lt;br /&gt;    connectionSet.add(myCon);&lt;br /&gt;  }&lt;br /&gt;  ManagedConnectionFactory getManagedConnectionFactory()&lt;br /&gt;  {&lt;br /&gt;        System.out.println(&quot;In MyManagedConnection.getManagedConnectionFactory&quot;);&lt;br /&gt;    return mcf;&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;MyConnectionEventListener&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;For its part, the MyConnectionEventListener class allows the application server to register callbacks for the adapter. The application server can then perform operations, connection-pool maintenance, for example, based on the connection state: &lt;br /&gt;&lt;br /&gt;package org.acme.jca;&lt;br /&gt;import java.util.Vector;&lt;br /&gt;import javax.resource.spi.ConnectionEvent;&lt;br /&gt;import javax.resource.spi.ConnectionEventListener;&lt;br /&gt;import javax.resource.spi.ManagedConnection;&lt;br /&gt;public class MyConnectionEventListener&lt;br /&gt;    implements javax.sql.ConnectionEventListener&lt;br /&gt;{&lt;br /&gt;    private Vector listeners;&lt;br /&gt;    private ManagedConnection mcon;&lt;br /&gt;    public MyConnectionEventListener(ManagedConnection mcon)&lt;br /&gt;    {&lt;br /&gt;        System.out.println(&quot;In MyConnectionEventListener&quot;);&lt;br /&gt;        this.mcon = mcon;&lt;br /&gt;    }&lt;br /&gt;    public void sendEvent(int eventType, Exception ex, Object connectionHandle)&lt;br /&gt;    {&lt;br /&gt;        System.out.println(&quot;In MyConnectionEventListener.sendEvent&quot;);&lt;br /&gt;    }&lt;br /&gt;    public void addConnectorListener(ConnectionEventListener l)&lt;br /&gt;    {&lt;br /&gt;        System.out.println(&quot;In MyConnectionEventListener.addConnectorListener&quot;);&lt;br /&gt;    }&lt;br /&gt;    public void removeConnectorListener(ConnectionEventListener l)&lt;br /&gt;    {&lt;br /&gt;        System.out.println(&quot;In MyConnectionEventListener.removeConnectorListener&quot;);&lt;br /&gt;    }&lt;br /&gt;    public void connectionClosed(javax.sql.ConnectionEvent connectionevent)&lt;br /&gt;    {&lt;br /&gt;        System.out.println(&quot;In MyConnectionEventListener.connectorClosed&quot;);&lt;br /&gt;    }&lt;br /&gt;    public void connectionErrorOccurred(javax.sql.ConnectionEvent event)&lt;br /&gt;    {&lt;br /&gt;        System.out.println(&quot;In MyConnectionEventListener.connectorErrorOccurred&quot;);&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;MyConnectionMetaData&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The MyConnectionMetaData class provides meta information -- product name, the maximum number of connections allowed, and so on -- regarding the managed connection and the underlying physical connection class:&lt;br /&gt;&lt;br /&gt;package org.acme.jca;&lt;br /&gt;import javax.resource.ResourceException;&lt;br /&gt;import javax.resource.spi.*;&lt;br /&gt;public class MyConnectionMetaData&lt;br /&gt;    implements ManagedConnectionMetaData&lt;br /&gt;{&lt;br /&gt;    private MyManagedConnection mc;&lt;br /&gt;    public MyConnectionMetaData(MyManagedConnection mc)&lt;br /&gt;    {&lt;br /&gt;        System.out.println(&quot;In MyConnectionMetaData.constructor&quot;);&lt;br /&gt;        this.mc = mc;&lt;br /&gt;    }&lt;br /&gt;    public String getEISProductName()&lt;br /&gt;        throws ResourceException&lt;br /&gt;    {&lt;br /&gt;        System.out.println(&quot;In MyConnectionMetaData.getEISProductName&quot;);&lt;br /&gt;        return &quot;myJCA&quot;;&lt;br /&gt;    }&lt;br /&gt;    public String getEISProductVersion()&lt;br /&gt;        throws ResourceException&lt;br /&gt;    {&lt;br /&gt;        System.out.println(&quot;In MyConnectionMetaData.getEISProductVersion&quot;);&lt;br /&gt;        return &quot;1.0&quot;;&lt;br /&gt;    }&lt;br /&gt;    public int getMaxConnections()&lt;br /&gt;        throws ResourceException&lt;br /&gt;    {&lt;br /&gt;            System.out.println(&quot;In MyConnectionMetaData.getMaxConnections&quot;);&lt;br /&gt;            return 5;&lt;br /&gt;    }&lt;br /&gt;    public String getUserName()&lt;br /&gt;        throws ResourceException&lt;br /&gt;    {&lt;br /&gt;           return mc.getUserName();&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;MyConnection&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The MyConnection class, which represents the underlying physical connection to the EIS. MyConnection is one of the few classes that does not implement an interface in the JCA specification. The implementation below is simplistic, but a working implementation might contain connectivity code using sockets, as well as other functionality:&lt;br /&gt;&lt;br /&gt;package org.acme.jca;&lt;br /&gt;public class MyConnection&lt;br /&gt;{&lt;br /&gt;    private MyManagedConnection mc;&lt;br /&gt;    public MyConnection(MyManagedConnection mc)&lt;br /&gt;    {&lt;br /&gt;        System.out.println(&quot;In MyConnection&quot;);&lt;br /&gt;        this.mc = mc;&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;MyConnectionRequestInfo&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The MyConnectionRequestInfo class contains the data (such as the user name, password, and other information) necessary to establish a connection:&lt;br /&gt;&lt;br /&gt;package org.acme.jca;&lt;br /&gt;import javax.resource.spi.ConnectionRequestInfo;&lt;br /&gt;public class MyConnectionRequestInfo&lt;br /&gt;    implements ConnectionRequestInfo&lt;br /&gt;{&lt;br /&gt;    private String user;&lt;br /&gt;    private String password;&lt;br /&gt;    public MyConnectionRequestInfo(String user, String password)&lt;br /&gt;    {&lt;br /&gt;        System.out.println(&quot;In MyConnectionRequestInfo&quot;);&lt;br /&gt;        this.user = user;&lt;br /&gt;        this.password = password;&lt;br /&gt;    }&lt;br /&gt;    public String getUser()&lt;br /&gt;    {&lt;br /&gt;        System.out.println(&quot;In MyConnectionRequestInfo.getUser&quot;);&lt;br /&gt;        return user;&lt;br /&gt;    }&lt;br /&gt;    public String getPassword()&lt;br /&gt;    {&lt;br /&gt;        System.out.println(&quot;In MyConnectionRequestInfo.getPassword&quot;);&lt;br /&gt;        return password;&lt;br /&gt;    }&lt;br /&gt;    public boolean equals(Object obj)&lt;br /&gt;    {&lt;br /&gt;        System.out.println(&quot;In MyConnectionRequestInfo.equals&quot;);&lt;br /&gt;        if(obj == null)&lt;br /&gt;            return false;&lt;br /&gt;        if(obj instanceof MyConnectionRequestInfo)&lt;br /&gt;        {&lt;br /&gt;            MyConnectionRequestInfo other = (MyConnectionRequestInfo)obj;&lt;br /&gt;            return isEqual(user, other.user) &amp;&amp; isEqual(password, other.password);&lt;br /&gt;        } else&lt;br /&gt;        {&lt;br /&gt;            return false;&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;    public int hashCode()&lt;br /&gt;    {&lt;br /&gt;        System.out.println(&quot;In MyConnectionRequestInfo.hashCode&quot;);&lt;br /&gt;        String result = &quot;&quot; + user + password;&lt;br /&gt;        return result.hashCode();&lt;br /&gt;    }&lt;br /&gt;    private boolean isEqual(Object o1, Object o2)&lt;br /&gt;    {&lt;br /&gt;        System.out.println(&quot;In MyConnectionRequestInfo.isEqual&quot;);&lt;br /&gt;        if(o1 == null)&lt;br /&gt;            return o2 == null;&lt;br /&gt;        else&lt;br /&gt;            return o1.equals(o2);&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;MyDataSource&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The MyDataSource class serves as a connection factory for the underlying connections. Because the sample adapter does not implement the CCI interfaces, it implements the DataSource interface in the javax.sql package:&lt;br /&gt;&lt;br /&gt;package org.acme.jca;&lt;br /&gt;import java.io.PrintWriter;&lt;br /&gt;import java.io.Serializable;&lt;br /&gt;import java.sql.*;&lt;br /&gt;import javax.naming.Reference;&lt;br /&gt;import javax.resource.Referenceable;&lt;br /&gt;import javax.resource.ResourceException;&lt;br /&gt;import javax.resource.spi.ConnectionManager;&lt;br /&gt;import javax.resource.spi.ManagedConnectionFactory;&lt;br /&gt;import javax.sql.DataSource;&lt;br /&gt;public class MyDataSource&lt;br /&gt;    implements DataSource, Serializable, Referenceable&lt;br /&gt;{&lt;br /&gt;    private String desc;&lt;br /&gt;    private ManagedConnectionFactory mcf;&lt;br /&gt;    private ConnectionManager cm;&lt;br /&gt;    private Reference reference;&lt;br /&gt;    public MyDataSource(ManagedConnectionFactory mcf, ConnectionManager cm)&lt;br /&gt;    {&lt;br /&gt;        System.out.println(&quot;In MyDataSource&quot;);&lt;br /&gt;        this.mcf = mcf;&lt;br /&gt;        if(cm == null)&lt;br /&gt;            this.cm = new MyConnectionManager();&lt;br /&gt;        else&lt;br /&gt;            this.cm = cm;&lt;br /&gt;    }&lt;br /&gt;    public Connection getConnection()&lt;br /&gt;        throws SQLException&lt;br /&gt;    {&lt;br /&gt;        System.out.println(&quot;In MyDataSource.getConnection,1&quot;);&lt;br /&gt;        try&lt;br /&gt;        {&lt;br /&gt;            return (Connection)cm.allocateConnection(mcf, null);&lt;br /&gt;        }&lt;br /&gt;        catch(ResourceException ex)&lt;br /&gt;        {&lt;br /&gt;            throw new SQLException(ex.getMessage());&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;    public Connection getConnection(String username, String password)&lt;br /&gt;        throws SQLException&lt;br /&gt;    {&lt;br /&gt;        System.out.println(&quot;In MyDataSource.getConnection,2&quot;);&lt;br /&gt;        try&lt;br /&gt;        {&lt;br /&gt;            javax.resource.spi.ConnectionRequestInfo info = new MyConnectionRequestInfo(username, password);&lt;br /&gt;            return (Connection)cm.allocateConnection(mcf, info);&lt;br /&gt;        }&lt;br /&gt;        catch(ResourceException ex)&lt;br /&gt;        {&lt;br /&gt;            throw new SQLException(ex.getMessage());&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;    public int getLoginTimeout()&lt;br /&gt;        throws SQLException&lt;br /&gt;    {&lt;br /&gt;        return DriverManager.getLoginTimeout();&lt;br /&gt;    }&lt;br /&gt;    public void setLoginTimeout(int seconds)&lt;br /&gt;        throws SQLException&lt;br /&gt;    {&lt;br /&gt;        DriverManager.setLoginTimeout(seconds);&lt;br /&gt;    }&lt;br /&gt;    public PrintWriter getLogWriter()&lt;br /&gt;        throws SQLException&lt;br /&gt;    {&lt;br /&gt;        return DriverManager.getLogWriter();&lt;br /&gt;    }&lt;br /&gt;    public void setLogWriter(PrintWriter out)&lt;br /&gt;        throws SQLException&lt;br /&gt;    {&lt;br /&gt;        DriverManager.setLogWriter(out);&lt;br /&gt;    }&lt;br /&gt;    public String getDescription()&lt;br /&gt;    {&lt;br /&gt;        return desc;&lt;br /&gt;    }&lt;br /&gt;    public void setDescription(String desc)&lt;br /&gt;    {&lt;br /&gt;        this.desc = desc;&lt;br /&gt;    }&lt;br /&gt;    public void setReference(Reference reference)&lt;br /&gt;    {&lt;br /&gt;        this.reference = reference;&lt;br /&gt;    }&lt;br /&gt;    public Reference getReference()&lt;br /&gt;    {&lt;br /&gt;        return reference;&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Now compile and build testjca.rar&lt;br /&gt;&lt;br /&gt;Now that you&#39;ve seen the adapter&#39; source code, it&#39;s time to build the testjca.rar file. First, I assume you have a source directory containing two subdirectories: testjca containing the .java files, and META-INF containing the configuration files.&lt;br /&gt;&lt;br /&gt;To compile and build the rar file:&lt;br /&gt;&lt;br /&gt;   1. Compile the class files by typing javac *.java in the testjca directory&lt;br /&gt;   2. Build the testjca.jar from the source directory by entering jar cvf testjca.jar myjca&lt;br /&gt;   3. Create the rar file using the testjca.jar and the META-INF directory by typing jar cvf testjca.rar myjca.jar META-INF&lt;br /&gt;&lt;br /&gt;Deployment output&lt;br /&gt;&lt;br /&gt;Once you deploy the adapter rar file, you should see the output of the println statements contained in most of the adapter&#39;s methods. You should see output similar to the following as the adapter deploys:&lt;br /&gt;&lt;br /&gt;In MyManagedConnectionFactory.constructor&lt;br /&gt;In MyManagedConnectionFactory.createManagedConnection&lt;br /&gt;In MyManagedConnection&lt;br /&gt;In MyConnectionEventListener&lt;br /&gt;In MyManagedConnection.getMetaData&lt;br /&gt;In MyConnectionMetaData.constructor&lt;br /&gt;In MyConnectionMetaData.getEISProductName&lt;br /&gt;In MyConnectionMetaData.getEISProductVersion&lt;br /&gt;In MyConnectionMetaData.getMaxConnections&lt;br /&gt;&lt;br /&gt;The output above shows the ManagedConnectionFactory&#39;s creation, which then invoked the ManagedConnection, which in turn created the ConnectionEventListener. Finally, you see that the application server called the ConnectionMetaData.&lt;br /&gt;Get a connection&lt;br /&gt;&lt;br /&gt;Now that you&#39;ve deployed the adapter successfully, let&#39;s use the adapter to obtain a connection. The following JSP (JavaServer Pages) file does just that, by looking up the connection using JNDI (Java Naming and Directory Interface), then calling the getConnection() method on the DataSource:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhs7v1AehonozQg6CJ-bh0bSMBpjJA8jbeMzt4FcQU7nu7qb0nWa61xCi8cL5n-bW3VXfHTag9ZhntzLJRd5DGlMFFj48rAP0pXTpnyYEcEW9uBCduWorictU6nQsN5Hh4QJ-vbxT22x2I/s1600/untitled.JPG&quot;&gt;&lt;img style=&quot;cursor:pointer; cursor:hand;width: 400px; height: 233px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhs7v1AehonozQg6CJ-bh0bSMBpjJA8jbeMzt4FcQU7nu7qb0nWa61xCi8cL5n-bW3VXfHTag9ZhntzLJRd5DGlMFFj48rAP0pXTpnyYEcEW9uBCduWorictU6nQsN5Hh4QJ-vbxT22x2I/s400/untitled.JPG&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5498651899549985794&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;You&#39;ll see the following output when the adapter acquires the connection:&lt;br /&gt;&lt;br /&gt;In MyManagedConnectionFactory.createConnectionFactory,1&lt;br /&gt;In MyDataSource&lt;br /&gt;In MyDataSource.getConnection,1&lt;br /&gt;In MyManagedConnectionFactory.matchManagedConnections&lt;br /&gt;In MyManagedConnectionFactory.createManagedConnection&lt;br /&gt;In MyManagedConnection&lt;br /&gt;In MyConnectionEventListener&lt;br /&gt;In MyManagedConnection.getMetaData&lt;br /&gt;In MyConnectionMetaData.constructor&lt;br /&gt;In MyConnectionMetaData.getEISProductName&lt;br /&gt;In MyConnectionMetaData.getEISProductVersion&lt;br /&gt;In MyConnectionMetaData.getMaxConnections&lt;br /&gt;In MyManagedConnection.getUserName&lt;br /&gt;In MyManagedConnection.getConnection&lt;br /&gt;In MyConnection&lt;br /&gt;In MyManagedConnection.addMyConnection&lt;br /&gt;In MyManagedConnection.addConnectionEventListener&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;If you are able to see the mentioned output, now you are ready to build your own connector.</content><link rel='replies' type='application/atom+xml' href='http://saumajitdas.blogspot.com/feeds/4614170497787311745/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://saumajitdas.blogspot.com/2010/07/what-is-connector-resource-adapter.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8621947959552664387/posts/default/4614170497787311745'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8621947959552664387/posts/default/4614170497787311745'/><link rel='alternate' type='text/html' href='http://saumajitdas.blogspot.com/2010/07/what-is-connector-resource-adapter.html' title='What is a connector (resource adapter)?'/><author><name>- Saumajit (http://saumajitdas.blogspot.com/)</name><uri>http://www.blogger.com/profile/07382150935096179034</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6qi93v-aNPC1o6Z0ZTap6RPlGjui-v_puEhrzcE118t-WxhhHjrLm9tiSnO2IbY7AOVmBarqN1K47wbUamo6vDj4CVXXYeCX-R1oDmJ4J2C5US5OYeqWenP2aQ5h5Ew/s113/Capture.PNG'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhD2OhgW4PzJAeI3xqBQDBuMN_n9KVzRREVxw5igTUuzeHW3KO03S3rdu2DpP_dJU4t6h1esHndvBm5N123Figlft3V-HG1nHs97F70oMmKHtxwpPEuUgLDJ8iOpfaMdZq9z0H1OSNOJZM/s72-c/connector.JPG" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8621947959552664387.post-4737014050335795418</id><published>2010-07-18T12:44:00.001+02:00</published><updated>2011-10-07T07:28:52.629+02:00</updated><title type='text'>1.1 For SSL Communication  Support (Integrating WebLogic Server with TIBCO EMS)</title><content type='html'>Note : Presuming we have integrated WebLogic Server with TIBCO EMS as described in the previous post.&lt;br /&gt;&lt;br /&gt;Now as we have already configured MDB deployed on WebLogic Server to listen to JMS destination (in our example we configured Queue, it can be configured for Topic also in  the same way), we will modify a bit to add SSL support. It can be done by following the simple steps:&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;Add the SSL JAR Files and New JNDI Properties File to the CLASSPATH&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Add SSL JAR Files and New JNDI Properties File to the WebLogic Server CLASSPATH, by adding the following lines in front of the CLASSPATH variable value in startup script.&lt;br /&gt;&lt;br /&gt;C:\tibco\ems\clients\java\jcert.jar;C:\tibco\ems\clients\java\jnet.jar;C:\tibco\ems\clients\java\jsse.jar;C:\tibco\ems\clients\java\tibcrypt.jar;C:\tibco\EMS\clients\java;&lt;br /&gt;&lt;br /&gt;Create a new file named jndi.properties, add the following lines and save it to the directory C:\tibco\EMS\clients\java.&lt;br /&gt;&lt;br /&gt;   com.tibco.tibjms.naming.security_protocol=ssl &lt;br /&gt;   com.tibco.tibjms.naming.ssl_enable_verify_host=false &lt;br /&gt; &lt;br /&gt;These properties specify that the &quot;SSL&quot; protocol should be used for JNDI lookups and that host verification is turned off (the client will trust any host). JNDI reads this file automatically and adds the properties to the environment of the initial JNDI context.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;Configure the TIBCO Enterprise Message Service Server for SSL&lt;/span&gt;&lt;br /&gt; &lt;br /&gt;In C:\tibco\EMS\bin\tibemsd.conf, add the following lines: &lt;br /&gt;&lt;br /&gt;listen = ssl://localhost:7243 &lt;br /&gt;ssl_server_identity = certs/server.cert.pem &lt;br /&gt;ssl_server_key = certs/server.key.pem &lt;br /&gt;ssl_password = password &lt;br /&gt;listen = tcp://localhost:7222 &lt;br /&gt;&lt;br /&gt;These lines explicitly set the tcp and ssl listen ports and specify the three required server-side SSL parameters identity, private key, and password. &lt;br /&gt;&lt;br /&gt;Save the file, then stop and restart the TIBCO Enterprise Message Service server. When the server restarts, you should see messages like the following in the console window confirming SSL is enabled: &lt;br /&gt;&lt;br /&gt;2010-07-18 10:00:05 Secure Socket Layer is enabled, using openSSL &lt;version&gt; &lt;br /&gt;2010-07-18 10:00:05 Accepting connections on ssl://&lt;machineName&gt;:7243. &lt;br /&gt;2010-07-18 10:00:05 Accepting connections on tcp://&lt;machineName&gt;:7222.&lt;br /&gt; &lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;Now modify the foreign JMSConnectionFactory in WebLogic to point to an SSLConnectionFactory&lt;/span&gt;&lt;br /&gt; &lt;br /&gt;Open TIBCO_JMSServer properties from Services &gt; Messaging &gt; JMS Modules &gt; MySystemModule &gt; TIBCO_JMSServer of WebLogic Administration consoles and change the &quot;JNDI Connection URL&quot; to &quot;tibjmsnaming://localhost:7243&quot;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;Modify the Example Client Program for SSL-Based Communication&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;In the &quot;MyClient.java&quot;, change the value for &quot;PROVIDER_URL&quot; to &quot;tibjmsnaming://localhost:7243&quot;&lt;br /&gt;&lt;br /&gt;We are now done with the modification for SSL support. To show that SSL communications are in fact occurring, you could remove the SSL settings you added to tibemsd.conf. Then restart the TIBCO Enterprise Message Service server and the WebLogic Server. If you check the WebLogic Server logs, you should see exceptions thrown indicating that it could not connect. If you now run the &quot;MyClient.java&quot; again, you should see that it throws an exception indicating that it could not connect to the server using the SSL protocol. Alternatively (or additionally), you could start the TIBCO Enterprise Message Service server from a command prompt window and turn SSL debug tracing on, as follows: &lt;br /&gt;&lt;br /&gt;&gt;tibemsd -ssl_debug_trace&lt;br /&gt;&lt;br /&gt;Then, if you re-start WebLogic Server and re-run the test program, you will see SSL debugging output on the tibemsd console window.</content><link rel='replies' type='application/atom+xml' href='http://saumajitdas.blogspot.com/feeds/4737014050335795418/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://saumajitdas.blogspot.com/2010/07/11-for-ssl-communication-support-in.html#comment-form' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8621947959552664387/posts/default/4737014050335795418'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8621947959552664387/posts/default/4737014050335795418'/><link rel='alternate' type='text/html' href='http://saumajitdas.blogspot.com/2010/07/11-for-ssl-communication-support-in.html' title='1.1 For SSL Communication  Support (Integrating WebLogic Server with TIBCO EMS)'/><author><name>- Saumajit (http://saumajitdas.blogspot.com/)</name><uri>http://www.blogger.com/profile/07382150935096179034</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6qi93v-aNPC1o6Z0ZTap6RPlGjui-v_puEhrzcE118t-WxhhHjrLm9tiSnO2IbY7AOVmBarqN1K47wbUamo6vDj4CVXXYeCX-R1oDmJ4J2C5US5OYeqWenP2aQ5h5Ew/s113/Capture.PNG'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8621947959552664387.post-1635993711798999818</id><published>2010-07-09T07:14:00.001+02:00</published><updated>2011-10-07T07:28:52.629+02:00</updated><title type='text'>1. Integrating WebLogic Server with TIBCO EMS</title><content type='html'>As we have been talking about integrating Application Servers and different messaging systems, lets take a tour to see how to use TIBCO Enterprise Message Service to drive a Message Driven Bean deployed in WebLogic Server.&lt;br /&gt;&lt;br /&gt;(In case you are looking for an example MDB and client, please get it from &lt;a href=&quot;http://www.mediafire.com/?nzqrmywmm3u&quot;&gt;HERE&lt;/a&gt;. Please compile it and create a deployable JAR).&lt;br /&gt;&lt;br /&gt;Make the following configuration changes to the WebLogic Server and the example MDB to use TIBCO EMS instead of WLS JMS subsystem.&lt;br /&gt;&lt;br /&gt;A&gt; Add the TIBCO Enterprise Message Service JAR file to the CLASSPATH of WebLogic Server.&lt;br /&gt;&lt;br /&gt;B&gt; Create the appropriate foreign JMSConnectionFactory and foreign JMSDestination for the foreign JMS Server, TIBCO Enterprise Message Service, in WebLogic. This is necessary to allow the WebLogic server to redirect lookups of ConnectionFactory and Destinations in its JNDI to TIBCO Enterprise Message Service&#39;s JNDI.&lt;br /&gt;&lt;br /&gt;C&gt; Create the appropriate JMS Destination object inside the TIBCO EMS using its administration tool.&lt;br /&gt;&lt;br /&gt;D&gt; Modify the weblogic-ejb-jar.xml file for the MDB to use appropriate JMSConnectionFactory and JMSDestination.&lt;br /&gt;&lt;br /&gt;E&gt; Modify the client program to look up its administered objects from the built-in JNDI provider in TIBCO Enterprise Message Service.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;A. Adding TIBCO Enterprise Message Service to the WebLogic CLASSPATH&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;Modify the CLASSPATH environment variable in WLS startup script by adding this path to the end of its value list:&lt;br /&gt;&lt;br /&gt;C:\tibco\ems\clients\java\tibjms.jar (presuming you have installed TIBCO EMS in C:\tibco)&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;B. Creating Foreign JMSServer, JMSConnectionFactory, and JMSDestination in WebLogic&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;1&gt; Start WebLogic Domain (Admin Server) and log in to Admin Console.&lt;br /&gt;&lt;br /&gt;2&gt; In the left pane, Create a Foreign Server under:&lt;br /&gt;Services &gt; Messaging &gt; JMS Modules &gt; MySystemModule &gt; New &gt; Foreign Server (my already created JMS Module name is &quot;MySystemModule&quot;)&lt;br /&gt;&lt;br /&gt;Enter TIBCO_JMSServer in the Name box, after creating, go to the Foreign Server and provide JNDI Initial Context Factory = com.tibco.tibjms.naming.TibjmsInitialContextFactory&lt;br /&gt;JNDI Connection URL = tibjmsnaming://localhost:7222&lt;br /&gt;&lt;br /&gt;Go to Connection Factories tab and create a new Connection Factory:&lt;br /&gt;Name = TIBCO_JMSQueueConnectionFactory&lt;br /&gt;Local JNDI Name = TIBCO.tcf&lt;br /&gt;Remote JNDI Name = QueueConnectionFactory&lt;br /&gt;&lt;br /&gt;Go to Destinations tab and create a new Destination:&lt;br /&gt;Name = TIBCO_JMSQueue_quotes&lt;br /&gt;Local JNDI Name = TIBCO.quotes&lt;br /&gt;Remote JNDI Name = quotes&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;C. Creating appropriate JMS Destination object inside the TIBCO EMS&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;1&gt; Start the TIBCO Enterprise Message Service server by selecting Start -&gt; Programs -&gt; TIBCO Enterprise Message Service -&gt; Start JMS Server from the Windows Start menu.&lt;br /&gt;&lt;br /&gt;2&gt; Start the TIBCO Enterprise Message Service administration tool by selecting Start -&gt; Programs -&gt; TIBCO Enterprise Message Service -&gt; Start EMS Administration Tool from the Windows Start menu.&lt;br /&gt;&lt;br /&gt;3&gt; Enter the following commands:&lt;br /&gt;  &gt; connect&lt;br /&gt;  &gt; create topic quotes&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;D. Modifying the weblogic-ejb-jar.xml file for MDB&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;To use the appropriate JMSConnectionFactory and JMSDestination modify weblogic-ejb-jar.xml as follows:&lt;br /&gt;&lt;br /&gt;1&gt; Replace the value for &lt;destination-jndi-name&gt; element with TIBCO.quotes.&lt;br /&gt;&lt;br /&gt;2&gt; Within the &lt;message-driven-descriptor&gt; element and immediately after both instances of the &lt;destination-jndi-name&gt; element, add the following element:&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgheiZTh1JtpJxofny2eZcVv_Pa2PTIrYnM9NJGVQCmPKFDBHZFEs9y1MrtK_3uFGOPTSo6Vb-04Tm2yQh5I1AIdDokX9N1Q9EJoj0GLhghwqPrH6j3f3LKG6P4N4gSzLBoHNtFWXF8kLk/s1600/untitled.JPG&quot;&gt;&lt;img style=&quot;cursor:pointer; cursor:hand;width: 259px; height: 48px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgheiZTh1JtpJxofny2eZcVv_Pa2PTIrYnM9NJGVQCmPKFDBHZFEs9y1MrtK_3uFGOPTSo6Vb-04Tm2yQh5I1AIdDokX9N1Q9EJoj0GLhghwqPrH6j3f3LKG6P4N4gSzLBoHNtFWXF8kLk/s400/untitled.JPG&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5491955682166606290&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;E. Modify the Client&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;1. change the following:&lt;br /&gt;QUEUE_NAME = &quot;quotes&quot;;&lt;br /&gt;CONNECTION_FACTORY = &quot;QueueConnectionFactory&quot;;&lt;br /&gt;PROVIDER_URL = &quot;tibjmsnaming://localhost:7222&quot;;&lt;br /&gt;java.naming.factory.initial = com.tibco.tibjms.naming.TibjmsInitialContextFactory&lt;br /&gt;&lt;br /&gt;2. Verify that you have tibjms.jar in classpath.&lt;br /&gt;&lt;br /&gt;Now everything is set, so deploy the MDB in WLS and test the client. If you can see your client program is sending messages and the MDB in WLS is consuming them and printing the o/p in WLS server startup prompt then we have successfully configured MDB deployed in WebLogic to listen to TIBCO EMS destination where messages are delivered by a standalone client.</content><link rel='replies' type='application/atom+xml' href='http://saumajitdas.blogspot.com/feeds/1635993711798999818/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://saumajitdas.blogspot.com/2010/07/integrating-weblogic-server-with-tibco.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8621947959552664387/posts/default/1635993711798999818'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8621947959552664387/posts/default/1635993711798999818'/><link rel='alternate' type='text/html' href='http://saumajitdas.blogspot.com/2010/07/integrating-weblogic-server-with-tibco.html' title='1. Integrating WebLogic Server with TIBCO EMS'/><author><name>- Saumajit (http://saumajitdas.blogspot.com/)</name><uri>http://www.blogger.com/profile/07382150935096179034</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6qi93v-aNPC1o6Z0ZTap6RPlGjui-v_puEhrzcE118t-WxhhHjrLm9tiSnO2IbY7AOVmBarqN1K47wbUamo6vDj4CVXXYeCX-R1oDmJ4J2C5US5OYeqWenP2aQ5h5Ew/s113/Capture.PNG'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgheiZTh1JtpJxofny2eZcVv_Pa2PTIrYnM9NJGVQCmPKFDBHZFEs9y1MrtK_3uFGOPTSo6Vb-04Tm2yQh5I1AIdDokX9N1Q9EJoj0GLhghwqPrH6j3f3LKG6P4N4gSzLBoHNtFWXF8kLk/s72-c/untitled.JPG" height="72" width="72"/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8621947959552664387.post-35477022130631938</id><published>2010-05-13T07:30:00.005+02:00</published><updated>2011-10-07T07:28:52.629+02:00</updated><title type='text'>Integrating WebLogic Server with Websphere MQ</title><content type='html'>Most of the production system configuration relies on messaging now-a-days and which requires compatibilities and interconnection between different middleware servers and messaging system e.g. WebLogic and WebSphere MQ JMS.&lt;br /&gt;&lt;br /&gt;In the following steps I tried to make it simple and clear. Depending on the business need it can be re-scaled or re-architect.&lt;br /&gt;&lt;br /&gt;Links might help:&lt;br /&gt;1&gt; &lt;a href=&quot;http://www.ibm.com/software/integration/wmq/requirements/index.html&quot;&gt;WebSphere MQ System Requirement&lt;/a&gt;&lt;br /&gt;2&gt; &lt;a href=&quot;http://download-llnw.oracle.com/docs/cd/E13196_01/platform/suppconfigs/config_wls.html&quot;&gt;WebLogic System Requirement&lt;/a&gt; &lt;span style=&quot;font-size:78%;&quot;&gt;(I will be using WLS8.1 SP4 instance on Windows)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Creating WebSphere MQ queue manager and configuring JMS JNDI namespace&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;To work with this example, you need to have a QueueConnectionFactory and Queue objects created in JNDI namespace to connect to the queue manager and access queues. Use the following commands to create a queue manager and queues in WebSphere MQ:&lt;br /&gt;&lt;br /&gt;1. Create the queue manager: crtmqm testqmgr.&lt;br /&gt;2. Start the queue manager: strmqm testqmgr.&lt;br /&gt;3. Create queues in the queue manager:&lt;br /&gt;&lt;br /&gt; runmqsc testqmgr&lt;br /&gt;DEFINE QLOCAL(&quot;MyMDBQueue&quot;)&lt;br /&gt;DEFINE QLOCAL(&quot;MyReplyQueue&quot;)&lt;br /&gt; end&lt;br /&gt;&lt;br /&gt;Next, create a simple file-based JNDI context and configure the JMS objects in that JNDI namespace. These JNDI objects are used by applications running in WebSphere Application Server Community Edition to connect to the WebSphere MQ queue manager. For this exercise, WebLogic and WebSphere MQ should be on the same machine.&lt;br /&gt;&lt;br /&gt;The setting is for file-based JNDI. Create the directory C:\JNDI-Directory before continuing with the next step. Create MyAdmin.config with the following contents:&lt;br /&gt;&lt;br /&gt; INITIAL_CONTEXT_FACTORY=com.sun.jndi.fscontext.RefFSContextFactory&lt;br /&gt; PROVIDER_URL=file:/C:/JNDI-Directory&lt;br /&gt; SECURITY_AUTHENTICATION=none&lt;br /&gt;&lt;br /&gt;Next, create the QueueConnectionFactory and Queue objects by executing the command:&lt;br /&gt;&lt;br /&gt; C:\Program Files\IBM\WebSphere MQ\Java\bin\JMSAdmin.bat -cfg MyAdmin.config&lt;br /&gt;&lt;br /&gt;You should see this prompt, where you can configure the JNDI objects: InitCtx&gt;&lt;br /&gt;&lt;br /&gt;At the prompt, type the following commands and press Enter after each one:&lt;br /&gt;&lt;br /&gt; def xaqcf(ReceiverQCF) qmgr(testqmgr)&lt;br /&gt; def xaqcf(SenderQCF) qmgr(testqmgr)&lt;br /&gt; def q(MyMDBQueue) qmgr(testqmgr) queue(MyMDBQueue)&lt;br /&gt; def q(MyReplyQueue) qmgr(testqmgr) queue(MyReplyQueue)&lt;br /&gt; end&lt;br /&gt;&lt;br /&gt;The above configurations are basic steps. For more information about the JMSAdmin tool, &lt;a href=&quot;http://publib.boulder.ibm.com/infocenter/wmqv6/v6r0/index.jsp?topic=/com.ibm.mq.csqzaw.doc/csqzaw14.htm&quot;&gt;CLICK HERE&lt;/a&gt; &lt;span style=&quot;font-size:78%;&quot;&gt;(search for &quot;Using the WebSphere MQ JMS administration tool&quot;)&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Creating a WebLogic server instance&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Create a WebLogic server instance, then add the WebSphere MQ JMS JAR files to its classpath and do the configuration steps below:&lt;br /&gt;&lt;br /&gt;1. Install WebLogic Server, for example in C:\bea.&lt;br /&gt;2. Open a command window (cmd.exe).&lt;br /&gt;3. Execute C:\bea\weblogic81\server\bin\setWLSEnv.cmd.&lt;br /&gt;4. Create the server by using the wizard: Click&lt;br /&gt;  Start =&gt; All Programs =&gt; BEA WebLogic Platform 8.1 =&gt; Configuration Wizard&lt;br /&gt;&lt;br /&gt;  Or you can use the following command:&lt;br /&gt;     1. Create a directory where you want to run the test, such as C:\jms\WebLogic\test\server, and make it your current directory.&lt;br /&gt;     2. Execute the following command to create the domain and server:&lt;br /&gt;&lt;br /&gt;   java -Dweblogic.Domain=MQJMSTEST -Dweblogic.Name=MQJMSTESTSERVER&lt;br /&gt;   -Dweblogic.management.username=weblogic -Dweblogic.management.password=weblogic&lt;br /&gt;   -Dweblogic.management.GenerateDefaultConfig=true weblogic.Server&lt;br /&gt;&lt;br /&gt;5. After the above command has completed, stop the server, open another command window, and call C:\bea\weblogic81\server\bin\setWLSEnv.cmd by executing the following command:&lt;br /&gt;&lt;br /&gt;   java weblogic.Admin -url t3://localhost:7001 -username weblogic&lt;br /&gt;   -password weblogic FORCESHUTDOWN&lt;br /&gt;&lt;br /&gt;6. Configure the WebLogic Server classpath to access the WebSphere MQ JMS JAR files by editing C:\jms\WebLogic\test\server\startMQJMSTEST.cmd and adding the following line just before the last command to start the server JVM:&lt;br /&gt;&lt;br /&gt;   set MQ_JAVA=C:\Program Files\IBM\WebSphere MQ\Java\lib&lt;br /&gt;   set CLASSPATH=%MQ_JAVA%\com.ibm.mq.jar;%CLASSPATH%&lt;br /&gt;   set CLASSPATH=%MQ_JAVA%\com.ibm.mqjms.jar;%CLASSPATH%;&lt;br /&gt;   set CLASSPATH=%MQ_JAVA%\com.ibm.mqetclient.jar;%CLASSPATH%&lt;br /&gt;     (Above line is applicable only for WebSphere MQ + Extended Transactional Client)&lt;br /&gt;   set CLASSPATH=%MQ_JAVA%\fscontext.jar;%CLASSPATH%&lt;br /&gt;   set PATH=%MQ_JAVA%;%PATH%&lt;br /&gt;&lt;br /&gt;7. Start the server by executing C:\jms\WebLogic\test\server\startMQJMSTEST.cmd.&lt;br /&gt;&lt;br /&gt;WebLogic Server should be running. Access its admin console using http://localhost:7001/console and authenticating with user name and password (in this example we used weblogic for both).&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Configuring a WebLogic foreign JMS server&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Next, configure the WebLogic foreign JMS provider with the JNDI setting to access it.&lt;br /&gt;&lt;br /&gt;Access http://localhost:7001/console, authenticating with the user name and password used in creating the WebLogic server instance above. After login, navigate to MQJMSTEST =&gt; Services =&gt; JMS =&gt; Foreign JMS Servers. In the right pane, click Configure a new Foreign JMSServer and enter the following values:&lt;br /&gt;&lt;br /&gt;* Name: MQJMSTEST Foreign JMS Server&lt;br /&gt;* JNDI Initial Context Factory: com.sun.jndi.fscontext.RefFSContextFactory&lt;br /&gt;* JNDI Connection URL: file:/C:/JNDI-Directory&lt;br /&gt;&lt;br /&gt;The screen should look like this:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhbSFfk4zbCAmP_rQLHXNNEUYUzAL3i5660m9Mpi5oaiDjmBJ6KWstGo1XjPoFZdOe4z3TbBpVnybs4VRx-j5g8frz-Blx8_kbdkuSIMFzH3DrKGrI9hHu-PhHXg46t_VKbAAwnKE7O1hA/&quot;&gt;&lt;img style=&quot;cursor: pointer; width: 400px; height: 284px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhbSFfk4zbCAmP_rQLHXNNEUYUzAL3i5660m9Mpi5oaiDjmBJ6KWstGo1XjPoFZdOe4z3TbBpVnybs4VRx-j5g8frz-Blx8_kbdkuSIMFzH3DrKGrI9hHu-PhHXg46t_VKbAAwnKE7O1hA/&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5470630097928667618&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;Figure 1. Creating new Foreign JMS Server.&lt;br /&gt;&lt;br /&gt;Click Create at right bottom. You will get another screen to choose the instance of WebLogic Server where this foreign JMS server needs to be created. Select MQJMSTESTSERVER and click Apply.&lt;br /&gt;&lt;br /&gt;Now you are ready to configure the QueueConnectionFactory and Queue objects in the newly created foreign JMS provider. By this step what we will be doing is that referring the QueueConnectionFactory and Queues defined in the file-based JNDI as a foreign JMS provider.&lt;br /&gt;&lt;br /&gt;Creating QueueConnectionFactory objects in a foreign JMS provider&lt;br /&gt;&lt;br /&gt;Navigate to MQJMSTEST =&gt; Services =&gt; JMS =&gt; Foreign JMS Servers =&gt; MQJMSTEST Foreign JMS Server =&gt; Foreign JMS Connection Factories. In the right pane, click Configure a new Foreign JMSConnection Factory and enter the following values:&lt;br /&gt;&lt;br /&gt;* Name: WLSenderQCF&lt;br /&gt;* Local JNDI Name: jms/WLSenderQCF&lt;br /&gt;* Remote JNDI Name: SenderQCF&lt;br /&gt;&lt;br /&gt;The remote JNDI Name should match the QueueConnectionFactory name created in the file-based JNDI using the JMSAdmin tool. The screen should look like this:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjgQMSwt6V2GlwDEBOw02yZZH7aZS9p-rT_v_KF7Uk1KMBLUrNme1DvoNdLJMD3E8TdU3sHtP3oqAFbTKgJVGIHhEc7uQqdO7zhLlJZfcJy1KHgm1cASdTjVNMqixAjPLgraFzRRI1h0kc/&quot;&gt;&lt;img style=&quot;cursor: pointer; width: 400px; height: 284px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjgQMSwt6V2GlwDEBOw02yZZH7aZS9p-rT_v_KF7Uk1KMBLUrNme1DvoNdLJMD3E8TdU3sHtP3oqAFbTKgJVGIHhEc7uQqdO7zhLlJZfcJy1KHgm1cASdTjVNMqixAjPLgraFzRRI1h0kc/&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5470630770504048802&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;Figure 2. Creating QueueConnectionFactory.&lt;br /&gt;&lt;br /&gt;Click Create at right bottom to complete this operation.&lt;br /&gt;&lt;br /&gt;Creating destination objects in the foreign JMS provider&lt;br /&gt;&lt;br /&gt;To create the destinations, navigate to MQJMSTEST =&gt; Services =&gt; JMS =&gt; Foreign JMS Servers =&gt; MQJMSTEST Foreign JMS Server =&gt; Foreign JMS Destinations. In the right pane, click Configure a new foreign JMSDestination and enter the following values:&lt;br /&gt;&lt;br /&gt;* Name: WLMyReplyQueue&lt;br /&gt;* Local JNDI Name: jms/WLMyReplyQueue&lt;br /&gt;* Remote JNDI Name: MyReplyQueue&lt;br /&gt;&lt;br /&gt;The remote JNDI Name should match the destinations created in the file-based JNDI using the JMSAdmin tool. The screen should look like this:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYmLonjlarAlF1z3wsfg3DD2yPu9KxjazAqFQjiH5NBVOZ8mJKn2o4jGnY21OhaWsPde7YilTiYwZhyphenhyphenqBeaEQ17yjH8oL1syG_TFKPKh-JjuPOH3FcK_qrpPKyBmG-2e26tXORjPje69s/&quot;&gt;&lt;img style=&quot;cursor: pointer; width: 400px; height: 284px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYmLonjlarAlF1z3wsfg3DD2yPu9KxjazAqFQjiH5NBVOZ8mJKn2o4jGnY21OhaWsPde7YilTiYwZhyphenhyphenqBeaEQ17yjH8oL1syG_TFKPKh-JjuPOH3FcK_qrpPKyBmG-2e26tXORjPje69s/&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5470630994636133314&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;Figure 3. Creating Queue Destination.&lt;br /&gt;Creating Queue Destination&lt;br /&gt;&lt;br /&gt;Click Create at right bottom to complete the operation. Now you are ready with foreign JMS configurations to look into the MDB application.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Developing a sample application and deploying it on WebLogic&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Here we use an MDB that is listening for the messages from MyMDBQueue in Queue manager testqmgr. The onMessage() picks up the messages and forwards the same message to MyReplyQueue by calling the putMessage(javax.jms.Message msg) method.&lt;br /&gt;&lt;br /&gt;A sample application can be downloaded from &lt;a href=&quot;http://www.mediafire.com/?jm1qjqmkzto&quot;&gt;HERE&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;  1. Open a command prompt and execute the following commands:&lt;br /&gt;&lt;br /&gt;  2. cd C:\wlresources&lt;br /&gt;&lt;br /&gt;  3. C:\bea\weblogic81\server\bin\setWLSEnv.cmd&lt;br /&gt;&lt;br /&gt;  4. javac com\ibm\WLSampleMDB\SampleMDBBean.java&lt;br /&gt;&lt;br /&gt;  5. jar -cvf WLSampleMDB.jar com META-INF (creates WLSampleMDB.jar, on which you will work further to deploy it on the server ).&lt;br /&gt;&lt;br /&gt;  6. Start the Application Builder: Click Start =&gt; All Programs =&gt; BEA WebLogic Platform 8.1 =&gt; Other Development Tools =&gt; WebLogic Builder.&lt;br /&gt;&lt;br /&gt;  7. In WebLogic Builder, click File =&gt;Open and select the WLSampleMDB.jar created in Step 5 (if prompted, click Yes for creating the Deployment Descriptors).&lt;br /&gt;&lt;br /&gt;  8. Click SampleMDBBean on the left-side tree view, select the General tab, and change the following values:&lt;br /&gt;&lt;br /&gt;            * JNDI Name: SampleMDBBean&lt;br /&gt;            * Transaction Timeout: 300&lt;br /&gt;            * Destination Type: javax.jms.Queue&lt;br /&gt;            * Destination JNDI: MyMDBQueue (This is the name you have given when you created a queue using JMSAdmin tool)&lt;br /&gt;&lt;br /&gt;  9. Select the Foreign JMS Provider tab, select Use Foreign JMS Provider, and enter the following values:&lt;br /&gt;&lt;br /&gt;            * Provider URL: file:/C:/JNDI-Directory&lt;br /&gt;            * Connection Factory JNDI Name: ReceiverQCF (The Connection Factory name we created using the JMSAdmin tool for the MDB to receive the messages)&lt;br /&gt;            * Initial Context Factory: com.sun.jndi.fscontext.RefFSContextFactory&lt;br /&gt;&lt;br /&gt; 10. Select the Advanced tab and ensure that for Transaction Type, the value Container is selected.&lt;br /&gt;&lt;br /&gt; 11. From the left-side tree view, under SampleMDBBean, select Methods and ensure that Default transaction is selected as required.&lt;br /&gt;&lt;br /&gt; 12. From the left-side tree view, under SampleMDBBean, select Resources.&lt;br /&gt;&lt;br /&gt; 13. Select the Resource Reference tab from the right-side pane and click Add (if the resources are already defined, click Edit). Enter the following values:&lt;br /&gt;&lt;br /&gt;            * Resource reference Name: WLSenderQCF&lt;br /&gt;            * Resource Type: javax.jms.QueueConnectionFactory&lt;br /&gt;            * Resource Authority: Application&lt;br /&gt;            * JNDI Name: jms/WLSenderQCF&lt;br /&gt;            * Sharing Scope: Unsharable&lt;br /&gt;&lt;br /&gt; 14. Click OK. Similarly add another resource reference with following values:&lt;br /&gt;&lt;br /&gt;            * Resource reference Name: MyReplyQueue&lt;br /&gt;            * Resource Type: javax.jms.Queue&lt;br /&gt;            * Resource Authority: Application&lt;br /&gt;            * JNDI Name: jms/MyReplyQueue&lt;br /&gt;            * Sharing Scope: Unsharable&lt;br /&gt;&lt;br /&gt; 15. Click File =&gt; Save to save Save WLSampleMDB.jar.&lt;br /&gt;&lt;br /&gt; 16. To deploy this assembled JAR file, click Tools =&gt; Deploy Module. If you are asked for the configuration values to connect to WebLogic Server, verify that they match the values below:&lt;br /&gt;&lt;br /&gt;            * Protocol: t3&lt;br /&gt;            * Host: localhost&lt;br /&gt;            * Port: 7001&lt;br /&gt;            * Server Name: MQJMSTESTSERVER&lt;br /&gt;            * System User Name: weblogic&lt;br /&gt;            * System User Password: weblogic&lt;br /&gt;            * Now click Connect and in next pop-up window, click Deploy Module.&lt;br /&gt;&lt;br /&gt; 17. Test the application using the command amqsput MyMDBQueue testqmgr from the command prompt and type any text you want to put it as a message, now observe the console where the WebLogic Server is running and you should be able to see something like this:&lt;br /&gt;&lt;br /&gt;     Message Received:&lt;br /&gt;     JMS Message class: jms_text&lt;br /&gt;     JMSType: null&lt;br /&gt;     JMSDeliveryMode: 1&lt;br /&gt;     JMSExpiration: 0&lt;br /&gt;     JMSPriority: 0&lt;br /&gt;     JMSMessageID: ID:414d512074657374716d6772202020203f40254420000908&lt;br /&gt;     JMSTimestamp: 1143559825190&lt;br /&gt;     JMSCorrelationID:null&lt;br /&gt;     JMSDestination: null&lt;br /&gt;     JMSReplyTo: null&lt;br /&gt;     JMSRedelivered: false&lt;br /&gt;     JMS_IBM_PutDate:20060328&lt;br /&gt;     JMSXAppID:WebSphere MQ\bin\amqsput.exe&lt;br /&gt;     JMS_IBM_Format:MQSTR&lt;br /&gt;     JMS_IBM_PutApplType:11&lt;br /&gt;     JMS_IBM_MsgType:8&lt;br /&gt;     JMSXUserID:sanjay&lt;br /&gt;     JMS_IBM_PutTime:15302519&lt;br /&gt;     JMSXDeliveryCount:1&lt;br /&gt;     This is a Test Message&lt;br /&gt;&lt;br /&gt;     putting the message to MyReplyQueue&lt;br /&gt;     looked up QueueConnectionFactory: weblogic.deployment.jms.PooledConnectionFactory@8710bd&lt;br /&gt;     looked up Queue: queue://testqmgr/MyReplyQueue&lt;br /&gt;     Message send&lt;br /&gt;&lt;br /&gt;If you see the above mentioned line properly, then we have configured WebLogic Server and WebSphere MQ to connect to each other and used an MDB sample to get a message and forward it to another queue within a global transaction.</content><link rel='replies' type='application/atom+xml' href='http://saumajitdas.blogspot.com/feeds/35477022130631938/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://saumajitdas.blogspot.com/2010/05/integrating-weblogic-server-with.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8621947959552664387/posts/default/35477022130631938'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8621947959552664387/posts/default/35477022130631938'/><link rel='alternate' type='text/html' href='http://saumajitdas.blogspot.com/2010/05/integrating-weblogic-server-with.html' title='Integrating WebLogic Server with Websphere MQ'/><author><name>- Saumajit (http://saumajitdas.blogspot.com/)</name><uri>http://www.blogger.com/profile/07382150935096179034</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6qi93v-aNPC1o6Z0ZTap6RPlGjui-v_puEhrzcE118t-WxhhHjrLm9tiSnO2IbY7AOVmBarqN1K47wbUamo6vDj4CVXXYeCX-R1oDmJ4J2C5US5OYeqWenP2aQ5h5Ew/s113/Capture.PNG'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhbSFfk4zbCAmP_rQLHXNNEUYUzAL3i5660m9Mpi5oaiDjmBJ6KWstGo1XjPoFZdOe4z3TbBpVnybs4VRx-j5g8frz-Blx8_kbdkuSIMFzH3DrKGrI9hHu-PhHXg46t_VKbAAwnKE7O1hA/s72-c" height="72" width="72"/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8621947959552664387.post-7467598279776851676</id><published>2010-01-18T07:18:00.001+01:00</published><updated>2011-10-07T07:28:52.630+02:00</updated><title type='text'>Java HotSpot VM Options</title><content type='html'>&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:worddocument&gt;   &lt;w:view&gt;Normal&lt;/w:View&gt;   &lt;w:zoom&gt;0&lt;/w:Zoom&gt;   &lt;w:compatibility&gt;    &lt;w:breakwrappedtables/&gt;    &lt;w:snaptogridincell/&gt;    &lt;w:wraptextwithpunct/&gt;    &lt;w:useasianbreakrules/&gt;    &lt;w:usefelayout/&gt;   &lt;/w:Compatibility&gt;   &lt;w:browserlevel&gt;MicrosoftInternetExplorer4&lt;/w:BrowserLevel&gt;  &lt;/w:WordDocument&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;style&gt; &lt;!--  /* Font Definitions */  @font-face  {font-family:Wingdings;  panose-1:5 0 0 0 0 0 0 0 0 0;  mso-font-charset:2;  mso-generic-font-family:auto;  mso-font-pitch:variable;  mso-font-signature:0 268435456 0 0 -2147483648 0;} @font-face  {font-family:SimSun;  panose-1:2 1 6 0 3 1 1 1 1 1;  mso-font-alt:宋体;  mso-font-charset:134;  mso-generic-font-family:auto;  mso-font-pitch:variable;  mso-font-signature:3 135135232 16 0 262145 0;} @font-face  {font-family:&quot;\@SimSun&quot;;  panose-1:2 1 6 0 3 1 1 1 1 1;  mso-font-charset:134;  mso-generic-font-family:auto;  mso-font-pitch:variable;  mso-font-signature:3 135135232 16 0 262145 0;}  /* Style Definitions */  p.MsoNormal, li.MsoNormal, div.MsoNormal  {mso-style-parent:&quot;&quot;;  margin:0in;  margin-bottom:.0001pt;  mso-pagination:widow-orphan;  font-size:12.0pt;  font-family:&quot;Times New Roman&quot;;  mso-fareast-font-family:SimSun;} h3  {mso-margin-top-alt:auto;  margin-right:0in;  mso-margin-bottom-alt:auto;  margin-left:0in;  mso-pagination:widow-orphan;  mso-outline-level:3;  font-size:13.5pt;  font-family:&quot;Times New Roman&quot;;  font-weight:bold;} h4  {mso-margin-top-alt:auto;  margin-right:0in;  mso-margin-bottom-alt:auto;  margin-left:0in;  mso-pagination:widow-orphan;  mso-outline-level:4;  font-size:12.0pt;  font-family:&quot;Times New Roman&quot;;  font-weight:bold;} a:link, span.MsoHyperlink  {color:blue;  text-decoration:underline;  text-underline:single;} a:visited, span.MsoHyperlinkFollowed  {color:purple;  text-decoration:underline;  text-underline:single;} p  {mso-margin-top-alt:auto;  margin-right:0in;  mso-margin-bottom-alt:auto;  margin-left:0in;  mso-pagination:widow-orphan;  font-size:12.0pt;  font-family:&quot;Times New Roman&quot;;  mso-fareast-font-family:SimSun;} code  {font-family:&quot;Courier New&quot;;  mso-ascii-font-family:&quot;Courier New&quot;;  mso-fareast-font-family:SimSun;  mso-hansi-font-family:&quot;Courier New&quot;;  mso-bidi-font-family:&quot;Courier New&quot;;} @page Section1  {size:8.5in 11.0in;  margin:1.0in 1.25in 1.0in 1.25in;  mso-header-margin:.5in;  mso-footer-margin:.5in;  mso-paper-source:0;} div.Section1  {page:Section1;}  /* List Definitions */  @list l0  {mso-list-id:214394592;  mso-list-template-ids:-860729566;} @list l1  {mso-list-id:708380343;  mso-list-template-ids:-1891619690;} @list l1:level1  {mso-level-number-format:bullet;  mso-level-text:;  mso-level-tab-stop:.5in;  mso-level-number-position:left;  text-indent:-.25in;  mso-ansi-font-size:10.0pt;  font-family:Symbol;} @list l2  {mso-list-id:1845319382;  mso-list-template-ids:437027918;} @list l2:level1  {mso-level-number-format:bullet;  mso-level-text:;  mso-level-tab-stop:.5in;  mso-level-number-position:left;  text-indent:-.25in;  mso-ansi-font-size:10.0pt;  font-family:Symbol;} ol  {margin-bottom:0in;} ul  {margin-bottom:0in;} --&gt; &lt;/style&gt;&lt;!--[if gte mso 10]&gt; &lt;style&gt;  /* Style Definitions */  table.MsoNormalTable  {mso-style-name:&quot;Table Normal&quot;;  mso-tstyle-rowband-size:0;  mso-tstyle-colband-size:0;  mso-style-noshow:yes;  mso-style-parent:&quot;&quot;;  mso-padding-alt:0in 5.4pt 0in 5.4pt;  mso-para-margin:0in;  mso-para-margin-bottom:.0001pt;  mso-pagination:widow-orphan;  font-size:10.0pt;  font-family:&quot;Times New Roman&quot;;} &lt;/style&gt; &lt;![endif]--&gt;VM options categorized in two types:&lt;o:p&gt;&lt;/o:p&gt;  &lt;ol start=&quot;1&quot; type=&quot;1&quot;&gt;&lt;li class=&quot;MsoNormal&quot; style=&quot;&quot;&gt;Standard options&lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;&lt;li class=&quot;MsoNormal&quot; style=&quot;&quot;&gt;Non-standard options&lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;&lt;/ol&gt;  &lt;p&gt;For &lt;em&gt;&lt;u&gt;Standard Options&lt;/u&gt;&lt;/em&gt; please refer the follwoing links depending on your plateform&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p&gt;Windows: &lt;a href=&quot;http://java.sun.com/j2se/1.5.0/docs/tooldocs/windows/java.html&quot;&gt;http://java.sun.com/j2se/1.5.0/docs/tooldocs/windows/java.html&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p&gt;Solaris: &lt;a href=&quot;http://java.sun.com/j2se/1.5.0/docs/tooldocs/solaris/java.html&quot;&gt;http://java.sun.com/j2se/1.5.0/docs/tooldocs/solaris/java.html&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p&gt;Linux: &lt;a href=&quot;http://java.sun.com/j2se/1.5.0/docs/tooldocs/linux/java.html&quot;&gt;http://java.sun.com/j2se/1.5.0/docs/tooldocs/linux/java.html&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;u&gt;Non-standard&lt;/u&gt;&lt;/em&gt; options are further categorized in two:&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul type=&quot;disc&quot;&gt;&lt;li class=&quot;MsoNormal&quot; style=&quot;&quot;&gt;Options that begin with &lt;code&gt;&lt;span style=&quot;font-size:10pt;&quot;&gt;-X &lt;/span&gt;&lt;/code&gt;are non-standard (not guaranteed      to be supported on all VM implementations), and are subject to change      without notice in subsequent releases of the JDK.&lt;br /&gt;     &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;&lt;li class=&quot;MsoNormal&quot; style=&quot;&quot;&gt;Options that are specified      with &lt;code&gt;&lt;span style=&quot;font-size:10pt;&quot;&gt;-XX&lt;/span&gt;&lt;/code&gt; are not stable      and are not recommended for casual use. These options are subject to      change without notice.&lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;&lt;/ul&gt;  &lt;p&gt;Note: For -X options, please refer the links mentioned above.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;h3&gt;Some Useful -XX Options&lt;o:p&gt;&lt;/o:p&gt;&lt;/h3&gt;  &lt;ul type=&quot;disc&quot;&gt;&lt;li class=&quot;MsoNormal&quot; style=&quot;&quot;&gt;Boolean options are turned on      with -XX:+ and turned off with -XX:-.&lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;&lt;li class=&quot;MsoNormal&quot; style=&quot;&quot;&gt;Numeric options are set      with  -XX:=&lt;number&gt;. Numbers can include &#39;m&#39; or &#39;M&#39;      for megabytes, &#39;k&#39; or &#39;K&#39; for kilobytes, and &#39;g&#39; or &#39;G&#39; for gigabytes (for      example, 32k is the same as 32768).&lt;o:p&gt;&lt;/o:p&gt;&lt;/number&gt;&lt;/li&gt;&lt;li class=&quot;MsoNormal&quot; style=&quot;&quot;&gt;String options are set with      -XX:=&lt;string&gt;, are usually used to specify a file, a      path, or a list of commands&lt;o:p&gt;&lt;/o:p&gt;&lt;/string&gt;&lt;/li&gt;&lt;/ul&gt;  &lt;p&gt;Flags marked as manageable are dynamically writeable through the JDK management interface (com.sun.management.HotSpotDiagnosticMXBean API) and also through JConsole.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;h4&gt;&lt;em&gt;&lt;u&gt;Behavioral Options&lt;/u&gt;&lt;/em&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/h4&gt;  &lt;table class=&quot;MsoNormalTable&quot; style=&quot;width: 100%;&quot; width=&quot;100%&quot; border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot;&gt;  &lt;tbody&gt;&lt;tr style=&quot;&quot;&gt;   &lt;td style=&quot;padding: 0in; width: 45%;&quot; width=&quot;45%&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;&lt;b&gt;Option and Default Value&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style=&quot;padding: 0in; width: 55%;&quot; width=&quot;55%&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;&lt;b&gt;Description&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=&quot;&quot;&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;-XX:-AllowUserSignalHandlers&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;Do not complain if the application installs signal   handlers. (Relevant to Solaris and Linux only.)&lt;br /&gt;  &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=&quot;&quot;&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;-XX:AltStackSize=16384&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;Alternate signal stack size (in Kbytes). (Relevant to   Solaris only, removed from 5.0.)&lt;br /&gt;  &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=&quot;&quot;&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;-XX:-DisableExplicitGC&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;Disable calls to System.gc(), JVM still performs garbage   collection when necessary.&lt;br /&gt;  &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=&quot;&quot;&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;-XX:+FailOverToOldVerifier&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;Fail over to old verifier when the new type checker fails.   (Introduced in 6.)&lt;br /&gt;  &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=&quot;&quot;&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;-XX:+HandlePromotionFailure&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;The youngest generation collection does not require a   guarantee of full promotion of all live objects. (Introduced in 1.4.2 update   11) [5.0 and earlier: false.]&lt;br /&gt;  &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=&quot;&quot;&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;-XX:+MaxFDLimit&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;Bump the number of file descriptors to max.   (Relevant  to Solaris only.)&lt;br /&gt;  &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=&quot;&quot;&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;-XX:PreBlockSpin=10&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;Spin count variable for use with -XX:+UseSpinning.   Controls the maximum spin iterations allowed before entering operating system   thread synchronization code. (Introduced in 1.4.2.)&lt;br /&gt;  &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=&quot;&quot;&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;-XX:-RelaxAccessControlCheck&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;Relax the access control checks in the verifier.   (Introduced in 6.)&lt;br /&gt;  &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=&quot;&quot;&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;-XX:+ScavengeBeforeFullGC&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;Do young generation GC prior to a full GC. (Introduced in   1.4.1.)&lt;br /&gt;  &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=&quot;&quot;&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;-XX:+UseAltSigs&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;Use alternate signals instead of SIGUSR1 and SIGUSR2 for   VM internal signals. (Introduced in 1.3.1 update 9, 1.4.1. Relevant to   Solaris only.)&lt;br /&gt;  &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=&quot;&quot;&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;-XX:+UseBoundThreads&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;Bind user level threads to kernel threads. (Relevant to   Solaris only.)&lt;br /&gt;  &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=&quot;&quot;&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;-XX:-UseConcMarkSweepGC&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;Use concurrent mark-sweep collection for the old   generation. (Introduced in 1.4.1)&lt;br /&gt;  &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=&quot;&quot;&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;-XX:+UseGCOverheadLimit&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;Use a policy that limits the proportion of the VM&#39;s time   that is spent in GC before an OutOfMemory error is thrown. (Introduced in 6.)&lt;br /&gt;  &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=&quot;&quot;&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;-XX:+UseLWPSynchronization&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;Use LWP-based instead of thread based synchronization.   (Introduced in 1.4.0. Relevant to Solaris only.)&lt;br /&gt;  &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=&quot;&quot;&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;-XX:-UseParallelGC&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;Use parallel garbage collection for scavenges. (Introduced   in 1.4.1)&lt;br /&gt;  &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=&quot;&quot;&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;-XX:-UseParallelOldGC&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;Use parallel garbage collection for the full collections.   Enabling this option automatically sets -XX:+UseParallelGC. (Introduced in   5.0 update 6.)&lt;br /&gt;  &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=&quot;&quot;&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;-XX:-UseSerialGC&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;Use serial garbage collection. (Introduced in 5.0.)&lt;br /&gt;  &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=&quot;&quot;&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;-XX:-UseSpinning&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;Enable naive spinning on Java monitor before entering   operating system thread synchronizaton code. (Relevant to 1.4.2 and 5.0   only.) [1.4.2, multi-processor Windows platforms: true]&lt;br /&gt;  &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=&quot;&quot;&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;-XX:+UseTLAB&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;Use thread-local object allocation (Introduced in 1.4.0,   known as UseTLE prior to that.) [1.4.2 and earlier, x86 or with -client:   false]&lt;br /&gt;  &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=&quot;&quot;&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;-XX:+UseSplitVerifier&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;Use the new type checker with StackMapTable attributes.   (Introduced in 5.0.)[5.0: false]&lt;br /&gt;  &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=&quot;&quot;&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;-XX:+UseThreadPriorities&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;Use native thread priorities.&lt;br /&gt;  &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=&quot;&quot;&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;-XX:+UseVMInterruptibleIO&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;Thread interrupt before or with EINTR for I/O operations   results in OS_INTRPT. (Introduced in 6. Relevant to Solaris only.)&lt;br /&gt;  &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;h4&gt;&lt;em&gt;&lt;u&gt;Performance Options&lt;/u&gt;&lt;/em&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/h4&gt;  &lt;table class=&quot;MsoNormalTable&quot; style=&quot;width: 100%;&quot; width=&quot;100%&quot; border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot;&gt;  &lt;tbody&gt;&lt;tr style=&quot;&quot;&gt;   &lt;td style=&quot;padding: 0in; width: 45%;&quot; width=&quot;45%&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;&lt;b&gt;Option and Default Value&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style=&quot;padding: 0in; width: 55%;&quot; width=&quot;55%&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;&lt;b&gt;Description&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=&quot;&quot;&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;-XX:+AggressiveOpts&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;Turn on point performance compiler optimizations that are   expected to be default in upcoming releases. (Introduced in 5.0 update 6.)&lt;br /&gt;  &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=&quot;&quot;&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;-XX:CompileThreshold=10000&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;Number of method invocations/branches before compiling   [-client: 1,500]&lt;br /&gt;  &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=&quot;&quot;&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;-XX:LargePageSizeInBytes=4m&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;Sets the large page size used for the Java heap.   (Introduced in 1.4.0 update 1.) [amd64: 2m.]&lt;br /&gt;  &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=&quot;&quot;&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;-XX:MaxHeapFreeRatio=70&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;Maximum percentage of heap free after GC to avoid   shrinking.&lt;br /&gt;  &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=&quot;&quot;&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;-XX:MaxNewSize=size&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;Maximum size of new generation (in bytes). Since 1.4,   MaxNewSize is computed as a function of NewRatio. [1.3.1 Sparc: 32m; 1.3.1   x86: 2.5m.]&lt;br /&gt;  &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=&quot;&quot;&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;-XX:MaxPermSize=64m&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;Size of the Permanent Generation.  [5.0 and newer: 64   bit VMs are scaled 30% larger; 1.4 amd64: 96m; 1.3.1 -client: 32m.]&lt;br /&gt;  &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=&quot;&quot;&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;-XX:MinHeapFreeRatio=40&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;Minimum percentage of heap free after GC to avoid   expansion.&lt;br /&gt;  &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=&quot;&quot;&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;-XX:NewRatio=2&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;Ratio of new/old generation sizes. [Sparc -client: 8; x86   -server: 8; x86 -client: 12.]-client: 4 (1.3) 8 (1.3.1+), x86: 12]&lt;br /&gt;  &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=&quot;&quot;&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;-XX:NewSize=2.125m&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;Default size of new generation (in bytes) [5.0 and newer:   64 bit VMs are scaled 30% larger; x86: 1m; x86, 5.0 and older: 640k]&lt;br /&gt;  &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=&quot;&quot;&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;-XX:ReservedCodeCacheSize=32m&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;Reserved code cache size (in bytes) - maximum code cache   size. [Solaris 64-bit, amd64, and -server x86: 48m; in 1.5.0_06 and earlier,   Solaris 64-bit and and64: 1024m.]&lt;br /&gt;  &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=&quot;&quot;&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;-XX:SurvivorRatio=8&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;Ratio of eden/survivor space size [Solaris amd64: 6; Sparc   in 1.3.1: 25; other Solaris platforms in 5.0 and earlier: 32]&lt;br /&gt;  &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=&quot;&quot;&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;-XX:TargetSurvivorRatio=50&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;Desired percentage of survivor space used after scavenge.&lt;br /&gt;  &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=&quot;&quot;&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;-XX:ThreadStackSize=512&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;Thread Stack Size (in Kbytes). (0 means use default stack   size) [Sparc: 512; Solaris x86: 320 (was 256 prior in 5.0 and earlier); Sparc   64 bit: 1024; Linux amd64: 1024 (was 0 in 5.0 and earlier); all others 0.]&lt;br /&gt;  &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=&quot;&quot;&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;-XX:+UseBiasedLocking&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;Enable biased locking.&lt;br /&gt;  &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=&quot;&quot;&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;-XX:+UseFastAccessorMethods&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;Use optimized versions of Get&lt;primitive&gt;Field.&lt;br /&gt;  &lt;o:p&gt;&lt;/o:p&gt;&lt;/primitive&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=&quot;&quot;&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;-XX:-UseISM&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;Use Intimate Shared Memory. [Not accepted for non-Solaris   platforms.]&lt;br /&gt;  &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=&quot;&quot;&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;-XX:+UseLargePages&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;Use large page memory. (Introduced in 5.0 update 5.)&lt;br /&gt;  &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=&quot;&quot;&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;-XX:+UseMPSS&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;Use Multiple Page Size Support w/4mb pages for the heap.   Do not use with ISM as this replaces the need for ISM. (Introduced in 1.4.0   update 1, Relevant to Solaris 9 and newer.) [1.4.1 and earlier: false]&lt;br /&gt;  &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=&quot;&quot;&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;-XX:+StringCache&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;Enables caching of commonly allocated strings.&lt;br /&gt;  &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=&quot;&quot;&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;-XX:AllocatePrefetchLines=1&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;Number of cache lines to load after the last object   allocation using prefetch instructions generated in JIT compiled code.   Default values are 1 if the last allocated object was an instance and 3 if it   was an array.&lt;br /&gt;  &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=&quot;&quot;&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;-XX:AllocatePrefetchStyle=1&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;Generated code style for prefetch instructions.&lt;br /&gt; 0 - no prefetch instructions are generate*d*,&lt;br /&gt; 1 - execute prefetch instructions after each allocation,&lt;br /&gt; 2 - use TLAB allocation watermark pointer to gate when prefetch instructions   are executed.&lt;br /&gt;  &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;h4&gt;&lt;em&gt;&lt;u&gt;Debugging Options&lt;/u&gt;&lt;/em&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/h4&gt;  &lt;table class=&quot;MsoNormalTable&quot; style=&quot;width: 100%;&quot; width=&quot;100%&quot; border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot;&gt;  &lt;tbody&gt;&lt;tr style=&quot;&quot;&gt;   &lt;td style=&quot;padding: 0in; width: 45%;&quot; width=&quot;45%&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;&lt;b&gt;Option and Default Value&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style=&quot;padding: 0in; width: 55%;&quot; width=&quot;55%&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;&lt;b&gt;Description&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=&quot;&quot;&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;-XX:-CITime&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;Prints time spent in JIT Compiler. (Introduced in 1.4.0.)&lt;br /&gt;  &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=&quot;&quot;&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;-XX:ErrorFile=./hs_err_pid&lt;pid&gt;.log&lt;o:p&gt;&lt;/o:p&gt;&lt;/pid&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;If an error occurs, save the error data to this file.   (Introduced in 6.)&lt;br /&gt;  &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=&quot;&quot;&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;-XX:-ExtendedDTraceProbes&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;Enable performance-impacting dtrace probes. (Introduced in   6. Relevant to Solaris only.)&lt;br /&gt;  &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=&quot;&quot;&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;-XX:HeapDumpPath=./java_pid&lt;pid&gt;.hprof&lt;o:p&gt;&lt;/o:p&gt;&lt;/pid&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;Path to directory or filename for heap dump. &lt;i&gt;Manageable&lt;/i&gt;.   (Introduced in 1.4.2 update 12, 5.0 update 7.)&lt;br /&gt;  &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=&quot;&quot;&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;-XX:-HeapDumpOnOutOfMemoryError&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;Dump heap to file when java.lang.OutOfMemoryError is   thrown. &lt;i&gt;Manageable&lt;/i&gt;. (Introduced in 1.4.2 update 12, 5.0 update 7.)&lt;br /&gt;  &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=&quot;&quot;&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;-XX:OnError=&quot;&lt;cmd&gt;;&lt;cmd&gt;&quot;&lt;o:p&gt;&lt;/o:p&gt;&lt;/cmd&gt;&lt;/cmd&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;Run user-defined commands on fatal error. (Introduced in   1.4.2 update 9.)&lt;br /&gt;  &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=&quot;&quot;&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;-XX:OnOutOfMemoryError=&quot;&lt;cmd&gt;;&lt;br /&gt; &lt;cmd&gt;&quot;&lt;o:p&gt;&lt;/o:p&gt;&lt;/cmd&gt;&lt;/cmd&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;Run user-defined commands when an OutOfMemoryError is   first thrown. (Introduced in 1.4.2 update 12, 6)&lt;br /&gt;  &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=&quot;&quot;&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;-XX:-PrintClassHistogram&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;Print a histogram of class instances on Ctrl-Break. &lt;i&gt;Manageable&lt;/i&gt;.   (Introduced in 1.4.2.) The jmap -histo command provides equivalent   functionality.&lt;br /&gt;  &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=&quot;&quot;&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;-XX:-PrintConcurrentLocks&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;Print java.util.concurrent locks in Ctrl-Break thread   dump. &lt;i&gt;Manageable&lt;/i&gt;. (Introduced in 6.) The jstack -l command provides   equivalent functionality.&lt;br /&gt;  &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=&quot;&quot;&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;-XX:-PrintCommandLineFlags&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;Print flags that appeared on the command line. (Introduced   in 5.0.)&lt;br /&gt;  &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=&quot;&quot;&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;-XX:-PrintCompilation&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;Print message when a method is compiled.&lt;br /&gt;  &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=&quot;&quot;&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;-XX:-PrintGC&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;Print messages at garbage collection. &lt;i&gt;Manageable&lt;/i&gt;.&lt;br /&gt;  &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=&quot;&quot;&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;-XX:-PrintGCDetails&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;Print more details at garbage collection. &lt;i&gt;Manageable&lt;/i&gt;.   (Introduced in 1.4.0.)&lt;br /&gt;  &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=&quot;&quot;&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;-XX:-PrintGCTimeStamps&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;Print timestamps at garbage collection. &lt;i&gt;Manageable&lt;/i&gt;   (Introduced in 1.4.0.)&lt;br /&gt;  &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=&quot;&quot;&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;-XX:-PrintTenuringDistribution&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;Print tenuring age information.&lt;br /&gt;  &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=&quot;&quot;&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;-XX:-TraceClassLoading&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;Trace loading of classes.&lt;br /&gt;  &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=&quot;&quot;&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;-XX:-TraceClassLoadingPreorder&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;Trace all classes loaded in order referenced (not loaded).   (Introduced in 1.4.2.)&lt;br /&gt;  &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=&quot;&quot;&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;-XX:-TraceClassResolution&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;Trace constant pool resolutions. (Introduced in 1.4.2.)&lt;br /&gt;  &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=&quot;&quot;&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;-XX:-TraceClassUnloading&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;Trace unloading of classes.&lt;br /&gt;  &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=&quot;&quot;&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;-XX:-TraceLoaderConstraints&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;Trace recording of loader constraints. (Introduced in 6.)&lt;br /&gt;  &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=&quot;&quot;&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;-XX:+PerfSaveDataToFile&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style=&quot;padding: 0in;&quot; valign=&quot;top&quot;&gt;   &lt;p class=&quot;MsoNormal&quot;&gt;Saves jvmstat binary data on exit.&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot;&gt;&lt;br /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;  &lt;p class=&quot;MsoNormal&quot;&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://saumajitdas.blogspot.com/feeds/7467598279776851676/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://saumajitdas.blogspot.com/2010/01/java-hotspot-vm-options.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8621947959552664387/posts/default/7467598279776851676'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8621947959552664387/posts/default/7467598279776851676'/><link rel='alternate' type='text/html' href='http://saumajitdas.blogspot.com/2010/01/java-hotspot-vm-options.html' title='Java HotSpot VM Options'/><author><name>- Saumajit (http://saumajitdas.blogspot.com/)</name><uri>http://www.blogger.com/profile/07382150935096179034</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6qi93v-aNPC1o6Z0ZTap6RPlGjui-v_puEhrzcE118t-WxhhHjrLm9tiSnO2IbY7AOVmBarqN1K47wbUamo6vDj4CVXXYeCX-R1oDmJ4J2C5US5OYeqWenP2aQ5h5Ew/s113/Capture.PNG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8621947959552664387.post-4989265281924610341</id><published>2010-01-01T10:30:00.001+01:00</published><updated>2011-10-07T07:28:52.630+02:00</updated><title type='text'>How to Use Log4j with WebLogic Logging Services</title><content type='html'>WebLogic logging services use an implementation based on the Java Logging APIs, by default. Using the LogMBean.isLog4jLoggingEnabled attribute, you can direct the logging services to use Log4j instead.&lt;br /&gt;&lt;br /&gt;In the Administration Console, you can specify Log4j or keep the default Java Logging implementation.&lt;br /&gt;&lt;br /&gt;Alternatively, you can configure Log4j logging through the LogMBean interface and by adding WebLogic-specific Log4j classes, WL_HOME/server/lib/wllog4j.jar, and the log4j.jar file to the server CLASSPATH. The recommended way to do this is to place the wllog4j.jar and log4j.jar files in the DOMAIN_NAME/lib directory; there, they will get added to the server CLASSPATH dynamically during server startup.&lt;br /&gt;&lt;br /&gt;Note: WebLogic Server does not provide a Log4j version in its distribution.&lt;br /&gt;&lt;br /&gt;When Log4j is enabled, you get a reference to the org.apache.log4j.Logger that the server is using from the weblogic.logging.log4j.Log4jLoggingHelper class.&lt;br /&gt;&lt;br /&gt;With a Log4j Logger reference, you can attach you own custom appender to receive the server log events; for example, you might attach an appender that sends the server log events to Syslog or the Windows Event Viewer. Additionally, you can use the Logger reference to issue log requests to WebLogic logging services; this requires that the Log4j libraries be available to your deployed application.&lt;br /&gt;&lt;br /&gt;If your application has no requirement to interact with WebLogic logging services, package the Log4j libraries in the application&#39;s LIB directory. The server logging will continue to use the default Java Logging implementation.&lt;br /&gt;&lt;br /&gt;Enabling Log4j Logging&lt;br /&gt;&lt;br /&gt;To specify logging to a Log4j Logger instead of the default Java Logging:&lt;br /&gt;&lt;br /&gt;  * When you start the Administration Server, include the following Java option in the weblogic.Server command:&lt;br /&gt;&lt;br /&gt;    -Dweblogic.log.Log4jLoggingEnabled=true&lt;br /&gt;&lt;br /&gt;  * After the Administration Server has started, use the Administration Console to specify the Log4j logging implementation. See &quot;Specifying the Logging Implementation&quot; in the Administration Console Online Help.&lt;br /&gt;  * Use the WLST to set the value of the Log4jLoggingEnabled property and re-start the server.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The WLST commands to enable logging to a Log4j Logger in the Administration Server:&lt;br /&gt;&lt;br /&gt;  #invoke WLST&lt;br /&gt;  C:\&gt;java weblogic.WLST&lt;br /&gt;&lt;br /&gt;  #connect WLST to an Administration Server&lt;br /&gt;  wls:/offline&gt; connect(&#39;username&#39;,&#39;password&#39;)&lt;br /&gt;&lt;br /&gt;  #navigate to the writable MBean configuration tree&lt;br /&gt;  wls:/mydomain/serverConfig&gt; edit()&lt;br /&gt;  wls:/mydomain/edit&gt; startEdit()&lt;br /&gt;&lt;br /&gt;  #set cmo to the server log config&lt;br /&gt;  wls:/mydomain/edit !&gt; cd(&quot;Servers/myserver/Log/myserver&quot;)&lt;br /&gt;&lt;br /&gt;  #set log4j logging to true&lt;br /&gt;  wls:/mydomain/edit/Servers/myserver/Log/myserver !&gt; cmo.setLog4jLoggingEnabled(true)&lt;br /&gt;&lt;br /&gt;  #save and activate the changes&lt;br /&gt;  wls:/mydomain/edit/Servers/myserver/Log/myserver !&gt; save()&lt;br /&gt;  wls:/mydomain/edit/Servers/myserver/Log/myserver !&gt; activate()&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;You can enable Log4j for the server Logger as well as the domain Logger, which resides only on the Administration Server. The domain Log4j Logger reference is provided by invoking the weblogic.logging.log4j.Log4jLoggingHelper.getLog4jDomainLogger() method.&lt;br /&gt;&lt;br /&gt;Log4j Code Example&lt;br /&gt;&lt;br /&gt;  import org.apache.log4j.Logger;&lt;br /&gt;  import weblogic.logging.log4j.Log4jLoggingHelper;&lt;br /&gt;  import weblogic.logging.LoggerNotAvailableException;&lt;br /&gt;&lt;br /&gt;  /**&lt;br /&gt;   * This example shows how to use the Log4j server Logger.&lt;br /&gt;   */&lt;br /&gt;&lt;br /&gt;  public class MyLog4jTest {&lt;br /&gt;    public void testWLSLog4j() {&lt;br /&gt;      try {&lt;br /&gt;        Logger logger = Log4jLoggingHelper.getLog4jServerLogger();&lt;br /&gt;        logger.addAppender(myAppender); // The Appender is configured using either the log4j props file or other custom mechanism.&lt;br /&gt;        logger.info(&quot;Test log message&quot;);&lt;br /&gt;      } catch(LoggerNotAvailableException lex) {&lt;br /&gt;      System.err.println(&quot;Unable to get a reference to the log4j Logger: &quot;+&lt;br /&gt;        lex.getMessage())&lt;br /&gt;      }&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjOFLIOnTFMrjZ-S2jwzLolE74Gz0ZJj_U1MWhDqCBYKrDiadG4gahhH6GfBrwvn4xX2_HplToFu_q_PRA_YjquCOzeYJcht4lPgJbdbTeKTD86nP48fx3q-7VIQcURRGO6aSGNn5hBGxo/s1600-h/untitled.JPG&quot;&gt;&lt;img style=&quot;cursor: pointer; width: 442px; height: 404px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjOFLIOnTFMrjZ-S2jwzLolE74Gz0ZJj_U1MWhDqCBYKrDiadG4gahhH6GfBrwvn4xX2_HplToFu_q_PRA_YjquCOzeYJcht4lPgJbdbTeKTD86nP48fx3q-7VIQcURRGO6aSGNn5hBGxo/s400/untitled.JPG&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5421703349484133138&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;You have programmatic access to the Log4j Logger and its appenders (handlers) and layouts (formatters) for configuration purposes.&lt;br /&gt;&lt;br /&gt;Java Logging is the default for client and server-side logging; Log4j is available only for server-side and not client-side logging.</content><link rel='replies' type='application/atom+xml' href='http://saumajitdas.blogspot.com/feeds/4989265281924610341/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://saumajitdas.blogspot.com/2010/01/how-to-use-log4j-with-weblogic-logging.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8621947959552664387/posts/default/4989265281924610341'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8621947959552664387/posts/default/4989265281924610341'/><link rel='alternate' type='text/html' href='http://saumajitdas.blogspot.com/2010/01/how-to-use-log4j-with-weblogic-logging.html' title='How to Use Log4j with WebLogic Logging Services'/><author><name>- Saumajit (http://saumajitdas.blogspot.com/)</name><uri>http://www.blogger.com/profile/07382150935096179034</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6qi93v-aNPC1o6Z0ZTap6RPlGjui-v_puEhrzcE118t-WxhhHjrLm9tiSnO2IbY7AOVmBarqN1K47wbUamo6vDj4CVXXYeCX-R1oDmJ4J2C5US5OYeqWenP2aQ5h5Ew/s113/Capture.PNG'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjOFLIOnTFMrjZ-S2jwzLolE74Gz0ZJj_U1MWhDqCBYKrDiadG4gahhH6GfBrwvn4xX2_HplToFu_q_PRA_YjquCOzeYJcht4lPgJbdbTeKTD86nP48fx3q-7VIQcURRGO6aSGNn5hBGxo/s72-c/untitled.JPG" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8621947959552664387.post-5343420488736736456</id><published>2010-01-01T10:21:00.001+01:00</published><updated>2011-10-07T07:28:52.630+02:00</updated><title type='text'>The Concept of Classloaders</title><content type='html'>Classloaders, as the name suggests, are responsible for loading classes within the JVM. Before your class can be executed or accessed, it must become available via a classloader. Given a class name, a classloader locates the class and loads it into the JVM. Classloaders are Java classes themselves. This brings the question: if classloaders are Java classes themselves, who or what loads them?&lt;br /&gt;&lt;br /&gt;When you execute a Java program (i.e., by typing java at a command prompt), it executes and launches a native Java launcher. By native, I mean native to your current platform and environment. This native Java launcher contains a classloader called the bootstrap classloader. This bootstrap classloader is native to your environment and is not written in Java. The main function of the bootstrap classloader is to load the core Java classes.&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEicn62G7BAY7B1sgQoQ67Z59B7QFiSX6MFaICk4YxucXXQOY12SwNOeKstHRqBZcG_C8OHiyFYgX0klTRgXUvnitrSoDbBBp6B1QY-7RP4htRdCQS-1-QJLB27V6FllQR3E6IZelew1ne0/s1600-h/log4figure1.jpg&quot;&gt;&lt;img style=&quot;cursor:pointer; cursor:hand;width: 211px; height: 208px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEicn62G7BAY7B1sgQoQ67Z59B7QFiSX6MFaICk4YxucXXQOY12SwNOeKstHRqBZcG_C8OHiyFYgX0klTRgXUvnitrSoDbBBp6B1QY-7RP4htRdCQS-1-QJLB27V6FllQR3E6IZelew1ne0/s320/log4figure1.jpg&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5421700064152813666&quot; /&gt;&lt;/a&gt;&lt;br /&gt;Figure 1; Classloader delegation hierarchy&lt;br /&gt;&lt;br /&gt;The JVM implements two other classloaders by default. The bootstrap classloader loads the extension and application classloaders into memory. Both are written in Java. As mentioned before, the bootstrap classloader loads the core Java classes (for example, classes from the java.util package). The extension classloader loads classes that extend the core Java classes (e.g., classes from the javax packages, or the classes under the ext directory of your runtime). The application classloader loads the classes that make up your application.&lt;br /&gt;&lt;br /&gt;All three default classloaders follow the delegation model. Before a child classloader tries to locate a class, it delegates that task to a parent. When your application requests a particular class, the application classloader delegates this request to the extension classloader, which in turn delegates it to the bootstrap classloader. If the class that you requested is a Java core class, the bootstrap classloader will make the class available to you. However, if it cannot find the class, the request returns to the extension classloader, and from there to the application classloader itself. The idea is that each classloader first looks up to its parent for a particular class. Only if the parent does not have the class does the child classloader try to look it up itself.&lt;br /&gt;&lt;br /&gt;In application servers, each separately-deployed web application and EJB gets its own classloader (normally; this is certainly the case in WebLogic). This classloader is derived from the application classloader and is responsible for that particular EJB or web application. (Note that if an application is deployed as an EAR file--a combination of EJB and webapps--it gets one classloader, no more). This new classloader loads all classes that the webapp or EJB require that are not already part the Java core classes or the extension packages. It is also responsible for loading and unloading of classes, a feature missing from the default classloaders. This feature helps in hot deploy of applications.&lt;br /&gt;&lt;br /&gt;When WebLogic starts up, it uses the Java-supplied application classloader to load the classes that make up its runtime. It then launches individual classloaders, derived from the Java application classloader, which load the classes for individual applications. The individual classloaders are invisible to the classloaders of the other applications; hence, classes loaded for one particular application will not be seen by another application.&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0avJ1tfy0cdJNjV-NxyojTEyzfFHpDCrmTVp8c7Ct-_ZfiF_5UXhaUK3JO57PldMt_udupvrA_-RU53nOLpCquj3qZ7joGQdd8uyO3eXIHLza1jGcxBEu9Tq1aTe1SpNrA987vaw-F-g/s1600-h/log4figure2.jpg&quot;&gt;&lt;img style=&quot;cursor:pointer; cursor:hand;width: 268px; height: 320px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0avJ1tfy0cdJNjV-NxyojTEyzfFHpDCrmTVp8c7Ct-_ZfiF_5UXhaUK3JO57PldMt_udupvrA_-RU53nOLpCquj3qZ7joGQdd8uyO3eXIHLza1jGcxBEu9Tq1aTe1SpNrA987vaw-F-g/s320/log4figure2.jpg&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5421699843612080418&quot; /&gt;&lt;/a&gt;&lt;br /&gt;Figure 2: Individual application classloaders&lt;br /&gt;&lt;br /&gt;What if you want to make a single class available to all applications? Load it in a top-level classloader. This could be in the classpath of WebLogic. When WebLogic starts, it will automatically load this class in memory using the Java-supplied application classloader. All sub-application classloaders get access to it. However, the negatives of this approach are clear too. First, you lose the capability of hot deploy for this particular class in all individual applications. Second, any change in this class means that the server needs to be restarted, as there is no mechanism for a Java application classloader to reload classes. You will need to weigh in the pros and cons before you take this approach.</content><link rel='replies' type='application/atom+xml' href='http://saumajitdas.blogspot.com/feeds/5343420488736736456/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://saumajitdas.blogspot.com/2010/01/concept-of-classloaders.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8621947959552664387/posts/default/5343420488736736456'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8621947959552664387/posts/default/5343420488736736456'/><link rel='alternate' type='text/html' href='http://saumajitdas.blogspot.com/2010/01/concept-of-classloaders.html' title='The Concept of Classloaders'/><author><name>- Saumajit (http://saumajitdas.blogspot.com/)</name><uri>http://www.blogger.com/profile/07382150935096179034</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6qi93v-aNPC1o6Z0ZTap6RPlGjui-v_puEhrzcE118t-WxhhHjrLm9tiSnO2IbY7AOVmBarqN1K47wbUamo6vDj4CVXXYeCX-R1oDmJ4J2C5US5OYeqWenP2aQ5h5Ew/s113/Capture.PNG'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEicn62G7BAY7B1sgQoQ67Z59B7QFiSX6MFaICk4YxucXXQOY12SwNOeKstHRqBZcG_C8OHiyFYgX0klTRgXUvnitrSoDbBBp6B1QY-7RP4htRdCQS-1-QJLB27V6FllQR3E6IZelew1ne0/s72-c/log4figure1.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8621947959552664387.post-8004686614231850318</id><published>2009-07-10T22:11:00.001+02:00</published><updated>2011-10-07T07:28:52.630+02:00</updated><title type='text'>How to - Interceptors in EJB 3.0</title><content type='html'>I was checking the interceptors concept with EJB 3.0, and found it quite confusing, so just thought of writing this to clear the clouds around.&lt;br /&gt;&lt;br /&gt;EJB 3.0 allows you to define interceptor methods that are called around the business methods and lifecycle events on the bean instances. The interceptor methods can either be defined within the bean class or in separate interceptor classes. Interceptor definitions and binding interceptors to bean classes or specific methods within the beans can be done either using annotations or within the deployment descriptors. Here, I will try to provide a simple example of using interceptors on business methods using annotations.&lt;br /&gt;&lt;br /&gt;Methods that intercept invocations to business methods or lifecycle events can be defined either in the bean class or in separator interceptor classes. Only one interceptor method is allowed per class. The interceptor methods should be annotated with the @AroundInvoke annotation and should have the signature, Object (javax.ejb.InvocationContext). If the bean class has a method with the above signature and annotation, the method will be used to interpose on all the business method invocations on that bean. Additionally, you can define interceptors for all the business methods on the bean or individual business methods using the @Interceptors annotation. The value of this annotation is the list of interceptor classes. The interceptor classes are required to have a single interceptor method with the same signature and annotation as explained earlier. Interceptor classes have the same lifecycle as the associated bean instance and can have dependency injection, which will be done using the same naming context as the bean.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: rgb(102, 102, 102); font-weight: bold;&quot;&gt;InvocationContext&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;InvocationContext allows you to propagate state across a chain of interceptors. In addition it allows to get/set method parameters, get a reference to the bean, get the invoked method name etc. The methods provided by InvocationContext interface are,&lt;br /&gt;# Object getBean(): Returns a reference to the bean.&lt;br /&gt;# Method getMethod(): Returns a reference to the invoked method.&lt;br /&gt;# Object[] getParameters(): Returns the parameters passed to the method.&lt;br /&gt;# void setParameters(Object[] parameters) : Sets the parameters.&lt;br /&gt;# Map getContextData(): Get contextual data that can be shared in a chain.&lt;br /&gt;# Object proceed(): Proceed to the next interceptor in the chain or the business method if it is the last interceptor.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: rgb(102, 102, 102); font-weight: bold;&quot;&gt;Order of Interception&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The interceptors are invoked in the order in which they are declared in the annotation. Bean level interceptors using interceptor classes are invoked before method level interceptors using interceptor classes. Interceptor method defined in the bean class itself is invoked at the end. If the bean or the interceptor classes have super classes with interceptor methods, they are invoked before the interceptor methods on the sub-classes are called.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: rgb(51, 51, 51); font-weight: bold;font-size:180%;&quot; &gt;Example&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Now we will have a look at a simple example for doing interception on an EJB&#39;s business method.&lt;br /&gt;Bean Class&lt;br /&gt;&lt;br /&gt;package com.ed.ejb;&lt;br /&gt;&lt;br /&gt;import javax.ejb.AroundInvoke;&lt;br /&gt;import javax.ejb.Interceptors;&lt;br /&gt;import javax.ejb.InvocationContext;&lt;br /&gt;import javax.ejb.Stateless;&lt;br /&gt;import javax.jws.WebMethod;&lt;br /&gt;import javax.jws.WebService;&lt;br /&gt;&lt;br /&gt;@Stateless&lt;br /&gt;@WebService&lt;br /&gt;@Interceptors( { Interceptor2.class })&lt;br /&gt;public class HelloWorldBean {&lt;br /&gt;&lt;br /&gt;@Interceptors( { Interceptor1.class })&lt;br /&gt;@WebMethod&lt;br /&gt;public String sayHello() {&lt;br /&gt;return &quot;Hello&quot;;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;@WebMethod&lt;br /&gt;public String sayHi() {&lt;br /&gt;return &quot;Hi&quot;;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;@AroundInvoke&lt;br /&gt;public Object log(InvocationContext invocationContext) throws Exception {&lt;br /&gt;System.err.println(invocationContext.getMethod().getName() + &quot; called from interceptor 3&quot;);&lt;br /&gt;return invocationContext.proceed();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;The bean class has an AroundInvoke method, a bean level interceptor and a method level interceptor. A call to sayHello will invoke the interceptors in the order bean level interceptor, method level interceptor and the AroundInvoke method within the bean class. A call to sayHi will invoke the interceptors in the order bean level interceptor and the AroundInvoke method within the bean class.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; color: rgb(102, 102, 102);&quot;&gt;Interceptor Classes&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;package com.ed.ejb;&lt;br /&gt;&lt;br /&gt;import javax.ejb.AroundInvoke;&lt;br /&gt;import javax.ejb.InvocationContext;&lt;br /&gt;&lt;br /&gt;public class Interceptor1 {&lt;br /&gt;&lt;br /&gt;@AroundInvoke&lt;br /&gt;public Object log(InvocationContext invocationContext) throws Exception {&lt;br /&gt;System.err.println(invocationContext.getMethod().getName() + &quot; called from interceptor 1&quot;);&lt;br /&gt;return invocationContext.proceed();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;package com.ed.ejb;&lt;br /&gt;&lt;br /&gt;import javax.ejb.AroundInvoke;&lt;br /&gt;import javax.ejb.InvocationContext;&lt;br /&gt;&lt;br /&gt;public class Interceptor2 {&lt;br /&gt;&lt;br /&gt;@AroundInvoke&lt;br /&gt;public Object log(InvocationContext invocationContext) throws Exception {&lt;br /&gt;System.err.println(invocationContext.getMethod().getName() + &quot; called from interceptor 2&quot;);&lt;br /&gt;return invocationContext.proceed();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: rgb(102, 102, 102); font-weight: bold;&quot;&gt;Testing the Example&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The classes shown above can be packaged as a jar file and deployed to your application Server domain. The EJB is annotated with the @WebService annotation and the methods are annotated with the @WebMethod annotation, you can easily test the method invocations.</content><link rel='replies' type='application/atom+xml' href='http://saumajitdas.blogspot.com/feeds/8004686614231850318/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://saumajitdas.blogspot.com/2009/07/how-to-interceptors-in-ejb-30.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8621947959552664387/posts/default/8004686614231850318'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8621947959552664387/posts/default/8004686614231850318'/><link rel='alternate' type='text/html' href='http://saumajitdas.blogspot.com/2009/07/how-to-interceptors-in-ejb-30.html' title='How to - Interceptors in EJB 3.0'/><author><name>- Saumajit (http://saumajitdas.blogspot.com/)</name><uri>http://www.blogger.com/profile/07382150935096179034</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6qi93v-aNPC1o6Z0ZTap6RPlGjui-v_puEhrzcE118t-WxhhHjrLm9tiSnO2IbY7AOVmBarqN1K47wbUamo6vDj4CVXXYeCX-R1oDmJ4J2C5US5OYeqWenP2aQ5h5Ew/s113/Capture.PNG'/></author><thr:total>0</thr:total></entry></feed>