<?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: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-1160221863863331437</id><updated>2012-01-01T23:01:53.235-08:00</updated><category term='Node Manager'/><category term='HTTP Session'/><category term='SNMP'/><category term='Introduction'/><category term='WebLogic Console'/><category term='Development'/><category term='Production Mode'/><category term='High Availability'/><category term='Scripts'/><category term='Clustering'/><category term='WLST'/><category term='RC Scripts'/><category term='Tools'/><category term='Milestones'/><category term='WLDF'/><category term='JMS'/><category term='Management'/><category term='Security'/><category term='Domain Creation'/><category term='Monitoring'/><category term='Best Practices'/><category term='Tips and Tricks'/><category term='Installation'/><category term='Announcements'/><title type='text'>WebLogic Server Infomania</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://weblogicserver.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1160221863863331437/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://weblogicserver.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Bala Kothandaraman</name><uri>http://www.blogger.com/profile/04536459985006004271</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp1.blogger.com/_i4Ubs4VYKUM/RmmunEEazmI/AAAAAAAAAAM/HPNOLwuH4YE/s400/Bala_P1.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>41</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1160221863863331437.post-6095754556526828798</id><published>2011-11-20T06:56:00.000-08:00</published><updated>2011-11-20T07:24:22.734-08:00</updated><title type='text'>A good WebLogic Server Administration book after a very long time!</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-l2Zq1-wBMmY/Tskau-QNeoI/AAAAAAAADNg/uLWCIKc-fRc/s1600/WLS_Book.gif"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 252px; height: 320px;" src="http://4.bp.blogspot.com/-l2Zq1-wBMmY/Tskau-QNeoI/AAAAAAAADNg/uLWCIKc-fRc/s320/WLS_Book.gif" alt="" id="BLOGGER_PHOTO_ID_5677098199564515970" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Recently I was involved in reviewing a book for Packt Publishing - &lt;a href="http://www.packtpub.com/oracle-weblogic-server-11gr2-administration-essentials/book"&gt;Oracle WebLogic Server 11gR1 PS2: Administration Essentials by Michel Schildmeijer&lt;/a&gt;. I am not writing this post because I reviewed this book but I had a chance to read the entire content of this book. This is a book written on the topic of WebLogic Server Administration after a very long time, and a good book too. If you are someone who works on WebLogic Server &amp;amp; JEE technologies you would certainly know about the scarcity of books on WebLogic Server and especially administration. WebLogic Server is being used as a commodity these days for many applications and products built on JEE platforms. Even though it is widely used there aren't many books available for WebLogic Server and the documentation serves as a good reference. But with the growing features on WebLogic Server in the past few years it is hard to learn for any new comers or who are non-developers if you are not following the product for a few years. This book comes as huge gap filler on this area.&lt;br /&gt;&lt;br /&gt;The flow of this book would prepare you from planning to production and tuning with a good story line. As WebLogic Server is being used as the application server for almost all the Oracle Fusion Middleware Suite of products Michel not only talks in the perspective of simple JEE applications but also talks about how WebLogic fits in the Fusion Middleware area which is a key benefits that you can ripe from this book. As WebLogic is rich in features especially the administration console, I expected a bunch of screen shots and less narration when I first started reading this book for review. But Michel really balanced between the content and the screenshots, which are presented wherever it is necessary. When I used to go around training customers for BEA and Oracle in WebLogic Server, I was always in need of a white board rather than prepared presentation contents. You can clearly see that need from this book which has many diagrams hand-drawn (Of course using some tool) to explain a lot of topics.&lt;br /&gt;&lt;br /&gt;It would say the power of this book is the take off low and fly high approach to many topics, cohesive order of the topics presented to the viewers, compilation of real world experiences and best practices.&lt;br /&gt;&lt;br /&gt;This is a good reading if you are a Oracle WebLogic Administrator or any Oracle Fusion Middleware product administrator or trying to become one. So if you are looking to learn or reinforce your knowledge in WebLogic Server this is a good book. And this is available both in printed and electronic format.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1160221863863331437-6095754556526828798?l=weblogicserver.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://weblogicserver.blogspot.com/feeds/6095754556526828798/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://weblogicserver.blogspot.com/2011/11/book-on-weblogic-server-after-very-long.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1160221863863331437/posts/default/6095754556526828798'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1160221863863331437/posts/default/6095754556526828798'/><link rel='alternate' type='text/html' href='http://weblogicserver.blogspot.com/2011/11/book-on-weblogic-server-after-very-long.html' title='A good WebLogic Server Administration book after a very long time!'/><author><name>Bala Kothandaraman</name><uri>http://www.blogger.com/profile/04536459985006004271</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp1.blogger.com/_i4Ubs4VYKUM/RmmunEEazmI/AAAAAAAAAAM/HPNOLwuH4YE/s400/Bala_P1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-l2Zq1-wBMmY/Tskau-QNeoI/AAAAAAAADNg/uLWCIKc-fRc/s72-c/WLS_Book.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1160221863863331437.post-2852664397935678875</id><published>2011-02-17T11:29:00.000-08:00</published><updated>2011-02-17T11:32:44.131-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Scripts'/><category scheme='http://www.blogger.com/atom/ns#' term='Tips and Tricks'/><category scheme='http://www.blogger.com/atom/ns#' term='WLST'/><category scheme='http://www.blogger.com/atom/ns#' term='Introduction'/><title type='text'>IDE for WLST Scripting - OEPE</title><content type='html'>&lt;p&gt;In the past many folks asked me about a GUI based tooling support for  WLST. Some people managed to use some Jython tools for WLST but it is  not straight forward and supported by Oralce. What you need to author  WLST scripts more efficiently is a tooling support to develop WLST  Scripts. If you are involved in writing a lot of WLST scripts then you  will appreciate this initiative.&lt;/p&gt;  &lt;p&gt;Oracle just came up with a OEPE (Oracle Enterprise Pack for Eclipse)  based tooling for WLST. Some of the features of this tool are:&lt;/p&gt;  &lt;p&gt;    * WLST/Jython/Python Source Editor&lt;br /&gt;    * Syntax highlighting, validation&lt;br /&gt;    * Code completion&lt;br /&gt;    * WLST Templates&lt;br /&gt;    * MBean Navigator for browsing MBeans&lt;br /&gt;    * WLST Execution and Console in Eclipse&lt;br /&gt;    * WLST integrated Help&lt;br /&gt;    * Support for both online and offline modes&lt;/p&gt;  Currently anyone who is authoring WLST scripts must refer to the docs  for syntax and samples. This will be a good tool for developers so that  they can build WLST Scripts within a comfortable environment -  Eclipse/OEPE. Also administrators can benefit from the this tool as  there are features like templates, code completion etc. The latest  release of &lt;a href="http://www.oracle.com/technetwork/developer-tools/eclipse/downloads/oepe-1116-161753.html"&gt;OEPE 11gR1 (11.1.1.6)  &lt;/a&gt;comes with this tooling. To find more about the &lt;a href="http://www.oracle.com/technetwork/developer-tools/eclipse/overview/whatsnew-089747.html"&gt;new features of this release see here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1160221863863331437-2852664397935678875?l=weblogicserver.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://weblogicserver.blogspot.com/feeds/2852664397935678875/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://weblogicserver.blogspot.com/2011/02/ide-for-wlst-scripting-oepe.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1160221863863331437/posts/default/2852664397935678875'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1160221863863331437/posts/default/2852664397935678875'/><link rel='alternate' type='text/html' href='http://weblogicserver.blogspot.com/2011/02/ide-for-wlst-scripting-oepe.html' title='IDE for WLST Scripting - OEPE'/><author><name>Bala Kothandaraman</name><uri>http://www.blogger.com/profile/04536459985006004271</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp1.blogger.com/_i4Ubs4VYKUM/RmmunEEazmI/AAAAAAAAAAM/HPNOLwuH4YE/s400/Bala_P1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1160221863863331437.post-6357670047114371749</id><published>2011-02-17T11:20:00.001-08:00</published><updated>2011-02-17T11:32:36.828-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Scripts'/><category scheme='http://www.blogger.com/atom/ns#' term='Best Practices'/><category scheme='http://www.blogger.com/atom/ns#' term='Tips and Tricks'/><category scheme='http://www.blogger.com/atom/ns#' term='WLST'/><title type='text'>5-Part WLST Best Practices Series</title><content type='html'>A while ago I wrote a 5-part WLST Best Practices series . Here I am consolidating this post with link to all those 5 posts.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://weblogicserver.blogspot.com/2009/02/variable-definitions-in-preamble-best.html"&gt;Variable Definitions In The Preamble [WLST scripting Best Practices (Part-1)]&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://weblogicserver.blogspot.com/2009/02/do-not-step-on-others-feet-wlst.html"&gt;Do Not Step On Other's Feet [WLST scripting Best Practices (Part-2)]&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://weblogicserver.blogspot.com/2009/03/check-for-resourceconfiguration.html"&gt;Check for resource/configuration existence [WLST scripting Best Practices (Part-3)]&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://weblogicserver.blogspot.com/2009/06/use-definition-for-reuse-wlst-scripting.html"&gt;Use definitions for Reuse [WLST scripting Best Practices (Part-4)]&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://weblogicserver.blogspot.com/2009/11/knowing-wlst-variables.html"&gt;Understanding WLST built-in variables . . .[WLST scripting Best Practices (Part-5)]&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1160221863863331437-6357670047114371749?l=weblogicserver.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://weblogicserver.blogspot.com/feeds/6357670047114371749/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://weblogicserver.blogspot.com/2011/02/5-part-wlst-best-practices-series.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1160221863863331437/posts/default/6357670047114371749'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1160221863863331437/posts/default/6357670047114371749'/><link rel='alternate' type='text/html' href='http://weblogicserver.blogspot.com/2011/02/5-part-wlst-best-practices-series.html' title='5-Part WLST Best Practices Series'/><author><name>Bala Kothandaraman</name><uri>http://www.blogger.com/profile/04536459985006004271</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp1.blogger.com/_i4Ubs4VYKUM/RmmunEEazmI/AAAAAAAAAAM/HPNOLwuH4YE/s400/Bala_P1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1160221863863331437.post-7657846569955446869</id><published>2010-08-03T15:02:00.000-07:00</published><updated>2010-08-10T07:58:55.107-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Management'/><category scheme='http://www.blogger.com/atom/ns#' term='Scripts'/><category scheme='http://www.blogger.com/atom/ns#' term='Monitoring'/><category scheme='http://www.blogger.com/atom/ns#' term='Tips and Tricks'/><category scheme='http://www.blogger.com/atom/ns#' term='WLST'/><title type='text'>Configure Email Notification in WebLogic Server</title><content type='html'>&lt;h2&gt;&lt;span style="font-size:100%;"&gt;&lt;a name="_Toc249848972"&gt;Introduction&lt;/a&gt;&lt;/span&gt;&lt;/h2&gt; &lt;p class="MsoNormal"&gt; &lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: justify;"&gt;If you are administering applications deployed on WebLogic Server or if you are operations personal responsible to manage a WebLogic Server environment you might have at least asked the following question once:&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: justify;"&gt;“Can I setup WebLogic Server to send automatic notifications?”&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: justify;"&gt;People always ask me whether WebLogic Server can send automatic notifications. My answer is - "Yes, WebLogic Server had always supported SNMP which can be configured to do standard SNMP Trap notifications to your enterprise monitoring system which can then be sent as an email or pager out to administrators". But the next question is - "I don't want to set up SNMP and I want WebLogic Server to directly send notifications. Can we do that?"  Again the answer is - "Yes, starting from version 9.x WebLogic Server supports a new framework called WebLogic Diagnostic Framework - WLDF, which can be used for this purpose". Enterprise monitoring solutions like Oracle Enterprise Manager, HP Open View can monitor WebLogic Server from outside and can trigger notification among various other management and monitoring features. But you can also set up WebLogic Server to directly send many types of notifications. Let us see how to simply set up an email notification with WLS in this article.&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: justify;"&gt;Oracle WebLogic Server is Java EE certified application server which is the foundation of many Service Oriented Architecture (SOA) implementations. So many enterprises have their mission-critical applications deployed on WebLogic Server. WebLogic provides a scalable and highly available environment. If you are deploying your mission critical applications on Oracle WebLogic Server you can make use of WebLogic Diagnostic Framework (WLDF) to get diagnostic data from WebLogic Server instances and from applications deployed to them. This will help administrator and system operators to see more information from under the hoods.&lt;/p&gt;&lt;p class="MsoNormal" style="text-align: justify;"&gt;This powerful feature will play a significant role in production environment where the application environment should alert operational personal when there is a performance or service level violation. This also eliminates the need to setup custom or third-party monitoring solutions for alerting and notification.&lt;br /&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: justify;"&gt; &lt;/p&gt;  &lt;h2 style="text-align: justify;"&gt;&lt;span style="font-size:100%;"&gt;&lt;a name="_Toc249848968"&gt;WebLogic Diagnostics Framework – Watch &amp;amp; Notification&lt;/a&gt;&lt;/span&gt;&lt;/h2&gt;  &lt;p class="MsoNormal" style="text-align: justify;"&gt; &lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: justify;"&gt;One of the features of WLDF is Watch and Notification. You can configure server(s) with watch condition and respective notification(s) to be sent if the watch conditions are met. For example, if the number of request waiting on a JDBC Data Source to grab a connection exceeds 10 and if the free heap in the server is less than 5% then you can trigger a notification. The notification can be one or more of the following types:&lt;/p&gt;  &lt;ul style="margin-top: 0in;" type="square"&gt;&lt;li class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify; line-height: normal;"&gt;JMX      Notification - Application(s) can register notification listener with WLDF      to receive notifications.&lt;/li&gt;&lt;li class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify; line-height: normal;"&gt;JMS      Notification - WLDF can post a message to JMS destination to alert the      situation which can be consumed by a message listener or MDBs to further      processing.&lt;/li&gt;&lt;li class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify; line-height: normal;"&gt;SNMP      Notification - SNMP traps can be sent to alert SNMP managers.&lt;/li&gt;&lt;li class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify; line-height: normal;"&gt;SMTP      Notification - Email notifications through a Java Mail session.&lt;/li&gt;&lt;li class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify; line-height: normal;"&gt;Image      Notification - Generates a server image which contains information from      different subsystem during the watch.&lt;/li&gt;&lt;/ul&gt;  &lt;p class="MsoNormal" style="text-align: justify;"&gt; &lt;/p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_i4Ubs4VYKUM/TFiTU2qBWCI/AAAAAAAACxQ/MafpVKV17wU/s1600/image001.gif"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 227px;" src="http://3.bp.blogspot.com/_i4Ubs4VYKUM/TFiTU2qBWCI/AAAAAAAACxQ/MafpVKV17wU/s320/image001.gif" alt="" id="BLOGGER_PHOTO_ID_5501308931311491106" border="0" /&gt;&lt;/a&gt;&lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: center;"&gt;Figure: 1 WebLogic Domain&lt;/p&gt;&lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: center;"&gt;&lt;br /&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;"&gt; &lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: justify;"&gt;You can configure Watch conditions on the MBean data, Log messages and WLDF Event data. The notification can be one or more of the above notifications. Since email notification is a common request, I shall illustrate how to setup WLS to send email notification using an open source SMTP server - The Apache Java Enterprise Mail Server (Apache James). To download Apache James, go to - &lt;a href="http://james.apache.org/server/"&gt;http://james.apache.org/server/&lt;/a&gt; [or] &lt;a href="http://people.apache.org/dist/james/server/binaries/"&gt;http://people.apache.org/dist/james/server/binaries/&lt;/a&gt;. Download and extract the zip file to a convenient location (Eg. /usr/james-2.3.1rcl/). Start the server using run.sh from the bin folder under the JAMES_HOME. Setup a test user in James as per these instructions - &lt;a href="http://james.apache.org/server/2.3.1/adding_users.html"&gt;http://james.apache.org/server/2.3.1/adding_users.html&lt;/a&gt;. The default admin username and password for James are root/root.&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: justify;"&gt; &lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: justify;"&gt;Ensure that the James mail server and the administration server for the domain are started. If not, use DOMAIN_HOME/startWebLogic.cmd/sh for starting the administration server of your domain and use JAMES_HOME/bin/run.bat/sh to start James Server. You can use console or WLST to configure the following setting. Let us use the web-based administration console for configuration. Log in to WebLogic Administration Console at - http://localhost:7001/console using an administrative account.&lt;/p&gt;  &lt;h3&gt; &lt;/h3&gt;  &lt;h2&gt;&lt;span style="font-size:100%;"&gt;&lt;a name="_Toc249848969"&gt;Creating JavaMail Session&lt;/a&gt;&lt;/span&gt;&lt;/h2&gt;  &lt;p class="MsoNormal"&gt; &lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: justify;"&gt;First step is to make sure that the underlying resources for the notification are setup. In this case we are going to use SMTP notification so let us first create the Java Mail Session to connect to James Mail Server.&lt;/p&gt;  &lt;ol style="margin-top: 0in;" start="1" type="1"&gt;&lt;li class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify; line-height: normal;"&gt;Click      "Lock &amp;amp; Edit" to acquire a configuration lock&lt;/li&gt;&lt;li class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify; line-height: normal;"&gt;Expand      Services &gt; Mail Sessions and click "New" to create a new Java      Mail Session. &lt;/li&gt;&lt;li class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify; line-height: normal;"&gt;Provide      Name, JNDI Name and JavaMail Properties as follow:&lt;/li&gt;&lt;li class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify; line-height: normal;"&gt;Name      - James-MailSession&lt;/li&gt;&lt;li class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify; line-height: normal;"&gt;JNDI      Name - com.test.myjamesMailSession&lt;/li&gt;&lt;li class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify; line-height: normal;"&gt;JavaMail      Properties:&lt;/li&gt;&lt;/ol&gt;  &lt;p class="MsoNormal" style="margin: 0in 0in 0.0001pt 1in; text-align: justify; line-height: normal;"&gt;mail.transport.protocol=smtp&lt;/p&gt;  &lt;p class="MsoNormal" style="margin: 0in 0in 0.0001pt 1in; text-align: justify; line-height: normal;"&gt;mail.smtp.host=localhost&lt;/p&gt;  &lt;p class="MsoNormal" style="margin: 0in 0in 0.0001pt 1in; text-align: justify; line-height: normal;"&gt;mail.smtp.user=admin&lt;/p&gt;  &lt;p class="MsoNormal" style="margin: 0in 0in 0.0001pt 1in; text-align: justify; line-height: normal;"&gt;mail.smpt.password=password&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify; line-height: normal;"&gt; &lt;/p&gt;  &lt;ol style="margin-top: 0in;" start="7" type="1"&gt;&lt;li class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify; line-height: normal;"&gt;Click      next to target the mail session to a server (Eg. AdminServer or mgd_s1)      and click finish.&lt;/li&gt;&lt;li class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify; line-height: normal;"&gt;Activate      the changes by clicking "Activate Changes".&lt;/li&gt;&lt;/ol&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;"&gt; &lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;"&gt;&lt;br /&gt;&lt;!--[if gte vml 1]&gt;&lt;v:shape id="_x0000_i1026" type="#_x0000_t75" style="'width:417pt;height:360.75pt'"&gt;  &lt;v:imagedata src="file:///C:\DOCUME~1\bala.k\LOCALS~1\Temp\msohtmlclip1\01\clip_image003.png" title=""&gt; &lt;/v:shape&gt;&lt;![endif]--&gt;&lt;!--[if !vml]--&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_i4Ubs4VYKUM/TFiTgqJpXyI/AAAAAAAACxY/Fonhi-Ew35A/s1600/image002.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 277px;" src="http://2.bp.blogspot.com/_i4Ubs4VYKUM/TFiTgqJpXyI/AAAAAAAACxY/Fonhi-Ew35A/s320/image002.jpg" alt="" id="BLOGGER_PHOTO_ID_5501309134112907042" border="0" /&gt;&lt;/a&gt;&lt;!--[endif]--&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: center;"&gt;Figure: 2 Configuring JavaMail Session&lt;/p&gt;&lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: center;"&gt;&lt;br /&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;"&gt; &lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: justify;"&gt;If you are using a different mail server use appropriate information.&lt;/p&gt;  &lt;h2&gt;&lt;span style="font-size:100%;"&gt;&lt;a name="_Toc249848970"&gt;Creating WLDF Module&lt;/a&gt;&lt;/span&gt;&lt;/h2&gt;  &lt;p class="MsoNormal" style="text-align: justify;"&gt; &lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: justify;"&gt;Next step in configuring watch and notification is to create a diagnostic module and target it to the server. You can use console or WLST to create a diagnostic module. The following steps illustrate the steps to create a WLDF system module:&lt;/p&gt;  &lt;ol style="margin-top: 0in;" start="1" type="1"&gt;&lt;li class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify; line-height: normal;"&gt;Click      "Lock &amp;amp; Edit" to acquire a configuration lock&lt;/li&gt;&lt;li class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify; line-height: normal;"&gt;Click      Diagnostics &gt; Diagnostics Modules and click "New" to create a      new diagnostics module. Provide a name and description.&lt;/li&gt;&lt;li class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify; line-height: normal;"&gt;Name      - Test_WLDF_Module&lt;/li&gt;&lt;li class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify; line-height: normal;"&gt;Description      - This is a WLDF module for testing email notifications&lt;/li&gt;&lt;/ol&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify; line-height: normal;"&gt; &lt;/p&gt;  &lt;ol style="margin-top: 0in;" start="5" type="1"&gt;&lt;li class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify; line-height: normal;"&gt;Select      the newly created module and select targets tab. Select the appropriate      server for target as before&lt;/li&gt;&lt;li class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify; line-height: normal;"&gt;Click      "Save" and "Activate"&lt;/li&gt;&lt;/ol&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify; line-height: normal;"&gt; &lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify; line-height: normal;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify; line-height: normal;"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify; line-height: normal;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_i4Ubs4VYKUM/TFiTmnEyXAI/AAAAAAAACxg/v0qeHAbLjpY/s1600/image003.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 294px;" src="http://3.bp.blogspot.com/_i4Ubs4VYKUM/TFiTmnEyXAI/AAAAAAAACxg/v0qeHAbLjpY/s320/image003.jpg" alt="" id="BLOGGER_PHOTO_ID_5501309236366433282" border="0" /&gt;&lt;/a&gt; &lt;!--[if gte vml 1]&gt;&lt;v:shape id="_x0000_i1027" type="#_x0000_t75" style="'width:369pt;height:339pt'"&gt;  &lt;v:imagedata src="file:///C:\DOCUME~1\bala.k\LOCALS~1\Temp\msohtmlclip1\01\clip_image005.png" title=""&gt; &lt;/v:shape&gt;&lt;![endif]--&gt;&lt;!--[if !vml]--&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify; line-height: normal;"&gt;&lt;br /&gt;&lt;!--[endif]--&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: center;"&gt;Figure: 3 Configuring Diagnostic Module&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify; line-height: normal;"&gt; &lt;/p&gt;  &lt;h2&gt;&lt;span style="font-size:100%;"&gt;&lt;a name="_Toc249848971"&gt;Creating Watch &amp;amp; Notification&lt;/a&gt;&lt;/span&gt;&lt;/h2&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify; line-height: normal;"&gt; &lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;"&gt;Each WebLogic Server instance can be configured with only one diagnostic module but you can target the same diagnostic module to multiple servers or clusters. Once the WLDF system module is created and targeted to the appropriate server then watches and notifications can be configured. The following steps illustrate how to create a Watch and a Notification.&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: justify;"&gt; &lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: justify;"&gt;To create a watch:&lt;/p&gt;  &lt;ol style="margin-top: 0in;" start="1" type="1"&gt;&lt;li class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify; line-height: normal;"&gt;Click      "Lock &amp;amp; Edit" to acquire a configuration lock&lt;/li&gt;&lt;li class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify; line-height: normal;"&gt;Navigate      to the diagnostic module created above (Test_WLDF_Module) and select the      "Watches and Notifications" tab and "Watches" sub-tab      (if not already selected)&lt;/li&gt;&lt;li class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify; line-height: normal;"&gt;Click      "New" to create a new Watch. Provide the name and select the      type as "Collected Metrics" [Select "Collected      Metrics" for inspecting Runtime MBean values, "Server Log"      to watch log data and "Event Data" to watch instrumented data]&lt;/li&gt;&lt;li class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify; line-height: normal;"&gt;Name      - Heap_Watch&lt;/li&gt;&lt;li class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify; line-height: normal;"&gt;Watch      Type - Collected Metrics&lt;/li&gt;&lt;li class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify; line-height: normal;"&gt;Enable      Watch - Selected&lt;/li&gt;&lt;li class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify; line-height: normal;"&gt;Click      "Next"&lt;/li&gt;&lt;li class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify; line-height: normal;"&gt;Click      "Add Expressions" &lt;/li&gt;&lt;li class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify; line-height: normal;"&gt;Ensure      that "ServerRuntime" is selected and click "Next"&lt;/li&gt;&lt;li class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify; line-height: normal;"&gt;If      you are running WebLogic Server on Java HotSpot VM, make sure "Select      an MBean Type from the following list" is selected and select      "weblogic.management.runtime.JVMRuntimeMBean" and click      "Next". If you are using JRockit VM, make sure "Select an      MBean Type from the following list" is selected and select      "weblogic.management.runtime. JRockitRuntimeMBean" and click      "Next".&lt;/li&gt;&lt;li class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify; line-height: normal;"&gt;Select      the instance for the appropriate server from the list for      "Instance" and click "Next"&lt;/li&gt;&lt;li class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify; line-height: normal;"&gt;For      "Message Attribute" select "HeapFreePercent",      "&lt;" for "Operator" and type "85" for      "Value". Click "Finish" twice to create a Watch&lt;/li&gt;&lt;li class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify; line-height: normal;"&gt;Activate      the changes&lt;/li&gt;&lt;/ol&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;"&gt; &lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;"&gt;&lt;br /&gt;&lt;!--[if gte vml 1]&gt;&lt;v:shape id="_x0000_i1028" type="#_x0000_t75" style="'width:351pt;height:270pt'"&gt;  &lt;v:imagedata src="file:///C:\DOCUME~1\bala.k\LOCALS~1\Temp\msohtmlclip1\01\clip_image007.png" title=""&gt; &lt;/v:shape&gt;&lt;![endif]--&gt;&lt;!--[if !vml]--&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_i4Ubs4VYKUM/TFiTtqkxT3I/AAAAAAAACxo/Uo-yUlyInUA/s1600/image004.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 246px;" src="http://2.bp.blogspot.com/_i4Ubs4VYKUM/TFiTtqkxT3I/AAAAAAAACxo/Uo-yUlyInUA/s320/image004.jpg" alt="" id="BLOGGER_PHOTO_ID_5501309357564972914" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;"&gt;&lt;br /&gt;&lt;!--[endif]--&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: center;"&gt;Figure: 4-a Configuring Watch&lt;/p&gt;&lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;"&gt;&lt;br /&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;"&gt; &lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;"&gt;&lt;!--[if gte vml 1]&gt;&lt;v:shape id="_x0000_i1029" type="#_x0000_t75" style="'width:435.75pt;height:346.5pt'"&gt;  &lt;v:imagedata src="file:///C:\DOCUME~1\bala.k\LOCALS~1\Temp\msohtmlclip1\01\clip_image009.png" title=""&gt; &lt;/v:shape&gt;&lt;![endif]--&gt;&lt;!--[if !vml]--&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_i4Ubs4VYKUM/TFiT0tTjo0I/AAAAAAAACxw/fJezem0M2iw/s1600/image005.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 254px;" src="http://4.bp.blogspot.com/_i4Ubs4VYKUM/TFiT0tTjo0I/AAAAAAAACxw/fJezem0M2iw/s320/image005.jpg" alt="" id="BLOGGER_PHOTO_ID_5501309478557164354" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;"&gt;&lt;br /&gt;&lt;!--[endif]--&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;"&gt; &lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: center;"&gt;Figure: 4-b Configuring Watch&lt;/p&gt;&lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;"&gt;&lt;br /&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;"&gt; &lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: justify;"&gt;The above watch will trigger the configured notification if the percentage of free heap is less than 90. You could make complex rule expression by combining multiple attributes from different MBean. For now we haven't configured any notification for this watch. We will create the notification and will associate it to the watch in the following steps.&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: justify;"&gt;To create a notification:&lt;/p&gt;  &lt;ol style="margin-top: 0in;" start="1" type="1"&gt;&lt;li class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify; line-height: normal;"&gt;Click      "Lock &amp;amp; Edit" to acquire a configuration lock&lt;/li&gt;&lt;li class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify; line-height: normal;"&gt;Navigate      to the diagnostic module created above and select the "Watches and      Notifications" tab and "Notification" sub-tab&lt;/li&gt;&lt;li class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify; line-height: normal;"&gt;Click      "New" to create a new Notification &lt;/li&gt;&lt;li class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify; line-height: normal;"&gt;Select      "SMTP (E-Mail) for Type and click "Next"&lt;/li&gt;&lt;li class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify; line-height: normal;"&gt;Provide      a name - James_Email_Notification. Make sure the notification is enabled      and click "Next".&lt;/li&gt;&lt;li class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify; line-height: normal;"&gt;Configure      the following properties for the "Config Notification - SMTP      Properties" page&lt;/li&gt;&lt;li class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify; line-height: normal;"&gt;Mail      Session Name - James-MailSession&lt;/li&gt;&lt;li class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify; line-height: normal;"&gt;E-Mail      Recipients - admin@localhost&lt;/li&gt;&lt;/ol&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify; line-height: normal;"&gt; &lt;/p&gt;  &lt;ol style="margin-top: 0in;" start="9" type="1"&gt;&lt;li class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify; line-height: normal;"&gt;Click      "Finish".&lt;/li&gt;&lt;li class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify; line-height: normal;"&gt;Activate      the changes&lt;/li&gt;&lt;/ol&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;"&gt; &lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;"&gt;&lt;br /&gt;&lt;!--[if gte vml 1]&gt;&lt;v:shape id="_x0000_i1030" type="#_x0000_t75" style="'width:354pt;height:249.75pt'"&gt;  &lt;v:imagedata src="file:///C:\DOCUME~1\bala.k\LOCALS~1\Temp\msohtmlclip1\01\clip_image011.png" title=""&gt; &lt;/v:shape&gt;&lt;![endif]--&gt;&lt;!--[if !vml]--&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_i4Ubs4VYKUM/TFiUH_-Is3I/AAAAAAAACx4/u7gHoZ6O13w/s1600/image006.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 226px;" src="http://2.bp.blogspot.com/_i4Ubs4VYKUM/TFiUH_-Is3I/AAAAAAAACx4/u7gHoZ6O13w/s320/image006.jpg" alt="" id="BLOGGER_PHOTO_ID_5501309809985106802" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;"&gt; &lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: center;"&gt;Figure: 5-a Configuring SMTP Notification&lt;/p&gt;&lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: center;"&gt;&lt;br /&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;"&gt;&lt;!--[if gte vml 1]&gt;&lt;v:shape id="_x0000_i1031" type="#_x0000_t75" style="'width:444.75pt;height:354pt'"&gt;  &lt;v:imagedata src="file:///C:\DOCUME~1\bala.k\LOCALS~1\Temp\msohtmlclip1\01\clip_image013.png" title=""&gt; &lt;/v:shape&gt;&lt;![endif]--&gt;&lt;!--[if !vml]--&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_i4Ubs4VYKUM/TFiUR4tilvI/AAAAAAAACyA/YNrUCArNmTA/s1600/image007.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 254px;" src="http://4.bp.blogspot.com/_i4Ubs4VYKUM/TFiUR4tilvI/AAAAAAAACyA/YNrUCArNmTA/s320/image007.jpg" alt="" id="BLOGGER_PHOTO_ID_5501309979835143922" border="0" /&gt;&lt;/a&gt;&lt;!--[endif]--&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: center;"&gt;Figure: 5-b Configuring SMTP Notification&lt;/p&gt;&lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: center;"&gt;&lt;br /&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;"&gt; &lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;"&gt; &lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: justify;"&gt;To associate the watch and the notification:&lt;/p&gt;  &lt;ol style="margin-top: 0in;" start="1" type="1"&gt;&lt;li class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;"&gt;Click "Lock      &amp;amp; Edit" to acquire a configuration lock&lt;/li&gt;&lt;li class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;"&gt;Navigate to the      diagnostic module created above (Test_WLDF_Module) and select the      "Watches and Notifications" tab and "Watches" sub-tab      (if not already selected)&lt;/li&gt;&lt;li class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;"&gt;Select the watch you      created earlier - Heap_Watch&lt;/li&gt;&lt;li class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;"&gt;Select the      "Notifications" tab and move the      "James_Email_Notification" from Available to Chosen&lt;/li&gt;&lt;li class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;"&gt;Click      "Save"&lt;/li&gt;&lt;li class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;"&gt;Select the      "Alarms" tab and select "Use an automatic reset      alarm". Set the "Automatic reset period" to 6 and click      "Save". This will ensure that the notifications are at least 90      seconds apart.&lt;/li&gt;&lt;li class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;"&gt;5. Click      "Activate Changes"&lt;/li&gt;&lt;/ol&gt;  &lt;p class="MsoNormal" style="text-align: justify;"&gt; &lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: justify;"&gt;&lt;!--[if gte vml 1]&gt;&lt;v:shape id="_x0000_i1032" type="#_x0000_t75" style="'width:370.5pt;height:279pt'"&gt;  &lt;v:imagedata src="file:///C:\DOCUME~1\bala.k\LOCALS~1\Temp\msohtmlclip1\01\clip_image015.png" title=""&gt; &lt;/v:shape&gt;&lt;![endif]--&gt;&lt;!--[if !vml]--&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_i4Ubs4VYKUM/TFiUfMTayVI/AAAAAAAACyI/bUdYoG_qJI0/s1600/image008.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 241px;" src="http://1.bp.blogspot.com/_i4Ubs4VYKUM/TFiUfMTayVI/AAAAAAAACyI/bUdYoG_qJI0/s320/image008.jpg" alt="" id="BLOGGER_PHOTO_ID_5501310208432589138" border="0" /&gt;&lt;/a&gt;&lt;!--[endif]--&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: center;"&gt;Figure: 6-a Associating Watch and Notification&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: justify;"&gt; &lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: justify;"&gt;&lt;!--[if gte vml 1]&gt;&lt;v:shape id="_x0000_i1033" type="#_x0000_t75" style="'width:400.5pt;height:318.75pt'"&gt;  &lt;v:imagedata src="file:///C:\DOCUME~1\bala.k\LOCALS~1\Temp\msohtmlclip1\01\clip_image017.png" title=""&gt; &lt;/v:shape&gt;&lt;![endif]--&gt;&lt;!--[if !vml]--&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_i4Ubs4VYKUM/TFiUn92Qy5I/AAAAAAAACyQ/vfia3HTE-ig/s1600/image009.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 254px;" src="http://2.bp.blogspot.com/_i4Ubs4VYKUM/TFiUn92Qy5I/AAAAAAAACyQ/vfia3HTE-ig/s320/image009.jpg" alt="" id="BLOGGER_PHOTO_ID_5501310359171025810" border="0" /&gt;&lt;/a&gt;&lt;!--[endif]--&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: center;"&gt;Figure: 6-b Configuring Alarm&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: justify;"&gt; &lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: justify;"&gt;As we configured the watch type to be Collected Metrics, the attributes involved in the watch rule will be harvested and tested for watch rule expression(s). The default sampling period for the harvester is 300,000 milliseconds (or 5 minutes). So the time between samples will be 5 minutes. To change the sampling period for metrics collection:&lt;/p&gt;  &lt;ol style="margin-top: 0in;" start="1" type="1"&gt;&lt;li class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify; line-height: normal;"&gt;Click      "Lock &amp;amp; Edit" to acquire a configuration lock&lt;/li&gt;&lt;li class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify; line-height: normal;"&gt;Navigate      to the diagnostic module created above (Test_WLDF_Module) and select the      "Collected Metrics" tab&lt;/li&gt;&lt;li class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify; line-height: normal;"&gt;Ensure      that "Enabled' check-box is selected&lt;/li&gt;&lt;li class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify; line-height: normal;"&gt;Change      the "Sampling Period" as "120000" so that it will collect      samples once every two minute&lt;/li&gt;&lt;/ol&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;"&gt; &lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;"&gt;&lt;br /&gt;&lt;!--[if gte vml 1]&gt;&lt;v:shape id="_x0000_i1034" type="#_x0000_t75" style="'width:393pt;height:257.25pt'"&gt;  &lt;v:imagedata src="file:///C:\DOCUME~1\bala.k\LOCALS~1\Temp\msohtmlclip1\01\clip_image019.png" title=""&gt; &lt;/v:shape&gt;&lt;![endif]--&gt;&lt;!--[if !vml]--&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_i4Ubs4VYKUM/TFiU3SRCTgI/AAAAAAAACyY/jlbOZidTDc0/s1600/image010.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 210px;" src="http://2.bp.blogspot.com/_i4Ubs4VYKUM/TFiU3SRCTgI/AAAAAAAACyY/jlbOZidTDc0/s320/image010.jpg" alt="" id="BLOGGER_PHOTO_ID_5501310622350069250" border="0" /&gt;&lt;/a&gt;&lt;!--[endif]--&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;"&gt; &lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: center;"&gt;Figure: 7 Configuring Sampling Period&lt;/p&gt;&lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: center;"&gt;&lt;br /&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;"&gt; &lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;"&gt; &lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: justify;"&gt;To receive the notifications sent by WebLogic Server as emails, install and configure an email client like Mozilla Thunderbird. The following is an example of the email received from WebLogic Server:&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: justify;"&gt;&lt;!--[if gte vml 1]&gt;&lt;v:shape id="_x0000_i1035" type="#_x0000_t75" style="'width:468pt;height:258pt'"&gt;  &lt;v:imagedata src="file:///C:\DOCUME~1\bala.k\LOCALS~1\Temp\msohtmlclip1\01\clip_image021.png" title=""&gt; &lt;/v:shape&gt;&lt;![endif]--&gt;&lt;!--[if !vml]--&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_i4Ubs4VYKUM/TFiU3jNzqtI/AAAAAAAACyg/ykQ38CDQx4k/s1600/image011.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 177px;" src="http://4.bp.blogspot.com/_i4Ubs4VYKUM/TFiU3jNzqtI/AAAAAAAACyg/ykQ38CDQx4k/s320/image011.jpg" alt="" id="BLOGGER_PHOTO_ID_5501310626899929810" border="0" /&gt;&lt;/a&gt;&lt;!--[endif]--&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: justify;"&gt; &lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: justify;"&gt; &lt;/p&gt;  &lt;h2&gt;&lt;span style="font-size:100%;"&gt;&lt;a name="_Toc249848972"&gt;Using WLST&lt;/a&gt;&lt;/span&gt;&lt;/h2&gt;  &lt;p class="MsoNormal" style="text-align: justify;"&gt; &lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: justify;"&gt;The configurations that are illustrated using Administration Console here can also be done using WLST. The following script is an example WLST script to configure a Javamail session, WLDF Module, Watch and Notification:&lt;/p&gt;&lt;p class="MsoNormal" style="text-align: justify;"&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;pre class="brush:py"&gt;&lt;br /&gt;#Connect to the admin sever&lt;br /&gt;connect('weblogic','Welcome1','t3://localhost:7001')&lt;br /&gt; &lt;br /&gt;#Start a change session&lt;br /&gt;edit()&lt;br /&gt;startEdit()&lt;br /&gt;cd('/')&lt;br /&gt; &lt;br /&gt;#Create and configure a Javamail session&lt;br /&gt;cmo.createMailSession('James-MailSession')&lt;br /&gt;cd('/MailSessions/James-MailSession')&lt;br /&gt;cmo.setJNDIName('com.test.myjamesMailSession')&lt;br /&gt;cmo.setProperties({mail.smtp.user=user;, mail.smpt.password=password;, mail.smtp.host=localhost;, mail.transport.protocol=smtp;})&lt;br /&gt;set('Targets',jarray.array([ObjectName('com.bea:Name=AdminServer,Type=Server')], ObjectName))&lt;br /&gt; &lt;br /&gt;#Create and configure a WLDF Module&lt;br /&gt;cd('/')&lt;br /&gt;cmo.createWLDFSystemResource('Test_WLDF_Module')&lt;br /&gt;cd('/SystemResources/Test_WLDF_Module')&lt;br /&gt;cmo.setDescription('This is a WLDF module for testing email notifications.')&lt;br /&gt;set('Targets',jarray.array([ObjectName('com.bea:Name=AdminServer,Type=Server')], ObjectName))&lt;br /&gt; &lt;br /&gt;#Create and configure a WLDF Watch&lt;br /&gt;cd('/WLDFSystemResources/Test_WLDF_Module/WLDFResource/Test_WLDF_Module/WatchNotification/Test_WLDF_Module')&lt;br /&gt;cmo.createWatch('Heap_Watch')&lt;br /&gt;cd('/WLDFSystemResources/Test_WLDF_Module/WLDFResource/Test_WLDF_Module/WatchNotification/Test_WLDF_Module/Watches/Heap_Watch')&lt;br /&gt;cmo.setRuleType('Harvester')&lt;br /&gt;cmo.setEnabled(true)&lt;br /&gt;#For HotSpot VM&lt;br /&gt;#cmo.setRuleExpression('(${ServerRuntime//[weblogic.management.runtime.JVMRuntimeMBean]com.bea:Name=AdminServer,ServerRuntime=AdminServer,Type=JVMRuntime//HeapFreePercent} &lt; 85)')&lt;br /&gt;#For JRockit VM&lt;br /&gt;cmo.setRuleExpression('(${ServerRuntime//[weblogic.management.runtime.JRockitRuntimeMBean]com.bea:Name=AdminServer,ServerRuntime=AdminServer,Type=JRockitRuntimeMBean//HeapFreePercent} &lt; 85)')&lt;br /&gt;cmo.setAlarmType(None)&lt;br /&gt; &lt;br /&gt;#Create and configure a WLDF SMTP Notification&lt;br /&gt;cd('/WLDFSystemResources/Test_WLDF_Module/WLDFResource/Test_WLDF_Module/WatchNotification/Test_WLDF_Module')&lt;br /&gt;cmo.createSMTPNotification('James_Email_Notification')&lt;br /&gt;cd('/WLDFSystemResources/Test_WLDF_Module/WLDFResource/Test_WLDF_Module/WatchNotification/Test_WLDF_Module/SMTPNotifications/James_Email_Notification')&lt;br /&gt;cmo.setEnabled(true)&lt;br /&gt;cmo.setMailSessionJNDIName('com.test.myjamesMailSession')&lt;br /&gt;set('Recipients',jarray.array([String('admin@localhost')], String))&lt;br /&gt;cmo.setSubject(None)&lt;br /&gt;cmo.setBody(None)&lt;br /&gt; &lt;br /&gt;#Associate the watch and notification&lt;br /&gt;cd('/WLDFSystemResources/Test_WLDF_Module/WLDFResource/Test_WLDF_Module/WatchNotification/Test_WLDF_Module/Watches/Heap_Watch')&lt;br /&gt;set('Notifications',jarray.array([ObjectName('com.bea:Name=James_Email_Notification,Type=weblogic.diagnostics.descriptor.WLDFSMTPNotificationBean,Parent=[testdomain]/WLDFSystemResources[Test_WLDF_Module],Path=WLDFResource[Test_WLDF_Module]/WatchNotification[Test_WLDF_Module]/SMTPNotifications[James_Email_Notification]')], ObjectName))&lt;br /&gt;cmo.setAlarmType('AutomaticReset')&lt;br /&gt;cmo.setAlarmResetPeriod(60000)&lt;br /&gt; &lt;br /&gt;#Set the sampling period&lt;br /&gt;cd('/WLDFSystemResources/Test_WLDF_Module/WLDFResource/Test_WLDF_Module/Harvester/Test_WLDF_Module')&lt;br /&gt;cmo.setSamplePeriod(120000)&lt;br /&gt;cmo.setEnabled(true)&lt;br /&gt; &lt;br /&gt;#Activate the changes&lt;br /&gt;save()&lt;br /&gt;activate()&lt;br /&gt; &lt;br /&gt;#Exit&lt;br /&gt;exit()&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1160221863863331437-7657846569955446869?l=weblogicserver.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://weblogicserver.blogspot.com/feeds/7657846569955446869/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://weblogicserver.blogspot.com/2010/08/configure-email-notification-in.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1160221863863331437/posts/default/7657846569955446869'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1160221863863331437/posts/default/7657846569955446869'/><link rel='alternate' type='text/html' href='http://weblogicserver.blogspot.com/2010/08/configure-email-notification-in.html' title='Configure Email Notification in WebLogic Server'/><author><name>Bala Kothandaraman</name><uri>http://www.blogger.com/profile/04536459985006004271</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp1.blogger.com/_i4Ubs4VYKUM/RmmunEEazmI/AAAAAAAAAAM/HPNOLwuH4YE/s400/Bala_P1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_i4Ubs4VYKUM/TFiTU2qBWCI/AAAAAAAACxQ/MafpVKV17wU/s72-c/image001.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1160221863863331437.post-1218612653659874898</id><published>2010-07-01T08:30:00.000-07:00</published><updated>2010-07-01T09:34:40.066-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JMS'/><category scheme='http://www.blogger.com/atom/ns#' term='Scripts'/><category scheme='http://www.blogger.com/atom/ns#' term='WLST'/><title type='text'>Using WLST Script To List Messages From A JMS Queue</title><content type='html'>WebLogic Server added support for Runtime Message Management for Destination hosted on WebLogic JMS Servers in WLS 9.0. It will an exciting feature if you are currently in WLS 8.1 or new to WLS. Now you can administratively view and browse all messages, and manipulate most  messages in a running JMS server, by using the Administration Console or WLS public runtime APIs. Once I start getting excited about this feature to customer the very next logical question from administrators are can I script this? The answer is obviously, Yes. Java or WLST is your answer. If you are a developer and there is a requirement to provide a Java/JEE application for your administrators or business users to view or browse the messages then Java will be your option. For administrators who are non-Java, there are MBeans like JMSDestinationRuntimeMBean and JMSDurableSubscriberRuntimeMBean that you can use from WLST to script any of the message managment features. Needless to say if there are existing Java implementation for message management then you can simply import and use them within WLST as well. But WLST scripts are natural choice for administrators.&lt;br /&gt;&lt;br /&gt;So I started out writing a simple WLST script that can list all the messages from a given JMS Queue. The script is written to list all the headers and properties along with the body. I have made enough comments in the script to explain the different steps. But the high-level steps are:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Connect to the server&lt;/li&gt;&lt;li&gt;Get to the JMSDestinationRuntimeMBean&lt;/li&gt;&lt;li&gt;Get the cursor to find the number of messages&lt;/li&gt;&lt;li&gt;Get the messages without body to find the cursor and the Message ID&lt;/li&gt;&lt;li&gt;Get the message with body using the Message ID&lt;/li&gt;&lt;li&gt;Print the Headers, Properties and Body (or) Pay Load of the Message&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;A key information to note here is if you have any Object Messages in the Queue then those classes should be added to the Java Classpath before you execute this WLST Script. I haven't implemented any exception handling logic in my script whereas handling exceptions are best practices and you might want to refer to my &lt;a href="http://weblogicserver.blogspot.com/search/label/Best%20Practices"&gt;other entries regarding that information&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:text"&gt;&lt;br /&gt;#Import necessary classes/interfaces&lt;br /&gt;from weblogic.jms.extensions import JMSMessageInfo&lt;br /&gt;from javax.jms import TextMessage&lt;br /&gt;from javax.jms import ObjectMessage&lt;br /&gt;&lt;br /&gt;#Define constants&lt;br /&gt;url='t3://localhost:7001'&lt;br /&gt;username='weblogic'&lt;br /&gt;password='weblogic1'&lt;br /&gt;jmsservername='test-jms-server'&lt;br /&gt;jmsmodulename='test-jms-module'&lt;br /&gt;jmsdestname='test-queue'&lt;br /&gt;&lt;br /&gt;#Connect&lt;br /&gt;connect(username,password,url)&lt;br /&gt;&lt;br /&gt;#Switch to the server runtime tree&lt;br /&gt;serverRuntime()&lt;br /&gt;&lt;br /&gt;#Navigate to the JMS Destination Runtime MBean&lt;br /&gt;cd('JMSRuntime/' + serverName + '.jms/JMSServers/' + jmsservername)&lt;br /&gt;cd('Destinations/' + jmsmodulename + '!' +  jmsdestname)&lt;br /&gt;&lt;br /&gt;#Get the cursor (JMSMessageCursorRuntimeMBean) to browse the messages - No selector &amp;amp; No time out&lt;br /&gt;cursor = cmo.getMessages('',0)&lt;br /&gt;&lt;br /&gt;#Determine the number of messages in the destination&lt;br /&gt;cursorsize = cmo.getCursorSize(cursor)&lt;br /&gt;print '------------------------------------------'&lt;br /&gt;print 'Total Number of Messages -&gt; ', cursorsize&lt;br /&gt;print '------------------------------------------'&lt;br /&gt;&lt;br /&gt;#Get all the messages as an array of javax.management.openmbean.CompositeData&lt;br /&gt;messages = cmo.getNext(cursor, cursorsize)&lt;br /&gt;&lt;br /&gt;#Loop through the array of messages to print&lt;br /&gt;for message in messages:&lt;br /&gt;&lt;br /&gt;#Create WebLogic JMSMessageInfo to get Message ID&lt;br /&gt;jmsmsginfo = JMSMessageInfo(message)&lt;br /&gt;wlmsg = jmsmsginfo.getMessage()&lt;br /&gt;wlmsgid = wlmsg.getJMSMessageID()&lt;br /&gt;&lt;br /&gt;#Get Message with body&lt;br /&gt;fullcursormsg = cmo.getMessage(cursor,wlmsgid)&lt;br /&gt;fulljmsmsginfo = JMSMessageInfo(fullcursormsg)&lt;br /&gt;handle = fulljmsmsginfo.getHandle()&lt;br /&gt;compdata = cmo.getMessage(cursor, handle)&lt;br /&gt;msgwithbody = JMSMessageInfo(compdata)&lt;br /&gt;&lt;br /&gt;#Print Key Message Headers&lt;br /&gt;print 'Message ID           - ' + msgwithbody.getMessage().getJMSMessageID()&lt;br /&gt;print 'Message Priority     -' , msgwithbody.getMessage().getJMSPriority()&lt;br /&gt;if msgwithbody.getMessage().getJMSRedelivered() == 0:&lt;br /&gt;    redeliv = 'false'&lt;br /&gt;else:&lt;br /&gt;    redeliv = 'true'&lt;br /&gt;print 'Message Redelivered  - ' + redeliv&lt;br /&gt;print 'Message TimeStamp    -' , msgwithbody.getMessage().getJMSTimestamp()&lt;br /&gt;print 'Message DeliveryMode -' , msgwithbody.getMessage().getJMSDeliveryMode()&lt;br /&gt;&lt;br /&gt;#Print Message Properties&lt;br /&gt;prop_enum = msgwithbody.getMessage().getPropertyNames()&lt;br /&gt;print ' '&lt;br /&gt;print 'Message Properties   :'&lt;br /&gt;print ' '&lt;br /&gt;for prop in prop_enum:&lt;br /&gt;    print prop + ' - &gt; ' + msgwithbody.getMessage().getStringProperty(prop)&lt;br /&gt;&lt;br /&gt;#Print Message Body&lt;br /&gt;fullwlmsg = fulljmsmsginfo.getMessage()&lt;br /&gt;print ' '&lt;br /&gt;print 'Message Body         :'&lt;br /&gt;print ' '&lt;br /&gt;if isinstance(fullwlmsg, TextMessage):&lt;br /&gt;    print fullwlmsg.getText()&lt;br /&gt;else:&lt;br /&gt;    if isinstance(fullwlmsg, ObjectMessage):&lt;br /&gt;        print fullwlmsg.getObject()&lt;br /&gt;    else:&lt;br /&gt;        print '***Not a Text or Object Message***'&lt;br /&gt;        print fullwlmsg.toString()&lt;br /&gt;print ' '&lt;br /&gt;print '--------------------------------------------------------------'&lt;br /&gt;print ' '&lt;br /&gt;&lt;br /&gt;#Close cursor as No Time Out specified - Best practice&lt;br /&gt;cmo.closeCursor(cursor)&lt;br /&gt;&lt;br /&gt;#Disconnect &amp;amp; Exit&lt;br /&gt;disconnect()&lt;br /&gt;exit()&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1160221863863331437-1218612653659874898?l=weblogicserver.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://weblogicserver.blogspot.com/feeds/1218612653659874898/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://weblogicserver.blogspot.com/2010/07/using-wlst-script-to-list-messages-from.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1160221863863331437/posts/default/1218612653659874898'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1160221863863331437/posts/default/1218612653659874898'/><link rel='alternate' type='text/html' href='http://weblogicserver.blogspot.com/2010/07/using-wlst-script-to-list-messages-from.html' title='Using WLST Script To List Messages From A JMS Queue'/><author><name>Bala Kothandaraman</name><uri>http://www.blogger.com/profile/04536459985006004271</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp1.blogger.com/_i4Ubs4VYKUM/RmmunEEazmI/AAAAAAAAAAM/HPNOLwuH4YE/s400/Bala_P1.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1160221863863331437.post-3414835773836613891</id><published>2010-06-16T14:39:00.000-07:00</published><updated>2010-06-16T14:52:06.170-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Best Practices'/><category scheme='http://www.blogger.com/atom/ns#' term='Tips and Tricks'/><category scheme='http://www.blogger.com/atom/ns#' term='WLST'/><title type='text'>Running OS Commands From WLST</title><content type='html'>&lt;br /&gt;If you spend a lot of time with WLST in the interactive mode, I am sure you have opened another command prompt/shell to check something at the OS file system level. If you wonder whether can execute an OS command from within WLST prompt, the answer is "Yes". This is very convenient similar to how you can execute OS commands from within "Vi" editor.&lt;br /&gt;&lt;br /&gt;In fact this feature is not from WLST but from underlying Jython. There is "os" module in Jython that provides a unified interface to a number of operating system functions. There is "system" function in the "os" module that can take a OS command as a string input and returns either "0" or "1" depends on whether the command was successful or failed. So this feature can also be used with scripting mode where the return code can be verified for further processing in the script.&lt;br /&gt;&lt;br /&gt;For eg. os.system(r'dir c:\bea') can list the contents of the bea folder under c drive. Notice the use of the preceding 'r' for escaping the entire string.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_i4Ubs4VYKUM/TBlHclqIOiI/AAAAAAAACwI/KMbDPaS3GrE/s1600/os_commands.gif"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 223px;" src="http://2.bp.blogspot.com/_i4Ubs4VYKUM/TBlHclqIOiI/AAAAAAAACwI/KMbDPaS3GrE/s320/os_commands.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5483492577771010594" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1160221863863331437-3414835773836613891?l=weblogicserver.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://weblogicserver.blogspot.com/feeds/3414835773836613891/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://weblogicserver.blogspot.com/2010/06/running-os-commands-from-wlst.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1160221863863331437/posts/default/3414835773836613891'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1160221863863331437/posts/default/3414835773836613891'/><link rel='alternate' type='text/html' href='http://weblogicserver.blogspot.com/2010/06/running-os-commands-from-wlst.html' title='Running OS Commands From WLST'/><author><name>Bala Kothandaraman</name><uri>http://www.blogger.com/profile/04536459985006004271</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp1.blogger.com/_i4Ubs4VYKUM/RmmunEEazmI/AAAAAAAAAAM/HPNOLwuH4YE/s400/Bala_P1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_i4Ubs4VYKUM/TBlHclqIOiI/AAAAAAAACwI/KMbDPaS3GrE/s72-c/os_commands.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1160221863863331437.post-6083374317618023859</id><published>2010-04-22T08:37:00.000-07:00</published><updated>2010-07-01T09:47:47.049-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Monitoring'/><category scheme='http://www.blogger.com/atom/ns#' term='HTTP Session'/><category scheme='http://www.blogger.com/atom/ns#' term='Tips and Tricks'/><title type='text'>Effective HTTP Session Monitoring in WebLogic Server With monitoring-attribute-name</title><content type='html'>Monitoring HTTP Session on WebLogic Server is one of the common task for administrators when monitoring web applications for performance or for activity or usage. Web application modules deployed to WebLogic Server maintains a "monitoring ID", which although looks like a session ID is not the same as the real session ID. You can use the monitoring id to identify the session uniquely. Monitoring IDs are not same as session IDs for security reason. You can turn on session debugging which prints session IDs to the log but these will not match what you see in the console/WLST. Monitoring ids are randomly generated by default. You can set a value to this monitoring id through a session attribute using "monitoring-attribute-name" element in session-descriptor of the weblogic.xml. This can simplify the task of monitoring sessions for administrators in production environment.&lt;br /&gt;&lt;br /&gt;For e.g. if you set the "monitoring-attribute-name" to be "user-name" then it will use the string value of the session attribute named "user-name" as the value for Monitoring ID instead of the randomly generated value. When getMonitoringID(sessionid) method is called on the ServletSession, it will return session.getAttribute("user-name").toString().&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:py"&gt;&lt;br /&gt;weblogic.xml&lt;br /&gt;-------------&lt;br /&gt;...&lt;br /&gt;    &lt;session-descriptor&gt;&lt;br /&gt;     &lt;timeout-secs&gt;600&lt;/timeout-secs&gt;&lt;br /&gt;     &lt;monitoring-attribute-name&gt;user-name&lt;/monitoring-attribute-name&gt;&lt;br /&gt;    &lt;/session-descriptor&gt;&lt;br /&gt;    &lt;br /&gt;    &lt;container-descriptor&gt;&lt;br /&gt; &lt;session-monitoring-enabled&gt;true&lt;/session-monitoring-enabled&gt;&lt;br /&gt;    &lt;/container-descriptor&gt;&lt;br /&gt;...&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;So if you have an attribute within the HTTP Session which can identify the user/session uniquely then you can use that as the monitoring id. This is the recommended approach to track/monitor sessions instead of the session id which is an internal attribute. If you don't set the monitoring-attribute-name, WLS will randomly generate a monitoring id for each session. When developers set the monitoring-attribute-name, this will help administrator to associate sessions to the actual users.&lt;br /&gt;&lt;br /&gt;Sample WLST script to get all the monitoring ids (for the respective session) as an array:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:py"&gt;&lt;br /&gt;...&lt;br /&gt;AppName = 'MedRecEar'&lt;br /&gt;TargetServerName = 'MedRecSvr1'&lt;br /&gt;WebCompName = 'MedRecWar'&lt;br /&gt;serverRuntime()&lt;br /&gt;cd('ApplicationRuntimes/' + AppName + '/ComponentRuntimes/' + TargetServerName + '_/' + WebCompName) MIDs = mon_ids = cmo.getServletSessionsMonitoringIds()&lt;br /&gt;...&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;In the above example, the variable mon_ids will contain an array of monitoring ids as strings. Using these monitoring ids information about the individual session can be obtained from other operations like:&lt;br /&gt;- getSessionLastAccessedTime&lt;br /&gt;- getSessionMaxInactiveInterval&lt;br /&gt;&lt;br /&gt;One can even invalidate the session using the following opertion:&lt;br /&gt;- invalidateServletSession&lt;br /&gt;&lt;br /&gt;This will give an option for administrators to cleanup or delete stale sessions if there are any. These are the only information that are exposed for sessions unless you want to use the deprecated ServletSessionRuntimeMBeans. This is an old MBean that has more methods/operations.  Admin console doesn't expose the session id for security reason. If you need access to all the session ids for some reason then you have to use this deprecated ServletSessionRuntimeMBeans. You can get all the ServletSessionRuntimeMBeans as an array from a WebAppComponentRuntimeMBean using a deprecated getServletSessions() method. WLST script to access the above mentioned deprecated ServletSessionRuntimeMBeans:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:py"&gt;&lt;br /&gt;...&lt;br /&gt;AppName = 'MedRecEar'&lt;br /&gt;TargetServerName = 'MedRecSvr1'&lt;br /&gt;WebCompName = 'MedRecWar'&lt;br /&gt;serverRuntime()&lt;br /&gt;cd('ApplicationRuntimes/' + AppName + '/ComponentRuntimes/' + TargetServerName + '_/' + WebCompName + '/ServletSessions')&lt;br /&gt;ls()&lt;br /&gt;....&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The above ls() command will list you all the sessions with session id as their name. Even though this post has lot of information on how to monitor sessions and make use of the monitoring-attribute-name, I shall write another to provide a complete example of how to use this.&lt;br /&gt;&lt;br /&gt;Also see my other &lt;a href="http://weblogicserver.blogspot.com/2010/02/http-session-monitoring-in-weblogic.html"&gt;post on how to monitor HTTP sessions from the administration console and WLST&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1160221863863331437-6083374317618023859?l=weblogicserver.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://weblogicserver.blogspot.com/feeds/6083374317618023859/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://weblogicserver.blogspot.com/2010/04/effective-session-monitoring-in.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1160221863863331437/posts/default/6083374317618023859'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1160221863863331437/posts/default/6083374317618023859'/><link rel='alternate' type='text/html' href='http://weblogicserver.blogspot.com/2010/04/effective-session-monitoring-in.html' title='Effective HTTP Session Monitoring in WebLogic Server With monitoring-attribute-name'/><author><name>Bala Kothandaraman</name><uri>http://www.blogger.com/profile/04536459985006004271</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp1.blogger.com/_i4Ubs4VYKUM/RmmunEEazmI/AAAAAAAAAAM/HPNOLwuH4YE/s400/Bala_P1.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1160221863863331437.post-2788974187676877630</id><published>2010-04-21T17:57:00.000-07:00</published><updated>2010-07-01T09:47:11.312-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Security'/><category scheme='http://www.blogger.com/atom/ns#' term='Scripts'/><category scheme='http://www.blogger.com/atom/ns#' term='Monitoring'/><title type='text'>User Lockout &amp; WLST</title><content type='html'>WebLogic server provides an option to lockout users to protect accounts from password guessing attack. It is implemented with a realm-wide Lockout Manager. This feature can be used with custom authentication provider also. But if you implement your own authentication provider and wish to implement your own lockout manager that is possible too.&lt;br /&gt;&lt;br /&gt;If your domain is configured to use the user lockout manager the following WLST script will help you to:&lt;br /&gt;- check whether a user is locked using a WLST script&lt;br /&gt;- find out the number of locked users in the realm&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:py"&gt;&lt;br /&gt;#Define constants&lt;br /&gt;url='t3://localhost:7001'&lt;br /&gt;username='weblogic'&lt;br /&gt;password='weblogic'&lt;br /&gt;checkuser='test-deployer'&lt;br /&gt;&lt;br /&gt;#Connect&lt;br /&gt;connect(username,password,url)&lt;br /&gt;&lt;br /&gt;#Get Lockout Manager Runtime&lt;br /&gt;serverRuntime()&lt;br /&gt;dr = cmo.getServerSecurityRuntime().getDefaultRealmRuntime()&lt;br /&gt;ulmr = dr.getUserLockoutManagerRuntime()&lt;br /&gt;&lt;br /&gt;print '-------------------------------------------'&lt;br /&gt;#Check whether a user is locked&lt;br /&gt;if (ulmr.isLockedOut(checkuser) == 0):&lt;br /&gt; islocked = 'NOT locked'&lt;br /&gt;else:&lt;br /&gt; islocked = 'locked'&lt;br /&gt;print 'User ' + checkuser + ' is ' + islocked&lt;br /&gt;&lt;br /&gt;#Print number of locked users&lt;br /&gt;print 'No. of locked user -&gt; ', Integer(ulmr.getUserLockoutTotalCount())&lt;br /&gt;&lt;br /&gt;print '-------------------------------------------'&lt;br /&gt;print ''&lt;br /&gt;&lt;br /&gt;#Disconnect &amp; Exit&lt;br /&gt;disconnect()&lt;br /&gt;exit()&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1160221863863331437-2788974187676877630?l=weblogicserver.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://weblogicserver.blogspot.com/feeds/2788974187676877630/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://weblogicserver.blogspot.com/2010/04/user-lockout-wlst.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1160221863863331437/posts/default/2788974187676877630'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1160221863863331437/posts/default/2788974187676877630'/><link rel='alternate' type='text/html' href='http://weblogicserver.blogspot.com/2010/04/user-lockout-wlst.html' title='User Lockout &amp; WLST'/><author><name>Bala Kothandaraman</name><uri>http://www.blogger.com/profile/04536459985006004271</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp1.blogger.com/_i4Ubs4VYKUM/RmmunEEazmI/AAAAAAAAAAM/HPNOLwuH4YE/s400/Bala_P1.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1160221863863331437.post-5826846428940976603</id><published>2010-02-26T14:15:00.000-08:00</published><updated>2010-02-26T14:37:09.486-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><category scheme='http://www.blogger.com/atom/ns#' term='WLDF'/><category scheme='http://www.blogger.com/atom/ns#' term='Monitoring'/><category scheme='http://www.blogger.com/atom/ns#' term='Tips and Tricks'/><title type='text'>WLDF Browser</title><content type='html'>WebLogic Diagnostic Framework (WLDF) is a comprehensive framework for diagnosing isuees related to servers, applications, services in WebLogic Server. Image capturing is a component of WLDF which can be used to get a snapshot of all the key information from a server. The WLDF Image gets generated as a zip file with an "img" file for information from each sub-system. For more information regarding WLDF Image capturing refer to the &lt;a href="http://download.oracle.com/docs/cd/E12839_01/web.1111/e13714/config_diag_images.htm#i1070670"&gt;WLS documentation here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Currently there are no official tools available to view the image or to compare 2 or more images. The attached tool &lt;a href="http://sites.google.com/site/weblogicsever/wldf-browser.zip"&gt;WLDF Browser &lt;/a&gt;can help you to view the diagnostic image.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_i4Ubs4VYKUM/S4hMiRT1FMI/AAAAAAAACtE/-de42MEeG5E/s1600-h/WLDF-Browser.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 248px;" src="http://1.bp.blogspot.com/_i4Ubs4VYKUM/S4hMiRT1FMI/AAAAAAAACtE/-de42MEeG5E/s320/WLDF-Browser.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5442684301323080898" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1160221863863331437-5826846428940976603?l=weblogicserver.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://weblogicserver.blogspot.com/feeds/5826846428940976603/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://weblogicserver.blogspot.com/2010/02/wldf-browser.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1160221863863331437/posts/default/5826846428940976603'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1160221863863331437/posts/default/5826846428940976603'/><link rel='alternate' type='text/html' href='http://weblogicserver.blogspot.com/2010/02/wldf-browser.html' title='WLDF Browser'/><author><name>Bala Kothandaraman</name><uri>http://www.blogger.com/profile/04536459985006004271</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp1.blogger.com/_i4Ubs4VYKUM/RmmunEEazmI/AAAAAAAAAAM/HPNOLwuH4YE/s400/Bala_P1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_i4Ubs4VYKUM/S4hMiRT1FMI/AAAAAAAACtE/-de42MEeG5E/s72-c/WLDF-Browser.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1160221863863331437.post-3467644871206705197</id><published>2010-02-26T10:53:00.000-08:00</published><updated>2010-07-01T09:47:59.697-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Scripts'/><category scheme='http://www.blogger.com/atom/ns#' term='Monitoring'/><category scheme='http://www.blogger.com/atom/ns#' term='HTTP Session'/><category scheme='http://www.blogger.com/atom/ns#' term='WLST'/><title type='text'>HTTP Session Monitoring in WebLogic Server</title><content type='html'>Monitoring HTTP sessions on  WebLogic Server  is a common task when you have web component (WAR) deployed  as a part of your enterprise application (EAR). By default WebLogic Server provides a way to access the number of active HTTP sessions for each web application. But if you need more information about the individual sessions like their creation time, last accessed time, maximum inactive interval etc. then you have to enable the session monitoring option in the web component's Deployment Descriptor (DD). If the application is already packaged and deployed you can make use of the deployment plan to enable this attribute. WebLogic Administration Console provide options to modify some of the attribute for the components and application through the interface. Eventually a deployment plan will be generated if there are no deployment plan associated with the application or the existing plan will be modified automatically by Administration Console. This will ease administrators job of enabling session monitoring for a packaged application. You may have to update or redeploy the application with the plan for the monitoring to take effect. No restarting of any server is required for this change.&lt;br /&gt;&lt;br /&gt;Administration Console will automatically populate the Session tab under the Monitoring tab with the individual session information for the specific application. By default the following column are displayed on the console page:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Context Root&lt;/li&gt;&lt;li&gt;Server&lt;/li&gt;&lt;li&gt;Creation Time&lt;/li&gt;&lt;li&gt;Time Last Accessed&lt;/li&gt;&lt;li&gt;Max Inactive Interval&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;You can also add the following columns to the table by customizing the view:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Monitoring ID&lt;/li&gt;&lt;li&gt;Application&lt;/li&gt;&lt;li&gt;Machine&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;The Monitoring ID provides a unique ID by default to identify the session. You can also customize the Monitoring ID by specifying a session attribute name which is unique for identifying the session for users. For example you can configure customer_id or user_id or order_id as Monitoring ID for tracking session. I shall talk about Monitoring IDs and finding session size in a different post. Internally WebLogic will concatenate the Monitoring ID with the creation time to make a unique name for each session. The following is an example screen shot of monitoring sessions after customizing the view:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_i4Ubs4VYKUM/S4gZUImuniI/AAAAAAAACs8/uTGBmTSeovg/s1600-h/SessionMonitoring-1.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 160px;" src="http://1.bp.blogspot.com/_i4Ubs4VYKUM/S4gZUImuniI/AAAAAAAACs8/uTGBmTSeovg/s320/SessionMonitoring-1.jpg" alt="" id="BLOGGER_PHOTO_ID_5442627983375244834" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;WLST can also be able to retrieve these information from the ServletSessionRuntimeMBeans. The following is an example WLST script to connect to the Administration Server of a domain to retrieve session information for a specific application on a particular server.I had used the deprecated ServletSessionRuntimeMBeans in my WLST example as the session creation time is only available through that runtime mbean. You can also access all the information about the session except the creation time through the WebAppComponentRuntimeMBean. But you will have to use the Monitoring IDs (available through WebAppComponentRuntimeMBean) to get information about a specific session.&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:py"&gt;&lt;br /&gt;from java.util import Calendar&lt;br /&gt;&lt;br /&gt;def defineVariables()&lt;br /&gt;  #Define all the variables used&lt;br /&gt;  username='system'&lt;br /&gt;  password='weblogic'&lt;br /&gt;  adminurl='t3://localhost:7001'&lt;br /&gt;  servername='AdminServer'&lt;br /&gt;  appname='CompanyStore'&lt;br /&gt;&lt;br /&gt;def connectToAdminServer()&lt;br /&gt;  #Connect to Admin Server&lt;br /&gt;  connect(username,password,adminurl)&lt;br /&gt;&lt;br /&gt;def extractAndPrintSessionInfo(servletSessionRuntime)&lt;br /&gt;  #Get session name&lt;br /&gt;  session_name=ssession.getName().split('!')[0]&lt;br /&gt;  #Creation time is concatinated to the session name. So split it&lt;br /&gt;  ct_millis=ssession.getName().split('!')[1]&lt;br /&gt;  cal = Calendar.getInstance()&lt;br /&gt;  cal.setTimeInMillis(Long(ct_millis))&lt;br /&gt;  ct = cal.getTime()&lt;br /&gt;  #Get last accessed time&lt;br /&gt;  tla_millis=ssession.getTimeLastAccessed()&lt;br /&gt;  cal.setTimeInMillis(Long(tla_millis))&lt;br /&gt;  tla = cal.getTime()&lt;br /&gt;  print ' '&lt;br /&gt;  print 'Session Name - ' + session_name&lt;br /&gt;  print 'Creation Time - ', ct&lt;br /&gt;  print 'Last Accessed Time - ', tla&lt;br /&gt;&lt;br /&gt;#Main&lt;br /&gt;defineVariables()&lt;br /&gt;connectToAdminServer()&lt;br /&gt;&lt;br /&gt;#Get Runtime for our server&lt;br /&gt;domainRuntime()&lt;br /&gt;cd('/ServerRuntimes/'+servername)&lt;br /&gt;&lt;br /&gt;#Get all running applications&lt;br /&gt;apps=cmo.getApplicationRuntimes()&lt;br /&gt;for app in apps:&lt;br /&gt;&lt;br /&gt;  #We are intersted only on this application&lt;br /&gt;  if app.getName() == appname:&lt;br /&gt;  &lt;br /&gt;    print 'Application Name - ',  app.getName()&lt;br /&gt;&lt;br /&gt;    #Get all components in that application&lt;br /&gt;    comps=app.getComponentRuntimes()&lt;br /&gt;    for comp in comps:&lt;br /&gt;&lt;br /&gt;      #We are interested in only web components&lt;br /&gt;      if comp.getType() == 'WebAppComponentRuntime':&lt;br /&gt;        comp_name = comp.getName().split(servername+'_/')&lt;br /&gt;        if len(comp_name) == 1:&lt;br /&gt;            display_comp_name = '(default web app)'&lt;br /&gt;        else:&lt;br /&gt;            display_comp_name = comp_name&lt;br /&gt;        print 'Component Context Root - ', display_comp_name&lt;br /&gt;  &lt;br /&gt;        #Get all active sessions&lt;br /&gt;        sessions=comp.getServletSessions()&lt;br /&gt;        print 'Total no. of sessions - ', len(sessions)&lt;br /&gt; &lt;br /&gt;        #Loop through all the available sessions&lt;br /&gt;        for ssession in sessions:&lt;br /&gt;            extractAndPrintSessionInfo(session)&lt;br /&gt;&lt;br /&gt;#Disconnect and exit&lt;br /&gt;disconnect()&lt;br /&gt;exit()&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The output from the above script will look something like this:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:text"&gt;&lt;br /&gt;[test@mywlssvr-orcl ~]$ java weblogic.WLST sessions.py&lt;br /&gt;&lt;br /&gt;Initializing WebLogic Scripting Tool (WLST) ...&lt;br /&gt;&lt;br /&gt;Welcome to WebLogic Server Administration Scripting Shell&lt;br /&gt;&lt;br /&gt;Type help() for help on available commands&lt;br /&gt;&lt;br /&gt;Connecting to t3://localhost:7001 with userid system ...&lt;br /&gt;Successfully connected to Admin Server 'AdminServer' that belongs to domain 'dizzyworld'.&lt;br /&gt;&lt;br /&gt;Warning: An insecure protocol was used to connect to the&lt;br /&gt;server. To ensure on-the-wire security, the SSL port or&lt;br /&gt;Admin port should be used instead.&lt;br /&gt;&lt;br /&gt;Location changed to domainRuntime tree. This is a read-only tree with DomainMBean as the root.&lt;br /&gt;For more help, use help(domainRuntime)&lt;br /&gt;&lt;br /&gt;Application Name -  CompanyStore&lt;br /&gt;Component Context Root -  (default web app)&lt;br /&gt;Total no. of sessions -  2&lt;br /&gt;&lt;br /&gt;Session Name - dYvLLHgRGxQ8zS0ZYySLZKx1j2KK9Ws2G22nlJXvrQRFv64zsPTm&lt;br /&gt;Creation Time -  Fri Feb 26 01:13:21 UTC 2010&lt;br /&gt;Last Accessed Time -  Fri Feb 26 01:13:26 UTC 2010&lt;br /&gt;&lt;br /&gt;Session Name - nGbTLHgFLnfNjwGT1cpHGQhJZGZynBYRsp2TjC8kC7KFRK1vCCf3&lt;br /&gt;Creation Time -  Fri Feb 26 01:13:41 UTC 2010&lt;br /&gt;Last Accessed Time -  Fri Feb 26 01:13:45 UTC 2010&lt;br /&gt;Disconnected from weblogic server: AdminServer&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Exiting WebLogic Scripting Tool.&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1160221863863331437-3467644871206705197?l=weblogicserver.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://weblogicserver.blogspot.com/feeds/3467644871206705197/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://weblogicserver.blogspot.com/2010/02/http-session-monitoring-in-weblogic.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1160221863863331437/posts/default/3467644871206705197'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1160221863863331437/posts/default/3467644871206705197'/><link rel='alternate' type='text/html' href='http://weblogicserver.blogspot.com/2010/02/http-session-monitoring-in-weblogic.html' title='HTTP Session Monitoring in WebLogic Server'/><author><name>Bala Kothandaraman</name><uri>http://www.blogger.com/profile/04536459985006004271</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp1.blogger.com/_i4Ubs4VYKUM/RmmunEEazmI/AAAAAAAAAAM/HPNOLwuH4YE/s400/Bala_P1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_i4Ubs4VYKUM/S4gZUImuniI/AAAAAAAACs8/uTGBmTSeovg/s72-c/SessionMonitoring-1.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1160221863863331437.post-4289075721171430370</id><published>2010-01-23T13:54:00.000-08:00</published><updated>2010-01-23T14:06:19.504-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='RC Scripts'/><category scheme='http://www.blogger.com/atom/ns#' term='Best Practices'/><category scheme='http://www.blogger.com/atom/ns#' term='Node Manager'/><title type='text'>Node Manager as a UNIX Startup Process</title><content type='html'>Configuring WebLogic Server (WLS) as a startup process was a common administrative process in the past. But after Node Manager (NM) was introduced as an agent to start, stop, restart and monitor WebLogic Server it is now recommended that you start WebLogic Server using NM. But NM has to configured as a startup process on the respective OS so that it is always running to manage the respective WLS instances on that machine. NM can either be Java based NM or Script based NM. Script based NM uses OS services like SSH or RSH to execute the NM script. But Java based NM is a Java process that should be started. So setting up NM as a service will ensure that NM is always running. There is a lot of information in the WebLogic Server documentation about setting up NM. But there is very less or no information about setting NM as a service on a non-Windows environment. For Windows environment there are pre-packged scripts that you can use. These scripts exists under WL_HOME/server/bin folder (installNodeMgrSvc.cmd, uninstallNodeMgrSvc.cmd). But for UNIX based environment you should do this manually or with the help of OS specific utilities like chkconfig etc.&lt;br /&gt;&lt;br /&gt;For *nix environment NM should be configured as startup process using rc scripts. Creating rc scripts for configuring NM as a service is even simpler than configuring WebLogic Server as a service. This is mainly because NM doesn't have to be shutdown gracefully. All you have to do is write a simple shell script that starts the NM and create the symbolic link to that script from the right run level folder. The following illustrates the steps to confiure NM as service under LINUX environment. It should be very similar on other *nix environments. You need root permission to peform the following steps.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;1. Create a shell script (wlsnmd) under /etc/init.d/ folder:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:py"&gt;&lt;br /&gt;#! /bin/bash&lt;br /&gt;case "$1" in&lt;br /&gt;    start)&lt;br /&gt;        WL_HOME = /usr/middleware/11.1.0/wlserver_10.3&lt;br /&gt;        $WL_HOME/server/bin/startNodeManager.sh&lt;br /&gt;        ;;&lt;br /&gt;&lt;br /&gt;    *)&lt;br /&gt;        echo "Usage: $0 {start}"&lt;br /&gt;        exit 1&lt;br /&gt;esac&lt;br /&gt;&lt;br /&gt;exit_status&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;2. Assuming that we are going to start NM at run level 5, create a sysmbolic link in /etc/rc.d/rc5.d/ folder. Since it a startup script we should start the symbolic link with "S" and followed by a number which decide the order in which services will be called. As we are fine to start NM after all the other application/services are start let us choose 99 which is the highest number.&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:py"&gt;&lt;br /&gt;&lt;br /&gt;ln -s /etc/init.d/wlsnmd S99weblogic&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;If you don't want to do these manually you can also use utilities like chkconfig (included in Red Hat distributions) for managing your startup scripts. For configuring WebLogic Server as a startup process there are pre-packaged scripts (installSvc.cmd, uninstallSvc.cmd). But you have to create rc scripts similarly for WLS as well in UNIX based environments. Here is an example rc script for configuring a WebLogic Server as a startup process. But here we also need to implement the kill/stop to gracefully shutdown the server.&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:py"&gt;&lt;br /&gt;&lt;br /&gt;#! /bin/bash&lt;br /&gt;&lt;br /&gt;case "$1" in&lt;br /&gt;    start|reload)&lt;br /&gt;        DOMAIN_HOME = /usr/middleware/domains/med_analysis&lt;br /&gt;        $DOMAIN_HOME/bin/startWebLogic.sh&lt;br /&gt;        ;;&lt;br /&gt;    stop)&lt;br /&gt;        $DOMAIN_HOME/bin/stopWebLogic.sh&lt;br /&gt;        ;;&lt;br /&gt;    restart|force-reload)&lt;br /&gt;        $0 stop&lt;br /&gt;        $0 start&lt;br /&gt;        ;;&lt;br /&gt;    *)&lt;br /&gt;        echo "Usage: $0 {start|stop|restart}"&lt;br /&gt;        exit 1&lt;br /&gt;esac&lt;br /&gt;&lt;br /&gt;exit_status&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1160221863863331437-4289075721171430370?l=weblogicserver.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://weblogicserver.blogspot.com/feeds/4289075721171430370/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://weblogicserver.blogspot.com/2010/01/node-manager-as-unix-startup-process.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1160221863863331437/posts/default/4289075721171430370'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1160221863863331437/posts/default/4289075721171430370'/><link rel='alternate' type='text/html' href='http://weblogicserver.blogspot.com/2010/01/node-manager-as-unix-startup-process.html' title='Node Manager as a UNIX Startup Process'/><author><name>Bala Kothandaraman</name><uri>http://www.blogger.com/profile/04536459985006004271</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp1.blogger.com/_i4Ubs4VYKUM/RmmunEEazmI/AAAAAAAAAAM/HPNOLwuH4YE/s400/Bala_P1.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1160221863863331437.post-8828244273252995524</id><published>2009-11-25T14:20:00.000-08:00</published><updated>2010-07-01T09:49:14.248-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Scripts'/><category scheme='http://www.blogger.com/atom/ns#' term='Best Practices'/><category scheme='http://www.blogger.com/atom/ns#' term='WLST'/><title type='text'>Understanding WLST built-in variables . . .[WLST scripting Best Practices (Part-5)]</title><content type='html'>This post is a continuation of &lt;a href="http://weblogicserver.blogspot.com/2009/06/use-definition-for-reuse-wlst-scripting.html"&gt;my previous post&lt;/a&gt; - in a series of posts about WLST scripting best practices. &lt;br /&gt;&lt;br /&gt;Managed Beans (MBeans) are used to represent all the configuration and runtime information about WebLogic Domain, Servers, the applications and services deployed on a WebLogic Server Domain. While you can get all the information from WebLogic MBeans, WLST simplifies the task of building scripts by providing some built-in variables. These WLST variables are initialized and/or modified when you change to online mode (connect to a server), start an edit session etc. to appropriate values. &lt;br /&gt;&lt;br /&gt;One of the very useful WLST variable is cmo. cmo stands for current management object. When navigating in WLST you can use cmo to reference the current MBean (object) instance you are navigating into. The cmo value is changed when you navigate to different hierarchy of MBeans under different MBean trees in WebLogic (except jndi tree). The following illustrates the use of cmo.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:py"&gt;&lt;br /&gt;...&lt;br /&gt;connect(username, password, url)&lt;br /&gt;edit()&lt;br /&gt;startEdit()&lt;br /&gt;cd('/Servers/server1')&lt;br /&gt;s1=cmo&lt;br /&gt;cd('/Servers/server2')&lt;br /&gt;s2=cmo&lt;br /&gt;print 'Listenport of server1 -&gt; ' + s1.getListenPort()&lt;br /&gt;print 'Listenport of server2 -&gt; ' + s2.getListenPort()&lt;br /&gt;...&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Notice the use of cmo can for invoking operations on the respective MBean object. There are many such variables that will help you to write better and efficient WLST scripts. &lt;a href="http://download.oracle.com/docs/cd/E12839_01/web.1111/e13813/reference.htm#i1003217"&gt;See here &lt;/a&gt;for the list of all the WLST variables. &lt;br /&gt;&lt;br /&gt;If you know a variable name you can simply use it in you script. dumpVariables() command can be used to list all the variables and their values.&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:py"&gt;&lt;br /&gt;wls:/testdomain/serverConfig&gt; dumpVariables()&lt;br /&gt;adminHome                     weblogic.rmi.internal.BasicRemoteRef - hostID: '328889774891021637S:127.0.0.1:[7001,7001,-1,-1,-1,-1,-1]:testdomain:AdminServer',oid: '259', channel: 'null'&lt;br /&gt;cmgr                          [MBeanServerInvocationHandler]com.bea:Name=ConfigurationManager,Type=weblogic.management.mbeanservers.edit.ConfigurationManagerMBean&lt;br /&gt;cmo                           [MBeanServerInvocationHandler]com.bea:Name=testdomain,Type=Domain&lt;br /&gt;connected                     true&lt;br /&gt;domainName                    testdomain&lt;br /&gt;...&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In addition you should also be aware of these WLST variables in order to NOT use them to store your own information. If you do so then WLST will overwrite these variables during your interaction like connect, startEdit etc. So make sure you understand these WLST variables, use them in your scripts and do not use them to store your information.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1160221863863331437-8828244273252995524?l=weblogicserver.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://weblogicserver.blogspot.com/feeds/8828244273252995524/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://weblogicserver.blogspot.com/2009/11/knowing-wlst-variables.html#comment-form' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1160221863863331437/posts/default/8828244273252995524'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1160221863863331437/posts/default/8828244273252995524'/><link rel='alternate' type='text/html' href='http://weblogicserver.blogspot.com/2009/11/knowing-wlst-variables.html' title='Understanding WLST built-in variables . . .[WLST scripting Best Practices (Part-5)]'/><author><name>Bala Kothandaraman</name><uri>http://www.blogger.com/profile/04536459985006004271</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp1.blogger.com/_i4Ubs4VYKUM/RmmunEEazmI/AAAAAAAAAAM/HPNOLwuH4YE/s400/Bala_P1.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1160221863863331437.post-6873164817038489173</id><published>2009-11-23T08:54:00.000-08:00</published><updated>2010-01-08T15:50:34.021-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Security'/><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><title type='text'>Force confidentiality for Web Applications</title><content type='html'>Usually there are requirements for web based applications to use SSL when serving sensitive data between the client browser and WebLogic server. You can enable SSL port for WebLogic Server and disable the plain text port. This will force all the communication through the SSL port enabled on the target server. But if you have a mix of applications that require secured access and that doesn't then you can use the standard JEE web application descriptor to enable confidentiality. If you enable trasport guarantee configuration for the Web Applications, WebLogic Server will force the application or selective URL patternts to be accessed through the SSL port on WebLogic Server.&lt;br /&gt;&lt;br /&gt;The following shows an example of transport guaranetee entry from web.xml:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:py"&gt;&lt;br /&gt;...&lt;br /&gt;&lt;security-constraint&gt;&lt;br /&gt;   &lt;user-data-constraint&gt;&lt;br /&gt;       &lt;transport-guarantee&gt;CONFIDENTIAL&lt;/transport-guarantee&gt;&lt;br /&gt;   &lt;/user-data-constraint&gt;&lt;br /&gt;&lt;br /&gt;   &lt;web-resource-collection&gt;&lt;br /&gt;       &lt;url-pattern&gt;/*&lt;/url-pattern&gt;&lt;br /&gt;   &lt;/web-resource-collection&gt;&lt;br /&gt;&lt;/security-constraint&gt;&lt;br /&gt;...&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Even if the client is accessing through plain text port, WLS container will automatically redirect the request to the SSL port if enabled or to any other Network Channel enabled with SSL. This will ensure that certain applications or requests to be always accessed through SSL. Setting the transport guarantee to be NONE will relax the requirements and will not force SSL for the applications. But if there are SSL enabled network channels or SSL port is enabled on the server then the application can still be accessed using SSL. If the value for transport guarantee is set to be INTEGRAL then the requirement is that the data sent between the client and server be sent in such a way that it can't be changed in transit.&lt;br /&gt;&lt;br /&gt;Needless to say that this configuration can also be configured through deployment plans. If the application you are deploying on WebLogic Server is already packaged for deployment or third-party application then deployment plan will solve the purpose of overriding the application's configuration through external means. See &lt;a href="http://download.oracle.com/docs/cd/E13222_01/wls/docs103/deployment/config.html"&gt;here&lt;/a&gt; for more information on deployment plans with WebLogic Server.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1160221863863331437-6873164817038489173?l=weblogicserver.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://weblogicserver.blogspot.com/feeds/6873164817038489173/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://weblogicserver.blogspot.com/2009/11/force-confidentiality-for-web.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1160221863863331437/posts/default/6873164817038489173'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1160221863863331437/posts/default/6873164817038489173'/><link rel='alternate' type='text/html' href='http://weblogicserver.blogspot.com/2009/11/force-confidentiality-for-web.html' title='Force confidentiality for Web Applications'/><author><name>Bala Kothandaraman</name><uri>http://www.blogger.com/profile/04536459985006004271</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp1.blogger.com/_i4Ubs4VYKUM/RmmunEEazmI/AAAAAAAAAAM/HPNOLwuH4YE/s400/Bala_P1.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1160221863863331437.post-8793649014215416245</id><published>2009-10-22T15:15:00.000-07:00</published><updated>2010-07-01T09:49:14.248-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Scripts'/><category scheme='http://www.blogger.com/atom/ns#' term='Best Practices'/><category scheme='http://www.blogger.com/atom/ns#' term='WLST'/><title type='text'>More ways to check the existense of a resource with WLST</title><content type='html'>In one of my &lt;a href="http://weblogicserver.blogspot.com/2009/03/check-for-resourceconfiguration.html"&gt;previous post&lt;/a&gt;, I discussed a couple of ways with which you can find out whether a particular configuration already exists before you create them. The methods are not just limited to the one on that post. So now I am here to discuss couple more way to do the same check. But just for completeness I shall also include the methods I discussed in my previous post. I am taking a sample use case to check whether a particular WebLogic Server instance exists in the domain or not. But you can extrapolate these technique for any other resource like JDBC Data Source, JMS Server, JMS Queue etc.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Goal&lt;/span&gt; - Check whether a server with the name 'mymanagedserver' exists in the domain&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Method-1 Using "cd"&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;A simple approach is to use the "cd" command to navigate into that configuration MBean. If the "cd" command throws an exception then you can safely assume that the resource/configuration doesn't exists and you can continue with your task.&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:py"&gt;&lt;br /&gt;...&lt;br /&gt;mgdServerName = 'mymanagedserver'&lt;br /&gt;### Checking for the server&lt;br /&gt;try:&lt;br /&gt; cd('/Servers/' + mgdServerName)&lt;br /&gt; print '===&gt; Server \"' +mgdServerName+'\" already exists'&lt;br /&gt; print '===&gt; No action was performed'&lt;br /&gt; exit()&lt;br /&gt;except:&lt;br /&gt; pass&lt;br /&gt;### Continue to create the server&lt;br /&gt;...&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Method-2 Catch "BeanAlreadyExistsException"&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Another approach is to catch the "BeanAlreadyExistsException" when creating the resource and safely exiting the script.&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:py"&gt;&lt;br /&gt;...&lt;br /&gt;mgdServerName = 'mymanagedserver'&lt;br /&gt;### Create the Managed Server&lt;br /&gt;edit()&lt;br /&gt;startEdit()&lt;br /&gt;try:&lt;br /&gt; create(mgdServerName, resourceType)&lt;br /&gt; print '===&gt; Created Managed Server - ' + mgdServerName&lt;br /&gt; pass&lt;br /&gt;except BeanAlreadyExistsException:&lt;br /&gt; print '===&gt; Server \"' +mgdServerName+'\" already exists'&lt;br /&gt; print '===&gt; No action was performed'&lt;br /&gt; cancelEdit('y')&lt;br /&gt; exit()&lt;br /&gt;...&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;But with this approach you are starting an edit session and creating the server to find out it's existence. So you have to cancel the edit session once you find out that the resource that you are creating already exists if not you might get a warning message similar to the following:&lt;br /&gt;&lt;br /&gt;You have an edit session open and you will lose all outstanding changes and your edit session will be stopped if you exit. Are you sure you would like to exit? (y/n)&lt;br /&gt;&lt;br /&gt;So canceling the edit session with a response 'y' will make WLST not to prompt for the user response.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Method-3 &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Using &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;"getMBean"&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;There is a WLST command called getMBean which will return the MBean object when you specify the appropriate path. If the instance is not found then it will return None. But getMBean command does not throw an exception when an instance is not found. So you have explicitly check result of the getMBean.&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:py"&gt;&lt;br /&gt;...&lt;br /&gt;mgdServerName = 'mymanagedserver'&lt;br /&gt;ref = getMBean('/Servers/' + mgdServerName)&lt;br /&gt;if(ref != None):&lt;br /&gt;print 'Server ' +  servername + 'already exists'&lt;br /&gt;disconnect()&lt;br /&gt;exit()&lt;br /&gt;else:&lt;br /&gt;pass&lt;br /&gt;### Continue to create the server&lt;br /&gt;...&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Method-4 &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Using &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;"ls"&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;You can simply navigate to the resource type and execute ls. This will return the list of all the instances as a string when you assign the output to a variable. Then you can use the find method on that string variable to check whether your server exists. The find method returns a "0" on success or "-1" on failure.&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:py"&gt;&lt;br /&gt;...&lt;br /&gt;mgdServerName = 'mymanagedserver'&lt;br /&gt;cd('/Servers')&lt;br /&gt;servers = ls()&lt;br /&gt;if (servers.find(servername) != -1):&lt;br /&gt;print 'Server ' +  servername + ' already exists'&lt;br /&gt;disconnect()&lt;br /&gt;exit()&lt;br /&gt;else:&lt;br /&gt;pass&lt;br /&gt;### Continue to create the server&lt;br /&gt;...&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1160221863863331437-8793649014215416245?l=weblogicserver.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://weblogicserver.blogspot.com/feeds/8793649014215416245/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://weblogicserver.blogspot.com/2009/10/more-ways-to-check-existense-of.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1160221863863331437/posts/default/8793649014215416245'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1160221863863331437/posts/default/8793649014215416245'/><link rel='alternate' type='text/html' href='http://weblogicserver.blogspot.com/2009/10/more-ways-to-check-existense-of.html' title='More ways to check the existense of a resource with WLST'/><author><name>Bala Kothandaraman</name><uri>http://www.blogger.com/profile/04536459985006004271</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp1.blogger.com/_i4Ubs4VYKUM/RmmunEEazmI/AAAAAAAAAAM/HPNOLwuH4YE/s400/Bala_P1.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1160221863863331437.post-8410937650695395739</id><published>2009-09-16T08:09:00.000-07:00</published><updated>2010-01-08T15:43:04.332-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WebLogic Console'/><title type='text'>Don't want to get prompted for confirmation in WebLgic Console?</title><content type='html'>If you are using WebLogic Admin console frequently to configure resources or to manage the life cycle of the servers, you might have seen a confirmation prompt. This prompt will show not up when you are running the domain in development mode. When the domain is running in production mode they will ask confirmation for all the operations. There used to be no way to disable this confirmation page prior WebLogic Server 10.3. Now in WebLogic Server 10.3 and higher you can set a console user preference that can disable these confirmation pages.&lt;br /&gt;&lt;br /&gt;Use the tool bar at the center (top) of the console to go to the "Preferences". Under the "User Preferences" tab you will find an option called "Ask for confirmation in operations". By default it will be enabled in production domains and you can disable it to avoid that annoying confirmation pages where will have to click either "Yes" or "No". While you are there explore the other useful preferences like "Show Inline Help" and "Show Advanced Sections" which can buy some real-estate space in the console and save you some clicks.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_i4Ubs4VYKUM/SrD-y9zefeI/AAAAAAAACJQ/Qk0_tbOQHRs/s1600-h/Pref-1.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 114px;" src="http://4.bp.blogspot.com/_i4Ubs4VYKUM/SrD-y9zefeI/AAAAAAAACJQ/Qk0_tbOQHRs/s320/Pref-1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5382081706245127650" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_i4Ubs4VYKUM/SrD-zeAgliI/AAAAAAAACJY/HT4JhVWuwkY/s1600-h/Pref-2.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 120px;" src="http://4.bp.blogspot.com/_i4Ubs4VYKUM/SrD-zeAgliI/AAAAAAAACJY/HT4JhVWuwkY/s320/Pref-2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5382081714889725474" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1160221863863331437-8410937650695395739?l=weblogicserver.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://weblogicserver.blogspot.com/feeds/8410937650695395739/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://weblogicserver.blogspot.com/2009/09/dont-want-to-get-prompted-for.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1160221863863331437/posts/default/8410937650695395739'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1160221863863331437/posts/default/8410937650695395739'/><link rel='alternate' type='text/html' href='http://weblogicserver.blogspot.com/2009/09/dont-want-to-get-prompted-for.html' title='Don&apos;t want to get prompted for confirmation in WebLgic Console?'/><author><name>Bala Kothandaraman</name><uri>http://www.blogger.com/profile/04536459985006004271</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp1.blogger.com/_i4Ubs4VYKUM/RmmunEEazmI/AAAAAAAAAAM/HPNOLwuH4YE/s400/Bala_P1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_i4Ubs4VYKUM/SrD-y9zefeI/AAAAAAAACJQ/Qk0_tbOQHRs/s72-c/Pref-1.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1160221863863331437.post-6613979457994051793</id><published>2009-08-28T10:07:00.000-07:00</published><updated>2010-01-08T15:55:35.062-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='High Availability'/><category scheme='http://www.blogger.com/atom/ns#' term='Clustering'/><title type='text'>Change in WebLogic Server HTTP Session Failover Logic With Proxy Plug-ins</title><content type='html'>When using HTTP Sessions with WebLogic Cluster, you can ensure high availability for your session by configuring HTTP Session Replication. For the replication strategy, you have many options to select from like In-memory, file, JDBC, Cookie etc. When you are using in-memory replication with a web server to front WebLogic Server Cluster, the proxy plug-in must be configured on the web servers. The proxy plug-ins are intelligent enough to stick the request from a client to the same server where the session is hosted. A secondary copy of the session will be sent to a backup server by the primary server. This information will be written to a cookie or encoded in the URL depending on the client's configuration to support cookies.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_i4Ubs4VYKUM/SpgUb2kugRI/AAAAAAAACH4/g7p1cRlVA-4/s1600-h/Cluster-1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 290px; height: 320px;" src="http://4.bp.blogspot.com/_i4Ubs4VYKUM/SpgUb2kugRI/AAAAAAAACH4/g7p1cRlVA-4/s320/Cluster-1.jpg" alt="" id="BLOGGER_PHOTO_ID_5375068624005267730" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;In the past, during failure of the primary server, the proxy plug-in on the web server will redirect the request to the secondary/backup server. This resulted in increased traffic to the secondary/backup server. So somewhere during the Weblogic Server 9.x the plug-ins are updated to do a random routing incase of failures. The proxy server will randomly distribute all the requests from the failed server to different servers that are still running in the cluster. When the request from the existing clients (with valid session id) gets redirected to servers that are not secondary server then that server will connect to the secondary server for that client and will pull the session to become primary server. This ensures that one server will not get overloaded when a server in a cluster fails.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_i4Ubs4VYKUM/SpgUcf0H3eI/AAAAAAAACIA/38NArxtm-aA/s1600-h/Cluster-2.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 295px; height: 320px;" src="http://3.bp.blogspot.com/_i4Ubs4VYKUM/SpgUcf0H3eI/AAAAAAAACIA/38NArxtm-aA/s320/Cluster-2.jpg" alt="" id="BLOGGER_PHOTO_ID_5375068635075698146" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The same exact strategy was used when you front a WebLogic cluster with a load balancing hardware as not all the load balancing hardware understand the WebLogic cluster configuration. Now the same strategy is applied to the WebLogic Cluster front by a proxy plug-in hosted on a web server. This make the failover strategy consistent whether you have hardware or a software based proxy in front a WebLogic Cluster.&lt;br /&gt;&lt;br /&gt;WebLogic Server documentation is still not updated to reflect this change under the &lt;a href="http://download.oracle.com/docs/cd/E12839_01/web.1111/e13709/failover.htm#i1022254"&gt;"Proxy Failover Procedure" &lt;/a&gt;section. If you are running WebLogic Cluster with 9.x and you are not seeing this behavior then you can contact Oracle Support to find out whether there is a patch that can you can apply for your current WebLogic implementation.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1160221863863331437-6613979457994051793?l=weblogicserver.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://weblogicserver.blogspot.com/feeds/6613979457994051793/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://weblogicserver.blogspot.com/2009/08/weblogic-server-http-session-failover.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1160221863863331437/posts/default/6613979457994051793'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1160221863863331437/posts/default/6613979457994051793'/><link rel='alternate' type='text/html' href='http://weblogicserver.blogspot.com/2009/08/weblogic-server-http-session-failover.html' title='Change in WebLogic Server HTTP Session Failover Logic With Proxy Plug-ins'/><author><name>Bala Kothandaraman</name><uri>http://www.blogger.com/profile/04536459985006004271</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp1.blogger.com/_i4Ubs4VYKUM/RmmunEEazmI/AAAAAAAAAAM/HPNOLwuH4YE/s400/Bala_P1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_i4Ubs4VYKUM/SpgUb2kugRI/AAAAAAAACH4/g7p1cRlVA-4/s72-c/Cluster-1.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1160221863863331437.post-7536317402174655987</id><published>2009-06-01T12:19:00.000-07:00</published><updated>2010-07-01T09:49:14.249-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Scripts'/><category scheme='http://www.blogger.com/atom/ns#' term='Best Practices'/><category scheme='http://www.blogger.com/atom/ns#' term='WLST'/><title type='text'>Use definitions for Reuse [WLST scripting Best Practices (Part-4)]</title><content type='html'>This post is a continuation of &lt;a href="http://weblogicserver.blogspot.com/2009/03/check-for-resourceconfiguration.html"&gt;my previous post&lt;/a&gt; - in a series of posts about WLST scripting best practices. When you are authoring WLST scripts for automating WebLogic administration tasks, you can reuse or extend an existing logic written in WLST or Jython scripts. You can also leverage or extend logic written in Java which I will discuss later in a different post. Definition are reusable code blocks in Jython. Think of definitions as methods or functions. You can pass parameters into definitions. You can reuse definitions from the same script or from a different script. A script that contains definitions for other scripts to use is usually called as a 'Module'. If you are using a definition from a module then you should import it in your script. The definition should be defined before they get called in the script.&lt;br /&gt;&lt;br /&gt;Let us see an example of a using definition in the same script.&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:py"&gt;&lt;br /&gt;#Definition for connecting to a server&lt;br /&gt;def connectToServer():&lt;br /&gt;    username = 'weblogic'&lt;br /&gt;    password = 'weblogic'&lt;br /&gt;    url = 't3://egAdm:7001'&lt;br /&gt;    connect(username, password, url)&lt;br /&gt;&lt;br /&gt;#Definition to print a running servers heap details&lt;br /&gt;def printHeapDetails(server_name):&lt;br /&gt;    domainRuntime()&lt;br /&gt;    cd('/')&lt;br /&gt;    cd('ServerRuntimes/'+server_name+'/JVMRuntime/'+server_name)&lt;br /&gt;    hf = float(get('HeapFreeCurrent'))/1024&lt;br /&gt;    hs = float(get('HeapSizeCurrent'))/1024&lt;br /&gt;    hf = hf/1024&lt;br /&gt;    hs = hs/1024&lt;br /&gt;    print 'HeapFreeCurrent - ' + `hf` + 'MB'&lt;br /&gt;    print 'HeapSizeCurrent - ' + `hs` + 'MB'&lt;br /&gt;&lt;br /&gt;#Definition to disconnect from a server&lt;br /&gt;def disconnectFromServer():&lt;br /&gt;    disconnect()&lt;br /&gt;    exit()&lt;br /&gt;&lt;br /&gt;#Calling connectToServer definition with no arguments&lt;br /&gt;connectToServer()&lt;br /&gt;&lt;br /&gt;#Calling printHeapDetails with arguments&lt;br /&gt;printHeapDetails('AdminServer')&lt;br /&gt;printHeapDetails('mgds1')&lt;br /&gt;printHeapDetails('mgds2')&lt;br /&gt;&lt;br /&gt;#Calling disconnectFromServer definition with no arguments&lt;br /&gt;disconnectFromServer()&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;In the above script we are connecting to the administration server of a domain and then printing the heap details for the admin server and 2 other managed servers. The logic to navigate to the respective runtime mbean and printing the heap related attributes is being defined as reusable definition and called multiple times.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;WLST-BP-4&lt;/span&gt; Use definitions for Reuse&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1160221863863331437-7536317402174655987?l=weblogicserver.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://weblogicserver.blogspot.com/feeds/7536317402174655987/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://weblogicserver.blogspot.com/2009/06/use-definition-for-reuse-wlst-scripting.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1160221863863331437/posts/default/7536317402174655987'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1160221863863331437/posts/default/7536317402174655987'/><link rel='alternate' type='text/html' href='http://weblogicserver.blogspot.com/2009/06/use-definition-for-reuse-wlst-scripting.html' title='Use definitions for Reuse [WLST scripting Best Practices (Part-4)]'/><author><name>Bala Kothandaraman</name><uri>http://www.blogger.com/profile/04536459985006004271</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp1.blogger.com/_i4Ubs4VYKUM/RmmunEEazmI/AAAAAAAAAAM/HPNOLwuH4YE/s400/Bala_P1.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1160221863863331437.post-987527805166500237</id><published>2009-03-23T18:48:00.000-07:00</published><updated>2010-07-01T09:49:14.249-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Scripts'/><category scheme='http://www.blogger.com/atom/ns#' term='WLST'/><category scheme='http://www.blogger.com/atom/ns#' term='Domain Creation'/><title type='text'>Reading csv File in WLST Script</title><content type='html'>One of the comment for an earlier post was about creating domain(s) from csv file with WLST. Creating domain using WLST is a fairly simple and straight forward process. So I decided to explain the simple concept of reading a csv file and creating a domain using an example.&lt;br /&gt;&lt;br /&gt;The main trick is to use the Jython language libraries to perform some of the required operations. In my example I shall illustrate how to read command-line arguments, open and read files using Jython. I am also using some local function definitions to create some modular script here. The following is an example of a comma seperated value file that our WLST script can read to create one or more domains:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:text"&gt;&lt;br /&gt;#domainName,domainLocation,adminUser,adminPassword,adminServerAddress,adminServerPort&lt;br /&gt;testDomain,/home/oracle/domains,system,weblogic,localhost,8998&lt;br /&gt;anotherDomain,/home/oracle/domains,system,weblogic,localhost,7887&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Comment lines start with # and each line that is not a comment line represent values for a domain such as domain name, location etc. The script to read the csv file and create the domain can be something like this:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:py"&gt;&lt;br /&gt;### Script to create WebLogic Domain(s) from csv file&lt;br /&gt;### Reusable Definitions&lt;br /&gt;def buildDomain():&lt;br /&gt;    ### Read Basic Template&lt;br /&gt;    readTemplate(WL_HOME+"/common/templates/domains/wls.jar")&lt;br /&gt;    cd('Servers/AdminServer')&lt;br /&gt;    set('ListenAddress', adminServerAddress)&lt;br /&gt;    set('ListenPort', int(adminServerPort))&lt;br /&gt;&lt;br /&gt;    ### Create Admin User&lt;br /&gt;    cd('/')&lt;br /&gt;    cd('Security/base_domain/User')&lt;br /&gt;    delete('weblogic','User')&lt;br /&gt;    create(adminUser,'User')&lt;br /&gt;    cd(adminUser)&lt;br /&gt;    set('Password',adminPassword)&lt;br /&gt;    set('IsDefaultAdmin',1)&lt;br /&gt;&lt;br /&gt;    ### Write Domain&lt;br /&gt;    setOption('OverwriteDomain', 'true')&lt;br /&gt;    writeDomain(domainLocation+'/'+domainName)&lt;br /&gt;    closeTemplate()&lt;br /&gt;&lt;br /&gt;def printConfirmation():&lt;br /&gt;    ### Print Confirmation&lt;br /&gt;    print ""&lt;br /&gt;    print "Created Domain With Following Values"&lt;br /&gt;    print "Domain Name   = %s " % domainName&lt;br /&gt;    print "Domain Location  = %s " % domainLocation&lt;br /&gt;    print "Admin User   = %s " % adminUser&lt;br /&gt;    print "Admin Password   = %s " % adminPassword&lt;br /&gt;    print "Admin Server Address  = %s " % adminServerAddress&lt;br /&gt;    print "Admin Server port  = %s " % adminServerPort&lt;br /&gt;&lt;br /&gt;### Executable Script &lt;br /&gt;### CreateDomain.py&lt;br /&gt;import sys&lt;br /&gt;&lt;br /&gt;### Define constants&lt;br /&gt;WL_HOME = "/products/beaSB/wlserver_10.0"&lt;br /&gt;&lt;br /&gt;### Read the command-line arguments&lt;br /&gt;argslength = len(sys.argv)&lt;br /&gt;if argslength &lt; 2 :&lt;br /&gt;    print '==&gt;Insufficient arguments'&lt;br /&gt;    print '==&gt;Syntax: java weblogic.WLST CreateDomain.py csv.file'&lt;br /&gt;    exit()&lt;br /&gt;else:&lt;br /&gt;    ### Read the csv file&lt;br /&gt;    fileName = sys.argv[1]&lt;br /&gt;    print('Reading File \"' + fileName + '\"' )&lt;br /&gt;    f = open(fileName)&lt;br /&gt;    try:&lt;br /&gt;        for line in f.readlines():&lt;br /&gt;        ### Strip the comment lines&lt;br /&gt;        if line.strip().startswith('#'):&lt;br /&gt;            continue&lt;br /&gt;        else:&lt;br /&gt;            ### Split the comma seperated values&lt;br /&gt;            items = line.split(',')&lt;br /&gt;            items = [item.strip() for item in items]&lt;br /&gt;            if len(items) != 6:&lt;br /&gt;                print "==&gt;Bad line: %s" % line&lt;br /&gt;                print "==&gt;Syntax: domainName, domainLocation, adminUser, adminPassword, adminServerAddress, adminServerPort"&lt;br /&gt;            else: &lt;br /&gt;                (domainName, domainLocation, adminUser, adminPassword, adminServerAddress, adminServerPort) = items&lt;br /&gt;  &lt;br /&gt;                ### Call the definition buildDomain&lt;br /&gt;                buildDomain()&lt;br /&gt;&lt;br /&gt;                ### Call the definition printConfirmation&lt;br /&gt;                printConfirmation()&lt;br /&gt;&lt;br /&gt;    except Exception, e:&lt;br /&gt;        print "==&gt;Error Occured"&lt;br /&gt;        print e&lt;br /&gt;exit()&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The executable part of the script is something that is not marked as a definition and in this case it start with the import statement. Any command-line or program arguments passed to WLST are available through sys.argv array. The array is zero indexed and the first element of the array sys.argv[0] is the script file itself. In our script we check to make sure that atleast 2 arguments including the script filename exists.&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:py"&gt;&lt;br /&gt;...&lt;br /&gt;### Read the command-line arguments&lt;br /&gt;argslength = len(sys.argv)&lt;br /&gt;if argslength &lt; 2 :&lt;br /&gt;    print '==&gt;Insufficient arguments'&lt;br /&gt;    print '==&gt;Syntax: java weblogic.WLST CreateDomain.py csv.file'&lt;br /&gt;    exit()&lt;br /&gt;else:&lt;br /&gt;...&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Built-in functions are then used to open and read the csv file.&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:py"&gt;&lt;br /&gt;...&lt;br /&gt;f = open(fileName)&lt;br /&gt;try:&lt;br /&gt;    for line in f.readlines():&lt;br /&gt;...&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;We are Using the startswith to eliminate the comment lines and then using the split and strip string function to create a list of all the items passed from the command-line. Later after checking the number of values in each line the list is assigned to a tuple of variable names (tuple is immutable in Jython where as Lists are mutable).&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:py"&gt;&lt;br /&gt;(domainName, domainLocation, adminUser, adminPassword, adminServerAddress, adminServerPort) = items&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Once we have all values read and stored in the respective variables then it is pretty straight forward to create a domain which in this case was built as function definition (buildDomain). Later all the values were sent to standard output for user's attention. Also any exception will be reported with the try...except block.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1160221863863331437-987527805166500237?l=weblogicserver.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://weblogicserver.blogspot.com/feeds/987527805166500237/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://weblogicserver.blogspot.com/2009/03/reading-csv-file-in-wlst-script.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1160221863863331437/posts/default/987527805166500237'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1160221863863331437/posts/default/987527805166500237'/><link rel='alternate' type='text/html' href='http://weblogicserver.blogspot.com/2009/03/reading-csv-file-in-wlst-script.html' title='Reading csv File in WLST Script'/><author><name>Bala Kothandaraman</name><uri>http://www.blogger.com/profile/04536459985006004271</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp1.blogger.com/_i4Ubs4VYKUM/RmmunEEazmI/AAAAAAAAAAM/HPNOLwuH4YE/s400/Bala_P1.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1160221863863331437.post-638827683540550261</id><published>2009-03-02T05:44:00.000-08:00</published><updated>2010-07-01T09:49:14.250-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Scripts'/><category scheme='http://www.blogger.com/atom/ns#' term='Best Practices'/><category scheme='http://www.blogger.com/atom/ns#' term='WLST'/><title type='text'>Check for resource/configuration existence [WLST scripting Best Practices (Part-3)]</title><content type='html'>This post is a continuation of my previous &lt;a href="http://weblogicserver.blogspot.com/2009/02/do-not-step-on-others-feet-wlst.html"&gt;post&lt;/a&gt; in a series of posts about WLST scripting best practices. When you are authoring WLST scripts to create new resource/configuration in WebLogic domain then check for its existence. If the resource/configuration already exists then you might get an error similar to the following:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;weblogic.descriptor.BeanAlreadyExistsException: Bean already exists&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;A simple approach is to use the "cd" command to navigate into that configuration MBean. If the "cd" command throws an exception then you can safely assume that the resource/configuration doesn't exists and you can continue creating.&lt;br /&gt;&lt;pre class="brush:py"&gt;&lt;br /&gt;...&lt;br /&gt;### Check for the server&lt;br /&gt;try: &lt;br /&gt;    cd('/Servers/' + mgdServerName)&lt;br /&gt;    print '===&gt; Server \"' +mgdServerName+'\" already exists'&lt;br /&gt;    print '===&gt; No action was performed'&lt;br /&gt;    exit()&lt;br /&gt;except:&lt;br /&gt;    pass&lt;br /&gt;...&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The other approach is to catch the "BeanAlreadyExistsException" while creating the resource and safely exiting the script.&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:py"&gt;&lt;br /&gt;...&lt;br /&gt;### Create the Managed Server&lt;br /&gt;edit()&lt;br /&gt;startEdit()&lt;br /&gt;try:&lt;br /&gt;    create(mgdServerName, resourceType)&lt;br /&gt;    print '===&gt; Created Managed Server - ' + mgdServerName&lt;br /&gt;    pass &lt;br /&gt;except BeanAlreadyExistsException:&lt;br /&gt;    print '===&gt; Server \"' +mgdServerName+'\" already exists'&lt;br /&gt;    print '===&gt; No action was performed'&lt;br /&gt;    cancelEdit('y')&lt;br /&gt;    exit()&lt;br /&gt;...&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;But with this approach you are starting an edit session and creating the server to find out it's existence. So you have to cancel the edit session once you find out that the resource that you are creating already exists if not you might get a warning message similar to the following:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;You have an edit session open and you will lose all outstanding changes and your edit session will be stopped if you exit. Are you sure you would like to exit? (y/n)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;So cancelling the edit session with a responce 'y' will make WLST not to prompt for user response. I shall discuss how to streamline the outputs from WLST and redirect them to an output file or log file in a later post.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;WLST-BP-3&lt;/span&gt; Check for the resource or configuration existence before creating them&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1160221863863331437-638827683540550261?l=weblogicserver.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://weblogicserver.blogspot.com/feeds/638827683540550261/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://weblogicserver.blogspot.com/2009/03/check-for-resourceconfiguration.html#comment-form' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1160221863863331437/posts/default/638827683540550261'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1160221863863331437/posts/default/638827683540550261'/><link rel='alternate' type='text/html' href='http://weblogicserver.blogspot.com/2009/03/check-for-resourceconfiguration.html' title='Check for resource/configuration existence [WLST scripting Best Practices (Part-3)]'/><author><name>Bala Kothandaraman</name><uri>http://www.blogger.com/profile/04536459985006004271</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp1.blogger.com/_i4Ubs4VYKUM/RmmunEEazmI/AAAAAAAAAAM/HPNOLwuH4YE/s400/Bala_P1.jpg'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1160221863863331437.post-7744921655368501195</id><published>2009-02-26T10:42:00.000-08:00</published><updated>2010-07-01T09:49:14.250-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Scripts'/><category scheme='http://www.blogger.com/atom/ns#' term='Best Practices'/><category scheme='http://www.blogger.com/atom/ns#' term='WLST'/><title type='text'>Do Not Step On Other's Feet [WLST scripting Best Practices (Part-2)]</title><content type='html'>This post is a continuation of my previous &lt;a href="http://weblogicserver.blogspot.com/2009/02/variable-definitions-in-preamble-best.html"&gt;post &lt;/a&gt;- in a series of posts about WLST scripting best practices. When using WLST script for performing configuration changes always check whether someone else is making changes. WebLogic support configuration changes using many methods but not limited to:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Administration Console&lt;/li&gt;&lt;li&gt;Interactive WLST&lt;/li&gt;&lt;li&gt;WLST SCripts&lt;/li&gt;&lt;li&gt;JMX&lt;/li&gt;&lt;li&gt;Ant Scripts&lt;/li&gt;&lt;li&gt;3rd Party Tools&lt;/li&gt;&lt;/ul&gt;So it is always better to check whether someone else is making changes while you are ready to start a change session. WebLogic Server will allow only one change session at a time no matter which one of the above methods you use for configuration management. Especially environments with multiple administrators the best practice is to have individual logins for each administrator so that you can have more controlled environment. If you are interested in configuration auditing to find out who is responsible for what, see this &lt;a href="http://weblogicserver.blogspot.com/2008/04/audit-weblogic-server-domain-for.html"&gt;post&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Use the Configuration Manager to find out information about existing change sessions. You can find out whether someone else had already started a change session, if so who is making changes, are there any unactivated changed, if so what changes are unactivated etc. from the configuration manager. The following example illustrates a code snippet which checks for existing sessions using configuration manager:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:py"&gt;&lt;br /&gt;...&lt;br /&gt;### Get the Configuration Manager and check for existing session&lt;br /&gt;cfgManager = getConfigManager()&lt;br /&gt;try:&lt;br /&gt;   cfgManager.getChanges()&lt;br /&gt;   print '===&gt; Someone else is making changes'&lt;br /&gt;except: &lt;br /&gt;   print '===&gt; No one else is making changes'&lt;br /&gt;...&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The following example illustrates a code snippet which checks for the number of unactivated changes using configuration manager:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:py"&gt;&lt;br /&gt;...&lt;br /&gt;### Get the Configuration Manager and check for existing session&lt;br /&gt;cfgManager = getConfigManager()&lt;br /&gt;try:&lt;br /&gt;   cfgManager.getChanges()&lt;br /&gt;   print '===&gt; Someone else is making changes'&lt;br /&gt;   noOfChanges = cfgManager.getUnactivatedChanges().__len__()&lt;br /&gt;   print 'There are ' + noOfChanges + ' unactivated pending changes in the current edit session'&lt;br /&gt;except: &lt;br /&gt;   print '===&gt; No one else is making changes'&lt;br /&gt;...&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The above code snippet may work only if you are the user who is making the changes. The following example illustrates a code snippet which checks and prints the user who is currently making changes using configuration manager:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:py"&gt;&lt;br /&gt;...&lt;br /&gt;### Get the Configuration Manager and check for existing session&lt;br /&gt;cfgManager = getConfigManager()&lt;br /&gt;try:&lt;br /&gt;   cfgManager.getChanges()&lt;br /&gt;   print '===&gt; User ' + configmanager.getCurrentEditor() + ' is making changes'&lt;br /&gt;except: &lt;br /&gt;   print '===&gt; No one else is making changes'&lt;br /&gt;...&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The following example is a complete script which checks for an existing session and if one doesn't exists then it will create a new managed server by starting a new session. If a session already exists then it will simply display that information and will exit.&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:py"&gt;&lt;br /&gt;from weblogic.management.mbeanservers.edit import NotEditorException&lt;br /&gt;&lt;br /&gt;### CreateMgdServer.py&lt;br /&gt;### Define all the requried variable&lt;br /&gt;username = 'braman'&lt;br /&gt;password = 'weblogic'&lt;br /&gt;url = 't3://localhost:7001'&lt;br /&gt;mgdServerName = 'mgdserver1'&lt;br /&gt;resourceType = 'Server'&lt;br /&gt;listenAddress = 'egmgd1'&lt;br /&gt;listenPort = 2001&lt;br /&gt;&lt;br /&gt;### Connect to the Administration Server&lt;br /&gt;connect(username, password, url)&lt;br /&gt;&lt;br /&gt;### Get the Configuration Manager&lt;br /&gt;cfgManager = getConfigManager()&lt;br /&gt;try:&lt;br /&gt;   cfgManager.getChanges()&lt;br /&gt;   print '===&gt; Currently there is a Session'&lt;br /&gt;   if cfgManager.isEditor() == true:&lt;br /&gt;       ### You are making changes!!!&lt;br /&gt;       print '===&gt; Looks like you started that session'&lt;br /&gt;       print '===&gt; You can check the console for any pending changes'&lt;br /&gt;       print '===&gt; Try rerunning this script after you release or commit the pending changes'&lt;br /&gt;   exit()&lt;br /&gt;&lt;br /&gt;except NotEditorException, e:&lt;br /&gt;   if cfgManager.getCurrentEditor() is None:&lt;br /&gt;   ### No session&lt;br /&gt;       pass&lt;br /&gt;   else:&lt;br /&gt;       ### Someone else is making changes&lt;br /&gt;       userWithSession = cfgManager.getCurrentEditor().replace(' ', '')&lt;br /&gt;       print '===&gt; Currently there is a Session'&lt;br /&gt;       print '===&gt; User \"' +userWithSession+'\" is making the changes'&lt;br /&gt;       print '===&gt; Wait until \"' +userWithSession+'\" complete the current session'&lt;br /&gt;       exit()&lt;br /&gt;   pass&lt;br /&gt;except Exception:&lt;br /&gt;   ### Other Errors&lt;br /&gt;   print '===&gt; Error, see log for more info'&lt;br /&gt;   exit()&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;### Start a change session&lt;br /&gt;edit()&lt;br /&gt;startEdit()&lt;br /&gt;&lt;br /&gt;### Create the Managed Server&lt;br /&gt;create(mgdServerName, resourceType)&lt;br /&gt;cd('/Servers/' + mgdServerName)&lt;br /&gt;cmo.setListenPort(listenPort)&lt;br /&gt;cmo.setListenAddress(listenAddress)&lt;br /&gt;print '===&gt; Created Managed Server - ' + mgdServerName&lt;br /&gt;&lt;br /&gt;### Activate the changes&lt;br /&gt;save()&lt;br /&gt;activate()&lt;br /&gt;&lt;br /&gt;### Disconnect from the Administration Server&lt;br /&gt;disconnect()&lt;br /&gt;exit()&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;To explain some tricky parts of the above script:&lt;br /&gt;&lt;br /&gt;This is line of code is used to import the exception class&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;from weblogic.management.mbeanservers.edit import NotEditorException&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;To check whether you are holding on to a session currently you can use the following method on the configuration manager&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;cfgManager.isEditor()&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;To get the user who is currently making changes you use the getCurrentEditor method on the configuration manager&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;cfgManager.getCurrentEditor()&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;To get rid of all the white spaces you can use a replace method from the string class (this is Jython)&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;userWithSession = cfgManager.getCurrentEditor().replace(' ', '')&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The above example works if you don't have a managed server named egmdg1. But if you already have a managed server in your domain with the same name then the script will fail with the following error:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;weblogic.descriptor.BeanAlreadyExistsException: Bean already exists&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;You can handle that situation in couple of different ways. I shall continue on how to tackle that in my next post.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;WLST-BP-2&lt;/span&gt; Check for existing session before you start one&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1160221863863331437-7744921655368501195?l=weblogicserver.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://weblogicserver.blogspot.com/feeds/7744921655368501195/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://weblogicserver.blogspot.com/2009/02/do-not-step-on-others-feet-wlst.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1160221863863331437/posts/default/7744921655368501195'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1160221863863331437/posts/default/7744921655368501195'/><link rel='alternate' type='text/html' href='http://weblogicserver.blogspot.com/2009/02/do-not-step-on-others-feet-wlst.html' title='Do Not Step On Other&apos;s Feet [WLST scripting Best Practices (Part-2)]'/><author><name>Bala Kothandaraman</name><uri>http://www.blogger.com/profile/04536459985006004271</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp1.blogger.com/_i4Ubs4VYKUM/RmmunEEazmI/AAAAAAAAAAM/HPNOLwuH4YE/s400/Bala_P1.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1160221863863331437.post-4699845708703531096</id><published>2009-02-25T06:45:00.000-08:00</published><updated>2010-07-01T09:49:14.251-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Scripts'/><category scheme='http://www.blogger.com/atom/ns#' term='Best Practices'/><category scheme='http://www.blogger.com/atom/ns#' term='WLST'/><title type='text'>Variable Definitions In The Preamble [WLST scripting  Best Practices (Part-1)]</title><content type='html'>With WLST becoming popular among WebLogic Administrator, there is an unsaid need to discuss the best practices with respect to WLST scripting. I am being asked to share information about WLST like an introductory/101 post. But I decided to start a series of post which might help WebLogic Administrators with some of the must follow best practices rather than writing some introductory post which might duplicate the documentation. For WLST  documentation see &lt;a href="http://download.oracle.com/docs/cd/E12840_01/wls/docs103/config_scripting/using_WLST.html"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The common steps involved in a WLST script that is used to configure WebLogic Server are as follows:&lt;br /&gt;&lt;br /&gt;1. Connect to server&lt;br /&gt;2. Navigate to the respective location (MBean)&lt;br /&gt;3. Modify the required properties&lt;br /&gt;4. If more configuration needs to be modified continue Step-2&lt;br /&gt;5. Else disconnect&lt;br /&gt;6. Exit&lt;br /&gt;&lt;br /&gt;The first of the series of best practices in authoring a WLST script is to define all the required variables at the beginning before connecting to the server. That way if any modifications must be done in the future it will be as easy as changing the variables defined at the beginning of the script. In the coming posts, I will talk about more of other best practices like writing a reusable WLST script, consuming information from the environment variables, exception handling, defensive scripting, avoiding to hard code critical information like username, password, url etc.&lt;br /&gt;&lt;br /&gt;The usual variables are the username, password, url, resource names, attribute values etc. The following is an example of a script that defines all the required values as script variables which can avoid hardcoding and will also facilitate simple way to modify them in the future if required.&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:py"&gt;&lt;br /&gt;#CreateServer.py&lt;br /&gt;#Define all the requried variable&lt;br /&gt;username = 'system'&lt;br /&gt;password = 'weblogic'&lt;br /&gt;url = 't3://egAdm:7001'&lt;br /&gt;serverName = 'mgdserver1'&lt;br /&gt;listenAddress = 'egmgd1'&lt;br /&gt;listenPort = '2001'&lt;br /&gt;&lt;br /&gt;#Connect to the Administration Server&lt;br /&gt;connect(username, password, url)&lt;br /&gt;&lt;br /&gt;#Start a change session&lt;br /&gt;edit()&lt;br /&gt;startEdit()&lt;br /&gt;&lt;br /&gt;#Create the Managed Server&lt;br /&gt;create(serverName, 'Server')&lt;br /&gt;cd('/Servers/' + serverName')&lt;br /&gt;cmo.setListenPort(listenPort)&lt;br /&gt;cmo.setListenAddress(listenAddress)&lt;br /&gt;&lt;br /&gt;#Activate the changes&lt;br /&gt;save()&lt;br /&gt;activate()&lt;br /&gt;&lt;br /&gt;#Disconnect from the Administration Server&lt;br /&gt;disconnect()&lt;br /&gt;exit()&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The above script may not be authored using all the best practices now. But I will eventually build on the same example of creating a new Managed Server in my subsequent posts to address the other best practices as well.  My next post will talk about how to check for existing change session before you start one with WLST.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;WLST-BP-1&lt;/span&gt; Define all the variables in the preamble&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1160221863863331437-4699845708703531096?l=weblogicserver.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://weblogicserver.blogspot.com/feeds/4699845708703531096/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://weblogicserver.blogspot.com/2009/02/variable-definitions-in-preamble-best.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1160221863863331437/posts/default/4699845708703531096'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1160221863863331437/posts/default/4699845708703531096'/><link rel='alternate' type='text/html' href='http://weblogicserver.blogspot.com/2009/02/variable-definitions-in-preamble-best.html' title='Variable Definitions In The Preamble [WLST scripting  Best Practices (Part-1)]'/><author><name>Bala Kothandaraman</name><uri>http://www.blogger.com/profile/04536459985006004271</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp1.blogger.com/_i4Ubs4VYKUM/RmmunEEazmI/AAAAAAAAAAM/HPNOLwuH4YE/s400/Bala_P1.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1160221863863331437.post-8177021422061312385</id><published>2008-12-17T07:49:00.000-08:00</published><updated>2010-01-08T15:46:11.994-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tips and Tricks'/><category scheme='http://www.blogger.com/atom/ns#' term='WLST'/><title type='text'>Easy Syntax with WLST</title><content type='html'>WLST is a powerful scripting solution for managing and administering WebLogic Server and resources deployed on them. WLST is built on the Java implementation of the scripting language Python called as Jython. All the commands in WLST are implemented as Jython functions and they require a set of parentheses for passing any arguments. Even any commands that do not require any arguments are supposed to be suffixed with parentheses. For example the command "&lt;span style="font-weight: bold;"&gt;ls&lt;/span&gt;" is used to list all the child MBeans and/or attributes of the current MBean you are at.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;ls()&lt;/span&gt; - lists all the child MBeans and attributes&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;ls('a')&lt;/span&gt; - lists all the attribute names and values only&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;ls('c')&lt;/span&gt; - lists all the child MBeans only&lt;br /&gt;&lt;br /&gt;So even if you want to invoke "&lt;span style="font-weight: bold;"&gt;ls&lt;/span&gt;" with no arugments you must use "&lt;span style="font-weight: bold;"&gt;ls()&lt;/span&gt;". This might not be an issue when you are building scripts that you might want to run many times. But while connected to a server and working with WLST in interactive mode, it might get a little frustated to type the parentheses everytime you want to run some simple commands with no arguments. To ease this pain there is a hidden option in WLST which can be used to ease the syntax for WLST commands - &lt;span style="font-weight: bold; font-style: italic;"&gt;easeSyntax()&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_i4Ubs4VYKUM/SUkf8SVnScI/AAAAAAAABPM/X4jjMX2Dxnw/s1600-h/easeSyntax.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 239px;" src="http://4.bp.blogspot.com/_i4Ubs4VYKUM/SUkf8SVnScI/AAAAAAAABPM/X4jjMX2Dxnw/s320/easeSyntax.jpg" alt="" id="BLOGGER_PHOTO_ID_5280787158643722690" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;You can supply the "&lt;span style="font-weight: bold; font-style: italic;"&gt;easeSyntax()&lt;/span&gt;" command to ease the syntax but this is not recommended for script mode and especially when using loop constructs. You can also use the regular Jython syntax with parentheses even after you enabled the easy syntax. To turn off the easy syntax mode simply issue the command again "&lt;span style="font-weight: bold; font-style: italic;"&gt;easeSyntax&lt;/span&gt;".&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Bye Bye parentheses!&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1160221863863331437-8177021422061312385?l=weblogicserver.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://weblogicserver.blogspot.com/feeds/8177021422061312385/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://weblogicserver.blogspot.com/2008/12/easy-syntax-with-wlst.html#comment-form' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1160221863863331437/posts/default/8177021422061312385'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1160221863863331437/posts/default/8177021422061312385'/><link rel='alternate' type='text/html' href='http://weblogicserver.blogspot.com/2008/12/easy-syntax-with-wlst.html' title='Easy Syntax with WLST'/><author><name>Bala Kothandaraman</name><uri>http://www.blogger.com/profile/04536459985006004271</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp1.blogger.com/_i4Ubs4VYKUM/RmmunEEazmI/AAAAAAAAAAM/HPNOLwuH4YE/s400/Bala_P1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_i4Ubs4VYKUM/SUkf8SVnScI/AAAAAAAABPM/X4jjMX2Dxnw/s72-c/easeSyntax.jpg' height='72' width='72'/><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1160221863863331437.post-7321770123411843013</id><published>2008-10-20T18:56:00.000-07:00</published><updated>2010-01-08T15:46:46.657-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Security'/><title type='text'>How To Encrypt Clear Text Passwords With WebLogic Server</title><content type='html'>WebLogic Server encrypts all the plain text passwords stored in its domain configuration XML file(s). This is to prevent access to sensitive information. When passwords are entered using administration console or scripting tools, it will automatically get encrypted before they are stored in the configuration XML files(s).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Prior to WebLogic Server 9.0&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;If those passwords need to be reset either the configuration tools (Console or scripting tools) can be used which will automatically re-encrypt the passwords or by directly changing the configuration files using a text editor. When files are directly modified using a text editor the passwords will get encrypted during the subsequent restart.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Starting from WebLogic Server 9.0&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Using clear text passwords in the configuration files are supported only for Development domain and it will not re-encrypt the passwords. If the domain is a Production domain then you cannot set the passwords in clear text. You have to either use a dedicated command-line utility or WLST to encrypt the clear text passwords. If the server encounters a clear text password when parsing the configuration file(s) while starting in Production Mode, then you will get an error similar to the following:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;Oct 20, 2008 9:05:35 PM EDT&amp;gt; &amp;lt;Critical&amp;gt; &amp;lt;WebLogicServer&amp;gt; &amp;lt;BEA-000362&amp;gt; &amp;lt;Server failed. Reason: [Management:141266]Parsing Failure in config.xml: java.lang.IllegalArgumentException: In production mode, it's not allowed to set a clear text value to the property: PasswordEncrypted of ServerStartMBean&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Depending on the configuration the MBean name value of the error message may change. In this case the ServerStartMBean has clear text value for a password property. Either the dedicated Java utility to encrypt clear text values can be used or WLST cant be used to re-encrypt. To run the encrypt utility follow the instructions below:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Change directory to your domain's bin folder (For Eg. &lt;span style="font-family:courier new;"&gt;cd c:\bea\user_projects\domains\mydomain\bin&lt;/span&gt;)&lt;/li&gt;&lt;li&gt;Execute the setDomainEnv script (For Eg.&lt;span style="font-family:courier new;"&gt; setDomainEnv.cmd&lt;/span&gt;)&lt;/li&gt;&lt;li&gt;Execute&lt;span style="font-family:courier new;"&gt; java weblogic.security.Encrypt&lt;/span&gt; which will prompt for the password and will print the encrypted value in stdout.&lt;/li&gt;&lt;/ol&gt;The following are some sample output from running the utility&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;C:\bea\user_projects\domains\mydomain&gt;java weblogic.security.Encrypt&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Password:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;{3DES}9HWsf87pJTw=&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;You should execute this utility from the domain folder as it requires the domain's password salt file (&lt;span style="font-family:courier new;"&gt;SerializedSystemIni.dat&lt;/span&gt;) for encrypting the clear text string. You can also pass the clear text string as an argument&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;C:\bea\user_projects\domains\mydomain&gt;java weblogic.security.Encrypt testpwd&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;{3DES}9HWsf87pJTw=&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;You can also use WLST to encrypt clear text strings as below:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;C:\bea\user_projects\domains\mydomain&gt;java weblogic.WLST&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Initializing WebLogic Scripting Tool (WLST) ...&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Welcome to WebLogic Server Administration Scripting Shell&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Type help() for help on available commands&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;wls:/offline&gt; es = encrypt('testpwd')&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;wls:/offline&gt; print es&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;{3DES}9HWsf87pJTw=&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;wls:/offline&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;When running WLST from a location different than the domain folder you can pass in an argument to specify the domain directory. Once you have the encrypted value, the configuration files can be modified to include this encrypte value instead of clear text passwords. These features will make your domain to operate when resetting the encrypted passwords on a Production domain's configuration XML files. These methods not only can be used to encrypt configuration XML (config.xml) but also the JDBC or JMS descriptor XML files.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1160221863863331437-7321770123411843013?l=weblogicserver.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://weblogicserver.blogspot.com/feeds/7321770123411843013/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://weblogicserver.blogspot.com/2008/10/how-to-encrypt-clear-text-password-with.html#comment-form' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1160221863863331437/posts/default/7321770123411843013'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1160221863863331437/posts/default/7321770123411843013'/><link rel='alternate' type='text/html' href='http://weblogicserver.blogspot.com/2008/10/how-to-encrypt-clear-text-password-with.html' title='How To Encrypt Clear Text Passwords With WebLogic Server'/><author><name>Bala Kothandaraman</name><uri>http://www.blogger.com/profile/04536459985006004271</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp1.blogger.com/_i4Ubs4VYKUM/RmmunEEazmI/AAAAAAAAAAM/HPNOLwuH4YE/s400/Bala_P1.jpg'/></author><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1160221863863331437.post-8770916889173021587</id><published>2008-09-24T22:26:00.000-07:00</published><updated>2010-07-01T09:49:14.252-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Security'/><category scheme='http://www.blogger.com/atom/ns#' term='Scripts'/><category scheme='http://www.blogger.com/atom/ns#' term='Tips and Tricks'/><category scheme='http://www.blogger.com/atom/ns#' term='WLST'/><title type='text'>Encrypt the credentials when running WLST in interactive or script mode</title><content type='html'>One of the common request I hear from administrators is that they want to get away from providing user name and password in plain text when using WLST. WebLogic Server provides a way to encrypt the credentials for server start up. You can create a password file "&lt;span style="font-family: courier new;"&gt;boot.properties&lt;/span&gt;" (called as Boot Identity File) with plain text credentials in a folder named security under the server root directory. This file will be automatically detected during the server start up and the server will encrypt the information in this file for subsequent use. Until WebLogic Server 9.x this file should be placed under the DOMAIN folder. So servers sharing the same file system share the same boot identity file and cannot be configured to use different files.&lt;br /&gt;&lt;br /&gt;This boot identity file can also be used by WLST only when started from the domain folder. This is mainly because the domain's password key (&lt;span style="font-family: courier new;"&gt;SerializedSystemIni.dat&lt;/span&gt;) is used to encrypt this file. If you are using WLST from a different location or from a remote machine to connect to the server or if you want to run WLST script you can use a different technique. You can use WLST to generate a User Configuration file which will have encrypted user name and password using storeUserConfig() command. A key file that will be used to encrypt the data will also get generated along with the user config file. The key file is important as it is required to decrypt the values back from the user config file. This is an online WLST command. So you should be connected to a running WebLogic Server or a Node Manager to issue this command.&lt;br /&gt;&lt;br /&gt;When you use this command with no arguments the user configuration file for the current user will be generated within the current OS user's home folder.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;wls:/testdomain/serverConfig&gt;storeUserConfig()&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;You can also specify the location and name for the key file and the userconfig file if you want them to be created elsewhere.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;wls:/testdomain/serverConfig&gt;storeUserConfig('/usr/home/user1/configfile.secure', '/usr/home/user1/keyfile.secure')&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;If the files are stored with the default name (osusername-WebLogicConfig.properties &amp;amp; osusername-WebLogicKey.properties) you can simply connect without specifying the username and password in the connect() command.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;wls:/offline&gt; connect(url='t3://host:port')&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;If the files are stored in a different location or with a different name, then they can be passed as an argument to the connect() command.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;wls:/offline&gt; connect(userConfigFile='/usr/home/user1/configfile.secure', userKeyFile='/usr/home/user1/keyfile.secure', url='t3://host:port')&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;No more plain text user name and password in when using WLST. &lt;span style="font-weight: bold; font-style: italic;"&gt;Have a safe and secure scripting!&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1160221863863331437-8770916889173021587?l=weblogicserver.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://weblogicserver.blogspot.com/feeds/8770916889173021587/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://weblogicserver.blogspot.com/2008/09/encrypt-credentials-when-running-wlst.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1160221863863331437/posts/default/8770916889173021587'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1160221863863331437/posts/default/8770916889173021587'/><link rel='alternate' type='text/html' href='http://weblogicserver.blogspot.com/2008/09/encrypt-credentials-when-running-wlst.html' title='Encrypt the credentials when running WLST in interactive or script mode'/><author><name>Bala Kothandaraman</name><uri>http://www.blogger.com/profile/04536459985006004271</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp1.blogger.com/_i4Ubs4VYKUM/RmmunEEazmI/AAAAAAAAAAM/HPNOLwuH4YE/s400/Bala_P1.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1160221863863331437.post-1494206195865293137</id><published>2008-09-05T08:00:00.000-07:00</published><updated>2010-01-08T15:48:28.846-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Production Mode'/><title type='text'>New differences between development domain and production domain in 10gR3</title><content type='html'>During domain creation you can specify the start up mode for your domain either as development mode of production mode. Most of you who work with WebLogic Server for the past few releases should know that there are few differences between a development domain and production domain. (&lt;a href="http://e-docs.bea.com/common/docs103/confgwiz/newdom.html#wp1097267"&gt;http://e-docs.bea.com/common/docs103/confgwiz/newdom.html#wp1097267&lt;/a&gt;) &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Development Mode&lt;/b&gt;&lt;br /&gt;The default JDK for development domain is Sun Hotspot&lt;br /&gt;You can use the demo certificates for SSL&lt;br /&gt;Auto deployment is enabled&lt;br /&gt;Server instances rotate their log files on startup&lt;br /&gt;Admin Server uses an automatically created boot.properties during startup&lt;br /&gt;The default maximum capacity for JDBC Datasource is 15&lt;br /&gt;The debugFlag which is used to start the WebLogic Workshop Debugger is enabled&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Production Mode&lt;/b&gt;&lt;br /&gt;The default JDK for production domain is JRockit&lt;br /&gt;If you use the demo certificates for SSL a warning is displayed&lt;br /&gt;Auto deployment is disabled&lt;br /&gt;Server instances rotate their log files when it reaches 5MB&lt;br /&gt;Admin Server prompts for username and password during startup&lt;br /&gt;The default maximum capacity for JDBC Datasource is 25&lt;br /&gt;The debugFlag which is used to start the WebLogic Workshop Debugger is disabled&lt;br /&gt;&lt;br /&gt;In addition to the above WebLogic Server 10gR3 adds a few more default configurations depending on whether the domain is started in development or production mode.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The domain configuration locking feature is only enabled for production domains - &lt;a href="http://e-docs.bea.com/wls/docs103/notes/new.html#wp1088380"&gt;http://e-docs.bea.com/wls/docs103/notes/new.html#wp1088380&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Confirmation prompts for operations are enabled only for production domains - &lt;a href="http://e-docs.bea.com/wls/docs103/notes/new.html#wp1088380"&gt;http://e-docs.bea.com/wls/docs103/notes/new.html#wp1088380&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Fast Track deployments are not recommended for production domains - &lt;a href="http://e-docs.bea.com/wls/docs103/quickstart/quick_start.html"&gt;http://e-docs.bea.com/wls/docs103/quickstart/quick_start.html&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1160221863863331437-1494206195865293137?l=weblogicserver.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://weblogicserver.blogspot.com/feeds/1494206195865293137/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://weblogicserver.blogspot.com/2008/09/differences-between-development-domain.html#comment-form' title='14 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1160221863863331437/posts/default/1494206195865293137'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1160221863863331437/posts/default/1494206195865293137'/><link rel='alternate' type='text/html' href='http://weblogicserver.blogspot.com/2008/09/differences-between-development-domain.html' title='New differences between development domain and production domain in 10gR3'/><author><name>Bala Kothandaraman</name><uri>http://www.blogger.com/profile/04536459985006004271</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp1.blogger.com/_i4Ubs4VYKUM/RmmunEEazmI/AAAAAAAAAAM/HPNOLwuH4YE/s400/Bala_P1.jpg'/></author><thr:total>14</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1160221863863331437.post-8979706138571023608</id><published>2008-08-28T20:07:00.000-07:00</published><updated>2010-07-01T09:49:14.252-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Scripts'/><category scheme='http://www.blogger.com/atom/ns#' term='Tips and Tricks'/><category scheme='http://www.blogger.com/atom/ns#' term='WLST'/><title type='text'>Add your own commands to WLST</title><content type='html'>Do you want to add your own commands to the already rich set of WLST commands?&lt;br /&gt;&lt;br /&gt;You can do so by building your own *.py file and adding them to &lt;span style="font-family:courier new;"&gt;WL_HOME/common/wlst/lib&lt;/span&gt; folder. Any *.py file added to this folder will be automatically compiled and imported by WLST when started on that machine. So the custom commands built as definitions inside these modules can be used by calling them on the respective module names.&lt;br /&gt;&lt;br /&gt;If you have a TestLib.py stored under &lt;span style="font-family:courier new;"&gt;WL_HOME/common/wlst/lib &lt;/span&gt;folder:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;TestLib.py&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;----------&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;def testCmd():&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    print 'This is a test command'&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;And if there is a definition called testCmd() defined in it then you can call it as follows:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;wls:/offline&gt;TestLib.testCmd()&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;What you waiting for? Go and add you command to WLST now.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1160221863863331437-8979706138571023608?l=weblogicserver.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://weblogicserver.blogspot.com/feeds/8979706138571023608/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://weblogicserver.blogspot.com/2008/08/add-your-own-commands-to-wlst.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1160221863863331437/posts/default/8979706138571023608'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1160221863863331437/posts/default/8979706138571023608'/><link rel='alternate' type='text/html' href='http://weblogicserver.blogspot.com/2008/08/add-your-own-commands-to-wlst.html' title='Add your own commands to WLST'/><author><name>Bala Kothandaraman</name><uri>http://www.blogger.com/profile/04536459985006004271</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp1.blogger.com/_i4Ubs4VYKUM/RmmunEEazmI/AAAAAAAAAAM/HPNOLwuH4YE/s400/Bala_P1.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1160221863863331437.post-6876176827591689867</id><published>2008-08-25T17:31:00.000-07:00</published><updated>2010-01-08T15:49:11.788-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Security'/><title type='text'>Finally Embedded LDAP dependency is gone!</title><content type='html'>WebLogic Security Realm is a collection of configuration that protects a WebLogic Domain, its application and resources. Until WebLogic Server 10.3 the default store (Security Provider Database) used for security configuration such as users, groups, roles, policies etc. is the Embedded LDAP Server. But many customers want to externalize these information from WebLogic's Embedded LDAP Server. Different options are available only to externalize the authentication information to an external LDAP server, RDBMS etc. But still other information like authorization information, role mapping etc. stayed within the Embedded LDAP server. &lt;br /&gt;&lt;br /&gt;With WebLogic Server 10.3 now you can choose to use an external RDBMS as a security provider database to store all security provider information. This removes the dependency of Embedded LDAP server. The other options is to build custom security providers which can use properties file as security provider database. Now you can build a WebLogic domain with no dependency to bundled Embedded LDAP server.&lt;br /&gt;&lt;br /&gt;See &lt;a href="http://edocs.bea.com/wls/docs103/secintro/realm_chap.html#wp1033627"&gt;http://edocs.bea.com/wls/docs103/secintro/realm_chap.html#wp1033627&lt;/a&gt; for more info on how to configure a RDBMS based security provider database. One of the key thing to note is that the tables should be manually created using the appropriate *.sql file available from BEA_HOME/wlserver_10.3/server/lib directory. The domain's security provider database can be based on RDBMS when you create the domain using Configuration Wizard or later using Administration Console. Also the default Authentication Provider that comes with the default security realm - myrealm is Embedded LDAP based. So if you want to completely avoid the dependency with Embedded LDAP server then after the domain is created you have to create an Authentication provider that will use an external user repository (RDBMS, external LDAP etc.)&lt;br /&gt;&lt;br /&gt;You can configure a domain to use RDBMS based security provider database during the domain creation using Domain Configuration Wizard.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_i4Ubs4VYKUM/SLRZY1cq5UI/AAAAAAAAAho/BU8b1AMb7As/s1600-h/RDBMSSecProvDB1.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_i4Ubs4VYKUM/SLRZY1cq5UI/AAAAAAAAAho/BU8b1AMb7As/s320/RDBMSSecProvDB1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5238910549737792834" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;But make sure that the tables are created before starting the Administration server according to the *.sql files provided with WebLogic installation.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_i4Ubs4VYKUM/SLRZbXiPWbI/AAAAAAAAAhw/KrQ75nJB0FA/s1600-h/RDBMSSecProvDB2.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_i4Ubs4VYKUM/SLRZbXiPWbI/AAAAAAAAAhw/KrQ75nJB0FA/s320/RDBMSSecProvDB2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5238910593247697330" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_i4Ubs4VYKUM/SLRZbhxe5nI/AAAAAAAAAh4/ktCDkhfFJek/s1600-h/RDBMSSecProvDB3.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_i4Ubs4VYKUM/SLRZbhxe5nI/AAAAAAAAAh4/ktCDkhfFJek/s320/RDBMSSecProvDB3.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5238910595995985522" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;If you created the domain with the default configuration (Embedded LDAP server as the security provider database) then you can change the domain configuration later to use RDBMS based security provider database.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_i4Ubs4VYKUM/SLRZcOJD-NI/AAAAAAAAAiA/7MjISS08j3E/s1600-h/RDBMSSecProvDB4.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_i4Ubs4VYKUM/SLRZcOJD-NI/AAAAAAAAAiA/7MjISS08j3E/s320/RDBMSSecProvDB4.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5238910607906044114" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Will meet you all with more exciting new features from Oracle WebLogic Server 10gR3!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1160221863863331437-6876176827591689867?l=weblogicserver.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://weblogicserver.blogspot.com/feeds/6876176827591689867/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://weblogicserver.blogspot.com/2008/08/finally-embedded-ldap-dependency-is.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1160221863863331437/posts/default/6876176827591689867'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1160221863863331437/posts/default/6876176827591689867'/><link rel='alternate' type='text/html' href='http://weblogicserver.blogspot.com/2008/08/finally-embedded-ldap-dependency-is.html' title='Finally Embedded LDAP dependency is gone!'/><author><name>Bala Kothandaraman</name><uri>http://www.blogger.com/profile/04536459985006004271</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp1.blogger.com/_i4Ubs4VYKUM/RmmunEEazmI/AAAAAAAAAAM/HPNOLwuH4YE/s400/Bala_P1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_i4Ubs4VYKUM/SLRZY1cq5UI/AAAAAAAAAho/BU8b1AMb7As/s72-c/RDBMSSecProvDB1.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1160221863863331437.post-3669391522486420850</id><published>2008-08-15T20:58:00.000-07:00</published><updated>2010-01-08T15:49:42.866-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Installation'/><title type='text'>New Flexible WebLogic 10gR3 Installer</title><content type='html'>Before installing WebLogic Server 10.3 you can now customize and select various components you want to install. I already wrote about this in my other post on WebLogic Server 10.3 Tech Preview. But here is the updated screens shot from the GA release which is now called as Oracle WebLogic Server 10gR3.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_i4Ubs4VYKUM/SKZQvqbosII/AAAAAAAAAf0/WDlA3aEdsxs/s1600-h/WLS103Installer1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_i4Ubs4VYKUM/SKZQvqbosII/AAAAAAAAAf0/WDlA3aEdsxs/s320/WLS103Installer1.jpg" alt="" id="BLOGGER_PHOTO_ID_5234960396639056002" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The new cool feature that customers will really benefit from is the information about the approximate install size of these different products and components so that you can reduce your server installation footprint.&lt;br /&gt;&lt;br /&gt;Also now you can choose which JVM you need to install from the default JVMs that Oracle ships with WebLogic Server 10gR3 (Hotspot and JRockit). In addition if you already have local JDK you can select that during installation.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_i4Ubs4VYKUM/SKZQvxefJoI/AAAAAAAAAf8/OJC_QkJrcLs/s1600-h/WLS103Installer2.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_i4Ubs4VYKUM/SKZQvxefJoI/AAAAAAAAAf8/OJC_QkJrcLs/s320/WLS103Installer2.jpg" alt="" id="BLOGGER_PHOTO_ID_5234960398530061954" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Along the same line you can choose to install Eclipse or use an existing Eclipse installation for Workshop.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_i4Ubs4VYKUM/SKZQv90W31I/AAAAAAAAAgE/6WlIuNNHF2M/s1600-h/WLS103Installer3.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_i4Ubs4VYKUM/SKZQv90W31I/AAAAAAAAAgE/6WlIuNNHF2M/s320/WLS103Installer3.jpg" alt="" id="BLOGGER_PHOTO_ID_5234960401843019602" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1160221863863331437-3669391522486420850?l=weblogicserver.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://weblogicserver.blogspot.com/feeds/3669391522486420850/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://weblogicserver.blogspot.com/2008/08/flexible-installer.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1160221863863331437/posts/default/3669391522486420850'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1160221863863331437/posts/default/3669391522486420850'/><link rel='alternate' type='text/html' href='http://weblogicserver.blogspot.com/2008/08/flexible-installer.html' title='New Flexible WebLogic 10gR3 Installer'/><author><name>Bala Kothandaraman</name><uri>http://www.blogger.com/profile/04536459985006004271</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp1.blogger.com/_i4Ubs4VYKUM/RmmunEEazmI/AAAAAAAAAAM/HPNOLwuH4YE/s400/Bala_P1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_i4Ubs4VYKUM/SKZQvqbosII/AAAAAAAAAf0/WDlA3aEdsxs/s72-c/WLS103Installer1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1160221863863331437.post-4767625829026481</id><published>2008-08-15T20:35:00.000-07:00</published><updated>2010-01-08T15:50:12.325-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><title type='text'>Free Workshop Eclipse Plug-in</title><content type='html'>In addition to the standard IDE - JDeveloper, Oracle is also providing Eclipse tools (plug-ins) for WebLogic Server 10gR3. Oracle made it really simple for developers by making them as a single install. Also the Workshop Eclipse Plug-ins are now free - Yes! Oracle removed the licensing on them with the new WebLogic Server 10gR3.&lt;br /&gt;&lt;br /&gt;Go here to download Workshop for WebLogic 10gR3 - &lt;a href="http://www.oracle.com/technology/software/products/ias/bea_main.html#devtools"&gt;http://www.oracle.com/technology/software/products/ias/bea_main.html#devtools&lt;/a&gt;&lt;br /&gt;Workshop is now a one-stop-shop for building Java EE components and Web Service components for not just WebLogic Server but for a variety of different application servers. Yes, Workshop for WebLogic will be freely available on all supported platforms, including websphere, weblogic, tomcat, jboss, jetty and resin. But Adobe Flex Builder bundle has been removed from the Workshop for WebLogic bundle.&lt;br /&gt;&lt;br /&gt;Now Workshop can be used for building Struts, Spring, Tiles, Hibernate, JPA and many more Java components to run on a variety of different web containers. Try now!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1160221863863331437-4767625829026481?l=weblogicserver.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://weblogicserver.blogspot.com/feeds/4767625829026481/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://weblogicserver.blogspot.com/2008/08/free-workshop-eclipse-plug-in.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1160221863863331437/posts/default/4767625829026481'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1160221863863331437/posts/default/4767625829026481'/><link rel='alternate' type='text/html' href='http://weblogicserver.blogspot.com/2008/08/free-workshop-eclipse-plug-in.html' title='Free Workshop Eclipse Plug-in'/><author><name>Bala Kothandaraman</name><uri>http://www.blogger.com/profile/04536459985006004271</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp1.blogger.com/_i4Ubs4VYKUM/RmmunEEazmI/AAAAAAAAAAM/HPNOLwuH4YE/s400/Bala_P1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1160221863863331437.post-7542650390927171691</id><published>2008-07-28T16:22:00.001-07:00</published><updated>2010-01-08T15:51:09.725-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Announcements'/><category scheme='http://www.blogger.com/atom/ns#' term='Milestones'/><title type='text'>Oracle WebLogic Server !!!</title><content type='html'>If you are following the news BEA is now Oracle and so Oracle WebLogic Server. Go the Oracle website and click on the Application Server area, you will find out that  WebLog ic found its spot there. Click to go there - &lt;a href="http://www.oracle.com/appserver/index.html"&gt;http://www.oracle.com/appserver/index.html&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;One of the key information you find on the above website is a 90 minute web-cast that explains Oracle's Middleware Strategy or go directly here - &lt;a href="http://www.oracle.com/webapps/events/EventsDetail.jsp?p_eventId=81641"&gt;http://www.oracle.com/webapps/events/EventsDetail.jsp?p_eventId=81641&lt;/a&gt;. Oracle President, Charles Phillip and SVP, Thomas Kurian talks about the companies strategy in general and the future of Fusion Middleware products and BEA products. If you are interested in BEA products OR in Oracle middleware products this presentation will be worth you time.&lt;br /&gt;&lt;br /&gt;I will soon come up more more information about some exciting features of WebLogic Server 10.3.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1160221863863331437-7542650390927171691?l=weblogicserver.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://weblogicserver.blogspot.com/feeds/7542650390927171691/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://weblogicserver.blogspot.com/2008/07/oracle-weblogic-server.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1160221863863331437/posts/default/7542650390927171691'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1160221863863331437/posts/default/7542650390927171691'/><link rel='alternate' type='text/html' href='http://weblogicserver.blogspot.com/2008/07/oracle-weblogic-server.html' title='Oracle WebLogic Server !!!'/><author><name>Bala Kothandaraman</name><uri>http://www.blogger.com/profile/04536459985006004271</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp1.blogger.com/_i4Ubs4VYKUM/RmmunEEazmI/AAAAAAAAAAM/HPNOLwuH4YE/s400/Bala_P1.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1160221863863331437.post-5050047695332446342</id><published>2008-06-25T14:20:00.000-07:00</published><updated>2010-01-08T15:51:45.627-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Announcements'/><category scheme='http://www.blogger.com/atom/ns#' term='Milestones'/><title type='text'>WebLogic Server 10.3 Tech Preview</title><content type='html'>I am so excited about the new features of WebLogic Server 10.3 which is in Tech Preview right now. So I thought I would share some of the cool features coming...&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;In development Admin Console is deployed on demand the very first time someone access it. This will save memory and will speed up the development servers startup.&lt;/li&gt;&lt;li&gt;Admin Console is now internally tuned for better response time.&lt;/li&gt;&lt;li&gt;Light Weight Installer- Fine grained installer to reduce the footprint of the installation.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_i4Ubs4VYKUM/SGLAxhHLX2I/AAAAAAAAAfU/3vRz3PSpGpQ/s1600-h/installer.gif"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_i4Ubs4VYKUM/SGLAxhHLX2I/AAAAAAAAAfU/3vRz3PSpGpQ/s400/installer.gif" alt="" id="BLOGGER_PHOTO_ID_5215943275383054178" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Light Weight Runtime - If you are not using EJB, JMS, JCA you can disable those services to start WLS in a light weight mode.&lt;/li&gt;&lt;li&gt;On Demand Internal Application Deployment - UDDI Explorer, Console, WS Test Client and their runtime can be be deployed on demand. This will also reduce the server's footprint when you are not using them.&lt;/li&gt;&lt;li&gt;WLS 10.3 is shipping with JDK 6.&lt;/li&gt;&lt;li&gt;Web 2.0 is now supported for building rich internet applications.&lt;/li&gt;&lt;li&gt;Support for C# client with JMS will let .NET applications directly access JMS in WLS 10.3&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;and much more...&lt;br /&gt;&lt;br /&gt;See &lt;a href="http://e-docs.bea.com/wls/essex/TechPreview/pdf/feature_overview.pdf"&gt;http://e-docs.bea.com/wls/essex/TechPreview/pdf/feature_overview.pdf&lt;/a&gt; for more info.&lt;br /&gt;&lt;br /&gt;Try &lt;a href="http://commerce.bea.com/showproduct.jsp?family=WLS&amp;amp;major=10.3Tech&amp;amp;minor=-1"&gt;WLS 10.3 TP&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.linkedin.com/in/balmu"&gt;&lt;img src="http://www.linkedin.com/img/webpromo/btn_myprofile_160x33.gif" alt="View Balamurali Kothandaraman's profile on LinkedIn" border="0" height="33" width="160" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1160221863863331437-5050047695332446342?l=weblogicserver.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://weblogicserver.blogspot.com/feeds/5050047695332446342/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://weblogicserver.blogspot.com/2008/06/weblogic-server-103-tech-preview.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1160221863863331437/posts/default/5050047695332446342'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1160221863863331437/posts/default/5050047695332446342'/><link rel='alternate' type='text/html' href='http://weblogicserver.blogspot.com/2008/06/weblogic-server-103-tech-preview.html' title='WebLogic Server 10.3 Tech Preview'/><author><name>Bala Kothandaraman</name><uri>http://www.blogger.com/profile/04536459985006004271</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp1.blogger.com/_i4Ubs4VYKUM/RmmunEEazmI/AAAAAAAAAAM/HPNOLwuH4YE/s400/Bala_P1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_i4Ubs4VYKUM/SGLAxhHLX2I/AAAAAAAAAfU/3vRz3PSpGpQ/s72-c/installer.gif' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1160221863863331437.post-6480065972459957813</id><published>2008-04-18T06:12:00.000-07:00</published><updated>2010-04-23T08:45:27.402-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Security'/><category scheme='http://www.blogger.com/atom/ns#' term='Tips and Tricks'/><title type='text'>Audit WebLogic Server domain for configuration changes</title><content type='html'>In a typical WebLogic shop with more than one administrator managing the WebLogic domain(s) there is possibility that these admins can make changes without one others knowledge (at different times). To have an audit of all the configuration changes the "Configuration Audit Type" of the domain should be set. You can create the audit log entries in the administration server's server log by setting it to "Change Log" or "Change Audit" will forward it to the security audit log or "Change Log and Audit" will send it to both these logs.&lt;br /&gt;&lt;br /&gt;See &lt;a href="http://download.oracle.com/docs/cd/E12840_01/wls/docs103/ConsoleHelp/taskhelp/logging/EnableConfigurationAuditing.html"&gt;this section of edocs&lt;/a&gt; for more info on how to change this value.&lt;br /&gt;&lt;br /&gt;I believe this is one of the hidden secrets in WLS. You can also audit any changes that were made and not activated but released in the audit log entries. Another main use of this feature could be to watch the security changes like who is adding new users, groups etc. The actual security audit provider only audit events like AUTHENTICATION, USERLOCKOUT etc.&lt;br /&gt;&lt;br /&gt;Here are some sample configuration audit entries when I create a user called 'test' and added the user to the 'Administrator' group (other entries from the log file are removed for clarity):&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;####&amp;lt;Apr 1, 2008 5:12:07 PM EDT&amp;gt; &amp;lt;Info&amp;gt; &amp;lt;Configuration Audit&amp;gt; &amp;lt;BALA02&amp;gt; &amp;lt;AdminServer&amp;gt;&lt;br /&gt;&amp;lt;[ACTIVE] ExecuteThread: '3' for queue: 'weblogic.kernel.Default (self-tuning)'&amp;gt;&lt;br /&gt;&amp;lt;weblogic&amp;gt; &amp;lt;&amp;gt; &amp;lt;&amp;gt; &amp;lt;1207084327610&amp;gt; &amp;lt;BEA-159907&amp;gt;&lt;br /&gt;&amp;lt;USER weblogic INVOKED ON Security:Name=myrealmDefaultAuthenticator METHOD listMemberGroups PARAMS test&amp;gt;&lt;br /&gt;&lt;br /&gt;####&amp;lt;Apr 1, 2008 5:12:07 PM EDT&amp;gt; &amp;lt;Info&amp;gt; &amp;lt;Configuration Audit&amp;gt; &amp;lt;BALA02&amp;gt; &amp;lt;AdminServer&amp;gt;&lt;br /&gt;&amp;lt;[ACTIVE] ExecuteThread: '3' for queue: 'weblogic.kernel.Default (self-tuning)'&amp;gt;&lt;br /&gt;&amp;lt;weblogic&amp;gt; &amp;lt;&amp;gt; &amp;lt;&amp;gt; &amp;lt;1207084327626&amp;gt; &amp;lt;BEA-159907&amp;gt;&lt;br /&gt;&amp;lt;USER weblogic INVOKED ON Security:Name=myrealmDefaultAuthenticator METHOD addMemberToGroup PARAMS Administrators; test&amp;gt;&lt;br /&gt;&lt;br /&gt;####&amp;lt;Apr 1, 2008 4:59:48 PM EDT&amp;gt; &amp;lt;Info&amp;gt; &amp;lt;Configuration Audit&amp;gt; &amp;lt;BALA02&amp;gt; &amp;lt;AdminServer&amp;gt;&lt;br /&gt;&amp;lt;[ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)'&amp;gt;&lt;br /&gt;&amp;lt;weblogic&amp;gt; &amp;lt;&amp;gt; &amp;lt;&amp;gt; &amp;lt;1207083588603&amp;gt;&amp;lt;BEA-159907&amp;gt;&lt;br /&gt;&amp;lt;USER weblogic INVOKED ON Security:Name=myealmDefaultAuthenticator METHOD createUser PARAMS test; ****; &amp;gt;&lt;br /&gt;&lt;br /&gt;As WebLogic doesn't have the concept of super admin, all the administrators are treated the same. So when you have more than one administrative user managing a domain, the configuration audit feature will help you find out which admin did what.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.linkedin.com/in/balmu"&gt;&lt;img src="http://www.linkedin.com/img/webpromo/btn_myprofile_160x33.gif" alt="View Balamurali Kothandaraman's profile on LinkedIn" border="0" height="33" width="160" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1160221863863331437-6480065972459957813?l=weblogicserver.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://weblogicserver.blogspot.com/feeds/6480065972459957813/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://weblogicserver.blogspot.com/2008/04/audit-weblogic-server-domain-for.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1160221863863331437/posts/default/6480065972459957813'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1160221863863331437/posts/default/6480065972459957813'/><link rel='alternate' type='text/html' href='http://weblogicserver.blogspot.com/2008/04/audit-weblogic-server-domain-for.html' title='Audit WebLogic Server domain for configuration changes'/><author><name>Bala Kothandaraman</name><uri>http://www.blogger.com/profile/04536459985006004271</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp1.blogger.com/_i4Ubs4VYKUM/RmmunEEazmI/AAAAAAAAAAM/HPNOLwuH4YE/s400/Bala_P1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1160221863863331437.post-9073549047354565559</id><published>2008-03-17T11:54:00.000-07:00</published><updated>2010-01-08T15:52:58.436-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Management'/><category scheme='http://www.blogger.com/atom/ns#' term='Monitoring'/><title type='text'>Would you like to have a view of WebLogic Server instances from a control tower ?!</title><content type='html'>If you have enterprise-wide management systems in place and are looking a way to integrate WebLogic Server instances then WebLogic Server SNMP is your option. You can use Simple Network Management Protocol (SNMP) to provide monitoring data from your WebLogic Server instances to your enterprise-wide management systems.&lt;br /&gt;&lt;br /&gt;SNMP set of standards provides a framework for the definition of management information along with a protocol for the exchange of that information. The SNMP model assumes the existence of managers and agents. A manager is a software module responsible for managing part or all of the configuration on behalf of network management applications and users. An agent is a software module in a managed device responsible for maintaining local management information and delivering that information to a manager via SNMP. A management information exchange can be initiated by the manager (via polling) or by the agent (via a trap). Agents function as collection devices that gather and send data about the managed resource in response to a request from a manager.&lt;br /&gt;&lt;br /&gt;WebLogic supports SNMP for a long time starting from version 5.1. WebLogic SNMP enables you to move towards a single management console and thus provide integrated systems management of WebLogic Server based applications. Also WebLogic SNMP enables you to connect WebLogic Server to popular management systems such as HP OpenView, IBM Tivoli, MRTG, and Sun SunNet Manager. This makes managing WebLogic Server more effective by providing a whole-system perspective instead of piecemeal solutions.&lt;br /&gt;&lt;br /&gt;In WebLogic Server Version 10.x SNMP implementation went through a lot of changes. Some of the important changes are:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;WebLogic Server SNMP implementation now supports SNMPv3 with SNMPv1 and SNMPv2. SNMPv3 provides additional security compared to prior versions.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Previously only one SNMP agent per domain which runs on the Administration Server now you can create multiple agents on different servers. This removes the dependency with Administration Servers.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Now custome MBeans can be monitored using SNMP in addition to standard WLS MBeans.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;The old command-line utilities are not deprecated and a new command-line utility is introduced - weblogic.diagnostics.snmp.cmdline.Manager&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;SNMP agents in WLS can now use TCP port in addition to UDP Port which was the only option in the previous versions. And many of the configuration changes in SNMP are now dynamic which doesn't require start.&lt;/li&gt;&lt;/ul&gt;For more information read the edocs - &lt;a href="http://edocs.bea.com/wls/docs100/snmpman/snmpagent.html"&gt;http://edocs.bea.com/wls/docs100/snmpman/snmpagent.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;With more and more system and server administrator coming to the paradigm of administering application servers and enterprise applications, this will provide them a way to integrate WebLogic with enterprise level monitoring solutions.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.linkedin.com/in/balmu" &gt;&lt;img src="http://www.linkedin.com/img/webpromo/btn_myprofile_160x33.gif" width="160" height="33" border="0" alt="View Balamurali Kothandaraman's profile on LinkedIn"&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1160221863863331437-9073549047354565559?l=weblogicserver.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://weblogicserver.blogspot.com/feeds/9073549047354565559/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://weblogicserver.blogspot.com/2008/03/would-you-like-to-have-view-of-weblogic.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1160221863863331437/posts/default/9073549047354565559'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1160221863863331437/posts/default/9073549047354565559'/><link rel='alternate' type='text/html' href='http://weblogicserver.blogspot.com/2008/03/would-you-like-to-have-view-of-weblogic.html' title='Would you like to have a view of WebLogic Server instances from a control tower ?!'/><author><name>Bala Kothandaraman</name><uri>http://www.blogger.com/profile/04536459985006004271</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp1.blogger.com/_i4Ubs4VYKUM/RmmunEEazmI/AAAAAAAAAAM/HPNOLwuH4YE/s400/Bala_P1.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1160221863863331437.post-1891366139375757680</id><published>2007-12-18T12:02:00.000-08:00</published><updated>2010-01-08T15:53:22.621-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JMS'/><category scheme='http://www.blogger.com/atom/ns#' term='Tips and Tricks'/><title type='text'>Does your WLS File Store grow in size?</title><content type='html'>JMS Server in WLS only removes the messages that are expired once in every expiration scan interval (A JMS Server level config). The destination may have expired message sitting in them if the expiration scan interval property is set to a high value. For ex. 1800 will cause the JMS Server to scan for expired messages once in 30 mins. Still applications cannot receive the expired messages - they will be sitting in the destination. But it doesn’t automatically do any compaction per se. So the file size of the WLS File Store may keep increasing. This might cause slow startup of the server.&lt;br /&gt;&lt;br /&gt;You can perform manual offline compaction in the following ways:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;There is a Java command-line utility that can do this trick "weblogic.store.Admin". See&lt;a href="http://e-docs.bea.com/wls/docs92/config_wls/store.html#wp1150124"&gt; Edocs &lt;/a&gt;for more info.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;A WLST command called "compactstore" can also do the same trick. See &lt;a href="http://e-docs.bea.com/wls/docs92/config_wls/store.html#wp1150623"&gt;Edocs &lt;/a&gt;for more info.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Note that this compaction is supported only for WLS File Stores and not for JDBC Stores as they don't suffer with the same issue of compaction.&lt;br /&gt;&lt;br /&gt;The Java command-line utility "weblogic.store.Admin can also be used to dump the contents of a store into an XML file for troubleshooting purpose.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.linkedin.com/in/balmu" &gt;&lt;img src="http://www.linkedin.com/img/webpromo/btn_myprofile_160x33.gif" width="160" height="33" border="0" alt="View Balamurali Kothandaraman's profile on LinkedIn"&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1160221863863331437-1891366139375757680?l=weblogicserver.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://weblogicserver.blogspot.com/feeds/1891366139375757680/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://weblogicserver.blogspot.com/2007/12/does-your-wls-file-store-grow-in-size.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1160221863863331437/posts/default/1891366139375757680'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1160221863863331437/posts/default/1891366139375757680'/><link rel='alternate' type='text/html' href='http://weblogicserver.blogspot.com/2007/12/does-your-wls-file-store-grow-in-size.html' title='Does your WLS File Store grow in size?'/><author><name>Bala Kothandaraman</name><uri>http://www.blogger.com/profile/04536459985006004271</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp1.blogger.com/_i4Ubs4VYKUM/RmmunEEazmI/AAAAAAAAAAM/HPNOLwuH4YE/s400/Bala_P1.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1160221863863331437.post-2292206031426722163</id><published>2007-11-09T09:04:00.000-08:00</published><updated>2010-01-08T15:54:08.093-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Security'/><category scheme='http://www.blogger.com/atom/ns#' term='Tips and Tricks'/><category scheme='http://www.blogger.com/atom/ns#' term='WebLogic Console'/><title type='text'>Play Hide &amp; Seek with Administration Console</title><content type='html'>Everyone who work with WLS knows that the Administration Console is the light weight web based UI provided by BEA for configuring, monitoring and managing a WLS domain. Automation and Scripting can be done in many ways. See &lt;a href="http://weblogicserver.blogspot.com/2007/07/scripting-automation.html"&gt;this post for more info&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Exposing the console in your production environment might be security issue. In those cases you can either disable the console or hide it. Needless to say if you disable the console then your only option is to depend on command-line and scripting tools for any other administration activity or to even enable the console back. But hiding will provide a level or security.&lt;br /&gt;&lt;br /&gt;To disable the console:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;In the admin console navigate to &lt;domain&gt; --&gt; General --&gt; Advanced Options --&gt; Console Enabled. De-select that option to disable console (restart required).&lt;br /&gt;&lt;/domain&gt;&lt;/li&gt;&lt;/ul&gt;To hide the cosole:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Enable the administration port on the domain so that console can only be accessed on the 2-way secured admin port. This will force all the clients to have valid certificate installed in their client (browser) to access the console.&lt;/li&gt;&lt;li&gt;In the admin console navigate to &lt;domain&gt; --&gt; General --&gt; Advanced Options --&gt; Console Context Path and change the context-path of the console to something unique and only known to the administrators.&lt;/domain&gt;&lt;/li&gt;&lt;/ul&gt;All is fine. But one of the common question is how can I enable the console once I disable them. Like I said earlier you have to rely on the scripting tool to enable the admin console once it is disabled. You either perform this action interactively or by running a WLST script. See the following sample WLST script for more info:&lt;br /&gt;&lt;pre&gt;&lt;code   style=";font-family:courier;font-size:10pt;"&gt;connect(&lt;span style="font-style: italic;"&gt;"&lt;/span&gt;&lt;code style="font-family: courier; font-style: italic;"&gt;username&lt;/code&gt;",&lt;span style="font-style: italic;"&gt;"&lt;/span&gt;&lt;code style="font-family: courier; font-style: italic;"&gt;password&lt;/code&gt;")&lt;br /&gt;edit()&lt;br /&gt;startEdit()&lt;br /&gt;cmo.setConsoleEnabled(true)&lt;br /&gt;save()&lt;br /&gt;activate()&lt;br /&gt;&lt;a name="1123291"&gt;&lt;/a&gt;disconnect()&lt;br /&gt;exit()&lt;/code&gt;&lt;/pre&gt;You have to restart the administration server to get the console back. Have fun playing hide and seek with the console!&lt;br /&gt;&lt;br /&gt;In WLS 10.3 with the Light Weight Server Installer, you can choose not to install WLS Admin Console when you install WLS. Along with the other installation options, this provides a way to reduce the server installation footprint and runtime memory footprint. Can't wait to play with WLS 10.3, you can now download the Tech Preview at  &lt;a href="http://commerce.bea.com/showproduct.jsp?family=WLS&amp;amp;major=10.3Tech&amp;amp;minor=-1"&gt;http://commerce.bea.com/showproduct.jsp?family=WLS&amp;amp;major=10.3Tech&amp;amp;minor=-1&lt;/a&gt;&lt;br /&gt;(as of Nov 9, 2007 WLS 10.3 is only a Tech Preview Release). I will write more on the WLS 10.3 release which is build on BEA microService Architecture (mSA) soon. Read more about BEA mSA here &lt;a href="http://www.bea.com/framework.jsp?CNT=msa.jsp&amp;amp;FP=/content/"&gt;http://www.bea.com/framework.jsp?CNT=msa.jsp&amp;amp;FP=/content/.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.linkedin.com/in/balmu" &gt;&lt;img src="http://www.linkedin.com/img/webpromo/btn_myprofile_160x33.gif" width="160" height="33" border="0" alt="View Balamurali Kothandaraman's profile on LinkedIn"&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1160221863863331437-2292206031426722163?l=weblogicserver.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://weblogicserver.blogspot.com/feeds/2292206031426722163/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://weblogicserver.blogspot.com/2007/11/administration-console.html#comment-form' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1160221863863331437/posts/default/2292206031426722163'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1160221863863331437/posts/default/2292206031426722163'/><link rel='alternate' type='text/html' href='http://weblogicserver.blogspot.com/2007/11/administration-console.html' title='Play Hide &amp; Seek with Administration Console'/><author><name>Bala Kothandaraman</name><uri>http://www.blogger.com/profile/04536459985006004271</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp1.blogger.com/_i4Ubs4VYKUM/RmmunEEazmI/AAAAAAAAAAM/HPNOLwuH4YE/s400/Bala_P1.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1160221863863331437.post-4483132377810909361</id><published>2007-11-02T05:35:00.000-07:00</published><updated>2010-01-08T15:55:18.143-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='High Availability'/><category scheme='http://www.blogger.com/atom/ns#' term='Management'/><title type='text'>Is my Administration Server single point of failure?</title><content type='html'>The answer is No and Yes. Read on for more specific info....&lt;br /&gt;&lt;br /&gt;WebLogic domain consists of Servers, Machines, Clusters, Applications and Configurations related to them. Administration sever is the controlling instance for the domain. It is the keeper of all the configuration. Ideally you don't want to host (target) any application or service that clients would access on the admin instance. Managed server(s) or cluster(s) are meant to host such applications and services that clients would access (servers other than admin server in a domain are called as managed servers).&lt;br /&gt;&lt;br /&gt;Having said that, if an admin instance fails during the middle of the day what happens to my domain? It is the controlling instance so will it halt my domain? The answer is NO. Admin server will provide all the configurations to each managed server and they will be cached locally. There are limited dependency between the servers during runtime. So an admin server failure will not affect the running managed server(s) or cluster of managed server(s).&lt;br /&gt;&lt;br /&gt;Alright, what about the "Yes" part of the above answer?! There are few services you will lose when an admin instance is not available. You cannot introduce any new configuration or change any existing configuration in the domain. Examples are: you cannot deploy new applications, you cannot change the JNDI name of a JMS destination hosted on one or more servers etc. You will also lose the domain log entries in the Domain Log file maintained by the administration server. Still you can use the Server Log maintained on each managed server for auditing or troubleshooting purpose. Also lastly the managed server(s) in the absence of admin server can only be started or restarted in Independence Mode (using the previously cached local configuration information).&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;You are not expected to introduce new configuration or change any configuration on the fly in your production setup so losing the ability to do this will have literally no or little impact.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;You can use server log file entries for auditing and troubleshooting purposes.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The managed server can be restarted or started if required during the absence of admin server using Independence Mode (which is a default setup now in WLS 10.x - no extra configuration required). &lt;/li&gt;&lt;/ul&gt;Admin server (for that matter any server in the domain) can be configured to automatically get restarted in case of failures using a feature called - whole server migration. I will talk about this in a later discussion.&lt;br /&gt;&lt;br /&gt;So now you know why I said "No" and "Yes"! huh!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.linkedin.com/in/balmu" &gt;&lt;img src="http://www.linkedin.com/img/webpromo/btn_myprofile_160x33.gif" width="160" height="33" border="0" alt="View Balamurali Kothandaraman's profile on LinkedIn"&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1160221863863331437-4483132377810909361?l=weblogicserver.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://weblogicserver.blogspot.com/feeds/4483132377810909361/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://weblogicserver.blogspot.com/2007/11/is-my-administration-server-single.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1160221863863331437/posts/default/4483132377810909361'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1160221863863331437/posts/default/4483132377810909361'/><link rel='alternate' type='text/html' href='http://weblogicserver.blogspot.com/2007/11/is-my-administration-server-single.html' title='Is my Administration Server single point of failure?'/><author><name>Bala Kothandaraman</name><uri>http://www.blogger.com/profile/04536459985006004271</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp1.blogger.com/_i4Ubs4VYKUM/RmmunEEazmI/AAAAAAAAAAM/HPNOLwuH4YE/s400/Bala_P1.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1160221863863331437.post-7212079371158703212</id><published>2007-09-18T16:24:00.000-07:00</published><updated>2010-01-08T15:56:10.542-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='High Availability'/><category scheme='http://www.blogger.com/atom/ns#' term='Management'/><title type='text'>Managed Server Independence Mode</title><content type='html'>Starting from version 7 WebLogic managed servers can be started in the absence of an administration server. The feature that will enable a managed server to come up in the absence of administration server (MSI mode) is enabled by default. But some of the files required for MSI mode are only sent to the managed server only when another option (MSI file replication enabled) is ON.&lt;br /&gt;&lt;br /&gt;This feature is same in version 8 except that the config.xml being copied and cached in the managed server is stored as msi-config.xml.&lt;br /&gt;&lt;br /&gt;In version 9 the feature is still the same except that the complete config directory that contains the configuration file is copied by default to the managed servers. But some other files like the security (*.dat) file is not copied until the MSI file replication enabled option is ON.&lt;br /&gt;&lt;br /&gt;Version 10 alleviate all the pains by making MSI mode and MSI file replication as a default option. So out of the box a managed server is enabled to run in independence mode. And all the files required to start a managed server by itself (/config dir and *.dat file) will be automatically copied to the managed server during startup and will be synced (automatically) with the master copy (in Admin Server).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.linkedin.com/in/balmu" &gt;&lt;img src="http://www.linkedin.com/img/webpromo/btn_myprofile_160x33.gif" width="160" height="33" border="0" alt="View Balamurali Kothandaraman's profile on LinkedIn"&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1160221863863331437-7212079371158703212?l=weblogicserver.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://weblogicserver.blogspot.com/feeds/7212079371158703212/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://weblogicserver.blogspot.com/2007/09/managed-server-independence-mode.html#comment-form' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1160221863863331437/posts/default/7212079371158703212'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1160221863863331437/posts/default/7212079371158703212'/><link rel='alternate' type='text/html' href='http://weblogicserver.blogspot.com/2007/09/managed-server-independence-mode.html' title='Managed Server Independence Mode'/><author><name>Bala Kothandaraman</name><uri>http://www.blogger.com/profile/04536459985006004271</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp1.blogger.com/_i4Ubs4VYKUM/RmmunEEazmI/AAAAAAAAAAM/HPNOLwuH4YE/s400/Bala_P1.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1160221863863331437.post-3990837682273246922</id><published>2007-07-17T07:20:00.000-07:00</published><updated>2010-07-01T09:49:14.253-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Scripts'/><category scheme='http://www.blogger.com/atom/ns#' term='Tips and Tricks'/><category scheme='http://www.blogger.com/atom/ns#' term='WLST'/><title type='text'>Scripting &amp; Automation</title><content type='html'>Administrators always love scripting solutions. Because it is reusable and it can be executed by anyone. However it is not so easy to learn any scripting solution per se. A good example is UNIX shell scripting, where you must know the commands to build a scripting solution. But once you get ramped up it very simple to build a script.&lt;br /&gt;&lt;br /&gt;WebLogic Server(WLS) provides many ways for an administrator to script different configuration and management tasks. Needless to say if the administrators are also Java developers they can use the management API used by WLS (JMX) for building such scripting solutions. If you are not a developer you don't have to panic you have other alternates that you can use.&lt;br /&gt;&lt;br /&gt;If you are in WLS 8.1 or lower you can use anyone of the following solutions for scripting&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Weblogic.Admin utility&lt;/li&gt;&lt;li&gt;WebLogic Ant tasks&lt;/li&gt;&lt;li&gt;WebLogic Scripting Tool (WLST)&lt;/li&gt;&lt;li&gt;Thirt-party solutions (WLShell etc.)&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;If you are in WLS 9.x or higher you still have all the above options but the Weblogic.Admin utility is deprecated and WLST is the recommended solution. But Weblogic.Admin is still for backward compatibility reasons.&lt;br /&gt;&lt;br /&gt;But one of the challenge is for the administrator to ramp up on such scripting solutions provided by different vendors. WLS 10 solve that problem by providing a management plug-in to the light weight web-based UI (Administration Console) - WLST Script Generator. Using this you can record all your console interactions (Configurations) into a reusable WLST Script. It is like a little macro recorder that will solve your problem or ramping up on WLST if you are new to it.&lt;br /&gt;&lt;br /&gt;&lt;p&gt;     The Administration Console does     &lt;b&gt;not&lt;/b&gt;     record WLST commands for the following:    &lt;/p&gt;    &lt;ul&gt;&lt;li&gt;      Changes to the security data that is maintained by a      security provider. For example, it doesn't record      the commands if you add or remove users.     &lt;/li&gt;&lt;li&gt;Changes that are made to the application using console which will end up in deployment plans.&lt;/li&gt;&lt;li&gt;      Runtime operations that you perform on Control or Monitoring pages,       such as starting servers, suspending a JDBC Connection Pool etc.&lt;/li&gt;&lt;/ul&gt;To read more about &lt;a href="http://edocs.bea.com/wls/docs100/config_scripting/using_WLST.html"&gt;WLST go here&lt;/a&gt;.&lt;br /&gt;To read more about recording WLST Scripts &lt;a href="http://e-docs.bea.com/wls/docs100/ConsoleHelp/taskhelp/console/RecordWLSTScripts.html"&gt;go here.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I shall share more tips on WLST in my later posts.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.linkedin.com/in/balmu" &gt;&lt;img src="http://www.linkedin.com/img/webpromo/btn_myprofile_160x33.gif" width="160" height="33" border="0" alt="View Balamurali Kothandaraman's profile on LinkedIn"&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1160221863863331437-3990837682273246922?l=weblogicserver.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://weblogicserver.blogspot.com/feeds/3990837682273246922/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://weblogicserver.blogspot.com/2007/07/scripting-automation.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1160221863863331437/posts/default/3990837682273246922'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1160221863863331437/posts/default/3990837682273246922'/><link rel='alternate' type='text/html' href='http://weblogicserver.blogspot.com/2007/07/scripting-automation.html' title='Scripting &amp; Automation'/><author><name>Bala Kothandaraman</name><uri>http://www.blogger.com/profile/04536459985006004271</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp1.blogger.com/_i4Ubs4VYKUM/RmmunEEazmI/AAAAAAAAAAM/HPNOLwuH4YE/s400/Bala_P1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1160221863863331437.post-1904667446101216655</id><published>2007-06-20T07:58:00.000-07:00</published><updated>2010-01-08T15:57:16.054-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Management'/><category scheme='http://www.blogger.com/atom/ns#' term='SNMP'/><category scheme='http://www.blogger.com/atom/ns#' term='Monitoring'/><title type='text'>Whats the deal with SNMPv1, v2 and v3</title><content type='html'>Here are some of the questions I got from someone few days ago. See my answers inline.&lt;br /&gt;&lt;br /&gt;Q: The WLS SNMP agent supports 2 trap versions: V1, V2 and V3.  What's the difference between these 3 versions?&lt;br /&gt;&lt;br /&gt;[A] SNMPv1 and SNMPv2 are the two version of SNMP implementation. Until WLS 9.x only SNMPv1 and SNMPv2 are supported. Now we have SNMPv3 implemented in WLS 10. Both SNMPv1 and SNMPv2 use community strings to authenticate the packets as SNMP uses UDP (a broadcast protocol). The community string is sent in plain-text in every single SNMPv1 or SNMPv2 packet and the agent uses it to decide to process the packet or discard it. The main difference between SNMPv1 and SNMPv2 is that SNMPv2 added a few more packet types like the GETBULK PDU which enable you to request a large number of GET or GETNEXT in one packet.&lt;br /&gt;&lt;br /&gt;SNMPv3 was designed to address the weak V1/V2 security. SNMPv3 is based on SNMPv2 (same packet types), but the main difference is that it is a lot more secure. It does not use community strings but users with passwords and SNMPv3 packets can be authenticated. For more info about SNMP Security from our edocs &lt;a href="http://edocs.bea.com/wls/docs100/snmpman/snmpagent.html#wp1085037"&gt;Security for SNMP&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Q: The SNMP architecture diagram demonstrates that you can poll MBean attribute values from Managed Servers. However, the SNMP commands such as SNMPWALK and SNMPGET don't allow you to specify the addresses and/or names of the Managed Servers that you'd like to poll. How can I tell which Managed Server(s) to poll?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;[A] SNMP architecture until WLS 9.x doesn’t allow you to create multiple agents in a WLS domain. The agent implementation was only available in the administration server of the domain. The managed servers will be communicated by the agent when a SNMP manager talks to the SNMP agent running on the administration server. So if you want to get MBean attribute value from a managed server in a domain you must differentiate it using the OID. So you will still point your SNMPWALK and SNMPGET to the admin host and agent port. If you are not sure about the complete OIDs of the managed objects on the WebLogic managed servers you can use snmpwalk to get the root OID of the managed object (or) the attribute by suffixing the managed server's name to the community prefix.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.linkedin.com/in/balmu" &gt;&lt;img src="http://www.linkedin.com/img/webpromo/btn_myprofile_160x33.gif" width="160" height="33" border="0" alt="View Balamurali Kothandaraman's profile on LinkedIn"&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1160221863863331437-1904667446101216655?l=weblogicserver.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://weblogicserver.blogspot.com/feeds/1904667446101216655/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://weblogicserver.blogspot.com/2007/06/whats-deal-with-snmpv1-v2-and-v3.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1160221863863331437/posts/default/1904667446101216655'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1160221863863331437/posts/default/1904667446101216655'/><link rel='alternate' type='text/html' href='http://weblogicserver.blogspot.com/2007/06/whats-deal-with-snmpv1-v2-and-v3.html' title='Whats the deal with SNMPv1, v2 and v3'/><author><name>Bala Kothandaraman</name><uri>http://www.blogger.com/profile/04536459985006004271</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp1.blogger.com/_i4Ubs4VYKUM/RmmunEEazmI/AAAAAAAAAAM/HPNOLwuH4YE/s400/Bala_P1.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1160221863863331437.post-8323689735470809911</id><published>2007-06-15T21:48:00.000-07:00</published><updated>2010-01-08T15:57:34.526-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Security'/><category scheme='http://www.blogger.com/atom/ns#' term='Tips and Tricks'/><title type='text'>A common (and tricky) security question</title><content type='html'>One common question people always ask me is "If I forget my administrator password how can I reset it". It was simple during WebLogic Server 6.1 days where the password was stored in a plain text file - filerealm.properties. When they released version 7.0 of WebLogic Server(WLS), the security architecture went through a complete overhaul. They introduced a file based Embedded LDAP server for storing security related information in the domain.&lt;br /&gt;&lt;br /&gt;First there are few recommendations that I want to share with you:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Create a backup admin user and keep it safe so that you can use that admin user in such disaster scenario. Make sure you keep that info in a safe place.&lt;/li&gt;&lt;li&gt;Take periodical back ups of your domain's embedded LDAP directory on the admin  server machine(&lt;domiain&gt;/Servers/AdminServer/data/ldap/).&lt;/domiain&gt;&lt;/li&gt;&lt;li&gt;Take periodical back ups of the individual providers in  you real using WebLogic Server security import/export feature. (For more info see &lt;a href="http://e-docs.bea.com/wls/docs100/ConsoleHelp/taskhelp/security/ExportDataFromSecurityProviders.html"&gt;Export data from a security provider &lt;/a&gt;from edocs)&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;Following are some of the ways in which you can answer the above question:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;If you are in development, one option is you can simply recreate the domain from the existing domain by creating a Domain Template using Domain Template Builder. That way you don't loose any configuration that you did in the original domain but any security changes you made will be lost.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;If you have already created User Config file set for the admin user, run a JMX Script to change the admin user password using that User Config file set. Obviously you might want to recreate the User Config file set after you change the password. If you have no User Config file set created for the admin user then follow one of the following steps.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Delete the ldap sub-directory under the adminserver folder and restart the adminserver(Obiviously make a backup before you delete). It will automatically rebuild the ldap from the *.ldift files in the domain directory (created when the domain was created Ex. DefaultAuthenticatorInit.ldift). This will work if you changed the admin password after creating the domain and you forgot/loose the new password but still remember the old password which you created when you created the domain (Strange use case ! huh). When using this method you will loose all the existing users and groups in the ldap so you might want to export the users and groups before you delete the ldap and import them back later. But this can be performed only if you still have access to the console or some pre written backup scripts which are using encrypted username and password in the form of user config file.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;If you don't remember the Adminstrator password at all (Original or Changed) and if you are ready to loose all the user and groups (if not backed up using export feature) in the existing ldap then delete the ldap sub-directory under the adminserver folder (Don't forget to create a backup). Edit the file 'DefaultAuthenticatorInit.ldift' in a text editor and locate the line 'dn: uid=adminusername,ou=people,ou=@realm@, dc=@domain@' (Obiviously make a backup before you edit). Edit the value for the attribute 'userpassword' to a known plain text value. Restart the admin server using the new credentials. The domain will recreate the ldap with the new admin username and password. If you have already exported the old users and groups import them back.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;What if you haven't backed up any users or groups and you also don't want to loose them. But still you want to recover the lost administration user password. In such scenario to recover the administrator password in a WebLogic domain, provided the default Admin role is not modified/removed perform the following:&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;ul&gt;&lt;ul&gt;&lt;li&gt;At the command line, change directory to the domain and run the setEnv script to set the PATH and CLASSPATH.&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;ul&gt;&lt;ul&gt;&lt;li&gt;Create a new DefaultAuthenticatorInit.ldift: run java weblogic.security.utils.AdminAccount tempadminusername temppassword ./&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Remove the initialized status file, DefaultAuthenticatormyrealmInit.initialized from the Domain/AdminServer/ldap subdirectory.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Restart the server, using the new user identity.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;To change the old admin user identity, log into the admin console or JMX Scripts. (Optional)&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Delete and recreate the domain (Yuck!). I dont think you would ever end up doing this unless you change the default Admin role or his permissions. This is highly unlikely situation.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.linkedin.com/in/balmu" &gt;&lt;img src="http://www.linkedin.com/img/webpromo/btn_myprofile_160x33.gif" width="160" height="33" border="0" alt="View Balamurali Kothandaraman's profile on LinkedIn"&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1160221863863331437-8323689735470809911?l=weblogicserver.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://weblogicserver.blogspot.com/feeds/8323689735470809911/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://weblogicserver.blogspot.com/2007/06/common-and-tricky-security-question.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1160221863863331437/posts/default/8323689735470809911'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1160221863863331437/posts/default/8323689735470809911'/><link rel='alternate' type='text/html' href='http://weblogicserver.blogspot.com/2007/06/common-and-tricky-security-question.html' title='A common (and tricky) security question'/><author><name>Bala Kothandaraman</name><uri>http://www.blogger.com/profile/04536459985006004271</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp1.blogger.com/_i4Ubs4VYKUM/RmmunEEazmI/AAAAAAAAAAM/HPNOLwuH4YE/s400/Bala_P1.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1160221863863331437.post-96613776586312743</id><published>2007-06-07T10:53:00.000-07:00</published><updated>2010-01-08T15:59:15.515-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Introduction'/><title type='text'>To be or not to be technical</title><content type='html'>I was thinking to start a technical blog for a long time and I kept on deferring it. By the way who am I and why am I starting this blog?!&lt;br /&gt;&lt;br /&gt;My name is Balamurali Kothandarman and I go by the name of "Bala". I am a Delivery Technologist Sr. working with BEA Education Services in USA. My primary job function is to deliver training to our customers in various Technologies and Products. I see a lot of customers every week in my trainings. Many times I receive a follow up question from somone who took a training with me. The question may either be from the course material we use for the training or from a general product and technology stand point. Either way I see a lot of repeating questions. So I decided to do this blogging where not only customer who attend our trainings but also other who are interested can participate and collaborate in this blog regarding WebLogic Server and realated technologies.&lt;br /&gt;&lt;br /&gt;I also have an oppurtunity to do blogging @ &lt;a href="http://dev2dev.bea.com/"&gt;http://dev2dev.bea.com&lt;/a&gt; which is pretty good technical website from BEA. But I want to keep my blog more unofficial so here I am.&lt;br /&gt;&lt;br /&gt;Feel free to collaborate or ask your questions regarding BEA products or technologies. I shall address them to the best of my knowledge. If I can't address a question directly, I shall get help from my co-workers who are an excellent team.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.linkedin.com/in/balmu" &gt;&lt;img src="http://www.linkedin.com/img/webpromo/btn_viewmy_160x25.gif" width="160" height="25" border="0" alt="View Balamurali Kothandaraman's profile on LinkedIn"&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1160221863863331437-96613776586312743?l=weblogicserver.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://weblogicserver.blogspot.com/feeds/96613776586312743/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://weblogicserver.blogspot.com/2007/06/to-be-or-not-to-be-technical.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1160221863863331437/posts/default/96613776586312743'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1160221863863331437/posts/default/96613776586312743'/><link rel='alternate' type='text/html' href='http://weblogicserver.blogspot.com/2007/06/to-be-or-not-to-be-technical.html' title='To be or not to be technical'/><author><name>Bala Kothandaraman</name><uri>http://www.blogger.com/profile/04536459985006004271</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp1.blogger.com/_i4Ubs4VYKUM/RmmunEEazmI/AAAAAAAAAAM/HPNOLwuH4YE/s400/Bala_P1.jpg'/></author><thr:total>3</thr:total></entry></feed>
