flexlm是什么意思

flexlm是什么意思,第1张

FLEXlm是应用广泛的License管理工具,它以使软件License能够在网上浮动而出名。浮动的License有利于软件的使用和对 License的管理,这使得用户能够高效地使用有效的许可,并使管理者能够控制允许使用它的节点。由于有大约1500厂商使用FLEXle管理 lICENSE,所以CAD系统管理人员极有可能要同时安装和管理来自不同厂商的License或同一厂商多个产品的License文件。可采取以下方法避免产生冲突:

(1)用一个服务器运行一个Lmgrd(License文件的后台管理程序)和多个License文件;

(2)用一个服务器运行多个Lmgrd和License文件;

(3)运用多个服务器节点,每个服务器运行单独的Lmgrd和License文件。

第一种选择主要造用于高版本的Lmgrd,V6之前和FLEXlm,每个Lmgrd只能管理一个License文件;

第二种选择,将使用一台服务器,但需要运行多个Lmgrd第三种选择,必须使用多个License服务器。

一、服务器端设定

1.License文件的设定

在使用FLEXlm进行管理的License文件中一般有SERVER行,它通过SERVER行的hostname和hostID定义License服务器。

SERVER this_host 0050BB0F402 27000

hostname hostID post

2.服务颂丛闷方式的选择

(1)一个服务器运行一个Lmgrd和多个License文件如果多个License文件具有相同的hostID,则可以通过修改hostname进行合并。合并时,首先将多个License文件加到一个文件中,然后修改SERVER行,并且只保留一个SERVER行。对于Windows NT *** 作系统,应在各License的默认位置保存一个合并后的备份,这样每个软件将在其默认位置找到License信息,从而避免了对 LM_LICENSE_FILE的设定;对于UNIX *** 作系统,可以建立一个默认位置到License存放位置和Link。合并后的License文件,就可以使用同一个Lmgrd。

(2)一个服务器运行一个Lmgrd和一个别License文件如果HostID不一样,则这些License服务只能运行于不同的服务器节点上,并且License不能合并。可以选择使用一个服务器运行一个Lmgrd和License文件。

(3)一个服务器运行多个Lmgrd和License文件郑逗如果多个License未进行合并,可以通过在同一台机器上启动多个Lmgrd,每个 Lmgrd管理一个License文件。使用多个Lmgrd管理多个License文件对服务器的性能并没有明显影响。如果License是由不同版本的 FLEXlm产生的,一般是新版本可以管理旧版本的License文件。所以应使用最新的Lmgrd和Vendor daemon。另外,当用一个服务器的多个Lmgrd管理多个License文件时,应该注意任何二个License文件的post都不能一样,并且对于每个License而言,应选用合造的Lmgrd。

二、客户端设定

当使用客户端应用程序时(a Licensedapplication),可以通过在系统的环境变量中设定LM_LICENSE_FILE,使Application能够指向不同服务器上的License文件。如果要使a Licensed application使用不同服务器都有单独的一个License文件),客户端应将需要用到的License文件拷贝到本机目录下,并指定LM_LICENSE_FILE环境变量。UNIX: %setenv LM_LICENSE_FILE lfpath1 : lfpath2 :…… : lfpathN Windows: lfpath1 lfpath2:…… lfpathN LfpathN为第N个License的路径;UNIX下路径间用":"隔开;Windows/NT下路径间使用";"隔开;

这样,每个Licensed aplication在启动时将依次查询LM_LICENSE_FILE中野弯所指定的License文件,并向相应的License服务器申请许可,以使用户能从所列的服务器得到许可。LM_LICENSE_FILE也可以使用各License文件中所指定的"post@hostname"。下面以Windows NT为例介绍多个FLEXlm的安装。

三、同一机器上多个FLEXlm License Server的安装

(1) 以Administrator身分登录;

(2)在C盘建C:\\FLEXlm目录,并拷贝相关文件到其下;

(3)在C:\\FLEXlm下建立欲安装License Server的软件目录,放置各软件的License文件,Daemon和Daemon所需的动态连接库;

