Java Managed Cache Beanを作成しました。このBeanの使い方の1つは、アプリの他の部分でさまざまなデータベースを設定できるようにすることです。私のテンプレートは他のアプリケーションでも使用されるので、キャッシュBeanの1つの場所でデータデータベースのパスを設定することができます(私のプログラミングは1つのアプリケーションにあり、データは別のアプリケーションにあります)それは私のアプリを介して。他のJavaクラスの管理対象CacheBeanへのアクセス
私の解決策はうまくいくようですが、これが問題に近づく最善の方法かどうか疑問です。
私の顔-コンフィグは次のとおりです。
<?xml version="1.0" encoding="UTF-8"?>
<faces-config>
<managed-bean>
<managed-bean-name>CacheBean</managed-bean-name>
<managed-bean-class>com.scoular.cache.CacheBean</managed-bean-class>
<managed-bean-scope>application</managed-bean-scope>
</managed-bean>
</faces-config>
私はCacheBeanおよびその他のJavaクラスの両方を下にペアリングしているので、唯一の関連するクラスが表示さ:
CacheBean:
package com.xxxx.cache;
import java.io.Serializable;
import java.util.HashMap;
import java.util.Vector;
import javax.faces.context.FacesContext;
public class CacheBean implements Serializable {
// Constants
private static final String BEAN_NAME = "CacheBean";
private static final long serialVersionUID = -2665922853615670023L;
private String serverPath;
private String pcAppDBpathJava;
public static CacheBean getCurrentInstance() {
// This is a neat way to get a handle on the instance of this bean in the scope from other Java code...
FacesContext context = FacesContext.getCurrentInstance();
return (CacheBean) context.getApplication().getVariableResolver().resolveVariable(context, BEAN_NAME);
}
public CacheBean() throws NotesException, Exception {
loadDBPaths();
}
public void loadDBPaths() {
Session session = Factory.getSession();
Database tmpDB = session.getCurrentDatabase();
String tmpStr = tmpDB.getServer();
pcAppDBpathJava = tmpStr + "!!" + "scoApps\\PC\\PCApp.nsf";
}
public String getServerPath() {
Session session = Factory.getSession();
Database tmpDB = session.getCurrentDatabase();
serverPath = tmpDB.getServer();
return serverPath;
}
public void setServerPath(String serverPath) {
this.serverPath = serverPath;
}
public String getPcAppDBpathJava() {
return pcAppDBpathJava;
}
public void setPcAppDBpathJava(String pcAppDBpathJava) {
this.pcAppDBpathJava = pcAppDBpathJava;
}
}
をと他のJavaクラスは次のとおりです。
package com.xxxx.model;
import java.io.Serializable;
import java.util.Date;
import java.util.HashMap;
import javax.faces.context.FacesContext;
import org.openntf.domino.*;
import org.openntf.domino.utils.Factory;
import org.openntf.domino.xsp.XspOpenLogUtil;
import com.scoular.cache.CacheBean;
public class PC implements Serializable {
private static final long serialVersionUID = -928898373594997220L;
@SuppressWarnings("unused")
private Database appData;
public PC() {
}
public void loadByUnid(String unid) {
try {
Database PCDataDB = this.getAppData();
Document doc = PCDataDB.getDocumentByUNID(unid);
if (null == doc) {
System.out.println("Document not found");
} else {
loadValues(doc);
}
} catch (Exception e) {
XspOpenLogUtil.logError(e);
}
}
public Database getAppData() {
CacheBean cache = CacheBean.getCurrentInstance();
Session session = Factory.getSession();
Database PCDataDB = session.getDatabase(cache.getPcDataDBpathJava());
return PCDataDB;
}
public void setAppData(Database appData) {
this.appData = appData;
}
}
どのような提案も大歓迎です。
ありがとうFrantisek。あなたの最初の答えは私を混乱させました。私はこれがうまくいくことをうれしく思っています。 –