Best practices for Foreign Servers
来源:互联网 发布:电影票软件 编辑:程序博客网 时间:2024/05/02 01:25
What is Foreign Servers?
Foreign JMS servers can be used as a stand-alone component, similar to messaging bridges. These components target application servers or clusters directly instead of an intermediary component like a JMS server.Bridges vs Foreign Server
The JMS messaging bridge does introduce with an extra hop; messages are put into a local destination and then forwarded to the final destination. This is useful when the remote destination is not on highly available JEE container. The bridge will take the messages even when remote destination is not available and then forward them with build-in retry logic when the remote destination becomes available.
If the remote destination is highly available (WebLogic JMS or IBM MQ Series), foreign JMS server is preferable since it directly access the final destination without an extra hop. Mostly preferable for incoming queues on WebLogic 11g and later releases.
Best practices for Foreign Servers
Our best practices were centered around the standard of creating a single JMS Module per cluster (or app server if it wasn't clustered) and then creating both the Foreign server and the weblogic JMS queues/connection factories within the same module.
Also, having good naming conventions for your sub-deployments and JMS Modules
How does Weblogic Foreign Server works with external messaging system?
Configuring Foreign server on JMS Module
Foreign Server feature makes it possible to easily map to remote instances of WebLogic Server in another cluster or domain. so that they appear in the local JNDI tree as a local JMS object. Once the Foreign Provider is configured within Weblogic, for all practical JMS implementations within the code - it can be called as if it was on local JNDI lookup. Weblogic will make the remote calls transparent to your code. This allows you to change your destination via configuration on the Weblogic console or thru WLST.Working in WLST, We need to connect to the Admin Server because this configuration changes can be done in online mode.
1
2
3
4
5
6
7
8
##################################
# FOREIGN JMS MODULE CONFIGURATION
##################################
fsjms_mod_name1
=
aFSmod
fr_server1
=
ForeignServer1
cnfurl1
=
file
:
/
path
/
mq
/
bindings
initialContextFactory1
=
com.sun.jndi.fscontext.RefFSContextFactory
Create JMS Module for Foreign Servers
With the WebLogic 11g and later releases, Oracle has tried to merge both the internal and foreign JMS under a universal umbrella. However, the target options were kept different. To provide flexibility with the JMS portion, sub-deployments were introduced. Oracle seems to have been extended sub-deployments to Foreign Servers for the sake of consistency, making things quite complicated/messy.
WebLogic Foreign Server - IBM MQ
Create JMS Foreign Server
This we can configure with the help of three arguments -There must be single JMS Module name per cluster, Multiple definitions of your connection factory will skew the JMS load-balancing.
- Connectiony Factory URL
- Foreign Server name
- Initial Context
Foreign Server MBean
JMS Foreign server is parent MBean with Foreign Connection Factory and Foreign Destination as childs.
Foreign Server MBean tree
The foreign JMS provider can be targeted to a WebLogic Server or a WebLogic Cluster.
Create JMS Foreign Destination
Create JMS Foreign Connection Factory
JMS Foreign Server Destination can be configured with the following details
- Destination Name
- Local JNDI
- RemoteJNDI
The destination properties can be given as follows:
1
2
3
4
5
6
###############################################
# FOREIGN JMS DESTINATION CONFIGURATION
###############################################
destname1
=
ForeignDestination1
dest_ljndi1
=
mq
/
incoming
/
response
dest_rjndi1
=
MQSRC_TO_WL_JMS1
Similarly Foreign Connection Factory can be defined with the MQ connection factory details
1
2
3
4
5
6
###############################################
# FORIEGN JMS CONNECTION FACTORY CONFIGURATION
###############################################
fconf_name1
=
ForeignConnectionFactory1
fconf_ljndi1
=
MqConnectionFactory
fconf_rjndi1
=
REMOTE_JNDI1
create_ForeignServer.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
from
java.io
import
File
from
java.io
import
FileOutputStream
from
java
import
io
from
java.lang
import
Exception
from
java.lang
import
Throwable
import
os.path
import
sys
def
getJMSModulePath(jms_module_name):
jms_module_path
=
"/JMSSystemResources/"
+
jms_module_name
+
"/JMSResource/"
+
jms_module_name
return
jms_module_path
def
createFSJMSModule(jms_module_name,target_name):
cd(
'/'
)
module
=
create(jms_module_name,
"JMSSystemResource"
)
cluster
=
getMBean(
"Clusters/"
+
cluster_target_name)
module.addTarget(cluster)
def
createJMSFS(jms_module_name,cnurl,jms_fs_name,ini_fac):
jms_module_path
=
getJMSModulePath(jms_module_name)
cd(jms_module_path)
cmo.createForeignServer(jms_fs_name)
cd(jms_module_path
+
'/ForeignServers/'
+
jms_fs_name)
cmo.setInitialContextFactory(ini_fac)
cmo.setConnectionURL(cnurl)
cmo.setDefaultTargetingEnabled(
bool
(
"true"
))
cmo.unSet(
'JNDIPropertiesCredentialEncrypted'
)
def
getFSpath(jms_module_name,jms_fs_name):
jms_module_path
=
getJMSModulePath(jms_module_name)
jms_fs_path
=
jms_module_path
+
'/ForeignServers/'
+
jms_fs_name
return
jms_fs_path
def
createFSdest(jms_module_name,jms_fs_name,jms_dest_name,ljndi,rjndi):
cd(
'/'
)
jms_fs_path
=
getFSpath(jms_module_name,jms_fs_name)
cd(jms_fs_path)
print
jms_fs_path
cmo.createForeignDestination(jms_dest_name)
jms_fs_path
=
jms_fs_path
+
'/ForeignDestinations/'
+
jms_dest_name
print
jms_fs_path
cd(jms_fs_path)
cmo.setLocalJNDIName(ljndi)
cmo.setRemoteJNDIName(rjndi)
def
createFSconf(jms_module_name,jms_fs_name,jms_fconf_name,cljndi,crjndi):
jms_fs_path
=
getFSpath(jms_module_name,jms_fs_name)
cd(jms_fs_path)
cmo.createForeignConnectionFactory(jms_fconf_name)
cd(jms_fs_path
+
'/ForeignConnectionFactories/'
+
jms_fconf_name)
cmo.setLocalJNDIName(cljndi)
cmo.setRemoteJNDIName(crjndi)
############## MAIN SCRIPT starts ##########
envproperty
=
""
if
(
len
(sys.argv) >
1
):
envproperty
=
sys.argv[
1
]
else
:
print
"Environment Property file not specified"
sys.exit(
2
)
propInputStream
=
FileInputStream(envproperty)
configProps
=
Properties()
configProps.load(propInputStream)
adminUser
=
configProps.get(
"adminUser"
)
adminPassword
=
configProps.get(
"adminPassword"
)
adminURL
=
configProps.get(
"adminURL"
)
connect(adminUser,adminPassword,adminURL)
edit()
startEdit()
##############################################
#FOREIGN JMS SERVER CONFIGURATION
##############################################
total_dest
=
configProps.get(
"total_dest"
)
total_fconf
=
configProps.get(
"total_fconf"
)
cluster_target_name
=
configProps.get(
"clusterName"
)
trg
=
configProps.get(
"ForeignTargetServer"
)
fs_mod_name
=
configProps.get(
"fsjms_mod_name"
)
createFSJMSModule(fs_mod_name,trg)
n
=
int
(tot_fs)
for
i
in
range
(
1
,n
+
1
):
fr_server
=
configProps.get(
"fr_server"
+
str
(i))
cnfurl
=
configProps.get(
"cnfurl"
+
str
(i))
ini_context
=
configProps.get(
"initialContextFactory"
+
str
(i))
createJMSFS(fs_mod_name,cnfurl,fr_server,ini_context)
d_name
=
configProps.get(
"destname"
+
str
(i))
d_ljndi
=
configProps.get(
"dest_ljndi"
+
str
(i))
d_rjndi
=
configProps.get(
"dest_rjndi"
+
str
(i))
print
d_ljndi,
' == '
, d_rjndi, b
createFSdest(fs_mod_name,fr_server,d_name,d_ljndi,d_rjndi)
fr_server
=
configProps.get(
"fr_server"
+
str
(i))
j_conf
=
configProps.get(
"fconf_name"
+
str
(i))
cn_ljndi
=
configProps.get(
"fconf_ljndi"
+
str
(i))
cn_rjndi
=
configProps.get(
"fconf_rjndi"
+
str
(i))
createFSconf(fs_mod_name,fr_server,j_conf,cn_ljndi,cn_rjndi)
# #### MAIN SCRIPT END ########################################
save()
activate(block
=
"true"
)
disconnect()
$ java weblogic.WLST Foreign_jms.py ForeignJms.properties
0 0
- Best practices for Foreign Servers
- Best Practices for WOW64
- Best Practices for Performance
- Best Practices for Performance
- Best Practices for Creating DLLs
- Best Practices for Exception Handling
- Best Practices for Exception Handling
- Best Practices for Exception Handling
- Best Practices for Creating DLLs
- Best practices for playing tennis
- Best Practices for Exception Handling
- Best Practices for Exception Handling
- Best Practices for Enterprise Security
- Best Practices for .NET enums.
- Best Practices for .NET events
- Best Practices for Programming MATLAB
- Best Practices for User Interfaces
- Best practices for using KeyHolder?
- 字符串翻转
- 连续x次奇数(n+2*x)是合数的算法题暴力算法
- HTML 通过GIF实现loading动画(非进度条版)。
- Candy
- sql loader的简单用法
- Best practices for Foreign Servers
- 常用排序算法之JavaScript实现
- 【C#】项目1--斐波那契数列(人生中第一个C#程序)
- 【信息安全系列】RedHat Linux常用安全检查标准
- 侧滑、、、mark一下、、、
- sublime下的less2css使用
- user版本打开kernel的log
- 802.11帧格式
- BOOTSTRAP使用体会