С Java по сути впервые столкнулся, и появилась следующая проблема.
Есть несоклько сетевых устройств (gps-трекеров), делающих одно и то же, но общающихся по разным протоколам. Для них написаны соответственно классы, которые реализуют протоколы. Для каждого устройства будет запущен сервер на своем порту и данные будут обрабатываться объектом нужного класса.
В итоге есть несколько классов, реализующих один интерфейс, которые подгружаются динамически из директории (ну типа модули). Надо, чтобы tcp-сервер при подключении создавал объект нужного класса и передавал ему сокет для дальнейшей работы по сети.
Я это вижу так: для каждого найденного класса создается объект сервера (само собой, на своем порту), и вот надо как-то в этот объект передать тип загруженного динамически класса, чтобы потом в сервере для каждого подключения создавать его экземпляр. Попробовал сделать это generic-ом, но не выходит. Возможно, я не понимаю какого-то правильного паттерна для моей ситуации, и вообще делаю все не так, потому спрашиваю тут. Вобщем, вот то, как я это пытаюсь делать сейчас:
try {
URL url = new File(trackercfg.getJarPath()).toURI().toURL();
URLClassLoader loader =
URLClassLoader.newInstance(new URL[] { url });
Class tracker = Class.forName(
trackercfg.getClassName(), true, loader);
Server<tracker> server = new Server<tracker>(100);
} catch (MalformedURLException | ClassNotFoundException e) {
log.log(Level.WARNING,
"Error loading tracker module: \"{0}\"",
e.getLocalizedMessage());
}
Повторюсь, инстанциировать класс мне прямо сейчас не надо, надо его передать в Server, чтобы там по подключении клиента создать объект.