如何在 WebLogic 12c 集群环境中单线程
How to single thread in a WebLogic 12c cluster environment
我必须编写一个托管在包含两个服务器的 WebLogic 12c 集群上的 EJB。
该程序必须是单线程的,因此两个服务器不得 运行 同时编写该代码。
除了编写自定义令牌系统之外,还有其他方法可以将我的 EJB 配置为对整个集群是单线程的吗?
编辑:这是我提到 "custom token system" 时想到的伪代码:
public void myEJBMethod() {
String tokenUUID = getTokenFromDB("IMSToken");
if (tokenUUID != "TokenNotAvailable") {
doMyEJBStuff();
releaseToken("IMSToken", tokenUUID);
}
}
private String getTokenFromDB(String tokenName) {
int tokenQty=0;
String myThreadUUID = java.util.UUID.randomUUID().toString();
INSERT INTO TOKEN_TRACKER (TOKEN_NAME, THREAD_UUID, CREATED_DATE) VALUE ({tokenName}, {myThreadUUID}, new Date());
COMMIT;
tokenQty= SELECT COUNT(*) FROM TOKEN_TRACKER WHERE TOKEN_NAME = {tokenName} AND THREAD_UUID NOT LIKE {myThreadUUID};
if (tokenQty>0) {
logger.trace("Token not available");
releaseToken(tokenName, myThreadUUID);
return "TokenNotAvailable";
}
else {
return myThreadUUID;
}
}
private void releaseToken(String tokenName, String tokenUIID) {
DELETE FROM TOKEN_TRACKER WHERE THREAD_UUID = {myThreadUUID};
COMMIT;
}
上面写的 Emmanuel 作为评论的回答可能是最好的,它是使用 WebLogic 的 Singleton Service 特性。
https://developsimpler.blogspot.ca/2012/03/weblogic-clusters-and-singleton-service.html
我必须编写一个托管在包含两个服务器的 WebLogic 12c 集群上的 EJB。 该程序必须是单线程的,因此两个服务器不得 运行 同时编写该代码。
除了编写自定义令牌系统之外,还有其他方法可以将我的 EJB 配置为对整个集群是单线程的吗?
编辑:这是我提到 "custom token system" 时想到的伪代码:
public void myEJBMethod() {
String tokenUUID = getTokenFromDB("IMSToken");
if (tokenUUID != "TokenNotAvailable") {
doMyEJBStuff();
releaseToken("IMSToken", tokenUUID);
}
}
private String getTokenFromDB(String tokenName) {
int tokenQty=0;
String myThreadUUID = java.util.UUID.randomUUID().toString();
INSERT INTO TOKEN_TRACKER (TOKEN_NAME, THREAD_UUID, CREATED_DATE) VALUE ({tokenName}, {myThreadUUID}, new Date());
COMMIT;
tokenQty= SELECT COUNT(*) FROM TOKEN_TRACKER WHERE TOKEN_NAME = {tokenName} AND THREAD_UUID NOT LIKE {myThreadUUID};
if (tokenQty>0) {
logger.trace("Token not available");
releaseToken(tokenName, myThreadUUID);
return "TokenNotAvailable";
}
else {
return myThreadUUID;
}
}
private void releaseToken(String tokenName, String tokenUIID) {
DELETE FROM TOKEN_TRACKER WHERE THREAD_UUID = {myThreadUUID};
COMMIT;
}
上面写的 Emmanuel 作为评论的回答可能是最好的,它是使用 WebLogic 的 Singleton Service 特性。
https://developsimpler.blogspot.ca/2012/03/weblogic-clusters-and-singleton-service.html