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

JPA allocationSize

Это аргумент аннотации @SequenceGenerator. Так что же он означает?
Когда мы пишем например



@Id @Column(name = "ITEM_ID") @GeneratedValue(strategy = GenerationType.SEQUENCE, generator="ItemIdSeqGenerator") @SequenceGenerator(name="ItemIdSeqGenerator", sequenceName="ITEM_ID_SEQ", allocationSize=10) private long itemId;

пятница, 6 апреля 2012 г.

Наследование, перегрузка методов и их областей видимости

Видимость перегружаемого методода нельзя ПОНИЖАТЬ, можно только повышать.



class A {
   public void myMeth(){...}

   private void otherOneMeth() {...}
}

class B extends A {
   private void  myMeth (){...}// alarm! компилятор ругнется

   public void otherOneMeth() {...}// а так ок
}

четверг, 5 апреля 2012 г.

ключевое слово transient

transient - переходящий


Если стоит возле поля, то означает, что пока будет серелизовываться,
 если не стоит то не серелизуется.

volatile

volatile - летучий

ключевое слово в Java, которым помечают поля в классах, поле может быть как обьектом, так и обычным типом (в отличии от synchronized, которое может быть примененено только на поля классовых типов)

Это ключевое слово означает, что поле бедут доступно и изменяемо раными потоками, каждый из потоков не позволяет себе кеширование, и каждый раз обращается непосредственно к памяти поля.

Таблица отличий между volatile и synchronized

Characteristic Synchronized Volatile
Type of variable Object Object or primitive
Null allowed?NoYes
Can block?YesNo
All cached variables synchronized on access?YesFrom Java 5 onwards
When synchronization happensWhen you explicitly enter/exit a synchronized blockWhenever a volatile variable is accessed.
Can be used to combined several operations into an atomic operation?YesPre-Java 5, no. Atomic get-set of volatiles possible in Java5.

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

Доступ к приватным полям обьектов из обьектов того же класса

Если в метод обьекта передать параметр того же класса, то все приватные методы будут доступны внутри этого метода(потому что это один и тот же класс)

Тоже самое касается статического метода класса, которые получает обьект того же класса.



class A {
    private int field;

    public void method1(A a){
        System.out.println(a.field);  // works
    }

    static public void method2(A a){
         System.out.println(a.field);  //works
    }

воскресенье, 1 апреля 2012 г.

Настройка екслипса под лайфрей

Первое, что хотелось бы поднять, это размещение библиотек в плагине для разработки под лайфрей:
Есть библиотеки, которые будут находиться в среде где будет развернут скомпилированный плагин, и поэтому такие библиотеки нужны только для процесса компиляции, в варнике же они не нужны, размещать их нужно сдесь:
/myportlet/lib
Если мы собираем проект антом, то в его билд файле этот путь указывается параметре classpath команды javac.

Есть же такие библиотеки, которые мы применили в нашем плагине, но они до этого не использовались в лайфрее, поэтому их тоже нужно поместить в варник, чтобы они были доступными и в среде(на сервере где развернут лайфрей). Размещать их нужно тут:
/myportlet/WEB-INF/lib

Когда настраиваем сервер в данном случае томка, то ему в параметры виртуальной машинынужно дописать следующие:


-Xms128m устанавливаем больше стандартного размер кучи, которую инициализирует JVM при старте приложения

-Xmx512m # повышаем максимально возможный размер кучи(за которой следит gc и очищает в случае необходимости) JVM

-XX:MaxPermSize=256m # повышаем максимальный размер перманентной памяти(которую не чистит gc), тут храняться классы, в куче же хранятся объекты этих классов



Чтобы помочь еклипсу запустить сервер, нужно во вкладке класспаз окна настройки сервера добавить джарники из либ томката: servlet-api.jar, el-api.jar, and jsp-api.jar, а также всю папку в этих же либах ext

И нужно добавить времени на старт сервера и на его остановку, 180 и 120 сек соответсвенно. Филдсет таймаут.