то, В чем Вы нуждаетесь, является составом не наследование.
class Plane
{
public Fly() { .. }
public string GetPilot() {...}
}
Теперь при необходимости в специальном виде Плоскости, такой как та, которая имеет PairOfWings = 2, но иначе делает все, плоскость может.. Вы наследовали плоскость. Этим Вы объявляете, что Ваша деривация выполняет контракт базового класса и может быть заменена, не мигая везде, где базовый класс ожидается. например, LogFlight (Плоскость) продолжил бы работать с экземпляром BiPlane.
Однако, если Вам просто нужно поведение Мухи для нового Bird, Вы хотите создать и не готовы поддерживать полный контракт базового класса, Вы сочиняете вместо этого. В этом случае осуществите рефакторинг поведение методов к повторному использованию в новый Полет типа. Теперь создайте и держите ссылки на этот класс и в Плоскости и в Bird. Вы не наследовались, потому что Bird не поддерживает полный контракт базового класса... (например, он не может обеспечить GetPilot ()).
По той же причине, Вы не можете уменьшить видимость методов базового класса, когда Вы переопределяете.. можно переопределить и обнародовать основной закрытый метод в деривации, но не наоборот. например, В этом примере, если я получаю тип Плоскости "BadPlane" и затем переопределяю и "Скрываю" GetPilot () - делают его частным; клиентский метод LogFlight (Плоскость p) будет работать на большинство Плоскостей, но аварийно завершится для "BadPlane", если реализация LogFlight, окажется, будет нуждаться/называть в GetPilot (). , Так как все деривации базового класса, как ожидают, будут 'substitutable' везде, где параметрический усилитель базового класса ожидается, это должно быть запрещено.
Прежде всего, вы хотите определить, какие файлы ) остаются открытыми. Я предполагаю, что на вашем сервере работает Linux, поэтому, как только вы узнаете PID JBoss
ps ax | grep something-that-makes-your-jboss-process-unique
, вы можете сделать
ls -l /proc/jbosspid/fd
, чтобы получить хороший список файлов, открытых в данный момент.
Что вы собираетесь делать next немного зависит от того, что вы здесь видите:
Предполагая, что вы работаете в Linux (или другом * NIX), существует ограничение на количество дескрипторов файла 1024 на процесс. В Unix все является файлом, включая сокет, устройство и так далее. Стоит взглянуть на это, запустив команду lsof (только как root) - она покажет вам все дескрипторы открытых файлов.
Чтобы исправить это, отредактируйте файл в / etc / security / limits. conf, добавьте следующие строки и перезапустите jboss.
jboss soft nofile 16384
jboss hard nofile 16384
(предполагается, что ваш jboss запущен пользователем "jboss")