рдЬрд╛рд╡рд╛ рд╕рд░реНрд╡рд░ рдХреЗ рд╕рд╛рде рдЬрд╛рд╡рд╛ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛

рдЬрд╛рд╡рд╛-рдЖрдзрд╛рд░рд┐рдд рдбреЗрд╕реНрдХрдЯреЙрдк рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рд╕рд╛рде рд░реЛрдЬрдорд░реНрд░рд╛ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╣рд▓ рдХрд░рддреЗ рд╕рдордп, рдЖрдкрдХреЛ рд╡реИрд╕реЗ рднреА рд╡реЗрдм рд╕рд░реНрд╡рд░ рд╕реЗ рдЕрдиреБрд░реЛрдз рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред J2EE рдФрд░ рднрдпрд╛рдирдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдирд╛рдо RMI рдХреЗ рджрд┐рдиреЛрдВ рдХреЗ рдмрд╛рдж, рдмрд╣реБрдд рдХреБрдЫ рдмрджрд▓ рдЧрдпрд╛ рд╣реИ, рдФрд░ рд╕рд░реНрд╡рд░ рдХреЙрд▓ рдЕрдзрд┐рдХ рд╣рд▓реНрдХреЗ рд╣реЛ рдЧрдП рд╣реИрдВред рд╡реЗрдм рд╕реЙрдХреЗрдЯ рдХреЗ рдорд╛рдирдХ рдФрд░ рдХрд┐рд╕реА рднреА рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд░рд▓ рдкрд╛рда рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХреЗ рд▓рд┐рдП рдРрд╕реА рд╕рдорд╕реНрдпрд╛ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИред рд▓реЗрдХрд┐рди рдЙрджреНрдпрдо рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╡рд┐рд╡рд┐рдзрддрд╛ рдФрд░ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЪрдпрдирд┐рдд рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдПрдВрдбрдкреЙрдЗрдВрдЯреНрд╕ рдХреЛ рдмрдирд╛рдиреЗ рдФрд░ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреЛ рдПрдХ рднрдпрд╛рдирдХ рджрд┐рдирдЪрд░реНрдпрд╛ рдмрдирд╛рддреА рд╣реИ рдФрд░ рдХреЛрдб рдХреА рдЕрддрд┐рд░рд┐рдХреНрдд рд▓рд╛рдЗрдиреЗрдВ рдЬреЛрдбрд╝рддреА рд╣реИред


рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рд╣рдо рдЖрдзрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЖрд░рдПрдордЖрдИ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдЦреНрддреА рд╕реЗ рдЯрд╛рдЗрдк рдХреА рдЧрдИ рд░рдгрдиреАрддрд┐ рд▓реЗрддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ рд╕рд░реНрд╡рд░ рдХреЗ рдмреАрдЪ рдПрдХ рдорд╛рдирдХ рдЬрд╛рд╡рд╛ рдЗрдВрдЯрд░рдлреЗрд╕ рдерд╛ рдЬреЛ рд╡рд┐рдзрд┐рдпреЛрдВ, рддрд░реНрдХреЛрдВ рдФрд░ рд░рд┐рдЯрд░реНрди рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдХреБрдЫ рдПрдиреЛрдЯреЗрд╢рди рдЬреЛрдбрд╝реЗ рдЧрдП рдереЗ, рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдиреЗ рдЬрд╛рджреБрдИ рд░реВрдк рд╕реЗ рдпрд╣ рднреА рдиреЛрдЯрд┐рд╕ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдерд╛ рдХрд┐ рдХреЙрд▓ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рдерд╛; рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рди рдХреЗрд╡рд▓ рдкрд╛рда, рд▓реЗрдХрд┐рди рдХреНрд░рдордмрджреНрдз рдЬрд╛рд╡рд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ? рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рд╣рдо рдЗрд╕ рд░рдгрдиреАрддрд┐ рдХреЛ рд╡реЗрдм рд╕реЙрдХреЗрдЯреНрд╕ рдХреА рдЖрд╕рд╛рдиреА рдФрд░ рд╕рд░реНрд╡рд░ рд╕реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдкреБрд╢ рдХреЙрд▓ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рдЕрдкрдиреЗ рдлрд╛рдпрджреЗ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ? рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд▓рд┐рдП рд╡реЗрдм рд╕реЙрдХреЗрдЯ рдХреА рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рдЕрд╡рд░реЛрдзрдХ рдХреЙрд▓ рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдПрдХ рд╡рд┐рд▓рдВрдмрд┐рдд рдХреЙрд▓ рдХреЗ рд▓рд┐рдП, рднрд╡рд┐рд╖реНрдп рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдХрдВрдкреЗрдЯрд┐рдмрд▓рдлреНрдпреВрдЬрд╝рди рдХреА рд╡рд╛рдкрд╕реА рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ? рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рд╣рдо рд╕рд░реНрд╡рд░ рд╕реЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдШрдЯрдирд╛рдУрдВ рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ? рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рд╕рд░реНрд╡рд░ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рддреНрд░ рдФрд░ рдХрдиреЗрдХреНрд╢рди рд╣реЛ? рдпрд╣ рдХрд┐рд╕реА рднреА рдЬрд╛рд╡рд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдПрдХ рдЕрдЪреНрдЫрд╛ рдкрд╛рд░рджрд░реНрд╢реА рдмрдВрдбрд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЬрд╛рджреВ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдкреАрдЫреЗ рдЫрд┐рдкрд╛ рд╣реЛрдЧрд╛, рдФрд░ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рдЗрдВрдЯрд░рдлреЗрд╕ рдЖрд╕рд╛рдиреА рд╕реЗ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рд╕рд┐рд░реНрдл рд▓реЛрдб рдХрд┐рдП рдЧрдП рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рд╣реИ рдЬреЛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реНрдЯреЙрдХ рдорд╛рд░реНрдХреЗрдЯ рдХреЛрдЯреНрд╕ред


