Class JettyWebSocketFrameHandlerFactory

    • Method Detail

      • createMessageSink

        public static MessageSink createMessageSink​(java.lang.invoke.MethodHandle msgHandle,
                                                    java.lang.Class<? extends MessageSink> sinkClass,
                                                    java.util.concurrent.Executor executor,
                                                    WebSocketSession session)
      • getServerMethodHandleLookup

        public static java.lang.invoke.MethodHandles.Lookup getServerMethodHandleLookup()

        Gives a MethodHandles.Lookup instance to be used to find methods in server classes. For lookups on application classes use getApplicationMethodHandleLookup(Class) instead.

        This uses the caller sensitive MethodHandles.lookup(), this will allow MethodHandle access to server classes we need to use and will give access permissions to private methods as well.

        Returns:
        a lookup object to be used to find methods on server classes.
      • getApplicationMethodHandleLookup

        public static java.lang.invoke.MethodHandles.Lookup getApplicationMethodHandleLookup​(java.lang.Class<?> lookupClass)

        Gives a MethodHandles.Lookup instance to be used to find public methods in application classes. For lookups on server classes use getServerMethodHandleLookup() instead.

        This uses MethodHandles.publicLookup() as we only need access to public method of the lookupClass. To look up a method on the lookupClass, it must be public and the class must be accessible from this module, so if the lookupClass is in a JPMS module it must be exported so that the public methods of the lookupClass are accessible outside of the module.

        The MethodHandles.Lookup.in(Class) allows us to search specifically in the endpoint Class to avoid any potential linkage errors which could occur if the same class is present in multiple web apps. Unlike using MethodHandles.publicLookup() using MethodHandles.lookup() with MethodHandles.Lookup.in(Class) will cause the lookup to lose its public access to the lookup class if they are in different modules.

        MethodHandles.privateLookupIn(Class, MethodHandles.Lookup) is also unsuitable because it requires the caller module to read the target module, and the target module to open reflective access to the lookupClasses private methods. This is possible but requires extra configuration to provide private access which is not necessary for the purpose of accessing the public methods.

        Parameters:
        lookupClass - the desired lookup class for the new lookup object.
        Returns:
        a lookup object to be used to find methods on the lookupClass.
      • dump

        public void dump​(java.lang.Appendable out,
                         java.lang.String indent)
                  throws java.io.IOException
        Description copied from interface: Dumpable
        Dump this object (and children) into an Appendable using the provided indent after any new lines. The indent should not be applied to the first object dumped.
        Specified by:
        dump in interface Dumpable
        Overrides:
        dump in class ContainerLifeCycle
        Parameters:
        out - The appendable to dump to
        indent - The indent to apply after any new lines.
        Throws:
        java.io.IOException - if unable to write to Appendable