• С помощью чего реализовать кэширование SQL-запросов для разных представлений таблицы в одном месте (Java+SWT/JFace+Hibernate)?

    @bazarnazar
    Если кэша первого уровня достаточно(работает в рамках одной сессии) то делать ничего не надо. Если нужен второй уровень(на SessionFactory), то берете какую-нибудь имплементацию кэша для хибернэйта типа ehcache, infinispan, hazelcast и так далее, и включаете. Вот хороший гайд для ehcache

    P.S. А зачем вам обновляемые отображения, если они отличаются только выборкой столбцов? оставьте все в одной таблице, и создайте несколько разных Еntity к одной таблице с нужными полями в каждой. разгрузите базу от updatable view
    Ответ написан
    Комментировать
  • Java Сервер. Как решить проблему с кодировкой?

    @bazarnazar
    Вот как сделано у меня, и все прекрасно работает(правда с уверенностью могу сказать только про GET запросы)
    public class TinyHttpd extends Thread {
    
        public static Logger log = Logger.getLogger(TinyHttpd.class.getName());
    
        static StatusController statusController;
    
        @Inject
        public TinyHttpd(StatusController statusControllerNew) {
            super("TinyHttpd");
            statusController = statusControllerNew;
        }
    
        private volatile boolean active = true;
    
        private ServerSocket ss;
    
        public void deactivate() {
            active = false;
            try {
                ss.close();
            } catch (IOException e) {
                log.error(e);
            }
        }
    
        public void run() {
    
            try {
                ss = new ServerSocket();
                SocketAddress address = new InetSocketAddress("0.0.0.0", 8080);
                ss.bind(address);
                log.info("Start TinyHttpd");
                while (active) {
                    new TinyHttpdConnection(ss.accept()).start();
                    log.debug("new connection");
                }
            } catch (IOException e) {
                log.error(e);
            }
            log.info("Stopping TinyHttpd");
        }
    }
    
    class TinyHttpdConnection extends Thread {
    
        private static int threadNum = 0;
    
        Socket client;
    
        TinyHttpdConnection(Socket client) throws SocketException {
            super("TinyHttpdConnection-" + ++threadNum);
            this.client = client;
            setPriority(NORM_PRIORITY - 1);
        }
    
        public void run() {
            try {
                BufferedReader in = new BufferedReader(new InputStreamReader(
                        client.getInputStream(), "8859_1"));
                OutputStream out = client.getOutputStream();
                PrintWriter pout = new PrintWriter(new OutputStreamWriter(out,
                        "8859_1"), true);
                String request = in.readLine();
                TinyHttpd.log.debug("Request: " + request);
                StringTokenizer st = new StringTokenizer(request);
                if ((st.countTokens() >= 2) && st.nextToken().equals("GET")) {
                    request = st.nextToken();
                    //тут логика и анализ токенов
                    } else {
                        pout.println("400 Bad Request");
                    }
                } else {
                    pout.println("400 Bad Request");
                }
                client.close();
            } catch (IOException e) {
                System.out.println("I/O error " + e);
            }
        }
    }


    Так же обратите внимание на то, что после после socket.accept() создается новый поток. Я бы очень рекомендовал так делать, что бы одновременно все-же могли обрабатываться более одного клиента.
    Ответ написан
  • GWT — работа с серверными классами?

    @bazarnazar
    Может я не совсем понял проблему, но может тебе поможет этот мой пост: habrahabr.ru/post/154321/
    Ответ написан
    1 комментарий