рдореЗрд░реЗ рдЕрднреНрдпрд╛рд╕ рд╕реЗ рдХреЙрд░реНрдкреЛрд░реЗрдЯ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ, рдПрдХ sql рдХреНрд╡реЗрд░реА рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдФрд░ DBMS рд╕реЗ рдЪрдпрдирд┐рдд рдбреЗрдЯрд╛ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЧрддрд┐ рдХреНрд░рдордмрджреНрдзрддрд╛ рдФрд░ рдЪрд┐рдВрддрдирд╢реАрд▓ рдХреЙрд▓ рдХреЗ рдУрд╡рд░рд╣реЗрдб рдХреЗ рд╕рд╛рде рдЕрд╕рдВрдЧрдд рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, EJB рдХреЙрд▓ рдХрд╛ рдПрдХ рднрдпрд╛рдирдХ рдирд┐рд╢рд╛рди, рд╕рдмрд╕реЗ рд╕рд░рд▓ рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП рднреА рдирд┐рд╖реНрдкрд╛рджрди рд╕рдордп 4-10 рдПрдордПрд╕ рдХреЗ рдкреВрд░рдХ рд╣реИ, рдПрдХ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдареЗрда рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рдЕрд╡рдзрд┐ 50ms рд╕реЗ 250ms рддрдХ рдЧрд▓рд┐рдпрд╛рд░реЗ рдореЗрдВ рд╣реИред


рдЖрдЗрдП рд╕рдмрд╕реЗ рд╕рд░рд▓ рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ - рд╣рдо рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдкреАрдЫреЗ рдЬрд╛рджреВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЙрдХреНрд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдкреИрдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдЕрдкрдиреЗ рд╡рд┐рд░реЛрдзрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдкрддреНрд░рд╛рдЪрд╛рд░ рдХрд╛ рдЗрддрд┐рд╣рд╛рд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИ:


public interface ServerChat{ Map<String, <List<String>> getHistory(Date when, String login); } 

рд╣рдо рдорд╛рдирдХ рдЬрд╛рд╡рд╛ рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░реЙрдХреНрд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВрдЧреЗ рдФрд░ рдЙрд╕ рдкрд░ рдЖрд╡рд╢реНрдпрдХ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВрдЧреЗ:


 public class ClientProxyUtils { public static BiFunction<String, Class, RMIoverWebSocketProxyHandler> defaultFactory = RMIoverWebSocketProxyHandler::new; public static <T> T create(Class<T> clazz, String jndiName) { T f = (T) Proxy.newProxyInstance(clazz.getClassLoader(), new Class[]{clazz}, defaultFactory.apply(jndiName, clazz)); return f; } } //    //... ServerChat chat = ClientProxyUtils.create(ServerChat.class, "java:global/test_app/ServerChat"); Map<String, <List<String>> history = chat.getHistory(new Date(), "tester"); //... //    

