Ask the message context for it:
MessageContext.getCurrentContext().getProperty(HTTPConstants.MC_HTTP_SERVLETREQUEST);
-Dug
"Tuan Le Viet" <[EMAIL PROTECTED]> on 10/01/2002 08:47:24 AM
Please respond to [EMAIL PROTECTED]
To: <[EMAIL PROTECTED]>
cc:
Subject: RE: Dynamic publishing
Hi Dug,
Supposed that I have account.wsdl.
To create web service, I'll do like this:
+Run wsdl2java on account.wsdl, I'll get:
Account.java
AccountService.java
AccountServiceLocator.java
AccountSoapBindingImpl.java
AccountSoapBindingSkeleton.java
AccountSoapBindingStub.java
+I will have to write the body for AccountSoapBindingImpl.java. This is the
main class for Account service.
Class hierarchy: interface Account extends interface java.rmi.Remote
class AccountSoapBindingImpl implements interface
Account
So from inside AccountSoapBindingImpl, how do I get ServletRequest object?
Cheers,
Tuan
-----Original Message-----
From: Doug Davis [mailto:[EMAIL PROTECTED]]
Sent: 2002/10/01 (火) 19:12
To: [EMAIL PROTECTED]
Cc:
Subject: RE: Dynamic publishing
By default, if you use the URLMapper, yes axis will want the base URL
to
be:
http://host:port/axis/service/account
but you can add on any parameters you want (as long as Axis isn't
using it
- like
?wsdl). So adding on "?account=12345" will be ok because it will be
ignored by
Axis. Then, in your service you can just get the full URL (or get
the
Servlet Request
object) and get the parameters (account) you want/need.
-Dug
"Tuan Le Viet" <[EMAIL PROTECTED]> on 10/01/2002 08:04:57 AM
Please respond to [EMAIL PROTECTED]
To: <[EMAIL PROTECTED]>
cc:
Subject: RE: Dynamic publishing
Hi Dug,
You got me here :-)
Just one practical question, is that possible to have the URL looks
like
http://host:port/axis/services/account?number=12345 <
http://host:port/axis/services/account?number=12345> for my service.
I
thought Axis mandates Webservice URL to be
http://host:port/axis/services/MyService. If it's possible how do i
get the
parameter.
Thanx.
Tuan
-----Original Message-----
From: Doug Davis [mailto:[EMAIL PROTECTED]]
Sent: 2002/10/01 (火) 18:46
To: [EMAIL PROTECTED]
Cc:
Subject: RE: Dynamic publishing
You can do that - just make the account number part of the
parameters
of
the URL instead of the address part of the URL.
By that I mean, *don't* tell them the url is:
http://host:port/axis/services/account12345
tell them to use:
http://host:port/axis/services/account?number=12345
then you only need one instance of the service.
The client won't (or shouldn't) care what the total URL looks
like,
its
just a string so there's no extra work on their part. All of
the
extra
work is on _your_ side - which isn't much - its just grabbing
the
"number"
parameter.
-Dug
"Tuan Le Viet" <[EMAIL PROTECTED]> on 10/01/2002 07:42:22
AM
Please respond to [EMAIL PROTECTED]
To: <[EMAIL PROTECTED]>
cc:
Subject: RE: Dynamic publishing
Hi Dug,
I totally agree with you that Axis should just worry about SOAP
processing,
back-end system should deal with other issues.
My idea is that BankAccount user wouldn't have to pass account
ID
everytime, it would be nicer if account ID will be supplied
only once
to
get the reference to Account object (in this case reference is
just a
URL),
then during the entire session, user wouldn't have to pass
along
account ID
whenever deposit/withdraw/checkBalance is invoked. Account
object is
just a
proxy to back-end system though, so it should be light-weight.
I reckon this approach is a bit more OO, and doesn't SOAP stand
for
Simple
OBJECT Access Protocol?
Cheers,
Tuan Le
-----Original Message-----
From: Doug Davis [mailto:[EMAIL PROTECTED]]
Sent: 2002/10/01 (火) 18:06
To: [EMAIL PROTECTED]
Cc:
Subject: RE: Dynamic publishing
Just my opinion of course, but a couple of things
immediately
come to
mind...lets say you have thousands and thousands of bank
accounts
you're
looking at having Axis manage a ton of services - which
as of
now I
doubt
it would be really good at. At a minimum you'd need to
create
a new
configuration plug-in that should store its list in
something
like a
DB -
something that wouldn't require the entire list to be in
memory
(like
I
believe the current one does). And on the topic of
memory -
you
would be
looking at have Axis create a new instance of each bank
account
object -
depending on how well the garbage collection is that
could be a
memory hog
as well. I think it would be a much cleaner approach to
just
have
one bank
account object, and as long as it is thread safe, you can
reuse
it a
million times w/o any memory problems. Then just have it
look
at
some
other piece of data (like soap header, rpc param, or
url(?account=xxxx)) to
get the actual account number. Let your real back-end
system
that's
managing the accounts deal with all of the performance
problems
of
thousands of records - let Axis worry about what its
supposed
to:
SOAP
processing. Think of it this way - let's say you were
going to
provide a
web/html interface for your customers, would you consider
a new
servlet for
each account? Modifying web.xml everytime a new customer
were
created? I
doubt (or hope) not. So, why treat web services any
differently?
-Dug
"Tuan Le Viet" <[EMAIL PROTECTED]> on 09/30/2002
11:48:39
PM
Please respond to [EMAIL PROTECTED]
To: <[EMAIL PROTECTED]>
cc:
Subject: RE: Dynamic publishing
Dug,
My idea was to have a more OO approach. I'll have a
manager
which
manages
lifetime of Account service. Each service will be
published
when
necessary
and unpublished when it's no longer needed.
This would not be a nightmore for scalability right?
Cheers,
Tuan
-----Original Message-----
From: Doug Davis [mailto:[EMAIL PROTECTED]]
Sent: 2002/10/01 (火) 8:16
To: [EMAIL PROTECTED]
Cc:
Subject: RE: Dynamic publishing
Sorry - missed that, but why would you really want
to
deploy
one
service
per account? That's going to be a scalability
nightmare.
Why
not
just
have the account number in a soap header, as a
param on
an rpc
call
or even
in the URL (ie.
http://localhost:8080/axis/services/BankServices?account=12345
- to
the
client the URL is just a string so adding on
?account=12345
should be
no
big deal).
-Dug
"Tuan Le Viet" <[EMAIL PROTECTED]> on
09/30/2002
08:17:30
PM
Please respond to [EMAIL PROTECTED]
To: <[EMAIL PROTECTED]>
cc:
Subject: RE: Dynamic publishing
As I understand, jws is just a java source file.
Axis
will
publish
this
java class as web service automatically.
However, this wouldn't solve my problem as my
intention
is to
create
a web
service for each instance of the same class.
Cheers,
Tuan
-----Original Message-----
From: Doug Davis [mailto:[EMAIL PROTECTED]]
Sent: 2002/10/01 (火) 7:06
To: [EMAIL PROTECTED]
Cc:
Subject: RE: Dynamic publishing
What about deploying (dropping) a jws file -
Aixs
processes
that
dynamically.
-Dug
"Tuan Le Viet" <[EMAIL PROTECTED]> on
09/30/2002
07:59:17
PM
Please respond to [EMAIL PROTECTED]
To: <[EMAIL PROTECTED]>
cc:
Subject: RE: Dynamic publishing
Grant,
It's obviously your solution is a feasible
work-around.
However, as
you
stated, it's really a big mess.
Now I consider switching to GLUE which
supports
dynamic
publishing
from the
beginning. If you're interested, take a look
at
http://www.themindelectric.com
However, I really do hope that there is a
clean
solution
using
Axis.
Probably in near future.
Cheers,
Tuan
-----Original Message-----
From: Grant Echols (JanusLogix)
[mailto:[EMAIL PROTECTED]]
Sent: 2002/09/30 (月) 22:09
To: [EMAIL PROTECTED]
Cc:
Subject: Re: Dynamic publishing
Tuan,
I have a similar need but for a totally
different
reason.
We
have a
services
framework and want to dynamically
publish
public
'service
entry
points' at
runtime through Axis SOAP. We only have
a
Java
class file
and
an
associated
interface as parameters so we have to
make up
the
rest of
the
difference.
Right now we're spawning Java2WSDL and
WSDL2Java
back to
back
so I
can get a
.WSDD file and then call the
AdminClient to
deploy
the
deploy.wsdd
file. Its
a mess and I wish there was a better
way to
do
this. At
this
point we
were
too unsure of the deploy.wsdd file
format to
generate it
ourselves.
Perhaps
even having this documented, or having
a
class that
we
could
instantiate and
call instead of actually spawning the
wsdl...
utilities
would
be
better. But
for now, its working...:-(
I'm hoping someone has a better way and
will
respond, but
if
you're
still
stuck you could possibly consider this
route
as an
interim
solution.
Grant
----- Original Message -----
From: "Tuan Le Viet"
<[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Thursday, September 26, 2002
11:13 PM
Subject: Dynamic publishing
> Hi there,
>
> Does Axis support "dynamic
publishing"?
>
> My intention:
>
> +I have a class called BankAccount
with 3
methods:
>
> +void deposit(int amount)
>
> +void withdraw(int amount)
>
> +int checkBalance()
>
> +I have a class Bank, which have 1
method:
String
getAccount(String
accountNo).
>
> +I statically publish it as Web
service,
users
will
call
getAccount
method
to get the URL to BankAccount web
service,
for
example:
if user
called
getAccount("12345"), URL returned is:
http://somehost/axis/services/account12345
>
> +users then interact with this
BankAccount
webservice
to
deposit,
withdraw, checkBalance.
>
> +In order to achieve this, it's
required to
dynamically
publish
each
BankAccount instance as a web service.
>
> Is this possible with Axis?
>
> I would really appreciate any
pointers.
>
> Cheers,
>
> Tuan
>
>
>
>
>
>