Check dependencies if the sample, you need tomcat-util, tomcat-coyote etc...
Le 5 mai 2014 03:43, "Chuck Davis" <[email protected]> a écrit :
> Niki and Romain:
>
> hmm... I can't do it! :) How can something this simple not work? All
> Maven dependencies are working fine. The editor sees all the classes on
> the classpath.....
>
> I downloaded Tomee+ 1.6.0.1 I think it was Friday morning.
>
> I copied the websocket.api.jar file from Tomee/lib into my client (it
> contains both client and server classes).
>
> executed startup.sh (with server side deployed).
>
> ran my class, container is null;
>
> Downloaded Tomcat 8.0.5. The size of websocket-api.jar is different so
> copied websocket-api.jar to both tomee/lib and my project classpath.
>
> ran my class, container is null. Compete class listing as follows:
>
> package com.yakridge.client;
>
> import java.io.IOException;
> import java.net.URI;
> import java.net.URISyntaxException;
> import javax.websocket.ContainerProvider;
> import javax.websocket.DeploymentException;
> import javax.websocket.Session;
> import javax.websocket.WebSocketContainer;
> import org.openide.util.Exceptions;
>
>
> public class ClientConstants {
> private static ClientConstants INSTANCE = null;
> private Session session = null;
> private JPackerEndpoint_Client client; // annotated
> ClientEndpoint
> private static final WebSocketContainer container =
> ContainerProvider.getWebSocketContainer();
>
> private ClientConstants() { }
>
> public static ClientConstants getInstance() {
> // returns INSTANCE of this class -- code edited out
> }
>
> public void exerciseClientConstants() {
> client = new JPackerEndpoint_Client();
> try {
> try {
>
> if(client == null) {
> System.out.println("JPackerEndpoint_Client is null");
> //<-- this is not the null value since this line does not print
> }
> if(container == null) {
> System.out.println("the container is null"); //<--
> prints this line
> }
> session = container.connectToServer(client, new URI("ws://
> 192.168.3.98:8080/JPackerServer-web/mainpage")); //<-- fails @ this line
> } catch (DeploymentException ex) {
> Exceptions.printStackTrace(ex);
> } catch (IOException ex) {
> Exceptions.printStackTrace(ex);
> }
> } catch (URISyntaxException ex) {
> Exceptions.printStackTrace(ex);
> }
> }
> }
>
>
> Running class prints the line "the container is null" and throws null
> pointer exception @ session = container.connectToServer(). It doesn't even
> get as far as attempting to connect! Fetching the container is pretty
> straight forward but returning null with the Tomcat 8.0.5 version.
>
> Any ideas what I am missing here? This appears to be so simple. I'm
> exhausted and calling it a day for a few hours shut-eye and return home
> tomorrow. Don't see how you can have any ideas what could possibly go
> wrong with something so simple.
>
>
> On Sun, May 4, 2014 at 10:52 AM, Romain Manni-Bucau
> <[email protected]>wrote:
>
> > hmm you can do the same with tomcat 7 importing same jars with version
> > 7.0.53
> >
> >
> > Romain Manni-Bucau
> > Twitter: @rmannibucau
> > Blog: http://rmannibucau.wordpress.com/
> > LinkedIn: http://fr.linkedin.com/in/rmannibucau
> > Github: https://github.com/rmannibucau
> >
> >
> > 2014-05-04 18:18 GMT+02:00 Chuck Davis <[email protected]>:
> > > Niki:
> > >
> > > That is exactly what is required and what I have been looking for!
> > Perhaps
> > > the problem, then, is that Tomee is based on Tomcat 7 something. When
> > > Tomee adopts Tomcat 8 the problem should be fixed it sounds like. That
> > is
> > > fabulous news!! Thanks for letting me know. I shall be impatiently
> > > awaiting the day!! Perhaps I shall experiment with dropping the
> openejb
> > > jar into Tomcat 8 to see if it will work.
> > >
> > > I'm running jdk8u5 at this time so that is not an issue.
> > >
> > > Again, much appreciated.
> > >
> > >
> > > On Sun, May 4, 2014 at 9:03 AM, Niki Dokovski <[email protected]>
> wrote:
> > >
> > >> Hi
> > >> here a small client side project [1] I used before to put some load
> on
> > >> the Web Socket implementation in Tomcat 8
> > >> It uses https type of connection simply because I was interested in
> SSL
> > >> handling at that point of time. Of course you can ignore it and take a
> > look
> > >> at ws.echo.client.run.ClientsRunner
> > >>
> > >> 1. The examples obtains reference to the container in static way
> > >> private static final WebSocketContainer container =
> > >> ContainerProvider.getWebSocketContainer();
> > >>
> > >> 2. It uses programmatic approach for getting WebSocket Session
> > >> container.connectToServer(ClientEndpoint.class,
> > >> ClientEndpointConfig.Builder.create().build(),url)
> > >>
> > >> 3. adds a message handler
> > >> session.addMessageHandler(new ClientEndpointMessageHandler(latch));
> > >>
> > >> 4. sends a text based web socket message
> > >> session.getBasicRemote().sendText(message);
> > >>
> > >> 5. and closes the connection
> > >> session.close(new
> > CloseReason(CloseReason.CloseCodes.NORMAL_CLOSURE,"just
> > >> close it"));
> > >>
> > >> As you can see the maven project uses web socket implementation from
> > >> Tomcat to establish client connection using Java SE. Basically you
> need
> > the
> > >> jars from the maven dependencies for your client code to work.
> > >>
> > >> Your observation is correct, the Apache Tomcat implementation requires
> > at
> > >> least Java SE 7.
> > >>
> > >> Hope this helps
> > >> Niki Dokovski | @nickytd
> > >>
> > >> [1] https://bitbucket.org/nickytd/websocket-echo-client
> > >>
> > >>
> > >> On 04.05.2014, at 17:30, Romain Manni-Bucau <[email protected]>
> > wrote:
> > >>
> > >> > well I think you are not that right.
> > >> >
> > >> > 1) client works perfectly in TomEE. Outside...well outside TomEE you
> > >> > are outside so that's fine if it doesn't work
> > >> > 2) you are right client side is needed outside a server...80% of the
> > >> > case it is javascript which is fine
> > >> >
> > >> > You can ask Tomcat to export their client part in an importable jar
> > >> > but websocket implementation of tomcat is optimized for embedded
> mode.
> > >> > That said I'm +1 for it but there is no link with TomEE itself
> > >> >
> > >> >
> > >> >
> > >> > Romain Manni-Bucau
> > >> > Twitter: @rmannibucau
> > >> > Blog: http://rmannibucau.wordpress.com/
> > >> > LinkedIn: http://fr.linkedin.com/in/rmannibucau
> > >> > Github: https://github.com/rmannibucau
> > >> >
> > >> >
> > >> > 2014-05-04 16:24 GMT+02:00 Chuck Davis <[email protected]>:
> > >> >> Wtih all due respect, Romain, I have to take issue with your
> > position.
> > >> >> Andy just helped me learn how to connect JSE clients to the EJB
> > >> container
> > >> >> using the http protocol. If EJB (Tomee/openEJB) is only for
> browser
> > >> >> clients it's quite useless for any real work. Without Swing/JavaFX
> > >> client
> > >> >> connectivity it will be consigned to such workloads as the social
> > >> network.
> > >> >> It's going to be a long time before any significant data input
> (i.e.
> > the
> > >> >> typical business workload) will be done with a browser interface.
> > It is
> > >> >> essential that JSE clients be able to connect to/use EJB via Tomee
> > via
> > >> >> websockets.
> > >> >>
> > >> >> In a @ClientEndpoint
> > >> >> WebsocketContainer container =
> > >> ContainerProvider.getWebsocketContainer();
> > >> >> must return a container so that the container can be used to get a
> > >> session
> > >> >> from the server. Currently it throws an exception that there is no
> > >> >> implementation class. If that is not fixed soon Tomee/openEJB
> will
> > >> not be
> > >> >> a welcoming project to those of us who write Java desktop
> > applications.
> > >> >>
> > >> >> My $.02.
> > >> >>
> > >> >> CD
> > >> >>
> > >> >> P.S. By the way, connecting to the EJB container using http to
> find
> > the
> > >> >> ejb seems to work nicely but it's no substitute for the advantages
> > >> offered
> > >> >> by websockets.
> > >> >>
> > >> >>
> > >> >>
> > >> >>
> > >> >> On Sun, May 4, 2014 at 6:23 AM, Romain Manni-Bucau <
> > >> [email protected]>wrote:
> > >> >>
> > >> >>> Well TomEE websocket implementation is to write clients from TomEE
> > not
> > >> >>> from JavaSE (where you don't have TomEE anymore).
> > >> >>>
> > >> >>> In TomEE clients work.
> > >> >>>
> > >> >>> So you need to provide us a maven project with a test showing the
> > >> >>> issue you have.
> > >> >>>
> > >> >>>
> > >> >>> Romain Manni-Bucau
> > >> >>> Twitter: @rmannibucau
> > >> >>> Blog: http://rmannibucau.wordpress.com/
> > >> >>> LinkedIn: http://fr.linkedin.com/in/rmannibucau
> > >> >>> Github: https://github.com/rmannibucau
> > >> >>>
> > >> >>>
> > >> >>> 2014-05-04 15:20 GMT+02:00 Chuck Davis <[email protected]>:
> > >> >>>> Niki, I'm not sure what "http proxy setup for client connection"
> > means
> > >> >>> but
> > >> >>>> it sounds suspiciously like the very piece I'm looking for --
> > >> connecting
> > >> >>> a
> > >> >>>> Java client to the server with websocket. Is that what you are
> > >> saying?
> > >> >>>> The piece WebsocketContainer container =
> > >> >>>> ContainerProvider.getWebsocketContainer() will not currently
> work?
> > >> >>>> Currently it returns an exception that there is no implementation
> > >> class.
> > >> >>>>
> > >> >>>> If that is so, then my contention stands that Tomee needs a
> better
> > >> >>>> implementation to allow Java clients to connect.
> > >> >>>>
> > >> >>>> Thanks.
> > >> >>>>
> > >> >>>> CD
> > >> >>>>
> > >> >>>>
> > >> >>>> On Sat, May 3, 2014 at 8:24 AM, Niki Dokovski <[email protected]
> >
> > >> wrote:
> > >> >>>>
> > >> >>>>> The only limitation in Apache Tomcat implementation of Java API
> > for
> > >> Web
> > >> >>>>> Socket (JSR 356) is the missing http proxy setup for client
> > >> connections.
> > >> >>>>> This has already bean discussed in Tomcat dev lists and so far
> > this
> > >> is
> > >> >>> left
> > >> >>>>> either for future spec definitions or users demand. The rest of
> > the
> > >> >>>>> implementation is fully functional within the JSR 356
> definitions.
> > >> >>>>>
> > >> >>>>> Best Regards
> > >> >>>>> Niki
> > >> >>>>>
> > >> >>>>>
> > >> >>>>> Niki Dokovski | @nickytd
> > >> >>>>>
> > >> >>>>>
> > >> >>>
> > >>
> > >>
> >
>