рдпрджрд┐ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдЖрдк рдХрд╛рд░рдЦрд╛рдиреЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рд╕реАрдбреАрдЖрдИ-рдЗрдВрдЬреЗрдХреНрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░реЙрдХреНрд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдЬрд╛рджреВ рдЕрдкрдиреЗ рд╢реБрджреНрдз рд░реВрдк рдореЗрдВ рдорд┐рд▓реЗрдЧрд╛ред рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ, рд╣рд░ рдмрд╛рд░ рдПрдХ рд╕реЙрдХреЗрдЯ рдЦреЛрд▓рдирд╛ / рдмрдВрдж рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИред рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рдореЗрд░реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рд╕реЙрдХреЗрдЯ рд▓рдЧрд╛рддрд╛рд░ рдЦреБрд▓рд╛ рд╣реИ рдФрд░ рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдФрд░ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИред рдЕрдм рдпрд╣ рджреЗрдЦрдиреЗ рд▓рд╛рдпрдХ рд╣реИ рдХрд┐ RMIoverWebSocketProxyHandler рдореЗрдВ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ:


 public class RMIoverWebSocketProxyHandler implements InvocationHandler { public static final int OVERHEAD = 0x10000; public static final int CLIENT_INPUT_BUFFER_SIZE = 0x1000000;// 16mb public static final int SERVER_OUT_BUFFER_SIZE = CLIENT_INPUT_BUFFER_SIZE - OVERHEAD; String jndiName; Class interfaze; public RMIoverWebSocketProxyHandler(String jndiName, Class interfaze) { this.jndiName = jndiName; this.interfaze = interfaze; } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { Request request = new Request(); request.guid = UUID.randomUUID().toString(); request.jndiName = jndiName; request.methodName = method.getName(); request.args = args; request.argsType = method.getParameterTypes(); request.interfaze = interfaze; WaitList.putRequest(request, getRequestRunnable(request)); checkError(request, method); return request.result; } public static Runnable getRequestRunnable(Request request) throws IOException { final byte[] requestBytes = write(request); return () -> { try { sendByByteBuffer(requestBytes, ClientRMIHandler.clientSession); } catch (IOException ex) { WaitList.clean(); ClientRMIHandler.notifyErrorListeners(new RuntimeException(FATAL_ERROR_MESSAGE, ex)); } }; } public static byte[] write(Object object) throws IOException { try (ByteArrayOutputStream baos = new ByteArrayOutputStream(); ObjectOutputStream ous = new ObjectOutputStream(baos)) { ous.writeObject(object); return baos.toByteArray(); } } public static void sendByByteBuffer(byte[] responseBytes, Session wsSession) throws IOException { ... } public static void checkError(Request request, Method method) throws Throwable { ... } @FunctionalInterface public interface Callback<V> { V call() throws Throwable; } } 

рдФрд░ рдпрд╣рд╛рдБ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЧреНрд░рд╛рд╣рдХ рд╕реНрд╡рдпрдВ EndPoint рд╣реИ :


 @ClientEndpoint public class ClientRMIHandler { public static volatile Session clientSession; @OnOpen public void onOpen(Session session) { clientSession = session; } @OnMessage public void onMessage(ByteBuffer message, Session session) { try { final Object readInput = read(message); if (readInput instanceof Response) { standartResponse((Response) readInput); } } catch (IOException ex) { WaitList.clean(); notifyErrorListeners(new RuntimeException(FATAL_ERROR_MESSAGE, ex)); } } private void standartResponse(final Response response) throws RuntimeException { if (response.guid == null) { if (response.error != null) { notifyErrorListeners(response.error); return; } WaitList.clean(); final RuntimeException runtimeException = new RuntimeException(FATAL_ERROR_MESSAGE); notifyErrorListeners(runtimeException); throw runtimeException; } else { WaitList.processResponse(response); } } @OnClose public void onClose(Session session, CloseReason closeReason) { WaitList.clean(); } @OnError public void onError(Session session, Throwable error) { notifyErrorListeners(error); } private static Object read(ByteBuffer message) throws ClassNotFoundException, IOException { Object readObject; byte[] b = new byte[message.remaining()]; // don't use message.array() becouse it is optional message.get(b); try (ByteArrayInputStream bais = new ByteArrayInputStream(b); ObjectInputStream ois = new ObjectInputStream(bais)) { readObject = ois.readObject(); } return readObject; } } 

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдкреНрд░реЙрдХреНрд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдХрд┐рд╕реА рднреА рддрд░реАрдХреЗ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рдЦреБрд▓рд╛ рд╕реЙрдХреЗрдЯ рд╕рддреНрд░ рд▓реЗрддреЗ рд╣реИрдВ, рдкрд╛рд░рд┐рдд рддрд░реНрдХреЛрдВ рдФрд░ рдЙрд╕ рд╡рд┐рдзрд┐ рдХрд╛ рд╡рд┐рд╡рд░рдг рднреЗрдЬрддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рд╕рд░реНрд╡рд░ рдкрд░ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдЕрдиреБрд░реЛрдз рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд╛рдЗрдб рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдиреЗ рддрдХ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВред рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдиреЗ рдкрд░, рд╣рдо рдПрдХ рдЕрдкрд╡рд╛рдж рдХреА рдЬрд╛рдБрдЪ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдпрджрд┐ рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИ, рддреЛ рд╣рдо рд░рд┐рд╕реНрдкрд╛рдВрд╕ рдХреЗ рдЙрддреНрддрд░ рдХреЛ рд░рд┐рдХреНрд╡реЗрд╕реНрдЯ рдореЗрдВ рдбрд╛рд▓рддреЗ рд╣реИрдВ рдФрд░ рдЙрд╕ рд╕реНрдЯреНрд░реАрдо рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ WaitList рдореЗрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рдХрд░ рд░рд╣реА рд╣реИред рдореИрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ WaitList рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдирд╣реАрдВ рджреВрдВрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рддреБрдЪреНрдЫ рд╣реИред рдкреНрд░рддреАрдХреНрд╖рд╛ рдзрд╛рдЧрд╛, рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛, WaitList.putRequest (рдЕрдиреБрд░реЛрдз, getRequestRunnable (рдЕрдиреБрд░реЛрдз)) рд▓рд╛рдЗрди рдХреЗ рдмрд╛рдж рдХрд╛рдо рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦреЗрдЧрд╛ ; ред рдЬрд╛рдЧрдиреЗ рдХреЗ рдмрд╛рдж, рдереНрд░реЗрдбреНрд╕ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдШреЛрд╖рд┐рдд рдЕрдкрд╡рд╛рджреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдЧрд╛, рдФрд░ рдкрд░рд┐рдгрд╛рдо рдХреЛ рд░рд┐рдЯрд░реНрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓реМрдЯрд╛рдПрдЧрд╛ ред


рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдЙрджрд╛рд╣рд░рдг рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдХреБрдЫ рдЕрдВрд╢ рд╣реИрдВ, рдЬреЛ рдЕрднреА рддрдХ рдЧреАрдереВрдм рдкрд░ рдкреЛрд╕реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдирд╣реАрдВ рд╣реИрдВред рд▓рд╛рдЗрд╕реЗрдВрд╕рд┐рдВрдЧ рдХреЗ рдореБрджреНрджреЛрдВ рдкрд░ рдХрд╛рдо рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдЗрд╕рдХреЗ рдкреНрд░рдХрд╛рд╢рди рдХреЗ рдмрд╛рдж рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╡рд╣рд╛рдБ рдХреБрдЫ рдЦрд╛рд╕ рдирд╣реАрдВ рд╣реИ - рдПрдХ ejb рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдЦреЛрдЬ рдХреА рдЬрд╛рддреА рд╣реИ рдЬреЛ рдХрд┐ Precontext рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ jndi рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреА рд╣реИ рдФрд░ рдкреНрд░реЗрд╖рд┐рдд рд╡рд┐рд╡рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдкрд░рд╛рд╡рд░реНрддрдХ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╡рд╣рд╛рдВ, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рдЕрднреА рднреА рдмрд╣реБрдд рд╕рд╛рд░реА рджрд┐рд▓рдЪрд╕реНрдк рдЪреАрдЬреЗрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕ рддрд░рд╣ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдХрд┐рд╕реА рднреА рд▓реЗрдЦ рдореЗрдВ рдлрд┐рдЯ рдирд╣реАрдВ рд╣реЛрдЧреАред рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рд╣реА, рдЙрдкрд░реЛрдХреНрдд рдЕрд╡рд░реЛрдзрдХ рдХреЙрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕рдмрд╕реЗ рд╕рд░рд▓ рд╣реИред рдмрд╛рдж рдореЗрдВ рдлреНрдпреВрдЪрд░ рдФрд░ рдХрдВрдкреНрд▓реАрдЯрдЯреЗрдмрд▓ рд╕рд┐рд╡рдиреА <> рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдиреЙрди-рдмреНрд▓реЙрдХрд┐рдВрдЧ рдХреЙрд▓ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ред рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЬрд╛рд╡рд╛ рдбреЗрд╕реНрдХрдЯреЙрдк рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд╕рд╛рде рд╕рднреА рдЙрддреНрдкрд╛рджреЛрдВ рдореЗрдВ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдореБрдЭреЗ рдЦреБрд╢реА рд╣реЛрдЧреА рдХрд┐ рдЕрдЧрд░ рдХреЛрдИ рдУрдкрдирд┐рдВрдЧ рд╕реЛрд░реНрд╕ рдХреЛрдб рдХреЗ рдЕрдкрдиреЗ рдЕрдиреБрднрд╡ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░реЗ рдЬреЛ рдХрд┐ gnu gpl 2.0 ( tyrus-standalone-client ) рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИред


рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдпреВрдЖрдИ рдлреЙрд░реНрдо рдореЗрдВ рд╣реА рдорд╛рдирдХ рдЖрдИрдбреАрдИ рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд┐рдзрд┐ рдордВрдЧрд▓рд╛рдЪрд░рдг рдХрд╛ рдПрдХ рдкрджрд╛рдиреБрдХреНрд░рдо рдмрдирд╛рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИ, рдЬрд┐рд╕ рдкрд░ рдмрдЯрди рд╣реИрдВрдбрд▓рд░ рджреВрд░рд╕реНрде рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рдЦреАрдВрдЪрддрд╛ рд╣реИред рдЙрд╕реА рд╕рдордп, рд╣рдореЗрдВ рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ рд╕рд░реНрд╡рд░ рдПрдХреАрдХрд░рдг рдкрд░рдд рдХреА рд╕рдЦреНрдд рдЯрд╛рдЗрдкрд┐рдВрдЧ рдФрд░ рдХрдордЬреЛрд░ рдХрдиреЗрдХреНрдЯрд┐рд╡рд┐рдЯреА рдорд┐рд▓рддреА рд╣реИред рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЛрд░реНрд╕ рдХреЛрдб рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреНрд▓рд╛рдЗрдВрдЯ, рд╕рд░реНрд╡рд░ рдФрд░ рдХрд░реНрдиреЗрд▓ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рд╣реЛрддреА рд╣реИ, рдЬреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ рд╕рд░реНрд╡рд░ рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рд▓рдд рджреНрд╡рд╛рд░рд╛ рдЬреБрдбрд╝рд╛ рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рдЙрд╕ рдореЗрдВ рд╣реИ рдХрд┐ рд╕рднреА рджреВрд░рд╕реНрде рдЗрдВрдЯрд░рдлреЗрд╕ рдФрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реНрдерд┐рдд рд╣реИрдВред рдФрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдХреНрд╡реЗрд░реА рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝реЗ рдбреЗрд╡рд▓рдкрд░ рдХреА рджрд┐рдирдЪрд░реНрдпрд╛ рдХреЛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рдПрдХ рдирдИ рд╡рд┐рдзрд┐ рдФрд░ рд╕рд░реНрд╡рд░ рдкрд░ рдЗрд╕рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдмрд╣реБрдд рдЖрд╕рд╛рди ...

Source: https://habr.com/ru/post/hi422073/


All Articles