中间件中的单实例或静态工厂的处理问题

steven_cheng 2004-08-09 06:19:50
是这样的,在开发中间件程序的时候考虑到这样一个问题。比如,log4J,在开发中间件的时候,我们需要用到log4J,中间件提供给集成商后,他也可能用到log4J。我们都知道log4J的使用上是一个静态工厂,如果有两次初始化,那后一次的起作用。
这个问题就是:如何在一个JVM上有多个Log4J工厂的实例,互相隔绝。
查了一些资料,ClassLoader应该能实现这个功能。但是不知道具体怎么做。请高手指教。
...全文
196 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
connection999 2005-08-05
  • 打赏
  • 举报
回复
方成eform自定义表单平台,纯BS结构.100%开放源码.可以在 http://218.30.103.110:8080/eform/index.html 在线试用.

eform自定义表单平台是一个在IE浏览器中可视化的设计软件界面的工具。无论是输入界面还是报表界面,无论是简单的输入查询还是复杂的逻辑处理。都可以由eform设计出来。

eform自定义表单平台适用于网上OA系统的自定义表单模块,工作流系统的自定义表单模块,信息管理系统方面的软件开发项目等等。
yeshucheng 2005-07-20
  • 打赏
  • 举报
回复
这个帖子还够老的了:)
understand999 2005-07-20
  • 打赏
  • 举报
回复
eprint自定义打印是解决B/S模式下报表打印问题的一个工具,用于应对各种复杂的中国式报表打印。能够快速实现打印格式设计,格式维护,以及和用户系统的无缝集成,是web方式下实现报表打印的最快最佳的解决方案。

eprint自定义打印真正做到打印格式的完全自定义,采用和FastReport类似的布局来设计报表打印格式,通过数据集作为中间层和用户系统做接口,在设计报表打印格式时,选择数据结构(与字段信息类似)生成打印格式;在生成打印报表时,自动填充数据集中的记录数据,生成打印数据;同时支持打印纸型,打印方向,页边距等等打印参数的个性化定义。eprint自定义打印支持各种类型的复杂报表打印,真正做到“所见即所得”的图形化界面来设计打印格式,支持各种证件,票据套打等等。适用于j2ee,dotnet,linux等多种平台,通过中间层数据集和用户系统做关联,后台支持任意数据库环境。


eForm是一个页面设计工具,它既能完成静态HTML页面的设计,也能读写数据库完成动态页面设计。它采图形化可视化操作,所见即所得;通过拖拉即可完成表单设计。提供多种数据类型和Html控件,并预实现常见的业务逻辑功能(新增、删除、修改、查看、查询、报表、打印、图表等),用户无需编程或是修改代码,完全在界面上操作即可设计完页面;也能写一些事件的代码以完成复杂表单的设计。
eForm实际上就是一个构件库,它对大量实用的控件进行了结构化的封装和调试。通过简单的拖拉设置就可以实现控件所能实现的功能,从而大大减少了代码的编写和调试难度.

cbhyk 2004-08-10
  • 打赏
  • 举报
回复
可以使用多个配置文件对log4j进行配置的。

使用org.apache.log4j.PropertyConfigurator

public class PropertyConfigurator extends Object implements Configurator

Allows the configuration of log4j from an external file. See doConfigure(String, LoggerRepository) for the expected format.


public static void configure(String configFilename)


public static void configure(URL configURL)
Read configuration options from url configURL.


public static void configure(Properties properties)

Read configuration options from properties. See doConfigure(String, LoggerRepository) for the expected format.


public void doConfigure(String configFileName,
LoggerRepository hierarchy)

Read configuration from a file. The existing configuration is not cleared nor reset. If you require a different behavior, then call resetConfiguration method before calling doConfigure.

注意上面的这句话:The existing configuration is not cleared nor reset

例:
logs1.properties:

log4j.logger.log1=debug,A2
log4j.appender.A2=org.apache.log4j.FileAppender
log4j.appender.A2.File=log1.log
log4j.appender.A2.Append=true
log4j.appender.A2.layout=org.apache.log4j.PatternLayout
log4j.appender.A2.layout.ConversionPattern=%-5r %-5p [%t] %c{2} - %m%n
log4j.additivity.log1=false


log2.properties:

log4j.logger.log2=debug,A2
log4j.appender.A2=org.apache.log4j.FileAppender
log4j.appender.A2.File=log2.log
log4j.appender.A2.Append=true
log4j.appender.A2.layout=org.apache.log4j.PatternLayout
log4j.appender.A2.layout.ConversionPattern=%-5r %-5p [%t] %c{1} - %m%n
log4j.additivity.log2=false


public class Test
{
public static void main(String[] args)
{
PropertyConfigurator.configure("logs1.properties");
PropertyConfigurator.configure("logs2.properties");
Logger log1 = Logger.getLogger("log1");
Logger log2 = Logger.getLogger("log2");
log1.info("test1");
log2.info("test2");
}
}
HITZXL 2004-08-10
  • 打赏
  • 举报
回复
study
ITxiaopang 2004-08-10
  • 打赏
  • 举报
回复
全是五个三角!顶
steven_cheng 2004-08-09
  • 打赏
  • 举报
回复
我们开发的是中间件。我们不能强迫用户用我们的log4j的配置。同样,我们也不可能以后在用户实施的时候让我们的系统用用户的配置。我希望的是,将来用户实施的时候,根本不关心我们的配置。
jeffyan77 2004-08-09
  • 打赏
  • 举报
回复
同一个log4j的instance也可以写到不同的log文件中,因此使用多个instance有何必要?
松耦合紧内聚 2004-08-09
  • 打赏
  • 举报
回复
watch
shuneng 2004-08-09
  • 打赏
  • 举报
回复
gz
yeshucheng 2004-08-09
  • 打赏
  • 举报
回复
public class EJBHomeFactory {
private Map eHomes;
private static EJBHomeFactory aFactorySingleton;

Context ctx;

private EJBHomeFactory() throws NamingException {
ctx = new InitialContext();
this.eHomes= Collections.synchronizedMap(new HashMap());
}

/*
* Returns the singleton instance of the EJBHomeFactory
**/
public static EJBHomeFactory getFactory() throws NamingException {
if (EJBHomeFactory.aFactorySingleton == null) {
EJBHomeFactory.aFactorySingleton = new EJBHomeFactory();
}
return EJBHomeFactory.aFactorySingleton;
}

public Object lookUpHome(String name) throws NamingException {
Object theEJBHome = this.ejbHomes.get(name);

if (theEJBHome == null) {
theEJBHome = ctx.lookup(name);
this.eHomes.put(name, theEJBHome );
}
return anEJBHome;
}

public EJBHome lookUpHome(Class homeClass) throws NamingException {
EJBHome theEJBHome = (EJBHome)this.eHomes.get(homeClass);

if (theEJBHome == null) {
theEJBHome = (EJBHome) javax.rmi.PortableRemoteObject.narrow(
ctx.lookup(homeClass.getName()), homeClass);
this.eHomes.put(homeClass, theEJBHome );
}
return theEJBHome ;
}
}

51,396

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