Hi A,
This is an amazing coincidence. I've just been working on JBPAPP-1274 "Fix JBoss
Messaging and JBoss Remoting so that servlet transport can be used", for which
I've been trying to get a single client to make EJB2, EJB3, and JBM invocations over
the servlet transport. I've got EJB3 and JBM working, and just a couple of hours ago
I was working on an EJB2 invocation. Unfortunately, the proxy is, for some reason, using
the socket transport.
Anyway, as for the jar sizes, I just built a jboss-remoting.jar with jdk1.5.0_06 and
jdk1.5.0_15 and got 1047846 and 1046394 bytes, respectively, so that's a possible
explanation. But there's something strange about your line numbers - they don't
match what I see under
https://svn.jboss.org/repos/jbossremoting/remoting2/tags/2.5.0.SP2.
Don't know what's going there.
Here's how the servlet transport works.
org.jboss.remoting.transport.servlet.web.ServerInvokerServlet gets the invocation and
ServerInvokerServlet.processRequest() calls
org.jboss.remoting.transport.servlet.ServletServerInvoker.processRequest(), where it's
the latter method that isn't being found. When ServerInvokerServlet is initialized,
it gets either the ObjectName or the InvokerLocator of the ServletServerInvoker it's
supposed to use. In the latter case it gets a reference to the actual
ServletServerInvoker, so I doubt you'd see an "Unable to find operation"
exception in that case. If ServerInvokerServlet gets an ObjectName, then it makes
invocations on an MBean proxy, which is what I guess is happening. So, the question is,
what ObjectName are you initializing ServerInvokerServlet in your web.xml file?
Note that in Remoting 2.2.x, every ServletServerInvoker has the same ObjectName:
"jboss.remoting:service=invoker,transport=servlet". But in Remoting 2.4+, the
ObjectNames for ServletServerInvokers are created by
| public String getMBeanObjectName()
| {
| InvokerLocator locator = getLocator();
| StringBuffer buffer =
| new StringBuffer("jboss.remoting:service=invoker,transport=" +
locator.getProtocol());
| String host = locator.getHost();
| boolean isIPv6 = host.indexOf("[") >= 0 |
host.indexOf(":") >= 0;
|
| buffer.append(",host=");
| if (isIPv6)
| buffer.append("\"");
| buffer.append(locator.getHost());
| if (isIPv6)
| buffer.append("\"");
|
| buffer.append(",port=").append(locator.getPort());
| Map param = locator.getParameters();
| if(param != null)
| {
| Iterator itr = param.keySet().iterator();
| while(itr.hasNext())
| {
| buffer.append(",");
| String key = (String) itr.next();
| String value = (String) param.get(key);
| buffer.append(key);
| buffer.append("=");
| buffer.append(value);
| }
| }
|
| return buffer.toString();
| }
|
So, for example, the ObjectName for the EJB2 servlet invoker I'm playing with right
now is
"jboss.remoting:dataType=invocation,host=127.0.0.1,marshaller=org.jboss.invocation.unified.marshall.InvocationMarshaller,port=8080,return-exception=true,service=invoker,transport=servlet,unmarshaller=org.jboss.invocation.unified.marshall.InvocationUnMarshaller".
Does that help? By the way, I didn't even know there was a servlet test in the EJB3
test suite. I'll take a look at that. But not tonight. :)
-Ron
View the original post :
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4200821#...
Reply to the post :
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&a...