转到正文

宁静海

发现,理解,提升

存档

标签: scripts

 There are 2 ways to create datasource offline. The reason to create datasource offline, basically because we want to create those datasource durning create new domain. So that we don’t need to boot up domain before create datasource in online mode.

We offen can google the result to create datasource via WLST offline like following.

 

print 'create wlsbjmsrpDataSource'
create('wlsbjmsrpDataSource', 'JDBCSystemResource')
cd('/JDBCSystemResource/wlsbjmsrpDataSource')
set('Target','AdminServer,osb_server1')
 
cd('/JDBCSystemResource/wlsbjmsrpDataSource/JdbcResource/wlsbjmsrpDataSource')
cmo.setName('wlsbjmsrpDataSource')
 
print 'create JDBCDataSourceParams'
cd('/JDBCSystemResource/wlsbjmsrpDataSource/JdbcResource/wlsbjmsrpDataSource')
create('myJdbcDataSourceParams','JDBCDataSourceParams')
cd('JDBCDataSourceParams/NO_NAME_0')
set('JNDIName', java.lang.String('wlsbjmsrpDataSource'))
set('GlobalTransactionsProtocol', java.lang.String('None'))
 
print 'create JDBCDriverParams'
cd('/JDBCSystemResource/wlsbjmsrpDataSource/JdbcResource/wlsbjmsrpDataSource')
create('myJdbcDriverParams','JDBCDriverParams')
cd('JDBCDriverParams/NO_NAME_0')
set('DriverName','oracle.jdbc.OracleDriver')
set('URL','jdbc:oracle:thin:@wintermute:1521:mysid')
set('PasswordEncrypted', 'manager')
set('UseXADataSourceInterface', 'false')
 
print 'create JDBCDriverParams Properties'
create('myProperties','Properties')
cd('Properties/NO_NAME_0')
create('user','Property')
cd('Property')
cd('user')
set('Value', 'scott')
 
print 'create JDBCConnectionPoolParams'
cd('/JDBCSystemResource/wlsbjmsrpDataSource/JdbcResource/wlsbjmsrpDataSource')
create('myJdbcConnectionPoolParams','JDBCConnectionPoolParams')
cd('JDBCConnectionPoolParams/NO_NAME_0')
set('TestTableName','SQL SELECT 1 FROM DUAL')

 

The refference: 

http://theheat.dk/blog/?p=565

But above code sample missing very important part, which would cause problems if you directly copy to use.

Check here:

 

cd('/JDBCSystemResource/wlsbjmsrpDataSource')
set('Target','AdminServer,osb_server1')

 

We know that each of datasource in weblogic require to assign a target, so that the datasource would be working.

But above code would be not working if you want to create datasource directly during using "readTemplate" to load default template to create your domain.

For example:

When you using the codes in first block to create datasource in WLST offline mode. You would write something like this:

 

readTemplate(templateDir)

#codes from first block create datasouce...

writeDomain(domainDir)
exit()

 

But if you using above code to create the datasource. The target cannot be assigned. Not sure the reason. To make it working you need to change as follows:

 

readTemplate(templateDir)

#Codes from block1 to create datasource offline

writeDomain(domainDir)  # This is very important, you need to create domain first

closeTemplate()

readDomain(domainDir)

cd('/JDBCSystemResource/'+dsName)
set('Targets',target)   #Notice, here set is "Targets" not "Target"

 

The basic idea to make it working is to create the datasource on the fly, but set the target after domain generated on the disk.

Of course, you can also create datasource after domain generated. 

But if you still insist on creating everything in one shot.

Try use another WLST function assign.

Refference:

http://docs.oracle.com/cd/E13222_01/wls/docs92/config_scripting/domains.html#wp1013450

 

readTemplate(templateDir)

# create datasource

cd('/')
assign('JDBCSystemResource', dsName, 'Target', target)

writeDomain(domainDir)
closeDomain()

 

Please note, the propertie we set here is "Target" not "Targets".

This artical just for a note for my refference in the future.

注意:

1、Domain创建完毕后,MW_HOME变量在生成的脚本中没有定义,需要手工添加。

2、Datasource脚本需要在服务器启动后才能执行。

