Форум программистов, компьютерный форум, киберфорум
Java
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
 Аватар для akaish
3 / 3 / 0
Регистрация: 23.05.2010
Сообщений: 28

Потоки, classpath и ещё куча вопросов

18.10.2010, 20:21. Показов 995. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем доброго дня. Так получилось, что в мои обязанности по работе вошло написание серверного приложения на не очень знакомом мне языке, а именно на java. За последние три недели учил и писал) Но возникло куча ламмерских вопросов в связи с тем, что централизованного обучения по яве я получить не могу и довольствуюсь лишь несколькими книгами. Итак:
1) Вопрос номер первый. Имею сервер по nio.*, который отсылает полученные пакеты классу разборщику пакетов, который, в свою очередь, на основе полученных пакетов делает запросы в бд через третий класс. Соответсвенно, есть три синхронизированных потока. Про синхронизацию начал читать только сегодня. Написал класс - буффер с четырьмя переменными для чтения\записи из него. Логика такая: приходит пакет, пакет передаётся потоку для разборки пакетов, при определённом условии создаётся ответный пакет, в иных случаях производится запись в бд данных из пакета. Соответственно, если на поток сервера приходят пакеты в то время, когда очередной полученный пакет разбирается, что случится с этими пакетами?
2) Насколько медленнее работают интерфейсные ссылки?
3) Представленные потоки в первом вопросе управляются одним классом, вынесеным в отдельный поток, так как необходимы еще потоки логгера(класса для записи в лог ошибок) и управления(изменения значения некоторых переменных в классах). Итого три потока, один из которых разбивается еще на три. Каждый из трёх подпотоков должен иметь доступ к потоку логгера, а поток управления должен иметь доступ ко всем остальным потокам. Как это грамотно сделать?
4) БД - PostgreSQL, хочу включить jdbc коннектор в само приложение, это возможно? Если да, то как?
5) Непосредственно по работе класса базы данных. Есть два типа исполнения запросов, executeupdate и executequery (java.net), в яве строгая типизация данных, поэтому вывод данных из SELECT запросов я вношу в LinkedList, где первый объект: массив строк с названиями столбцов, остальные объекты массивы строк, где [0] - данные из ячейки в строковом представлении, [1] - строковое представление datatype ячейки (алгоритм подсмотрел у Дунаева, чуток переделал под свои нужды). Мне кажется, что такая реализация немного через *опу сделана. Как сделать лучше?
6) Приложение должно быть разделено на две части (CUI или GUI + процесс сервера и процесс логгера). Как обеспечить работу сервера в качестве службы на Windows и Debian системах и иметь возможность управлять ими из отдельного приложения (GUI или CUI)?
7) Менее важный вопрос, куда копать в сторону значков трея у explorer.exe и gnome (можно еще и kde, но не обязательно)
Если у кого возникает вопрос, нафига я на это подписался)), сразу отвечу, фирма очень маленькая, всего программистов человек пять, из которых двое пишут прошивки для выпускаемых устройств, еще один нечто среднее между сисадмином и прогерром, 4-му и так хватает работы, и мне, как молодой крови, поручили написать кросплатформенное приложение взамен существующему, а я поступился принципами KISS и теперь ломаю себе мозг))
Заранее спасибо за помощь)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.10.2010, 20:21
Ответы с готовыми решениями:

Куча вопросов
По форуму искал, но осталось много вопросов. Подскажите пожайлуста. 1)На сколько труднее продвигается сайт состоящий из форума, чем...

Куча вопросов....
1.> Oracle initialization or shutdown in progress... >вот это уже теплее, это значит что база OracleSetviceTaras не запущена, ее надо...

Куча вопросов..
В связи с последовательным изучением С++ и с параллельным при этом отсутствием рабочего подключения к Интернету у меня накопилась куча...

7
 Аватар для akaish
3 / 3 / 0
Регистрация: 23.05.2010
Сообщений: 28
20.10.2010, 18:04  [ТС]
Ок, может, кто знает, куда копать или ответы на отдельные вопросы, буду очень признателен.
0
 Аватар для Mazhor1
70 / 43 / 8
Регистрация: 30.10.2009
Сообщений: 101
20.10.2010, 18:22
Ууу... много текста)) Мне лень читать) Нужно было темы по одному вопросу создавать)
0
 Аватар для akaish
