воскресенье, 17 июня 2012 г.

Cause: java.net.SocketException: Unexpected end of file from server

The Bug
   Добрый день, мой дорогой дневник.
   Я наконец-то нашел причину в моем любимой инструменте автоматизированного тестирования Jmetr'e следующего исключения: 
Cause: java.net.SocketException: Unexpected end of file from server 
   Кратко опишу, что я делал, чтобы эту причину найти.
   1. Переносил Tomcat c одной машины на другую.
   2.Увеличивал timout в tomcat'e и Jmetr'e.
   3. Вносил изменения в свое приложение, при этом временами казалось, что исключение пропало...
   4.Писал письма коллегам с целью найти того, кто мне поможет.
   5. Бегал по офису и жаловался на тяжелую жизнь тестировщика.

   Все эти манипуляции мне не помогли. Когда уже не было сил, что было делать, я решил увеличить память для Jmetr'a. И вот чудо!Оно работает!Действительно, Jmetr'у просто не хватало памяти. Но признаться в этом он постеснялся.

   Надеюсь эта статься вам чем-то поможет:) Не наступайте на мои грабли!

среда, 18 апреля 2012 г.

Java и модификаторы доступа

   Привет, Марсиане. Сегодня я поведаю вам еще немного информации о очень увлекательном и самом распространенным языке на планете. На нем говорят даже бабушки. В общем речь идет о JAVA. 
   Что-то зачастил со статьями. Когда-то примерно год назад решил, что буду писать каждый день и хотя бы по чуть-чуть. И таким образом разовью в себе писательский или еще какой-нибудь талант:)
   Речь сегодня пойдет о модификаторах доступа. В Java их всего три:
  1. private - модификатор открытого доступа
  2. public - модификатор закрытого доступа
  3. protected - модификатор защищенного доступа
   Дальше обо всем по порядку.
   Итак, модификатор private позволяет скрывать методы и поля класса от любопытных глаз. Т.е. если у метода или класса будет этот модификатор, то вне класса к нему нельзя будет обратиться. 
Этот модификатор позволяет придерживаться инкапсуляции данных
   Модификатор доступа public предоставляет полную свободу как внутри класса, так и снаружи его. Чем плох этот модификатор? А плох он тем, что предоставляет неограниченную свободу программистам. Дай ребенку волю, так он всю квартиру разнесет и устроит для соседей аквапарк. Тоже самое и с программистом. Свобода должна быть в меру.
   Модификатор protected. Я называю его золотой серединой. Ибо методы и поля, объявленные с таким модификатором можно использовать только в подклассах, а так же классах находящихся в том же пакете. Как правило в большей степени используют этот  модификатор для методов, нежели для полей. Так как существует вероятность, когда без вашего ведома другие программисты будут использовать поля вашего супер класса в своих подклассах. После этого вы уже не сможете изменить реализацию класса не уведомив об этом других программистов.
   
   Ниже определены несколько правил, которые я определил для себя. Но, ими могут пользоваться и другие программисты.
  1. Все поля класса объявлять с модификатором private. 
  2. Все методы, которые не нужны вне класса делать закрытыми (private).
  3. Если метод нужен вне класса, то определять его открытым (public).
  4. Если возможно так случится, что метод понадобится в других классах, то определяем его защищенным.
  5. Если все-таки очень захотелось использовать поля супер класса в подклассах, то конечно же можно использовать модификатор protected. Но лучше этого не делать.
  6. Модификатор public использовать только для констант. Полей объявленных с ключевым словом final.
В заключении хочу сказать, что на самом деле есть еще один модификатор доступа. Он невидимый, но он существует:) Если метод или поле определить без модификатора, то область их видимости распространяется только на пакет. 
     
   

вторник, 17 апреля 2012 г.

Abstract class. What is it?

   Абстрактные классы. Что же это? И с чем это едят? Под сырным или укропным соусом? На эти и другие вопросы ответ будет дан ниже.
   Иногда возникает ситуация, когда мы имеем супер класс, большинство его методов используем в подклассах. Супер классы находясь в верхней части иерархии становятся настолько абстрактными, что их можно рассматривать как определенную базу для разработки других классов. В этом случае необходимо создавать абстрактные классы. 
abstract class   На рисунке слева изображена иерархическая цепочка классов, в которой определен абстрактный класс "Насекомое" и пара подклассов.
   Данный класс имеет два подкласса "Жук" и "Муха". Действительно "Жук" и "Муха" являются насекомыми, а обратное утверждение не может быть верным, ибо не каждое насекомое может быть мухой или же жуком.
   С абстрактными классами действительны следующие утверждения:
  • Нельзя использовать конструктор для абстрактного класса.
  • Если в подклассе не определить все методы абстрактного класса, то подкласс так же становится абстрактным.
  • Возможно создание массива абстрактных классов, где элементы массива инициализированы подклассами. При этом у элементов массива возможно вызывать методы только абстрактного класса.
   Обо всем этом далее более подробно.
   Для начала об определении абстрактного класса. Абстрактный класс обозначается в коде следующим образом
abstract class Insect {

}
   Абстрактный класс по определению должен содержать абстрактные методы, которые представляют собой прототипы методов, реализованных в подклассах.
   Для класса Insect определим метод getDesctiption(). C его помощью мы получим описание данного объекта.К примеру: Жук богомол любит траву, но и не против полакомиться своими соседями
public abstract class Insect {
 private String name;
 
 public Insect(String n){
  this.name = n;
 }
 