3、如果Weblogic需要使用Oracle的OEPE,如果不确定解压后是否配置过,或者改变过安装路径(事实上Weblogic是绿色软件,在Windows下除非要注册到服务,不然不会写入注册表,但是一些固定的路径是必须确定的),务必执行Weblogic安装目录中的configuration.bat,他会设置Weblogic的product信息,而OEPE插件在识别Domain时会通过product信息来确定当前Domain的版本,如果版本与所选择的target runtime不一致,将会导致eclipse中的Weblogic Server配置失败。

———————————————

创建Domain

———————————————

createDomain.bat

 

@echo off

@rem **************************************************************************
@rem Access Setting
@rem **************************************************************************
set WL_USER=catpaw
set WL_PWD=12345678

@rem **************************************************************************
@rem Domain Setting
@rem **************************************************************************
set DOMAIN_NAME=catpaw
set MW_HOME=C:\Dev\JTool\install\wls1035_dev
set WL_HOME=%MW_HOME%\wlserver
set DOMAIN_HOME=%MW_HOME%\domain\%DOMAIN_NAME%
@rem START_MODE stand for 'dev' or 'prod'
set START_MODE=dev

set ADMIN_SERVER=catpaw_admin
set ADMIN_HOST=192.168.1.101
set ADMIN_PORT=7001

@rem **************************************************************************
@rem Creation Script
@rem **************************************************************************
set CREATE_DOMAIN_SCRIPT_NAME=createDomain.py
set DOMAIN_TEMPLATE=%WL_HOME%\common\templates\domains\wls.jar

CALL "%WL_HOME%\server\bin\setWLSEnv.cmd"

@echo *************************************************************************
@echo     Create Domain Name: %DOMAIN_NAME%
@echo *************************************************************************

IF NOT EXIST %CREATE_DOMAIN_SCRIPT_NAME% (
    @echo Cannot locate the create Domain WLST script %CREATE_DOMAIN_SCRIPT_NAME%!
    @goto failStop
)

IF EXIST %DOMAIN_HOME% (
    @rd /S /Q %DOMAIN_HOME%
) ELSE (
    @echo Creating Domain folder %DOMAIN_HOME%...
    @mkdir %DOMAIN_HOME%
)

@java weblogic.WLST %CREATE_DOMAIN_SCRIPT_NAME%
@goto finish

:finish
pause
cmd

:failStop
pause
exit

 

createDomain.py

 

#=======================================================================================
# This script is used to create Weblogic Domain
#=======================================================================================

#=======================================================================================
# Open a domain template.
#=======================================================================================

readTemplate(os.environ['DOMAIN_TEMPLATE'])

#=======================================================================================
# Configure the Admin Server
#=======================================================================================
print "======================================================="
print "Starting Create Domain on your PC"
print "======================================================="
print "DOMAIN_NAME=["+os.environ['DOMAIN_NAME']+"]"
print "WL_HOME=["+os.environ['WL_HOME']+"]"
print "DOMAIN_HOME=["+os.environ['DOMAIN_HOME']+"]"
print "ADMIN_SERVER=["+os.environ['ADMIN_SERVER']+"]"
print "ADMIN_HOST=["+os.environ['ADMIN_HOST']+"]"
print "ADMIN_PORT=["+os.environ['ADMIN_PORT']+"]"

print "WL_USER=["+os.environ['WL_USER']+"]"
print "WL_PWD=["+os.environ['WL_PWD']+"]"

print "======================================================="

cd('Servers/AdminServer')
set('Name', os.environ['ADMIN_SERVER'])
setOption('ServerStartMode',os.environ['START_MODE'])
set('ListenAddress',os.environ['ADMIN_HOST'])
set('ListenPort', int(os.environ['ADMIN_PORT']))

create(os.environ['ADMIN_SERVER'],'SSL')
cd('SSL/' + os.environ['ADMIN_SERVER'])
set('Enabled', 'False')
set('HostNameVerificationIgnored', 'True')

#=======================================================================================
# Configure the Console User
#=======================================================================================
cd('/')
cd('Security/base_domain/User/weblogic')
set('Name', os.environ['WL_USER'])
cmo.setPassword(os.environ['WL_PWD'])

print "Writing Domain...."

writeDomain(os.environ['DOMAIN_HOME'])
closeTemplate()

print "Domain creation complete!"

exit()

 

———————————————

创建DataSource

———————————————

createDatasource.bat

 

@echo off

@rem **************************************************************************
@rem Access Setting
@rem **************************************************************************
set WL_USER=catpaw
set WL_PWD=12345678

