This ANT target works fast and can be easily integrated in your deployed script.
the reset.xml ANT build file.
<?xml version="1.0" encoding="iso-8859-1"?> <project name="resetAllDatasources" default="resetJDBC"> <target name="resetJDBC"> <property name="admin.User" value="weblogic"/> <property name="admin.Password" value="weblogic1"/> <property name="admin.Url" value="localhost"/> <property name="admin.Port" value="7101"/> <property name="admin.ServerTarget" value="DefaultServer"/> <property name="datasources" value="hrDS,scottDS"/> <wlResetDatasource adminUser="${admin.User}" adminPassword="${admin.Password}" adminUrl="${admin.Url}" adminPort="${admin.Port}" serverTarget="${admin.ServerTarget}" datasourceNames="${datasources}"/> </target> <macrodef name="wlResetDatasource"> <attribute name="adminUser"/> <attribute name="adminPassword"/> <attribute name="adminUrl"/> <attribute name="adminPort"/> <attribute name="serverTarget"/> <attribute name="datasourceNames"/> <sequential> <wlst failonerror="true" debug="true" arguments="@{adminUser} @{adminPassword} @{adminUrl} @{adminPort} @{serverTarget} @{datasourceNames}"> <script> adminUser=sys.argv[0] adminPassword=sys.argv[1] adminUrl="t3://"+sys.argv[2]+":"+sys.argv[3] serverTarget=sys.argv[4] datasourceNames=String(sys.argv[5]).split(",") connect(adminUser,adminPassword,adminUrl) print 'all datasource: '+sys.argv[5] domainRuntime() for datasourceName in datasourceNames: print 'resetting datasource: '+datasourceName cd('/') cd('ServerRuntimes/'+serverTarget+'/JDBCServiceRuntime/'+serverTarget+'/JDBCDataSourceRuntimeMBeans/'+datasourceName) objs = jarray.array([], java.lang.Object) strs = jarray.array([], java.lang.String) invoke('reset', objs, strs) </script> </wlst> </sequential> </macrodef> </project>And the windows bat file to startup the ANT target. I only need a ANT home and the weblogic.jar
set ORACLE_HOME=C:\oracle\MiddlewareJdev11gR1PS1 set ANT_HOME=%ORACLE_HOME%\jdeveloper\ant set PATH=%ANT_HOME%\bin;%PATH% set JAVA_HOME=%ORACLE_HOME%\jdk160_14_R27.6.5-32 set ANT_OPTS=%ANT_OPTS% -XX:MaxPermSize=128m set CLASSPATH=%CLASSPATH%;%ORACLE_HOME%\wlserver_10.3\server\lib\weblogic.jar ant -f reset.xmlI also made a WLST script which automatically finds the managed servers in the connected domains and resets the user created datasources ( I skipped the Soa datasource )
domainRuntime() drs = ObjectName("com.bea:Name=DomainRuntimeService,Type=weblogic.management.mbeanservers.domainruntime.DomainRuntimeServiceMBean"); domainconfig = mbs.getAttribute(drs, "DomainConfiguration"); servers = mbs.getAttribute(domainconfig, "Servers"); for server in servers: serverName = mbs.getAttribute(server,'Name') print 'server: '+serverName if serverName == "AdminServer": print 'server skipped' else: dsBean = ObjectName('com.bea:ServerRuntime='+serverName+',Name='+serverName+',Location='+serverName+',Type=JDBCServiceRuntime') if dsBean is None: print 'not found' else: datasourceObjects = mbs.getAttribute(dsBean, 'JDBCDataSourceRuntimeMBeans') for datasourceObject in datasourceObjects: if datasourceObject is None: print 'datasource not found' else: Name = mbs.getAttribute(datasourceObject,'Name') x = Name.find("SRA",0,3 ) if ( Name.find("SOA",0,3 ) == -1 and Name.find("mds",0,3 ) == -1 and Name.find("EDN",0,3 ) == -1 and Name.find("BAM",0,3 ) == -1 and Name.find("Ora",0,3 ) == -1): mbs.invoke(datasourceObject, 'reset',None,None) print 'reset: '+Name
Edwin, thank for your posts which are always very interesting, unfortunately there must be something on your blog (graphics? scripts?) which make the page painfully slow to scroll.... can you see if removing something makes it faster?
ReplyDeletethanks
Hi Pierre
ReplyDeletethanks, is it now better , I removed 4 things.
Edwin
hi Edwin,
ReplyDeletewe use the MDS to hold some endpoints but is there a way to tell weblogic that the MDS cache needs updating? I had a quick look at MDS Bean properties but there was no isDirty setting or anything like that. Is there an easy way to refresh MDS cache of is it a case of restarting the server?
Regards
Jason
Hi Jason,
ReplyDeletecan you explain in detail what you have done. I know MDS DB supports versioning and I think this mbean notify's everything
thanks
we have WSDLS in our MDS using your ANT script. These WSDLs contain the runtime endpoints to externals services/composites. Now when we would like to permanately change the endpoint, we do this in MDS by "reloading" the WSDL back into MDS using the ANT script. But we sometimes get a problem in that Weblogic has cached the old endpoint and of course this is wrong. So back to the original question, is there an easy way to refresh it or is it done automatically
ReplyDeleteHi Jason,
ReplyDeleteyou can try to deploy a new version of the wsdl in MDS , without using undeploy. This will make a new version. Hope this will work else you can try to promote this version in MDS.
thanks
Edwin, thankU for WLST script. It worked perfectly, can u guide me to some material where i can learn WLST.
ReplyDeleteEdwin,
ReplyDeleteCan you suggest or describe please what may cause a DB object to become invalid within a weblogic server (using SOA/bpel 11g)?
Thanks
Hi,
Deletethe datasource has some open connections and these session stores some state information about the database. this is how the Oracle database works, probably for performance.
thanks
Thanks.
DeleteThere are no other parameters in the datasource to config in order to ovoid that?
Nop.
Deleteit is a datasource with a pool of active connections. this is for performance and bound to a max count of connections. Resetting datasource should be part of your plsql deployment.
thanks
Does the active connection keeps also the DB parameters ?
DeleteFor example if one of the DB parameters was changes(like SDU etc..), will I also have to reset the datasource?
Thanks
Thank Edwin.
ReplyDeleteLast question - what do you mean by Resetting datasource? How can I do it? Delete and create or update the deploymnet?
Hi,
DeleteWhen you go to the datasources in the wls console , then to the control tab , select the datasource and do reset or shutdown.
thanks
Very useful, tyvm. Running this script from Maven. I just had to add a taskdef element with a classpathref and added a classpathref attribute to the wlst element.
ReplyDeleteHi,
ReplyDeleteI am getting below error while running the scripts
resetJDBC:
BUILD FAILED
/home/appldso1/monitoring/restartDS/reset_SOA1.xml:18: The following error occurred while executing this line:
/home/appldso1/monitoring/restartDS/reset_SOA1.xml:30: Problem: failed to create task or type wlst
Cause: The name is undefined.
Action: Check the spelling.
Action: Check that any custom tasks/types have been declared.
Action: Check that any / declarations have taken place.
Please advice.
Thanks
me too
DeleteHi,
ReplyDeleteI am getting below error while running the scripts, can you please advice?
./restartDS.sh
*****************************************************
** Setting up SOA specific environment...
*****************************************************
EXTRA_JAVA_PROPERTIES= -da:org.apache.xmlbeans...
.
LD_LIBRARY_PATH=:/us1001/fmw/12c/soa/lib:/us1001/fmw/12c/wlserver/server/native/linux/x86_64:/us1001/fmw/12c/wlserver/server/native/linux/x86_64/oci920_8
.
.
*****************************************************
** End SOA specific environment setup
*****************************************************
Buildfile: /home/appldso1/monitoring/restartDS/reset_SOA1.xml
resetJDBC:
BUILD FAILED
/home/appldso1/monitoring/restartDS/reset_SOA1.xml:18: The following error occurred while executing this line:
/home/appldso1/monitoring/restartDS/reset_SOA1.xml:30: Problem: failed to create task or type wlst
Cause: The name is undefined.
Action: Check the spelling.
Action: Check that any custom tasks/types have been declared.
Action: Check that any / declarations have taken place.
Total time: 0 seconds
Thanks,