转到正文

宁静海

发现,理解,提升

1、目前的QTP常用版本为10,增强组建已经附带在DVD中。

2、Add-IN和Add-IN SDK是两个不同的概念,Add-IN提供特别语言的支持,Add-IN SDK提供可自定义组建映射的开发。

3、安装Add-IN SDK的路径在DVD光盘的 X:\Add-in Extensibility SDKs\ 目录下。可按需求单独安装。

4、Add-IN SDK需要用VS开发,支持的VS版本为VS2003、VS2005、VS2008。VS2010会提示不支持,无法继续安装。

5、关于VS2008集成后,新建项目无法找到QuickTestCustomServer,这是由于VS2008多语言版本造成的,参考。该参考的源头无法考证,英语版本的部分是来自于SDK的开发文档的安装部分(大概29页的样子)。而非英语版本的插件安装方式可能参考了其他类似插见的解决方案。

具体解决方案:

VS的项目模板根据语言不同,将由于模板的安装默认会安装入英文版本的语言目录。

C:\Program Files\Microsoft Virtual Studio 9.0\Common7\IDE\ProjectTemplates\CSharp\Windows\1033\QuickTestCustomServerVB.zip

在这里1033是语言编号,是Windows规范,称为Local ID。中文就是2052,所以我们要做的就是把1033中的插件拷贝进2052中,并重新注册。

C:\Program Files\Microsoft Virtual Studio 9.0\Common7\IDE\ProjectTemplates\CSharp\Windows\2052\QuickTestCustomServerVB.zip

注意,如果是VB语言扩展,需要拷贝

C:\Program Files\Microsoft Virtual Studio 9.0\Common7\IDE\ProjectTemplates\VisualBasic\Windows\1033\QuickTestCustomServerVB.zip

C:\Program Files\Microsoft Virtual Studio 9.0\Common7\IDE\ProjectTemplates\VisualBasic\Windows\2052\QuickTestCustomServerVB.zip

光拷贝是不够的,VS中还是不会显示,需要进行模板的载入。

直接执行

C:\Program Files\Microsoft Virtual Studio 9.0\Common7\IDE

该Sample为用JMS直接访问MQ的简单例子,其中牵涉3个最基本的JMS模型,Producer/Consumer/Browser,因为在该Sample中Browser作用更像是个Monitor,所以类名使用的是Monitor。

注意一点,该Sample连接方式使用的是Bind方式,该方式将会自动连接本地的MQ服务器,如果改成Client,除非连接远程客户机,并且有正确的用户设置方式,不然即使host写成本地IP,依然会抛 2035 (MQRC_NOT_AUTHORIZED) 错误。

Prducer

 

package jms.direct;

import javax.jms.Connection;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageProducer;
import javax.jms.Queue;
import javax.jms.Session;

import com.ibm.msg.client.jms.JmsConnectionFactory;
import com.ibm.msg.client.jms.JmsFactoryFactory;
import com.ibm.msg.client.wmq.WMQConstants;

public class JMSProducer {
	
	private String MQ_HOST = "localhost";
	private int MQ_PORT = 1416;
	private String MQ_CHANNEL = "";
	private String MQ_QUEUEMANAGER_NAME = "MW_QM";
	private String MQ_QUEUE_NAME = "MW_QUEUE";

	private JmsFactoryFactory jff = null;
	private JmsConnectionFactory jcf = null;
	private Connection connection = null;
	private Session session = null;
	private Queue queue = null;
	private MessageProducer producer = null;
	private Message msg = null;