 public String getName(){
  return this.name;
 }
 
 abstract public String getDecription();
}
   Чтобы было возможно работать с этим методом, его необходимо определить в подклассе Fly
public class Fly extends Insect {
 public Fly(String n){
  super(n);
 }

 public String getName() {
  return super.getName();
 }

 /**
  * Переопределенный метод
  */
 @Override
 public String getDecription() {
  return  "Жук " + getName() + " любит питаться пальчиками людей";
 }
}
   Класс Fly уже нельзя назвать абстрактным, так как он определил все методы (точнее один единственный) своего супер класса Insect. Обычно переопределенные методы обозначаются с помощью конструкции @override. Она явно дает знать, что данный метод не собственный у класса, а метод переопределенный.
   Для класса Insect нельзя вызывать конструктор, т.к. это приведет к ошибке:
new Insect("полоскун");
Данный код приведет к ошибке. Но без проблем можно создать объект подкласса
Fly fly = new Fly("Навозная");
Несмотря на то, что у абстрактных классов нельзя вызывать конструктор, но переменные абстрактных классов все же можно использовать. Ниже показана эта возможность:
Insect[] insect = new Insect[2];
  insect[0] = new Fly("Цеце");
  insect[1] = new Bug("Усач");
  
  for(Insect i : insect){
   System.out.println(i.getDecription());
  }
Здесь мы создаем массив класса Insect, элементы которого инициализируем экземплярами подклассов Fly и Bug и далее вызываем метод getDecription(). Ниже весь код программы:
public class TestBug {

 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  Fly fly = new Fly("Навозная");
  
  Insect[] insect = new Insect[2];
  insect[0] = new Fly("Цеце");
  insect[1] = new Bug("Усач");
  
  for(Insect i : insect){
   System.out.println(i.getDecription());
  }
 }

}

//Абстрактный класс
public abstract class Insect {
 private String name;
 
 public Insect(String n){
  this.name = n;
 }
 
 public String getName(){
  return this.name;
 }
 
 abstract public String getDecription();
}

public class Bug extends Insect {
 public Bug(String n){
  super(n);
 }
 public String getName(){
  return super.getName();
 }
 @Override
 public String getDecription() {
  return getName() + " спаситель черепах";
 }
}

public class Fly extends Insect {
 public Fly(String n){
  super(n);
 }

 public String getName() {
  return super.getName();
 }

 /**
  * Переопределенный метод
  */
 @Override
 public String getDecription() {
  return  "Жук " + getName() + " любит питаться пальчиками людей";
 }
}
На этом все! Спасибо:)

среда, 11 января 2012 г.

Oracle ..acle ... acle

   Он жил хорошо. Жил - не тужил. И как то решил, что следует что-то изменить в своей жизни. Что же? А? Может прическу? Может бороду отрастить и обрасти свитером - стать эдаким программистом в законе?
   Но все это как то не то. Что-то другое его манило к себе и звало. Будило его по ночам. Он слышал лишь обрывки слов, какую-то несуразицу - "Окал", "Оро", "Ракле". Что за абсурд? - думал он. - Или я сошел с ума? .
   Тревожные мысли его томили и угнетали. Не человек, а какая-то бесформенная серая масса изрыгающая зловонные запахи. - говорила о нем его соседка тетя Нюра, когда ее спрашивали о Володе.
   Он не спал, не ел, хотя грыз ногти - это его профессиональная привычка, появившаяся еще в раннем детстве. Он не мог сдержать себя, когда видел ногти. Свои или чужие для него не имело значения. Ногти - думал он и шел на них как заговоренный щелкая своими мощными, закаленными челюстями.
    По ночам он кричал какие-то несуразные слова, бранился матом. По утрам ходил в церковь, где молился до посинения. Мямлил про себя в автобусе как делают это бабульки, был сер и нелюдим.
   Все изменилось в один день. Его муза куда-то ушла. Она растворилась в небытии и заодно опустошила своего обожателя. После этого он не мог уже говорить. Слова казались ему чужими, какими-то пресными, язык каким-то вязко-плесневелым желе. Ногти уже не доставляли ему  прежнее удовольствие, а тетя Нюра стала еще больше считать его унылым говном и свое мнение всячески старалась подчеркнуть, когда Володя приходил к ней починить телевизор.
   Да-да, этот человек был мастером на все руки, неким универсальным человеком, самородком и левшой в современном обществе.
   А что же там дальше было...???Он встретил прекрасную принцессу?Порубал змея горыныча? Покорил весь мир своими мыслями, песнями, шутками-прибаутками. Нет, ничего этого не было.
Как-то раз он проснулся и пошел на работу. Работу сложную, работу рабскую. И  говорит ему товарищ -командир и руководитель группы программных разработок - "Вова, сегодня для тебя настал великий день. Сегодня ты станешь богатырем сильным при сильным. С КПД мозга 100% процентов. Про тебя снимут фильм, напишут книги, и все девушки мира будут глубоко и тяжко вздыхать только при упоминании твоего имени, Володя. В общем ты станешь Оракловцем. Творцом, бойцом и защитником Оракла. На тебе книгу, сиди и разбирайся.
   И началась новая жизнь для Володи. Прям как у Билла Гейтса. По крайней мере он так думал. Может думает и по сей день. И живет припеваючи и играючи. И детей ростит. И сказки про Оракал рассказывает. В общем сказочке конец. А кто ее многоБукав осилил молодец:)
   
   
//ActionScript3 //C# //CSS //Java //JavaScript //Python //Sql //Xml