一个连接池的例子(来自JIVE)(6)-JSP技术-3P代码网
繁体中文
设为首页
加入收藏
当前位置:JSP技术首页 >> 数据库相关 >> 一个连接池的例子(来自JIVE)(6)

一个连接池的例子(来自JIVE)(6)

2004-10-01 08:26:10  作者:  来源:互联网  浏览次数:36  文字大小:【】【】【
简介://文件:PropertyManager.java //这个类其实没什么用了,可以去掉,但需要去掉前面几个类中对这个类的引用。 package com.qingtuo.db.pool; import java.util.*; import java.io.*; /** * Manages propertie...
关键字:例子 一个 JIVE

//文件:PropertyManager.java

//这个类其实没什么用了,可以去掉,但需要去掉前面几个类中对这个类的引用。

package com.qingtuo.db.pool;

import java.util.*;

import java.io.*;

/**

* Manages properties for the entire Jive system. Properties are merely

* pieces of information that need to be saved in between server restarts.

*

* At the moment, properties are stored in a Java Properties file. In a version

* of Jive coming soon, the properties file format will move to XML. XML

* properties will allow hierarchical property structures which may mean the

* API of this class will have to change.

*

* Jive properties are only meant to be set and retrevied by core Jive classes.

* Therefore, skin writers should probably ignore this class.

*

* This class is implemented as a singleton since many classloaders seem to

* take issue with doing classpath resource loading from a static context.

*/

public class PropertyManager {

private static PropertyManager manager = null;

private static Object managerLock = new Object();

private static String propsName = "/pcc_2000.properties";

/**

* Returns a Jive property

*

* @param name the name of the property to return.

* @returns the property value specified by name.

*/

public static String getProperty(String name) {

if (manager == null) {

synchronized(managerLock) {

if (manager == null) {

String sysname=System.getProperty("os.name").toUpperCase();

if(sysname.indexOf("WIN")!=-1){

propsName=propsName2000;

}

else{

propsName=propsNameLinux;

}

manager = new PropertyManager(propsName);

}

}

}

return manager.getProp(name);

}

/**

* Sets a Jive property.

*

* @param name the name of the property being set.

* @param value the value of the property being set.

*/

public static void setProperty(String name, String value) {

if (manager == null) {

synchronized(managerLock) {

if (manager == null) {

manager = new PropertyManager(propsName);

}

}

}

manager.setProp(name, value);

}

/**

* Returns true if the properties are readable. This method is mainly

* valuable at setup time to ensure that the properties file is setup

* correctly.

*/

public static boolean propertyFileIsReadable() {

if (manager == null) {

synchronized(managerLock) {

if (manager == null) {

manager = new PropertyManager(propsName);

}

}

}

return manager.propFileIsReadable();

}

/**

* Returns true if the properties are writable. This method is mainly

* valuable at setup time to ensure that the properties file is setup

* correctly.

*/

public static boolean propertyFileIsWritable() {

if (manager == null) {

synchronized(managerLock) {

if (manager == null) {

manager = new PropertyManager(propsName);

}

}

}

return manager.propFileIsWritable();

}

/**

* Returns true if the jive.properties file exists where the path property

* purports that it does.

*/

public static boolean propertyFileExists() {

if (manager == null) {

synchronized(managerLock) {

if (manager == null) {

manager = new PropertyManager(propsName);

}

}

}

return manager.propFileExists();

}

private Properties properties = null;

private Object propertiesLock = new Object();

private String resourceURI;

/**

* Singleton access only.

*/

private PropertyManager(String resourceURI) {

this.resourceURI = resourceURI;

}

/**

* Gets a Jive property. Jive properties are stored in jive.properties.

* The properties file should be accesible from the classpath. Additionally,

* it should have a path field that gives the full path to where the

* file is located. Getting properties is a fast operation.

*/

public String getProp(String name) {

//If properties aren't loaded yet. We also need to make this thread

//safe, so synchronize...

if (properties == null) {

synchronized(propertiesLock) {

//Need an additional check

if (properties == null) {

loadProps();

}

}

}

return properties.getProperty(name);

}

/**

* Sets a Jive property. Because the properties must be saved to disk

* every time a property is set, property setting is relatively slow.

*/

public void setProp(String name, String value) {

//Only one thread should be writing to the file system at once.

synchronized (propertiesLock) {

//Create the properties object if necessary.

if (properties == null) {

loadProps();

}

properties.setProperty(name, value);

//Now, save the properties to disk. In order for this to work, the user

//needs to have set the path field in the properties file. Trim

//the String to make sure there are no extra spaces.

String path = properties.getProperty("path").trim();

OutputStream out = null;

try {

out = new FileOutputStream(path);

properties.store(out, "jive.properties -- " + (new java.util.Date()));

}

catch (Exception ioe) {

System.err.println("There was an error writing jive.properties to " + path + ". " +

"Ensure that the path exists and that the Jive process has permission " +

"to write to it -- " + ioe);

ioe.printStackTrace();

}

finally {

try {

out.close();

} catch (Exception e) { }

}

}

}

/**

* Loads Jive properties from the disk.

*/

private void loadProps() {

properties = new Properties();

InputStream in = null;

try {

in = getClass().getResourceAsStream(resourceURI);

properties.load(in);

}

catch (IOException ioe) {

System.err.println("Error reading Pcc properties" + ioe);

ioe.printStackTrace();

}

finally {

try {

in.close();

} catch (Exception e) { }

}

}

/**

* Returns true if the properties are readable. This method is mainly

* valuable at setup time to ensure that the properties file is setup

* correctly.

*/

public boolean propFileIsReadable() {

try {

InputStream in = getClass().getResourceAsStream(resourceURI);

return true;

}

catch (Exception e) {

return false;

}

}

/**

* Returns true if the jive.properties file exists where the path property

* purports that it does.

*/

public boolean propFileExists() {

String path = getProp("path");

File file = new File(path);

if (file.isFile()) {

return true;

}

else {

return false;

}

}

/**

* Returns true if the properties are writable. This method is mainly

* valuable at setup time to ensure that the properties file is setup

* correctly.

*/

public boolean propFileIsWritable() {

String path = getProp("path");

File file = new File(path);

if (file.isFile()) {

//See if we can write to the file

if (file.canWrite()) {

return true;

}

else {

return false;

}

}

else {

return false;

}

}

private static String propsName2000 = "/pcc_2000.properties";

private static String propsNameLinux = "/pcc_linux.properties";

}

责任编辑:admin
相关文章