	public JMSProducer() {
		try {
			// Create a connection factory
			jff = JmsFactoryFactory.getInstance(WMQConstants.WMQ_PROVIDER);
			jcf = jff.createConnectionFactory();
			// Set the properties
//			jcf.setStringProperty(WMQConstants.WMQ_HOST_NAME, MQ_HOST);
//			jcf.setIntProperty(WMQConstants.WMQ_PORT, MQ_PORT);
//			jcf.setStringProperty(WMQConstants.WMQ_CHANNEL, MQ_CHANNEL);
//			jcf.setStringProperty(WMQConstants.USERID, "");
//			jcf.setStringProperty(WMQConstants.PASSWORD, "");
//			jcf.setIntProperty(WMQConstants.WMQ_CONNECTION_MODE, WMQConstants.WMQ_CM_CLIENT);
			jcf.setIntProperty(WMQConstants.WMQ_CONNECTION_MODE, WMQConstants.WMQ_CM_BINDINGS);
			jcf.setStringProperty(WMQConstants.WMQ_QUEUE_MANAGER, MQ_QUEUEMANAGER_NAME);

			// Create JMS objects
			connection = jcf.createConnection();
			session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);

			queue = session.createQueue(MQ_QUEUE_NAME);
			producer = session.createProducer(queue);
			
			connection.start();
		} catch (JMSException e) {
			e.printStackTrace();
		}
	}
	
	public void sendMsg(String msgStr, String msgId) {
		try {
			msg = session.createMessage();
			msg.setStringProperty("STRMSG", msgStr);
			msg.setJMSCorrelationID(msgId);
			producer.send(msg);
		} catch (JMSException e) {
			e.printStackTrace();
		}
		System.out.println("-------------");
		System.out.println("Message send complete!");
		System.out.println("MessageId: " + msgId);
		System.out.println("Message: " + msgStr);
	}
	
	public void close() throws JMSException {
		producer.close();
		session.close();
		connection.close();
    }

	public static void main(String[] args) {
		try {
			System.out.println("Starting ...");
			JMSProducer producer = new JMSProducer();
			producer.sendMsg("Hello1", "000000001");
			producer.sendMsg("Hello2", "000000002");
			producer.sendMsg("Hello3", "000000003");
			producer.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}

 

Consumer

 

package jms.direct;

import javax.jms.Connection;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.Queue;
import javax.jms.Session;

import com.ibm.msg.client.jms.JmsConnectionFactory;
import com.ibm.msg.client.jms.JmsFactoryFactory;
import com.ibm.msg.client.wmq.WMQConstants;

public class JMSConsumer {
	private String MQ_QUEUEMANAGER_NAME = "MW_QM";
	private String MQ_QUEUE_NAME = "MW_QUEUE";

	private JmsFactoryFactory jff = null;
	private JmsConnectionFactory jcf = null;
	private Connection connection = null;
	private Session session = null;
	private Queue queue = null;
	private MessageConsumer consumer = null;
	private Message msg = null;

	public JMSConsumer() {
		try {
			// Create a connection factory
			jff = JmsFactoryFactory.getInstance(WMQConstants.WMQ_PROVIDER);
			jcf = jff.createConnectionFactory();
			// Set the properties
			jcf.setIntProperty(WMQConstants.WMQ_CONNECTION_MODE, WMQConstants.WMQ_CM_BINDINGS);
			jcf.setStringProperty(WMQConstants.WMQ_QUEUE_MANAGER, MQ_QUEUEMANAGER_NAME);

			// Create JMS objects
			connection = jcf.createConnection();
			session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);

			queue = session.createQueue(MQ_QUEUE_NAME);
			consumer = session.createConsumer(queue);
			
			connection.start();
		} catch (JMSException e) {
			e.printStackTrace();
		}
	}
	
	public void consume() {
		try {
			msg = consumer.receive();
			
			String msgId = msg.getJMSCorrelationID();
			String msgStr = msg.getStringProperty("STRMSG");
			
			System.out.println("-------------");
			System.out.println("Message received!");
			System.out.println("MessageId: " + msgId);
			System.out.println("Message: " + msgStr);
		} catch (JMSException e) {
			e.printStackTrace();
		}
	}
	
	public void close() throws JMSException {
		consumer.close();
		session.close();
		connection.close();
    }
	
	public static void main(String[] args) {
		try {
			System.out.println("Receiving ...");
			JMSConsumer receiver = new JMSConsumer();
			receiver.consume();
			receiver.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

 

Browser

 

package jms.direct;

import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;

import javax.jms.Connection;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.Queue;
import javax.jms.QueueBrowser;
import javax.jms.Session;

import com.ibm.msg.client.jms.JmsConnectionFactory;
import com.ibm.msg.client.jms.JmsFactoryFactory;
import com.ibm.msg.client.wmq.WMQConstants;

public class JMSMonitor {
private String MQ_QUEUEMANAGER_NAME = "MW_QM";
private String MQ_QUEUE_NAME = "MW_QUEUE";

private JmsFactoryFactory jff = null;
private JmsConnectionFactory jcf = null;
private Connection connection = null;
private Session session = null;
private Queue queue = null;
private QueueBrowser monitor = null;
private Message msg = null;
private List<string> msgIdList = null;

public void initMsgIdList() {
msgIdList = new ArrayList<string>();
msgIdList.add("000000001");
msgIdList.add("000000002");
msgIdList.add("000000003"); } public JMSMonitor() {
initMsgIdList();
try {
// Create a connection factory
jff = JmsFactoryFactory.getInstance(WMQConstants.WMQ_PROVIDER);
jcf = jff.createConnectionFactory();
// Set the properties
jcf.setIntProperty(WMQConstants.WMQ_CONNECTION_MODE, WMQConstants.WMQ_CM_BINDINGS);
jcf.setStringProperty(WMQConstants.WMQ_QUEUE_MANAGER, MQ_QUEUEMANAGER_NAME);
// Create JMS objects
connection = jcf.createConnection();
session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
queue = session.createQueue(MQ_QUEUE_NAME);
monitor = session.createBrowser(queue);
connection.start();
} catch (JMSException e) {
e.printStackTrace();
}
}

public void startMonitor() {
while (true) {
if (msgIdList.size() > 0) {
try {
Enumeration<message> msgs = monitor.getEnumeration();
List<string> remainMsgIdList = new ArrayList<string>();
while (msgs.hasMoreElements()) {
Message msg = msgs.nextElement();
String msgId = msg.getJMSCorrelationID();
if (msgIdList.contains(msgId)) {
remainMsgIdList.add(msgId);
System.out.println("Message ID [" + msgId + "] found, this message still not be consumed!");
} else if (!msgIdList.contains(msgId)) {
System.out.println("Message ID [" + msgId + "] is not be recorded by the sender yet, just ignnore it.");
}
}
msgIdList = remainMsgIdList;
// All message scan complete.
if (msgIdList.size() > 0) {
System.out.println("------------------------------");
System.out.println("Following Msg not be consumed!");
System.out.println("------------------------------");
for (String msgId : msgIdList) {
System.out.println(msgId);
}
} else {
System.out.println("No message record in the data base.");
// The sample end here, for the list will not be added
// again.
}
} catch (JMSException e) {
e.printStackTrace();
}
}
synchronized (this) {
try {
this.wait(5000);
} catch (InterruptedException ie) {
ie.printStackTrace();
}
}

注意:

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

 

 

Public Function SelectTabByHead(tabControlH, tabHeadStr)
    tabCount = tabControlH.Object.TabPages.Count
    For i = 0 to tabCount - 1
        Set currentTabPage = tabControlH.Object.TabPages.Item(i)
        tabHead = currentTabPage.Text
        If tabHead = tabHeadStr Then
            tabControlH.Object.SelectedTabPageIndex = currentTabPage.TabIndex
        End If
    Next
End Function

 

 

ALTER SEQUENCE SEQ_NAME INCREMENT BY 100;
SELECT SEQ_NAME.NEXTVAL FROM DUAL;
ALTER SEQUENCE SEQ_NAME INCREMENT BY 1;

 

Public Function ClickTreeNode(treeConterH, nodeVal)
colCount = treeConterH.Object.Columns.Count

Dim targetNode
Dim fildName

For i = 0 to colCount - 1
fildName = treeConterH.Object.Columns.Item(i).FieldName
treeConterH.Object.Columns.ColumnByFieldName(fildName).OptionsColumn.AllowEdit = true
treeConterH.Object.Columns.ColumnByFieldName(fildName).OptionsColumn.ReadOnly = false
' MsgBox(fildName)
' MsgBox(nodeVal)
Set targetNode = treeConterH.Object.FindNodeByFieldValue(fildName, nodeVal)
Next
treeConterH.Object.SetFocusedNode targetNode

treeConterH.Object.OptionsBehavior.Editable = true
treeConterH.Object.ShowEditor

'"{X=21,Y=2}"
location = treeConterH.Object.ActiveEditor.Location
location = replace(replace(replace(location, "{X=",""), "Y=", ""), "}", "")
iX = Split(location, ",")(0)
iY = Split(location, ",")(1)

For i = 0 to colCount - 1
treeConterH.Object.Columns.ColumnByFieldName

rpm -q –scripts zsh-3.0.7-4 | nl

backup

10月 6

http://blog.csdn.net/prog_6103/article/details/6373191

find . -name ‘.svn’ -print0 | xargs -0 rm -rf