关于war部署过程properties文件的复制

17 views
Skip to first unread message

owen nirvana

unread,
Sep 27, 2009, 12:40:46 PM9/27/09
to glassfi...@googlegroups.com
我在netbeans里写一个web service 的工程,里面用到了log4j的properties,
在build-impl.xml里增加了拷贝到WEB-INF/classes,生成的war里也确实背靠背到了正确的位置,但是在部署的过程中,glassfish
似乎只会复制xml和class,很明显,这个properties文件被忽略了,我不知道应该如何设置使GF能够正确的部署

谢谢大家的帮助
gtalk:freee...@gmail.com

Luo, Yong

unread,
Sep 27, 2009, 8:44:31 PM9/27/09
to glassfi...@googlegroups.com

工程的封装格式是war还是jar?

Hantsy Bai

unread,
Sep 28, 2009, 12:08:52 AM9/28/09
to glassfi...@googlegroups.com
应该是打包的问题吧。
自己先确定一下,运行Build ,看看打的war包是否包含。
像log4j.properties,开发时只要将它放入是Source下面就行了,不用修改项目的
build.xml文件。

--
Hantsy Bai
Guangzhou, China
http://hantsy.blogspot.com

Judy Tang

unread,
Sep 28, 2009, 3:22:41 AM9/28/09
to glassfi...@googlegroups.com
谢谢Luo, Yong 和 Hantsy 帮忙 !

FishCAT Testing 开始了,都来抓 BUG :-)

问好大家。国庆长假都会去哪里玩呢 。。。祝长假快乐 。。。 !

Judy

mono

unread,
Sep 28, 2009, 4:02:02 AM9/28/09
to GlassFish_China
工程是NB6.7.1 下的,我没有权限,不能发上来发到阁下邮箱里罢

On Sep 28, 12:08 pm, Hantsy Bai <han...@gmail.com> wrote:
> On 09/28/2009 08:44 AM, Luo, Yong wrote:
>
>
>
> > 工程的封装格式是war还是jar?
>
> > -----Original Message-----
> > From: glassfi...@googlegroups.com [mailto:glassfi...@googlegroups.com] On Behalf Of owen nirvana
> > Sent: Monday, September 28, 2009 12:41 AM
> > To: glassfi...@googlegroups.com
> > Subject: 关于war部署过程properties文件的复制
>
> > 我在netbeans里写一个web service 的工程,里面用到了log4j的properties,
> > 在build-impl.xml里增加了拷贝到WEB-INF/classes,生成的war里也确实背靠背到了正确的位置,但是在部署的过程中,glassfish
> > 似乎只会复制xml和class,很明显,这个properties文件被忽略了,我不知道应该如何设置使GF能够正确的部署
>
> > 谢谢大家的帮助

> > gtalk:freeespe...@gmail.com

owen nirvana

unread,
Sep 28, 2009, 4:03:01 AM9/28/09
to GlassFish_China
这个是工程文件
gtalk:freee...@gmail.com

2009/9/28 mono <freee...@gmail.com>:

ws.zip

Hantsy Bai

unread,
Sep 28, 2009, 8:39:26 AM9/28/09
to glassfi...@googlegroups.com
看了下项目,两个现有的例子而已,运行build也试了下,war 包了
log4j.properties 文件,在服务器上部署war ,首先就是解压,估计你根本没有
去检查(上一封邮件中已经提到)。
我在 glassfish 下运行也没有问题。
输出见附件。


其中运行时的一个FileNotFoundException,是你的代码
“PropertyConfigurator.configure("log4j.properties");”引起的。
这是一个非常低级的程序问题。

这只能说明你没有了解 PropertyConfigurator的使用,和“这个properties文件被
忽略了”,还有glassfish 八杆子都打不着。

log4j 默认会从classpath查找log4j.properties或者log4j.xml配置文件,一般使
用不需要指定位置。

首先你自己看看自己的log4j.properties内容吧(应该有点问题), 使用之前最好
去先看看log4j官方文档,我想最基本的使用方法只需要几分种时间。


### set log levels ###
log4j.rootLogger = info, stdout,D


log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = %d{ABSOLUTE} %5p
%c{1}:%L - %m%n


log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = logs/app.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = INFO
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [
%t:%r ] - [ %p ] %m%n


log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = logs/error.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = ERROR
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [
%t:%r ] - [ %p ] %m%n

Screenshot-SecureWSITClient - NetBeans IDE 6.7.1.png

owen nirvana

unread,
Sep 28, 2009, 9:14:33 AM9/28/09
to glassfi...@googlegroups.com
谢谢回复,我已经检查过了,正是因为部署的时候没有发现log4j.properties才会提这个问题出来,刚才我又再次检查了一下,发现使用gf的手动部署,是没有问题,所有应该被部署的文件都在,但是使用NB部署就有问题,properties是不会被包含在里面的


