有关WebLogic配置连接池比较好的解决方案(转)

上一篇 / 下一篇  2008-07-10 22:35:23 / 个人分类:Weblogic

  • 文件版本: V1.0
  • 开发商: 本站原创
  • 文件来源: 本地
  • 界面语言: 简体中文
  • 授权方式: 免费
  • 运行平台: Win9X/Win2000/WinXP
有关WebLogic配置连接池比较好的解决方案
UB1fp[2WB051Testing软件测试网.{&?*R2qTii:S
一般配置weblgoic连接池(或DataSource)都是通过weblogic console界面来配置,通常情况下,因为很多原因,比如类的加载,driver的错误,url的错误,以及其他属性不正确等等原因,而造成配置抛出mbean的异常信息。51Testing软件测试网[1UDLTn

z)Jgg j wY0这类问题,在本论坛上出现了很多次,而精华区也有介绍。但是依然不断的出现。一方面是这个问题确实很容易出现,一方面就应该从我们自身找找原因了。
/?z|P4j!s]`f051Testing软件测试网e1d4Vfn8\(Y
配置weblogic connection pool or datasource未必只可以通过console界面。51Testing软件测试网.L6BW v(n,|1k(i7h
接下来,给大家一个比较可行的方式。这种方式在weblogic6,7系列内都是非常好用的,对于weblogic8.1,我想也应该可以。
WcC&m4Mt!pGB0方法:就是手工通过coding操作,weblogic.management.configuration.JDBCConnectionPoolMBean或者 weblogic.management.configuration.JDBCDataSourceMBeanl类。51Testing软件测试网(j7e#~Cj oK e

Dww9Pa0可能有些人会说这样写代码不是更复杂,麻烦吗?
8s ZanS9Zz5Q8t,V0那么,可以让这个麻烦只出现一次,也是值得的。
z8J4y\ t0我就用Swing写了一个GUI界面,整合了一些配置信息(结构有些复杂,但是比较容易操作,比直接通过console要方便。主要当时为公司项目写的,便于以后项目中操作)。
)}ax$R%L:kD0仅针对connection pool配置这一块。主要代码大致如下:
?b@L`*x+uq(j051Testing软件测试网#d3t-[F&T&n
public void deployServerDataSource(){51Testing软件测试网+rBT/n5S6GA }F4Y
51Testing软件测试网"u `@L1US{,w
try {
jn/ZUz&Mi G0ctx = getInitialContext();
0V DF0qZ@S'^ Z0if(ctx!=null){51Testing软件测试网6DB;g.^+Jr
this.txtareaDeployStatus.append(\r\n+_INFO : 连接服务器,并登陆成功);
s9W6b8V,oJb sf.K0this.txtareaDeployStatus.append(\r\n+_INFO : 获取管理对象);51Testing软件测试网-}1uYh*r4tYW
//getting the Administration MBeanHome
"@1n4}H9ki\O _`0mbeanHome = (MBeanHome)ctx.lookup(MBeanHome.ADMIN_JNDI_NAME);51Testing软件测试网B.DB6W d
this.txtareaDeployStatus.append(\r\n+_INFO : 获取Admin Server);51Testing软件测试网,T+gRX!__P
serverMBean = (ServerMBean)mbeanHome.getAdminMBean(serverName, Server);
3B R v0V+l%j.h0this.txtareaDeployStatus.append(\r\n+_INFO : 获取domain);51Testing软件测试网bXQ.b/t)o
domainName = mbeanHome.getDomainName();51Testing软件测试网RAN&avB9}A,u G
}else{
.F6C@ Z| N*Y(e7~ DO,O#c0this.txtareaDeployStatus.append(\r\n+_INFO : 连接服务器失败,请服务器正确启动,并且登陆正确);51Testing软件测试网4oy ZK'crB Pm.g0?
return;51Testing软件测试网}_9R"i.YVO-d9v
}
{@8}6ZP I_0}51Testing软件测试网3Mh,yh} ib
catch (Exception ex) {51Testing软件测试网Q-K0Q2mm|2MMRB1A
this.txtareaDeployStatus.append(\r\n+_ERROR: 初始化管理服务器信息失败,配置终止);51Testing软件测试网)r3UzO.W A?[f
return;51Testing软件测试网wDi-HH A
}
h$a'?ro0
}TCKJ'Q3_0try{
+x`({]8h+eToRyg0this.txtareaDeployStatus.append(\r\n+_INFO : 开始配置WebLogic DataSource of RiseNet);
jd F9ptz0config();
vN'zJ%X;u@ tl0this.txtareaDeployStatus.append(\r\n+_INFO : 配置WebLogic DataSource of RiseNet成功 );
ik){;S7X ZCG?0JOptionPane.showMessageDialog(this, 配置WebLogic DataSource of RiseNet成功, null, JOptionPane.INFORMATION_MESSAGE);
zE'| H(|6a0}catch(Exception ex){
e;_O9t-D F#? C?0this.txtareaDeployStatus.append(\r\n+_ERROR: 配置WebLogic DataSource of RiseNet失败 );
8K l4{+d4r0JOptionPane.showMessageDialog(this, 配置WebLogic DataSource of RiseNet失败, 错误, JOptionPane.ERROR_MESSAGE);
{9E3r*D!x;k-i0}
'_wD-^-D{,p0
Q)K6Q ].P/LC0//需要在配置完以后,进行一次连接测试
A0c^0TF}H5n0|0try{51Testing软件测试网D!p4eU D/g*J
javax.sql.DataSource ds = null;51Testing软件测试网y KZ"f0za
ds = (javax.sql.DataSource)ctx.lookup(cpDataSourceJNDIName);51Testing软件测试网)H cQ,v [5@ A
java.sql.Connection c = ds.getConnection();
I1q-G3Y:s5t0c.close();51Testing软件测试网+n S;AF4wyB~
}catch(Exception ex){
(Di!u*LL0this.txtareaDeployStatus.append(\r\n+_ERROR: 测试失败 );
!q0qpZ9f-@0this.txtareaDeployStatus.append(\r\n+_ERROR: 请手动进行Apply一次,否则配置DataSource在服务器重新启动后失效 );
g2}`!K|4?G0JOptionPane.showMessageDialog(this, 测试失败, 错误, JOptionPane.ERROR_MESSAGE);
'~.e(U1K)[Ja0}51Testing软件测试网:N3_.[9h ?Ui-Aa!Z
51Testing软件测试网0^-u~-_ ] U^ a\y
}
_z)Ej_8T5g0
p;H YH&rhzY2B2K1u0public void config() throws Exception{
o C!S-XQ6~ @E051Testing软件测试网La `(Qr9WQ/k_@cu!k
cpPoolName = this.txtPoolName.getText();
WY3x$o:{`oS0cpDataSourceName = this.txtDataSourceName.getText();51Testing软件测试网*_ x7z bca
cpDataSourceJNDIName = this.txtDataSourceJNDIName.getText();
Z#R&OP;K/r{051Testing软件测试网dzq6T~OaH
//将原有的连接DataSource信息删除51Testing软件测试网4Z[ ZDgS*t-svP
deleteDataSource();
e/JQ9U.Xs2z1h }051Testing软件测试网N t8`Z/Y$D
try {
x6KcB#M8z0createDataSource();51Testing软件测试网7T8SaSE
}51Testing软件测试网 Lm.`z&t8I
catch (Exception ex) {
,D%Ds[ajy{!{0ex.printStackTrace();51Testing软件测试网v}_c"w4ujI~
throw ex;
\-Fz kx.kN0}51Testing软件测试网F!ir+?dH9f+u HrC
}51Testing软件测试网8?V6x-y9ej
51Testing软件测试网&Kb} [5Qa
public void createDataSource() throws Exception {51Testing软件测试网$^d$x9qmbW"J
/**
a6mb Q{$v%? V0* WebLogicObjectName的构造起的参数如下:51Testing软件测试网S c sYh }
* java.lang.String name 名称
_?M.g-G L(s.u3x0* java.lang.String type 类型
I-h2c7b(X-n V \&e0* java.lang.String domain 域
b0x,z_ T3g0id0* java.lang.String location51Testing软件测试网6PG9Ofl4h+S
* WebLogicObjectName parent 父节点51Testing软件测试网"J.CD d1T P otU
*/51Testing软件测试网 Jh-h4N.[Kvn
/*
6j3K T @+OA0WebLogicObjectName pname = new WebLogicObjectName(server1, ServerRuntime, domainName,server1);
*W6~k S}[&}'E&}s0WebLogicObjectName ōname = new WebLogicObjectName(cpName, JDBCConnectionPoolRuntime, domainName,server1, pname);51Testing软件测试网"X3d[IYV I.L
JDBCConnectionPoolRuntimeMBean cprmb = (JDBCConnectionPoolRuntimeMBean)mbeanHome.getMBean(oname);51Testing软件测试网-Y mq,?+^)IF'[;ux,Y
*/51Testing软件测试网w-[.K"E#P2ZA
Vector vct = RiseNet.getDefaultDataSource();51Testing软件测试网%O1X VDGC ~
String jdbc_user = (String)vct.get(RiseContent.HASHMAP_JDBC_USERNAME);
r$@.r5eD*Ij0String jdbc_url = (String)vct.get(RiseContent.HASHMAP_JDBC_URL);
I;o2e6\0h(W0String jdbc_pass = (String)vct.get(RiseContent.HASHMAP_JDBC_PASSWROD);
p^%Hn:g0String jdbc_driver = (String)vct.get(RiseContent.HASHMAP_JDBC_DRIVER_NAME);51Testing软件测试网RPkt!? v/r
String t_Properties = (String)vct.get(RiseContent.HASHMAP_JDBC_PROPERTIES);51Testing软件测试网tZ"j9{g.o v
t_Properties = ConfigUtil.convertEnter(t_Properties);
9E#kn(Sg jQH/l0Properties pros = new Properties();
v3pr(Ov{0pros.put(user, jdbc_user);51Testing软件测试网})B1DUB0ps'H8Jh
51Testing软件测试网5v1H/OP ud(Pc
String[] t_PropertiesArr = null;
.T)u1i c7~!rf`@0if(!(t_Properties==null || t_Properties.equals())){51Testing软件测试网,r4bZ R^!h^~L
t_PropertiesArr = StrUtil.separateDateStr(t_Properties,;);51Testing软件测试网{)G N.Y#Uv_g
}51Testing软件测试网fli+eCAR
if(t_PropertiesArr!=null && t_PropertiesArr.length>0){51Testing软件测试网:J/^~ CS;H(yf
for(int i=0;i<t_PropertiesArr.length;i++){51Testing软件测试网Xj.|y+d{,wA
String[] tmpArr = StrUtil.separateDateStr(t_PropertiesArr[i],=);
E$\&t.@5UP,J$z%e0pros.put(tmpArr[0],tmpArr[1]);
6}]2^'{5F N:RN0}
"`!}s$Iv\0}51Testing软件测试网/B&h:Lq-q6WxSsa
51Testing软件测试网%?]'LEO_A
// Create ConnectionPool MBean
#I @0q4ss0bt0JDBCConnectionPoolMBean cpMBean = (JDBCConnectionPoolMBean)mbeanHome.createAdminMBean(cpPoolName, JDBCConnectionPool, domainName);
t t o h6b+_$Q;gt051Testing软件测试网.R|1BZ^-l8k!i
cpMBean.setProperties(pros);51Testing软件测试网K+]*]8q'PmlllIE
cpMBean.setURL(jdbc_url);
o'U1g3m.gc0cpMBean.setDriverName(jdbc_driver);
H-?W-d6{6NS.{0cpMBean.setPassword(jdbc_pass);
8Hf)K,`q&\~ pA6XM0cpMBean.setLoginDelaySeconds(1);51Testing软件测试网:s Wy"Q#m3w!Z
cpMBean.setInitialCapacity(0);51Testing软件测试网!UZ~(d:qyL7@
cpMBean.setMaxCapacity(5);51Testing软件测试网5I IH6ba9lD/u
cpMBean.setCapacityIncrement(5);51Testing软件测试网f Ly2VX_ Ycs
cpMBean.setShrinkingEnabled(true);
.b E w xr&P0cpMBean.setShrinkPeriodMinutes(10);51Testing软件测试网;QsJ.C X!kP~5QE
//cpMBean.setRefreshMinutes(10); //空闲10分钟后,即测试连接
t*AWfH,C0//cpMBean.setTestTableName(dual);51Testing软件测试网U&a7`0y!s3w.B
//cpMBean.setACLName(dynapool);51Testing软件测试网+@&B*A2`&{:l7t/U
cpMBean.addTarget(serverMBean);
&XUtW${B4y7G0cpMBean.setPersistenceEnabled(true);51Testing软件测试网E,d)G7[d
51Testing软件测试网 B)@,^{-L't5~z X:c#L
JDBCDataSourceMBean dsMBeans = (JDBCDataSourceMBean)mbeanHome.createAdminMBean(cpDataSourceName, JDBCDataSource, domainName);
:`z L.jvu B0dsMBeans.setJNDIName(cpDataSourceJNDIName);
j-_+N-hmj @L0dsMBeans.setPoolName(cpPoolName);51Testing软件测试网 _T su'C2_qb*m
dsMBeans.addTarget(serverMBean);51Testing软件测试网2B7V7h)m,F%JS&]/A
dsMBeans.setPersistenceEnabled(true);
:h/[.M%j qVs3T0
@{*r8ki-g7n^2Lj0}51Testing软件测试网s f_#m+j NG d:[
51Testing软件测试网F#g6e+ri
请注意,直接通过程序修改,不可能很快的响应到config.xml中。当前的配置信息在weblogic console已经可以显示,但是如果不对其操作(apply),或者等待一段时间。那么所有的修改将在下一次server启动的时候不再存在。51Testing软件测试网/}4w k,T N)J,O:b H
为解决上面的情况,我在配置完后,硬性的采取了创建connection的操作(上面的代码有体现),这样可以大大提高永久性配置的可能性。

TAG: Weblogic

 

评分:0

我来说两句

Open Toolbar