@rem **************************************************************************
@rem DB Access Setting
@rem **************************************************************************
set DS_NUM=1

set DS_1_NAME=MyDevDB_101_MASTERART
set DS_1_JNDI_NAME=MyDevDB_101_MASTERART
set DS_1_HOST=192.168.1.101
set DS_1_SERVER_NAME=XE
set DS_1_PORT=1521
set DS_1_URL=jdbc:oracle:thin:@%DS_1_HOST%:%DS_1_PORT%/%DS_1_SERVER_NAME%
set DS_1_DRIVER=oracle.jdbc.OracleDriver
set DS_1_USER='MASTERART'
set DS_1_PWD='12345678'

@rem **************************************************************************
@rem Domain Setting
@rem **************************************************************************
set DOMAIN_NAME=catpaw
set MW_HOME=C:\Dev\JTool\install\wls1035_dev
set WL_HOME=%MW_HOME%\wlserver
set DOMAIN_HOME=%MW_HOME%\domain\%DOMAIN_NAME%
@rem START_MODE stand for 'dev' or 'prod'
set START_MODE=dev

set ADMIN_SERVER=catpaw_admin
set ADMIN_HOST=192.168.1.101
set ADMIN_PORT=7001

set SERVER_T3_URL=t3://%ADMIN_HOST%:%ADMIN_PORT%
set DS_TARGET=Servers/%ADMIN_SERVER%

@rem **************************************************************************
@rem Creation Script
@rem **************************************************************************
set CREATE_DATASOURCE_SCRIPT_NAME=createDataSource.py

CALL "%WL_HOME%\server\bin\setWLSEnv.cmd"

@java weblogic.WLST %CREATE_DATASOURCE_SCRIPT_NAME%
@goto finish

:finish
pause
cmd

:failStop
pause
exit

 

createDatasource.py

 

#=======================================================================================
# This script is used to create DataSource in the Domain
#=======================================================================================
INITIALCAPACITY=1
MAXCAPACITY=30
CAPACITYINCREMENT=1
STATEMENTCACHESIZE=300

connect(os.environ['WL_USER'],os.environ['WL_PWD'],os.environ['SERVER_T3_URL'])
edit()

cd(os.environ['DS_TARGET'])
target=cmo

startEdit()

#=======================================================================================
# Create DataSource
#=======================================================================================
for i in range(1,int(os.environ['DS_NUM'])):
cd('/')
print 'Creating DS:'+os.environ['DS_'+str(i)+'_NAME']
jdbcSR = create(os.environ['DS_'+str(i)+'_NAME'], 'JDBCSystemResource')
theJDBCResource = jdbcSR.getJDBCResource()
theJDBCResource.setName(os.environ['DS_'+str(i)+'_NAME'])
dsParams = theJDBCResource.getJDBCDataSourceParams()
dsParams.addJNDIName(os.environ['DS_'+str(i)+'_JNDI_NAME'])
driverParams = theJDBCResource.getJDBCDriverParams()
driverParams.setUrl(os.environ['DS_'+str(i)+'_URL'])
driverParams.setDriverName(os.environ['DS_'+str(i)+'_DRIVER'])
driverParams.setPassword(os.environ['DS_'+str(i)+'_PWD'])
driverProperties = driverParams.getProperties()
proper = driverProperties.createProperty('user')
proper.setValue(os.environ['DS_'+str(i)+'_USER'])
proper = driverProperties.createProperty('portNumber')
proper.setValue(os.environ['DS_'+str(i)+'_PORT'])
proper = driverProperties.createProperty('serverName')
proper.setValue(os.environ['DS_'+str(i)+'_HOST'])
cd('/JDBCSystemResources/'+os.environ['DS_'+str(i)+'_JNDI_NAME']+'/JDBCResource/'+os.environ['DS_'+str(i)+'_JNDI_NAME']+'/JDBCConnectionPoolParams/'+os.environ['DS_'+str(i)+'_JNDI_NAME'])
cmo.setMaxCapacity(MAXCAPACITY)
cmo.setCapacityIncrement(CAPACITYINCREMENT)
cmo.setStatementCacheSize(STATEMENTCACHESIZE)
cmo.setInitialCapacity(INITIALCAPACITY)
jdbcSR.addTarget(target)

print 'All DataSource added complate!'

save()
act