You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by rs...@us.ibm.com on 2002/08/16 01:56:15 UTC
[axis] Please help me review list of axis properties and how they are
handled...
The question before me is how best to configure AXIS, given the following
assumptions:
- keep developers GOING
- satisfy admin
- AXIS standalone
- AXIS in J2EE environs (multiple instances, multiple configs...)
-- AXIS in base app server (axis.jar shared by everyone)
-- AXIS in webapp (axis.jar packaged in each webapp)
I've gone back to look at how the properties are actually used, and I
wanted to present the results of my analysis, and my thoughts. I'd
appreciate votes for/against each point.
First, a summary list of all properties that I found accessed by
System.getProperty (now AxisProperties.getProperty). I figure we can work
through OTHER properties later. The list:
axis.attachments.Directory
axis.EngineConfigFactory
axis.ClientConfigFile
axis.ServerConfigFile
axis.Compiler
axis.engineConfigClass
axis.Extractor
axis.socketFactory
axis.socketSecureFactory
axis.ServerFactory
axis.attachments.implementation
axis.enableListQuery
axis.jws.servletClassDir
axis.production-system
use-servlet-security
transport.name
java.protocol.handler.pkgs
sun.boot.class.path
user.home
http.proxyHost
http.proxyPort
http.proxyUser
http.proxyPassword
http.nonProxyHosts
https.proxyHost
https.proxyPort
https.proxyUser
https.proxyPassword
https.nonProxyHosts
Following is how I think these could/should be used & configured.
In a webapplication, some of these make sense as system-wide
(cross-application) properties, I THINK. I'm breaking that (SHORT) list
out here (it is inappropriate to override these with AXIS configuration,
these shouldn't be 'set' by AXIS or have much broader scope). These will
be wired BACK to System.getProperty():
sun.boot.class.path
java.protocol.handler.pkgs
user.home ? It might make sense to allow this to be overridden by
config...
do we want to do that?
The following are used by AxisServlet. Their values can be obtained from
System.getProperty (via AxisProperties), HttpServlet.getInitParameter(),
and ServletContext.getInitParameter(). I believe that these are best left
alone:
axis.enableListQuery
axis.jws.servletClassDir
use-servlet-security
transport.name
The following is also used by AxisServlet:
axis.production-system
I'm not a fan of this one :-( It's used ONLY in AdminServlet,
and I'd like to move it's visibility UP to there if we keep it.
That would satisfy my sensibilities, because we are not using
AdminServlet.
However, I would propose a pluggable command processor, default
as-is for development, provide a no-op.
I propose to handle the remaining as follows:
http.proxyHost
http.proxyPort
http.proxyUser
http.proxyPassword
http.nonProxyHosts
https.proxyHost
https.proxyPort
https.proxyUser
https.proxyPassword
https.nonProxyHosts
These are used by the CommonsHTTPSender and
DefaultSocketFactory.
Replace with pluggable component (TBD) that can obtain these
values.
[does it make sense
Default: use EngineConfiguration (if I cannot get that easily
from
CommonsHTTPSender or DefaultSocketFactory then will
have
to do some re-wiring.
These remainder I see as 'tricky' ones... they are in the AXIS core, and
so do NOT have visibility to the runtime environment the way AxisServlet
does (rather, AxisServlet can make assumptions that AxisEngine can't). On
the other hand, we really need a way to set them per webapp/instance. I'm
going to break that list into two parts:
Properties we need to set per instance (i.e. by webapp), cannot be set by
EngineConfiguration
axis.EngineConfigFactory
axis.engineConfigClass
Proposed resolution: introduce a plugpoint into AxisProperties
that allows us to plug a config source in, such as
HttpServlet.getInitParameter, ServletContext.getInitParameter(),
Property files, others. Noting that AxisProperties MAY be
installed in the app servers library, and loaded by a
classloader
common to all webapps, AxisProperties will cache these
property sources by thread-context-class-loader.
(that is the quick-fix - the REAL fix is to link everything back
to AxisEngine where this type of thing can be stored locally...)
Properties we can (and should) obtain from EngineConfiguration instead of,
or in addition to, AxisProperties:
axis.ClientConfigFile
axis.ServerConfigFile
axis.Compiler
axis.Extractor
axis.socketFactory
axis.socketSecureFactory
axis.ServerFactory
axis.attachments.Directory
axis.attachments.implementation
Using the plug-point introduced above, plug EngineConfiguration
properties in with everything else...
*******************************************
Richard A. Sitze
IBM WebSphere WebServices Development
Re: [axis] Please help me review list of axis properties and how they are handled...
Posted by Steve Loughran <st...@iseran.com>.
+1 for a plug point for new config systems; I dont like web.xml config as it
means generating a new war for every system, and rebuilding the war for
every change.
I've used dynamic config based on hostname in the past with a separate xml
file for each supported host, but like things like LDAP/JNDI for a cluster
(replicating the LDAP server to every cluster node for robustness). It would
be good if *all* settings could be driven from a single place. Of course,
that is its own config/boot problem.
+1 to documenting this all in one place. Putting all the property
declarations in one standalone class and javadocing that would be a start.
----- Original Message -----
> The following are used by AxisServlet. Their values can be obtained from
> System.getProperty (via AxisProperties), HttpServlet.getInitParameter(),
> and ServletContext.getInitParameter(). I believe that these are best left
> alone:
> axis.enableListQuery
email to me this week implies this switch does not work; we need to test it
> axis.jws.servletClassDir
> use-servlet-security
> transport.name
>
> The following is also used by AxisServlet:
>
> axis.production-system
>
> I'm not a fan of this one :-( It's used ONLY in AdminServlet,
> and I'd like to move it's visibility UP to there if we keep it.
> That would satisfy my sensibilities, because we are not using
> AdminServlet.
see previous comments. What I really want is a single insecure-dev;
secure-production switch that flips the entire system into paranoid mode,
not twenty different options as with IIS config.
we also have an implicit configuration of the log4j stuff, with known issues
about configuration of that -it should go from axis,jar and be left to
individual developers.
> However, I would propose a pluggable command processor, default
> as-is for development, provide a no-op.
+1;
> Proposed resolution: introduce a plugpoint into AxisProperties
> that allows us to plug a config source in, such as
> HttpServlet.getInitParameter, ServletContext.getInitParameter(),
> Property files, others. Noting that AxisProperties MAY be
> installed in the app servers library, and loaded by a
> classloader
> common to all webapps, AxisProperties will cache these
> property sources by thread-context-class-loader.
> (that is the quick-fix - the REAL fix is to link everything back
> to AxisEngine where this type of thing can be stored locally...)
>
There was good stuart holloway article on config on develop.com recently;
one thing we may want to do is a jakarta version of the java1.4 properties
API for earlier java versions, one of those if-only-I-had-free time things
I'd like to do but wont as I havent.
NB; any way to do live property changes? You can do this with log4j polling
a file system, which is something we will implicitly enable once we rip out
log4j.properties,.