3 / 3 / 0
Регистрация: 23.05.2010
Сообщений: 28
20.10.2010, 23:51  [ТС]
Семь тем? =) Меня ж за флуд съедят) А по существу, насчёт первого вопроса написал стек входящих пакетов и отдельный процесс для отсылки ответных пакетов)
0
 Аватар для akaish
3 / 3 / 0
Регистрация: 23.05.2010
Сообщений: 28
25.10.2010, 07:32  [ТС]
Итак, тогда пройдёмся по вопросам отдельно:
Каким образом лучше написать вывод данных из result set????
0
Эксперт JavaЭксперт С++
 Аватар для M128K145
8384 / 3617 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
25.10.2010, 13:41
akaish, в цикле выводить
0
 Аватар для akaish
3 / 3 / 0
Регистрация: 23.05.2010
Сообщений: 28
28.10.2010, 18:21  [ТС]
=) То, что в цикле - итак понятно. Просто неправильно выразился. Я rs собираю в коллекцию, где первый элемент - типы полей (массив), последующие - строковое представление полученных данных, что не есть хорошо, так как для некоторых типов лишние преобразования.
Да, по использованию java приложений как служб винды нашёл кучу халявнях вариантов.

Добавлено через 2 часа 8 минут
Очень важный для меня вопрос: как имитировать работу с беззнаковыми в яве??????
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    {+00} bIButton1:Byte; 
    {+01} dwDeviceId:Cardinal;
    {+05} dtDateTime:TDateTime;
    {+13} fLon:Real48; 
    {+19} fLat:Real48; 
    {+25} fCAN1:Single; 
    {+29} bIButton2:Byte;
    {+30} bIButton3:Byte;
    {+31} wSpeed:Word; 
    {+33} waAIData:packed array[1..8]of Word;
    {+49} waDIData:packed array[1..2]of Word; 
    {+53} bDIIData:Byte; 
    {+54} bIButton4:Byte;
    {+55} bStateInfo:Byte; 
    {+56} fCAN2:Single; 
    {+60} fCAN3:Single;
Надо эту структуру выделить из полученного пакета (С этим проблем нет) и записать в файл. Раньше это крутилось на Delphi, в яве нет беззнаковых. Как решить?

Нашёл некоторое решение:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
public class UnsignedUtil
{
 
  
    /* (non-Javadoc)
     * private constructor to prevent instantiation.
     */
    private 
    UnsignedUtil () 
    {
        //no-op
    }
  
  //========================================
 
  public static short asUShort ( byte _b ) {
    return (short)(((short)_b) & ((short)0xFF));
  }
    
  public static int asUInt ( byte _b ) {
    return (_b & 0xFF);
  }
 
  public static int asUInt ( short _s ) {
    return (_s & 0xFFFF);
  }
 
  public static long asULong ( byte _b ) {
    return (_b & 0xFFL);
  }
    
  public static long asULong ( short _s ) {
    return (_s & 0xFFFFL);
  }
 
  public static long asULong ( int _i ) {
    return (_i & 0xFFFFFFFFL);
  }
}
Как имея этот класс, получить данные из некого пакета в беззнаковых и записать их в файл???
0
 Аватар для akaish
3 / 3 / 0
Регистрация: 23.05.2010
Сообщений: 28
29.10.2010, 19:48  [ТС]
Хм, эту проблему решил, остались еще несколько.
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
/*
 * This class designed to prefetch datalost from reading files written by
 * proggrams with support of unsigned variables
 */
 
package TmsSimpleDT;
 
/**
 *
 * @author akaish
 */
public class UnSignedV
{
    public static short $Ubyte;
    public static int $Ushort;
    public static long $Uint;
 
    int $bone = 0;
    int $btwo = 0;
    int $bthree = 0;
    int $bfour = 0;
 
    byte[] $UBarray;
 
    boolean $op;
    int $type;
 
    public UnSignedV(byte[] UBarray)
    {
        $UBarray = UBarray;
        $op = CheckUBarray();
        if($op)
        {
            $type = UBarray.length;
            UnsignedCreate();
        }
        else
        {
 
        }
    }
 
    /* Here we check if buffer lenght is ok */
    public boolean CheckUBarray()
    {
        if(($UBarray.length != 1)&($UBarray.length != 2)&($UBarray.length != 4)) return false;
        else return true;
    }
 