(4)修改License.dat和SERVER行和DAEMON的位置,并启动FLEXlm License Manager。

(5)在Setup修改Service Name,输入造当名称,以区别是何种License服务;利用Browse选择合适Lmgrd.exe和对应和License.dat并指定Debug.log和放置路径;

(6)选中"StartServer at Power-Up"与"Use NT Services",这样下次启动机器时,将自动启动该Li-cense服务;

(7)点击Control按钮检查Service Name是否与设定名称相同,如果不同,回到"Setup"重新选择Service Name如果一样,点击"Start"启动该Li-cense Server点击"Status"检查Licevse Server启动情况,若出现Server_name: License server UP (MASTER),表示License Server启动成功;

(8)安装另外的License Server:可依上述(3)~(7)重新执行一次即可;

(9)切换不同License Server:在"Setup"中选择适当的"Service Name",然后启动或停止相应的License服务;

(10)移除License Server:在"Setup"选择适当的"Service Name",然后按"Remove"即可。

题目信息:命令行参数解析计算正方形周长、面积

import argparse

parser = argparse.ArgumentParser()

parser.add_argument('--length', default = 10, type = float, help = '正方形边长')

args = parser.parse_args()

area = args.length * args.length

girth = 4 * args.length

print('面积 = ',area, '周长 = ', girth)

测试结果:

PS D:\CodeProject\PyCharm\work1\lab6>python 6-1.py --length 3.2

面积 = 10.240000000000002 周长 = 12.8

# 作者:JohnRothan

# 时间:2022-4-21

# 题目信息:命令行参数确认文件,读取并输出

import sys

filename = sys.argv[1]

f = open(filename, 'r', encoding = 'utf-8')

line_no = 0

while True:

line_no += 1

line = f.readline()

if line:

print(line_no, ":", line)

else:

break

f.close()

测试结果禅誉:

PS D:\CodeProject\PyCharm\work1\lab6>python 6-1.py C:\\Users\\JohnRothan\\Desktop\\test.txt

1 : Hello,World!

2 :Today is Friday.

3 : Let's do amazing things!

# 作者:JohnRothan

# 时间:2022-4-21

# 题目信息:命令行参数确认文件,with语句读取并输出

import sys

filename = sys.argv[1]

line_no = 0

with open(filename, 'r', encoding = 'utf-8') as f:

for line in f:

line_no += 1

print(line_no, ":", line)

f.close()

测试结果:

PS D:\CodeProject\PyCharm\work1\lab6>python 6-1.py C:\\Users\\JohnRothan\\Desktop\\test.txt

1 : Hello,World!

2 :Today is Friday.

3 : Let's do amazing things!

# 作者:JohnRothan

# 时间:2022-4-21

# 题目信息:利用with语句读取并输出文本文件,由命令行确认文件名

import sys

n = int(sys.argv[1])

power = 1

i = 0

f = open('D:\\CodeProject\皮袭森\flex\\log.txt', 'w')

sys.stdout = f

while i <= n:

double = i * 2

print(str(i), '', str(double), '', str(power))

power = 2 * power

i = i + 1

sys.stdout = sys.__stdout__

print('done!')

测试结果:

0 0 1

1 2 2

2 4 4

3 6 8

4 8 16

5 10 32

#7.7 上机实践-错误和异常

# 作燃亩者:JohnRothan

# 时间:2022-4-21

# 题目信息:语法错误

print("Good Luck!"

print("幸运数:",random.choice(range(10)))

测试结果:

File "D:\CodeProject\PyCharm\work1\lab6\6-1.py", line 6

print("幸运数:",random.choice(range(10)))

^

SyntaxError: invalid syntax

错误处理:

print("Good Luck!")

# 作者:JohnRothan

# 时间:2022-4-21

# 题目信息:运行时错误

print("Good Luck!")

print("幸运数:",random.choice(range(10)))

测试结果:

Traceback (most recent call last):

File "D:\CodeProject\PyCharm\work1\lab6\6-1.py", line 6, in <module>

print("幸运数:",random.choice(range(10)))

NameError: name 'random' is not defined

错误处理:

import random

# 作者:JohnRothan

# 时间:2022-4-21

# 题目信息:零除错误

a = 1

b = 0

c = a / b

测试结果:

Traceback (most recent call last):

File "D:\CodeProject\PyCharm\work1\lab6\6-1.py", line 7, in <module>

c = a / b

ZeroDivisionError: division by zero

错误处理:

除数不能为0

# 作者:JohnRothan

# 时间:2022-4-21

# 题目信息:逻辑错误

import math

a = 1b = 2c = 1

x1 = -b + math.sqrt(b*b - 4*a*c) / 2 * a

x2 = -b - math.sqrt(b*b - 4*a*c) / 2 * a

print(x1,x2)

测试结果:

-2.0 -2.0

错误处理:

一元二次方程计算公式错误,应修改为:

x1 = (-b + math.sqrt(b*b - 4*a*c)) / (2 * a)

x2 = (-b - math.sqrt(b*b - 4*a*c)) / (2 * a)

# 作者:JohnRothan

# 时间:2022-4-21

# 题目信息:常见异常

noname

测试结果:变量未声明

Traceback (most recent call last):

File "D:\CodeProject\PyCharm\work1\lab6\6-1.py", line 5, in <module>

noname

NameError: name 'noname' is not defined

int a

测试结果:语法错误

File "D:\CodeProject\PyCharm\work1\lab6\6-1.py", line 5

int a

^

SyntaxError: invalid syntax

a = 1

a.show()

测试结果:show()函数未定义

Traceback (most recent call last):

File "D:\CodeProject\PyCharm\work1\lab6\6-1.py", line 6, in <module>

a.show()

AttributeError: 'int' object has no attribute 'show'

11 + 'abc'

测试结果:类型错误

Traceback (most recent call last):

File "D:\CodeProject\PyCharm\work1\lab6\6-1.py", line 5, in <module>

11 + 'abc'

TypeError: unsupported operand type(s) for +: 'int' and 'str'

int('abc')

测试结果:数值错误

Traceback (most recent call last):

File "D:\CodeProject\PyCharm\work1\lab6\6-1.py", line 5, in <module>

int('abc')

ValueError: invalid literal for int() with base 10: 'abc'

1 / 0

测试结果:零除错误

Traceback (most recent call last):

File "D:\CodeProject\PyCharm\work1\lab6\6-1.py", line 5, in <module>

1 / 0

ZeroDivisionError: division by zero

a = [10,11,12]

a[3]

测试结果:索引越界

Traceback (most recent call last):

File "D:\CodeProject\PyCharm\work1\lab6\6-1.py", line 6, in <module>

a[3]

IndexError: list index out of range

m = {'1' : 'yes', '2' : 'no'}

m['3']

测试结果:字典关键字不存在

Traceback (most recent call last):

File "D:\CodeProject\PyCharm\work1\lab6\6-1.py", line 6, in <module>

m['3']

KeyError: '3'

# 作者:JohnRothan

# 时间:2022-4-21

# 题目信息:引发异常

a = input()

if a <0: raise ValueError("不能为负!")

测试结果:

-2

Traceback (most recent call last):

File "D:\CodeProject\PyCharm\work1\lab6\6-1.py", line 5, in <module>

if a <0: raise ValueError("不能为负!")

TypeError: '<' not supported between instances of 'str' and 'int'

# 作者:JohnRothan

# 时间:2022-4-21

# 题目信息:try-except-else-finally处理捕获异常

try:

f = open("test.txt", 'w')

f.write("测试文件")

f1 = open('test1.txt', 'r')

except IOError:

print("没有找到文件")

else:

print("写入成功")

finally:

f.close()

测试结果:

没有找到文件

# 作者:JohnRothan

# 时间:2022-4-21

# 题目信息:处理异常

try:

f = open('mytxt.txt', 'w')

while True:

s = input("请输入字符串(Q键结束):")

if s.upper() == 'Q' : break

f.write(s + '\n')

except KeyboardInterrupt:

print('程序中断!(Ctrl-C)')

finally:

f.close()

测试结果:

请输入字符串(Q键结束):cava

请输入字符串(Q键结束):dcav

请输入字符串(Q键结束):fe

请输入字符串(Q键结束):4

请输入字符串(Q键结束):Q

# 作者:JohnRothan

# 时间:2022-4-21

# 题目信息:自定义异常类

class NumberError(Exception): #自定义异常类,继承于Exception

def __init__(self,data):

Exception.__init__(self, data)

self.data = data

def __str__(self):#重载__str__方法

return self.data + ': 非法数值(<0)'

def total(data):

total = 0

for i in data:

if i <0: raise NumberError(str(i))

total += i

return total

#测试代码

data1 = (44, 78, 90, 80, 55)

print('总计=', total(data1))

data2 = (44, 78, 90, -80, 55)

print('总计=', total(data2))

测试结果:

Traceback (most recent call last):

File "D:\CodeProject\PyCharm\work1\lab6\6-1.py", line 21, in <module>

print('总计=', total(data2))

File "D:\CodeProject\PyCharm\work1\lab6\6-1.py", line 14, in total

if i <0: raise NumberError(str(i))

__main__.NumberError: -80: 非法数值(<0)

总计= 347

# 作者:JohnRothan

# 时间:2022-4-21

# 题目信息:断言

a = int(input("请输入整数a:"))

b = int(input("请输入整数b:"))

assert b != 0, '除数不能为0'

c = a / b

print(a, '/', b, '=', c)

测试结果:

请输入整数a:1

请输入整数b:0

Traceback (most recent call last):

File "D:\CodeProject\PyCharm\work1\lab6\6-1.py", line 7, in <module>

assert b != 0, '除数不能为0'

AssertionError: 除数不能为0

# 作者:JohnRothan

# 时间:2022-4-21

# 题目信息:输出信息跟踪逻辑错误调试:命令行参数分解为素数之积

import sys

n = int(sys.argv[1])

result=[]

factor = 2

while factor*factor <= n:

while (n % factor) == 0:

n //= factor

result.append(factor)

print(n, factor)

factor += 1

if n >1:

result.append(n)

print(result)

测试结果:

PS D:\CodeProject\PyCharm\work1\lab6>python 6-1.py 1364

682 2

341 2

31 11

[2, 2, 11, 31]

# 作者:JohnRothan

# 时间:2022-4-21

# 题目信息:默认配置直接输出

import logging

logging.debug("调试信息") #不会输出

logging.info("一般信息")

logging.warning("警告信息")

logging.error("错误信息")

logging.critical("严重错误")

测试结果:

WARNING:root:警告信息

ERROR:root:错误信息

CRITICAL:root:严重错误

# 作者:JohnRothan

# 时间:2022-4-22

# 题目信息:basicConfig配置输出日志到控制台

import logging

#配置logging

logging.basicConfig(level = logging.INFO

,format = '%(asctime)s - %(name)s - %(levelname)s - %(message)s')

#输出日志信息

logging.debug("调试信息") #不会输出

logging.info("一般信息")

logging.warning("警告信息")

logging.error("错误信息")

logging.critical("严重错误")

测试结果:

2022-04-22 10:16:14,345 - root - INFO - 一般信息

2022-04-22 10:16:14,345 - root - WARNING - 警告信息

2022-04-22 10:16:14,345 - root - ERROR - 错误信息

2022-04-22 10:16:14,345 - root - CRITICAL - 严重错误

# 作者:JohnRothan

# 时间:2022-4-21

# 题目信息:basicConfig配置输出日志到文件和控制台

import logging

#配置logging

logger = logging.getLogger(__name__)

logger.setLevel(level=logging.DEBUG)

handler = logging.FileHandler("logging_console_file.txt")

handler.setLevel(logging.DEBUG)

formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

handler.setFormatter(formatter)

console = logging.StreamHandler()

console.setLevel(logging.ERROR)

logger.addHandler(handler)

logger.addHandler(console)

#输出日志信息

logger.debug("调试信息")

logger.info("一般信息")

logger.warning("警告信息")

logger.error("错误信息")

logger.critical("严重错误")

测试结果:

控制台:

错误信息

严重错误

文件:

2022-04-22 10:18:41,783 - __main__ - DEBUG - 调试信息

2022-04-22 10:18:41,783 - __main__ - INFO - 一般信息

2022-04-22 10:18:41,783 - __main__ - WARNING - 警告信息

2022-04-22 10:18:41,783 - __main__ - ERROR - 错误信息

2022-04-22 10:18:41,783 - __main__ - CRITICAL - 严重错误

基于blazeDS的flex4与spring的程序实例步骤

环境:

jdk1.6

j2ee1.5

spring2.5.6

blazeDS3.3

tomcat6.0

flex4

myeclipse8.5

flashBuilder4

步骤:

一、 启动好blazeDS(即启动tomcat,在[tomcat]/webapps目录下产生一个blazeds文件夹(三个war包产生一个blazeds文件夹));

在myeclipse8.5新建一个web Project工程,工程名为webSpring;

把此工程加入blazeDS支持(即用blazeds下的WEB-INF文件夹替换掉web工程下简圆的WEB-INF文件夹);

加入spring支持(把spring相关的jar包拷贝到webSpring/WebRoot/WEB-INF/lib目录下即可)。

二、 1. 在javaWeb工程webSpring的str目录下薯裂分别新建一下两个包:

cn.xuediit.myFactory、cn.xuediit.myService;

2. 在cn.xuediit.myFctory包下新建两个类:FlexFactoryImpl.java和SpringFactoryInstance.java

(1). FlexFactoryImpl.java:

package cn.xuediit.myFactory

import org.apache.commons.logging.Log

import org.apache.commons.logging.LogFactory

import flex.messaging.FactoryInstance

import flex.messaging.FlexFactory

import flex.messaging.config.ConfigMap

public class FlexFactoryImpl implements FlexFactory {

private Log log = LogFactory.getLog(getClass())

/*override interface method*/

public void initialize(String id, ConfigMap configMap) {

System.out.println("1---flex工厂实现类重数咐闭写的方法initialize")

}

/*override interface method*/

public FactoryInstance createFactoryInstance(String id, ConfigMap properties) {

System.out.println("2---flex工厂实现类重写的方法createFactoryInstance")

log.info("Create FactoryInstance.")

SpringFactoryInstance instance = new SpringFactoryInstance(this, id, properties)

instance.setSource(properties.getPropertyAsString(SOURCE, instance.getId()))

return instance

}

/*override interface method*/

public Object lookup(FactoryInstance instanceInfo) {

System.out.println("4---flex工厂实现类重写的方法lookup")

log.info("Lookup service object.")

return instanceInfo.lookup()

}

}

(2).SpringFactoryInstance.java

package cn.xuediit.myFactory

import org.apache.commons.logging.Log

import org.apache.commons.logging.LogFactory

import org.springframework.beans.BeansException

import org.springframework.beans.factory.NoSuchBeanDefinitionException

import org.springframework.context.ApplicationContext

import org.springframework.web.context.support.WebApplicationContextUtils

import flex.messaging.FactoryInstance

import flex.messaging.FlexContext

import flex.messaging.FlexFactory

import flex.messaging.config.ConfigMap

import flex.messaging.services.ServiceException

public class SpringFactoryInstance extends FactoryInstance {

private Log log = LogFactory.getLog(getClass())

SpringFactoryInstance(FlexFactory factory, String id, ConfigMap properties) {

super(factory, id, properties)

}

public Object lookup() {

System.out.println("3---spring工厂类的方法lookup")

ApplicationContext appContext = WebApplicationContextUtils.getRequiredWebApplicationContext(FlexContext.getServletConfig().getServletContext())

String beanName = getSource()

try {

log.info("Lookup bean from Spring ApplicationContext: " + beanName)

return appContext.getBean(beanName)

} catch (NoSuchBeanDefinitionException nex) {

ServiceException e = new ServiceException()

String msg = "Spring service named '" + beanName + "' does not exist."

e.setMessage(msg)

e.setRootCause(nex)

e.setDetails(msg)

e.setCode("Server.Processing")

throw e

} catch (BeansException bex) {

ServiceException e = new ServiceException()

String msg = "Unable to create Spring service named '" + beanName + "'."

e.setMessage(msg)

e.setRootCause(bex)

e.setDetails(msg)

e.setCode("Server.Processing")

throw e

} catch (Exception ex) {

ServiceException e = new ServiceException()

String msg = "Unexpected exception when trying to create Spring service named '" + beanName + "'."

e.setMessage(msg)

e.setRootCause(ex)

e.setDetails(msg)

e.setCode("Server.Processing")

throw e

}

}

}

3. 在cn.xuediit.myService包下新建两个类:FService.java和FServicesImpl.java

(1). FService.java

package cn.xuediit.myService

public interface FService {

public String sayHello(String name)

}

(2). FServicesImpl.java

package cn.xuediit.myService

public class FServicesImpl implements FService {

public String sayHello(String name) {

System.out.println("5---服务层实现类(本质上的与flex交互的类)")

return "我是服务层的服务实现类==" + name

}

}

三、 1、 在javaWeb工程webSpring下,在文件webSpring/WebRoot/WEB-INF/web.xml的<web-app>标签下添加子节点:

<listener>

<listener-class>

org.springframework.web.context.ContextLoaderListener

</listener-class>

</listener>

2、 在javaWeb工程webSpring下,在webSpring/WebRoot/WEB-INF目录下新建一个文件:applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:tx="http://www.springframework.org/schema/tx"

xsi:schemaLocation="http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans-2.0.xsd

http://www.springframework.org/schema/tx

http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">

<bean id="fServiceImplBeanID" class="cn.xuediit.myService.FServicesImpl"></bean>

</beans>

四、 1、 在javaWeb工程webSpring下,在WebRoot/WEB-INF/flex/remoting-config.xml文件中的<service>标签下添加:

<destination id="destinationID">

<properties>

<factory>flexFactoryImplID</factory>

<source>fServiceImplBeanID</source>

<scope>application</scope>

</properties>

</destination>

2、 在javaWeb工程webSpring下,在WebRoot/WEB-INF/flex/services-config.xml文件中的<services-config>标签下添加:

<factories>

<factory id="flexFactoryImplID" class="cn.xuediit.myFactory.FlexFactoryImpl"/>

</factories>

五、 给此javaWeb工程添加tomcat支持,启动tomcat(这个容易就不说了)。

六、 在flashBuilder下新建一个基于blazeDS的flex项目(以webSpring为后台工程),工程名为webFb;

webFb.mxml:

<?xml version="1.0" encoding="utf-8"?>

<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"

xmlns:s="library://ns.adobe.com/flex/spark"

xmlns:mx="library://ns.adobe.com/flex/halo"

minWidth="500" minHeight="200">

<fx:Script>

<![CDATA[

import mx.core.Application

import mx.rpc.events.FaultEvent

import mx.collections.ArrayCollection

import mx.rpc.remoting.mxml.RemoteObject

import mx.controls.Alert

import mx.rpc.events.ResultEvent

public function submit(name:String):void{

var remote:RemoteObject = new RemoteObject()

remote.destination = "destinationID"

remote.endpoint = "http://localhost:8080/webSpring/messagebroker/amf"

remote.addEventListener(ResultEvent.RESULT, myResult)

remote.addEventListener(FaultEvent.FAULT,fault)

remote.sayHello(name)

}

private function myResult(evt:ResultEvent):void{

Alert.show(evt.result.toString())

}

private function fault(evt:FaultEvent):void{

Alert.show(evt.fault.message)

}

]]>

</fx:Script>

<s:Button x="240" y="11" label="要发送到" click="submit(nameTxt.text)"/>

<s:Label x="16" y="11" text="姓名"/>

<s:TextInput id="nameTxt" x="100" y="100"/>

</s:Application>


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12196108.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存