>>>其中运行时的一个FileNotFoundException,是你的代码
>>>"PropertyConfigurator.configure("log4j.properties");"引起的。
>>>这是一个非常低级的程序问题。

log4j查找属性文件的顺序确是如您所说,但是这句并不是原因所在,这是我的习惯而已,显式地指出配置文件的位置应该没有什么问题,无非是多余而已。我想如果这句引起问题的话,那么log4j自动查找也不可能查找得到。刚才我也说了,确实是GF_HOME/domains/my_domain里根本就没有properties文件,其实这也适用于其他的配置文件读取,方便描述问题起见,没有列在这个程序逻辑里。

配置文件中的配置有问题只会引起日志记录的问题,也并不会导致找不到配置的问题,这个配置文件我确实没有真正自己自己配置,是我早先在网上down下来的,它没有问题(或者说没有我发现的问题,也没有导致这个错误出现的问题),因为我在其他工程里也用的这个文件,运行的好好的。

我想,如您所说,现在基本可以确定不是GF的问题,问题似乎出在NB的自动部署上,当然原因还是我自己疏于检查,或者没有理解,在哪一步出了问题,还请阁下和各位兄台指教

谢谢


gtalk:freee...@gmail.com

2009/9/28 Hantsy Bai <han...@gmail.com>:

Hantsy Bai

unread,
Sep 28, 2009, 10:46:41 AM9/28/09
to glassfi...@googlegroups.com

我不知道你用的什么版本的NetBeans, Glassfish , 我使用的是最新稳定版本,
NetBeans 6.7.1, GlassFish V2.1,最新的NetBeans 支持 Glassfish 热部署特
性,项目是不会复制到gf 目录中。glassfish 会自动监控 NetBeans 项目的
build 目录的变化,这是由 NetBeans 来完成的。

一般 war 在 glassfish 下,部署时丢到 GF_HOME/domains/<你的domain>/autodeploy 下就行了。应用 war 会解压到 GF_HOME/domains/<你的domain>/applications 下。

但热部署时,上面你所说的目录中不但不会有log4j.properties 文件,而且连项目目录都不会有。

不存在复制文件到服务器目录的过程,当然也不存在你所说的复制丢失问题。

前面已经说我在 netbeans 部署也没有问题(log.info 内容也打印出来的,上封邮件的图片,当然有那行代码只会抛出异常,是不出现的log.info内容的),我现在是搞不清你是什么问题。

owen nirvana

unread,
Sep 28, 2009, 12:08:37 PM9/28/09
to glassfi...@googlegroups.com
是这样的,那看来是我不了解GF的热部署了,谢谢,我先了解一下GF的热部署细节再来问这个问题。

owen nirvana

unread,
Sep 28, 2009, 12:11:44 PM9/28/09
to glassfi...@googlegroups.com
我用手动部署,是不会抛出异常的,也许我理解的有问题,但是显式的指明配置文件与自动查找并不存在两套完全不同的流程,不可能前者异常而后者没有问题,异常本就是为了处理错误,如果令其自动查找忽略这个问题,也许不是个好习惯
gtalk:freee...@gmail.com

2009/9/29 owen nirvana <freee...@gmail.com>:

Hantsy Bai

unread,
Sep 28, 2009, 1:50:24 PM9/28/09
to glassfi...@googlegroups.com
当然不会有两套不同流程,关键是通过你指定的参数它没有找到log4j.properties ,它出错了,才会出异常。
PropertyConfigurator.configure("log4j.properties") 会从哪个位置读取log4j.properties ,你看过它的 API 或者源代码吗?
如果没有查看过,你怎么确定和自动查找方式一样,会默认查找classpath 下的log4j.properties?最好自己看看PropertyConfigurator.configure 中的路径是怎么处理的。

你的问题准确的说应该是“PropertyConfigurator.configure("log4j.properties")为什么会抛出FileNotException异常”. 
现在又回到开始,就是你一行代码的问题而已,扯来扯去的。

Judy Tang

unread,
Sep 28, 2009, 1:40:40 PM9/28/09
to glassfi...@googlegroups.com
哈,严师出高徒啊,谢谢Hantsy, 希望owen很快就能找到问题,如果是product bug, please let me know.  Thanks :-)

owen nirvana

unread,
Sep 28, 2009, 10:01:14 PM9/28/09
to glassfi...@googlegroups.com
谢谢,我先看看代码
gtalk:freee...@gmail.com

2009/9/29 Judy Tang <Judy....@sun.com>:

phoenix clt

unread,
Oct 17, 2009, 9:38:52 AM10/17/09
to glassfi...@googlegroups.com
如果你用的 ProperiesConfiguration 是用的 apache 的 , 并且我没有记错的话

PropertiesConfiguration("") 是用的文件系统的 File , 当让它也提供了一个load,那是另外一种了。

在用相对路径时,文件路径 默认是执行java命令时所在的目录。

以ant 为 例, 用 ant 执行java , 那么File的相对目录值的是 执行ant 时所在的目录。

如果你用 exe 程序去调java ,那么 相对目录是 exe程序所在目录。
以apache + svn + jar(用来做hooks) 为例,相对目录是 httpd.exe 所在的目录,而不是jar包所在的目录。


2009/9/29 owen nirvana <freee...@gmail.com>

Judy Tang

unread,
Oct 18, 2009, 2:34:17 AM10/18/09
to glassfi...@googlegroups.com
哈,又来一个高手,谢谢 !

问好这里的朋友们,周末好 :)




phoenix clt wrote:
如果你用的 ProperiesConfiguration 是用的 apache 的 , 并且我没有记错的话

PropertiesConfiguration("") 是用的文件系统的 File , 当让它也提供了一个load,那是另外一种了。

在用相对路径时,文件路径 默认是执行java命令时所在的目录。

以ant 为 例, 用 ant 执行java , 那么File的相对目录值的是 执行ant 时所在的目录。

如果你用 exe 程序去调java ,那么 相对目录是 exe程序所在目录。
以apache + svn + jar(用来做hooks) 为例,相对目录是 httpd.exe 所在的目录,而不是jar包所在的目录。


2009/9/29 owen nirvana <freee...@gmail.com>
谢 谢,我先看看代码
> 哈,严师出高徒啊,谢谢Hantsy, 希望owen很快就能找到问题,如果是product bug, please let me know.
> Thanks :-)
>
> Hantsy Bai wrote:
>
> 当然不会有两套不同流程,关键是通过你指定的参数它没有找到log4j.properties ,它出错了,才会出异常。
>
> PropertyConfigurator.configure("log4j.properties") 会从哪个位置读取log4j.properties
> ,你看过它的 API 或者源代码吗?
> 如果没有查看过,你怎么确定和自动查找方式一样,会默认查找classpath
> 下的log4j.properties?最好自己看看PropertyConfigurator.configure 中的路径是怎么处理的。
>
> 你的问题准确的说应该是"PropertyConfigurator.configure("log4j.properties")为什么会抛出 FileNotException异常".

> 现在又回到开始,就是你一行代码的问题而已,扯来扯去的。
>
>
> On 09/29/2009 12:11 AM, owen nirvana wrote:
>
> 我用手动部署,是不会抛出异常的,也许我理解的有问题,但是显式的指明配置文件与自动查找并不存在两套完全不同的流程,不可能前者异常而后者没有问题,异 常本就是为了处理错误,如果令其自动查找忽略这个问题,也许不是个好习惯

> gtalk:freee...@gmail.com
>
>
>
> 2009/9/29 owen nirvana <freee...@gmail.com>:
>
>
> 是这样的,那看来是我不了解GF的热部署了,谢谢,我先了解一下GF的热部署细节再来问这个问题。
>
> gtalk:freee...@gmail.com
>
>
>
> 2009/9/28 Hantsy Bai <han...@gmail.com>:
>
>
> On 09/28/2009 09:14 PM, owen nirvana wrote:
>
>
> 谢谢回复,我已经检查过了,正是因为部署的时候没有发现log4j.properties才会提这个问题出来,刚才我又再次检查了一下,发现使用gf的手 动部署,是没有问题,所有应该被部署的文件都在,但是使用NB部署就有问题,properties是不会被包含在里面的

>
>
>
>
>
> 其中运行时的一个FileNotFoundException,是你的代码
> "PropertyConfigurator.configure("log4j.properties");"引起的。
> 这是一个非常低级的程序问题。
>
>
>
> log4j查找属性文件的顺序确是如您所说,但是这句并不是原因所在,这是我的习惯而已,显式地指出配置文件的位置应该没有什么问题,无非是多余而已。我 想如果这句引起问题的话,那么log4j自动查找也不可能查找得到。刚才我也说了,确实是GF_HOME/domains/my_domain里根本就没 有properties文件,其实这也适用于其他的配置文件读取,方便描述问题起见,没有列在这个程序逻辑里。
>
> 配置文件中的配置有问题只会引起日志记录的问题,也并不会导致找不到配置的问题,这个配置文件我确实没有真正自己自己配置,是我早先在网上down下来 的,它没有问题(或者说没有我发现的问题,也没有导致这个错误出现的问题),因为我在其他工程里也用的这个文件,运行的好好的。
Reply all
Reply to author
Forward
0 new messages