    /* Create unsigned */
    public void UnsignedCreate()
    {
        switch($type)
        {
            case 1:
                $bone = (0x000000FF & ((int)$UBarray[0]));
                $Ubyte = (short)$bone;
                break;
            case 2:
                $bone = (0x000000FF & ((int)$UBarray[0]));
                $btwo = (0x000000FF & ((int)$UBarray[1]));
                $Ushort = (char) ($bone << 8 | $btwo);
                break;
            case 4:
                $bone = (0x000000FF & ((int)$UBarray[0]));
                $btwo = (0x000000FF & ((int)$UBarray[1]));
                $bthree = (0x000000FF & ((int)$UBarray[2]));
                $bfour = (0x000000FF & ((int)$UBarray[3]));
                $Uint = ((long) ($bone << 24
                    | $btwo << 16
                        | $bthree << 8
                        | $bfour))
                       & 0xFFFFFFFFL;
                break;
            default:
                System.out.println("Ha?");
                break;
        }
    }
 
    /* Writes bytes in specific order */
    public byte[] ReturnUBuffer()
    {
        switch($type)
        {
            case 1:
                byte[] $bufo = new byte[1];
                $bufo[0] = (byte)($Ubyte & 0xFF);
                return $bufo;
            case 2:
                byte[] $buft = new byte[2];
                $buft[0] = (byte)(($Ushort & 0xFF00) >> 8);
                $buft[1] = (byte)($Ushort & 0x00FF);
                return $buft;
            case 4:
                byte[] $buff = new byte[4];
                $buff[0] = (byte)(($Uint & 0xFF000000L) >> 24);
                $buff[1] = (byte)(($Uint & 0x00FF0000L) >> 16);
                $buff[2] = (byte)(($Uint & 0x0000FF00L) >> 8);
                $buff[3] = (byte)($Uint & 0x000000FFL);
                return $buff;
            default:
                byte[] $b = new byte[0];
                return $b;
        }
    }
 
    /* Writes short as ubyte */
    public static byte[] ReturnByte(short ubyte)
    {
        if(0 <= ubyte)
        {
            byte[] $bufo = new byte[1];
            $bufo[0] = (byte)(ubyte & 0xFF);
            return $bufo;
        }
        else
        {
            byte[] $b = new byte[0];
            return $b;
        }
    }
 
    /* Writes int as ushort */
    public static byte[] ReturnShort(int ushort)
    {
        if(0 <= ushort)
        {
            byte[] $buft = new byte[2];
            $buft[0] = (byte)((ushort & 0xFF00) >> 8);
            $buft[1] = (byte)(ushort & 0x00FF);
            return $buft;
        }
        else
        {
            byte[] $b = new byte[0];
            return $b;
        }
    }
 
    /* Writes long as uint */
    public static byte[] ReturnInt(long uint)
    {
        if(0 <= uint)
        {
            byte[] $buff = new byte[4];
            $buff[0] = (byte)((uint & 0xFF000000L) >> 24);
            $buff[1] = (byte)((uint & 0x00FF0000L) >> 16);
            $buff[2] = (byte)((uint & 0x0000FF00L) >> 8);
            $buff[3] = (byte)(uint & 0x000000FFL);
            return $buff;
        }
        else
        {
            byte[] $b = new byte[0];
            return $b;
        }
    }
}
Такой вопрос, как выражение вида: $data[5]+(($data[6] >> 2)+ ((($data[6] & 3) << 12) | ($data[7] << 4) | ($data[8] >> 4))/10000 )/60 , где дата - это массив байтов, засунуть в массив байтов размерности равной 6-ти???7???
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
29.10.2010, 19:48
Помогаю со студенческими работами здесь

Тахометр и куча вопросов
Здравствуйте! Я пока начинающий в программировании МК, и поскольку мне кажется, что вопрос очень простой, может даже глупый, решил написать...

Куча вопросов по ШИМ.
Всем доброго времени. Возникла такая ситуация. Есть силовая панель управления с графикой кучей кнопок и всеми остальными наворотами. Так же...

Куча моих вопросов
1.Посмотрел тут у вас белые каталоги..все только за $$$, бесплатного что то как-то не нашел..может кто ткнет? 2.почему у вас у всех...

Не запускается regedit и HiJackThis и ещё куча всего
Не запускается regedit и HiJackThis и ещё куча. У меня была такая проблема уже не помню как фиксил. Ещё у меня ярлики на рабочем столе...

USBBIT помогите,куча вопросов!!!
Кароч собрал зачетный программатор по этой ссылке - http://reddylab.eu/rclab/. На работе есть возможность платки на заводе заказывать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это дополнительная запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru