-
1. Re: SOAP and JBoss
juha Sep 15, 2003 12:00 AM (in response to alindh)Don't have many pointers on how to do it with 2.4 and Apache SOAP. I believe Dr. Jung did something similar with ZOAP but that project has been discontinued.
This should become easier with the 3.0 series of JBoss as the new architecture gets put in place. If you need it in 2.4 you will need to hack together your own container invoker which accepts and sends SOAP messages.
Another possiblity might be passing the invocations through JMS and have a message bean receiving them on the other end. On the client side you'd need to use a COM<->JMS bridge such as Active JMS or maybe Codemesh JMS Courier. You would need to explicitly pass the session ID with the messages or map your application ID's to Session proxies in the message bean.
Haven't tried any of the above ;-)
http://active-jms.sourceforge.net/
http://www.codemesh.com/en/JMSCourierR10.html
You can check the SoapContainerInvoker in ZOAP module for ideas too.
http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/jboss/zoap/src/org/jboss/ejb/plugins/zoap/SoapContainerInvoker.java?rev=1.4&content-type=text/vnd.viewcvs-markup
-- Juha -
2. Re: SOAP and JBoss
alindh Sep 15, 2003 12:00 AM (in response to alindh)Ok. Think about the following scenario: Say I have a client that uses a web based interface, has been autheticated and is represented by a stateful bean in the container. Keeping the reference to the bean is easy; just store it in the http session. But now I want to extend the interface, and write client side software (e.g an activex control) that uses SOAP method invocations to do it's stuff. So far everything is well; I can call bean methods though Apache SOAP. But I wan't somehow to maintain the reference to the original stateful bean. In java, I'd just store an EJBHandle and use it. My problem is now passing this ejb handle to and from the activex client, a string serialization of it looks like this:
%AC%ED%00%05sr%008org.jboss.ejb.plugins.jrmp.interfaces.StatefulHandleImpl%DC%05%8E9z%C8T%C2%02%00%01L%00%02idt%00%12Ljava%2Flang%2F
Object%3Bxr%004org.jboss.ejb.plugins.jrmp.interfaces.AbstractHandle%AA%7CkC%7Ca%5D%A5%02%00%02L%00%14initialContextHandlet%00%3CLorg%2Fjboss%2Fejb%2Fplugi
ns%2Fjrmp%2Finterfaces%2FInitialContextHandle%3BL%00%04namet%00%12Ljava%2Flang%2FString%3Bxpsr%00Aorg.jboss.ejb.plugins.jrmp.interfaces.DefaultInitialCont
extHandle%9C%93%B8%DA%D0%24%C3%23%02%00%01L%00%03envt%00%15Ljava%2Futil%2FHashtable%3Bxr%00%3Aorg.jboss.ejb.plugins.jrmp.interfaces.InitialContextHandler%
C9%94%0Cx%D0%E5%FB%02%00%00xpsr%00%13java.util.Hashtable%13%BB%0F%25%21J%E4%B8%03%00%02F%00%0AloadFactorI%00%09thresholdxp%3F%40%00%00%00%00%00%08w%08%00%
00%00%0B%00%00%00%03t%00%18java.naming.provider.urlt%00%0Cbobdole%3A1099t%00%1Bjava.naming.factory.initialt%00%27org.jnp.interfaces.NamingContextFactoryt%
00%1Cjava.naming.factory.url.pkgst%00%23org.jboss.naming%3Aorg.jnp.interfacesxt%00%14usersessionsr%00%0Ejava.lang.Long%3B%8B%E4%90%CC%8F%23%DF%
02%00%01J%00%05valuexr%00%10java.lang.Number%86%AC%95%1D%0B%94%E0%8B%02%00%00xp%00%00%00%E8%89%87%7B%22.
.. which is way too much information to be passed e.g through an tag. Is there another way of maintaining this reference. An shorter bean id?
Thanks,
--
Anders Lindh -
3. Re: SOAP and JBoss
juha Sep 15, 2003 12:00 AM (in response to alindh)
No, don't think there is. Unless we have a EJBHandleFactory which allows custom handle plugins... ;-)
Or... you maybe direct the ActiveX client through a servlet session instead of connecting directly to EJB session, and use the http session id in the client instead.
Dunno, I maybe misunderstanding what you're trying to do. -
4. Re: SOAP and JBoss
marc.fleury Sep 15, 2003 12:00 AM (in response to alindh)> %AC%ED%00%05sr%008org.jboss.ejb.plugins.jrmp.interface
> .StatefulHandleImpl%DC%05%8E9z%C8T%C2%02%00%01L%00%02i
> t%00%12Ljava%2Flang%2F
> Object%3Bxr%004org.jboss.ejb.plugins.jrmp.interfaces.A
> stractHandle%AA%7CkC%7Ca%5D%A5%02%00%02L%00%14initialC
> ntextHandlet%00%3CLorg%2Fjboss%2Fejb%2Fplugi
> ns%2Fjrmp%2Finterfaces%2FInitialContextHandle%3BL%00%0
> namet%00%12Ljava%2Flang%2FString%3Bxpsr%00Aorg.jboss.e
> b.plugins.jrmp.interfaces.DefaultInitialCont
> extHandle%9C%93%B8%DA%D0%24%C3%23%02%00%01L%00%03envt%
> 0%15Ljava%2Futil%2FHashtable%3Bxr%00%3Aorg.jboss.ejb.p
> ugins.jrmp.interfaces.InitialContextHandler%
> C9%94%0Cx%D0%E5%FB%02%00%00xpsr%00%13java.util.Hashtab
> e%13%BB%0F%25%21J%E4%B8%03%00%02F%00%0AloadFactorI%00%
> 9thresholdxp%3F%40%00%00%00%00%00%08w%08%00%
> 00%00%0B%00%00%00%03t%00%18java.naming.provider.urlt%0
> %0Cbobdole%3A1099t%00%1Bjava.naming.factory.initialt%0
> %27org.jnp.interfaces.NamingContextFactoryt%
> 00%1Cjava.naming.factory.url.pkgst%00%23org.jboss.nami
> g%3Aorg.jnp.interfacesxt%00%14usersessionsr%00%0Ejava.
> ang.Long%3B%8B%E4%90%CC%8F%23%DF%
> 02%00%01J%00%05valuexr%00%10java.lang.Number%86%AC%95%
> D%0B%94%E0%8B%02%00%00xp%00%00%00%E8%89%87%7B%22.
Yuck.
No in the 2.x series there is no way to do that mainly owing to the fact that there is one invoker per bean, what this means is that all the information is particular to a specific RMI connection. The EJBHandle is nothing but a wrapper to get to that connection (rebuild it really).
the 3.x series will come with abstract invokers to a JMX node and the routing internally will be formatted in such a way that you will have many possibilities to specify that message and have it come alive in a node.
It won't be next week, but it is a necessary step towards a real/robust/dynamic webservices implementation. I don't mean a hack. -
5. Re: SOAP and JBoss
marc.fleury Sep 15, 2003 12:00 AM (in response to alindh)oh wait I understand juha's posts now.
Yes he is right, you are basically stuck to using the RMI invoker like the handle does. If you want to bypass that, again the 3.0 series will feature JMX node invocations that are pluggable but right now you can use the MDB stuff and have a JMS wrapper from your windows client... the simplest I can think of...
OR... you make an MBean and invoke it through 8082 :) low tech is good tech (got to love http) -
6. Re: SOAP and JBoss
alindh Sep 15, 2003 12:00 AM (in response to alindh)I don't think JMS is an option (won't work through firewalls?). Your mbean idea could be done, but exposing port 8082 to the world is a major security hole (It's not too nice if people can shut down your app server.. ;). I think I'll be a lot better of by implementing servlets that implement the function calls, and calling them from the client through http.
.. Or could I (ab)use JNDI to store references to the beans?
--
Anders Lindh