Woher weiß Glasfish das?

Hallo Forum,


dieses Beispiel [1] einer Websocket Anwendung ist mir Heute über den Weg gelaufen, beim Anpassen an meinen Code ist mir aufgefallen das ich gar nicht weiß woher Glassfish weiß das er auf:
Code:
localhost:8080/WebsocketHome/action

einen Websocket bereistellen soll.

In der pom.xml von [1] befinden sich zwar diese Plugin Zeilen (contextRoot geändert):
Code:
<plugin>
   <groupId>org.glassfish.embedded</groupId>
   <artifactId>maven-embedded-glassfish-plugin</artifactId>
   <version>4.0</version>
   <configuration>
       <goalPrefix>embedded-glassfish</goalPrefix>
       <app>${basedir}/target/${project.artifactId}-${project.version}.war</app>
       <autoDelete>true</autoDelete>
       <port>8080</port>
       <name>${project.artifactId}</name>
       <contextRoot>WebsocketHome</contextRoot>
   </configuration>
   <executions>
       <execution>
           <goals>
               <goal>deploy</goal>
           </goals>
       </execution>
   </executions>
</plugin>

Aber in Kombination mit meiner Klasse:
Code:
@ApplicationScoped
@ServerEndpoint("/actions")
public class DeviceWebsocketServer {

    @OnOpen
        public void open(Session session) {
    }
.
.
.

Kann der Javascript part leider keine Verbindung zum Websocket herstellen.
Hat da jemand eine Idee?



[1] http://www.hascode.com/2013/08/crea...n-using-java-ee-7-websockets-and-glassfish-4/
 
Ich bin mir nicht ganz sicher, ob ich deine Frage richtig verstanden habe.

In deiner pom.xml finden sich folgende Zeilen:
Code:
<configuration>
       <goalPrefix>embedded-glassfish</goalPrefix>
       <app>${basedir}/target/${project.artifactId}-${project.version}.war</app>
       <autoDelete>true</autoDelete>
       <port>8080</port>
       <name>${project.artifactId}</name>
       <contextRoot>WebsocketHome</contextRoot>
   </configuration>

Hier steht der "contextRoot" drin ("WebsocketHome") und der Port (8080). Demzufolge hast du schon mal die URL:
http://localhost:8080/WebsocketHome

Jede @ServerEndpoint Annotation wird geparst und gemappt.
Java:
@ServerEndpoint("/actions")

--> http://localhost:8080/WebsocketHome/actions

Nun fehlt lediglich noch die Information, dass es sich bei /WebsocketHome/actions nicht um einen normalen REST-Service handelt, sondern um einen Websocket, der ja anders behandelt werden muss.
Demzufolge fehlt entweder eine weitere Annotation (+ evtl. eine Configuration Klasse mit entsprechender Annotation wie unter Sprint) oder / und eine dependencie in der pom.xml.
 
Ah, contextRoot. Lesen hilft 🙁

Gerade gefunden:
http://www.oracle.com/technetwork/articles/java/jsr356-1937161.html
Code:
Annotation-Driven Approach
An endpoint that is accepting incoming WebSocket requests can be a POJO annotated with the @ServerEndpoint annotation. This annotation tells the container that the given class should be considered to be a WebSocket endpoint.


anscheinend reicht das @ServerEndpoint
 

Neue Themen


Zurück
Oben