<properties>
   <property name="eclipselink.cache.type.default" value="Full"/>
</properties>
--------------------------------------------------------------------------------------------------------------------------------------
<properties>
   <property name="eclipselink.cache.type.default" value="Weak"/>
</properties>
--------------------------------------------------------------------------------------------------------------------------------------
<properties>
   <property name="eclipselink.cache.type.default" value="Soft"/>
</properties>
--------------------------------------------------------------------------------------------------------------------------------------
<properties>
 <property name="eclipselink.cache.type.default"
     value="SoftWeak"/>
</properties>
--------------------------------------------------------------------------------------------------------------------------------------
<properties>
     <property name="eclipselink.cache.type.default"
         value="HardWeak"/>
</properties>
--------------------------------------------------------------------------------------------------------------------------------------
<properties>
 <property name="eclipselink.cache.type.default" value="None"/>
</properties>
--------------------------------------------------------------------------------------------------------------------------------------
<properties>
    <property name="eclipselink.cache.size.default" value="1500"/>
 </properties>
--------------------------------------------------------------------------------------------------------------------------------------
<properties>
    <property name="eclipselink.cache.size.Order" value="1000"/>
</properties>
--------------------------------------------------------------------------------------------------------------------------------------
<ejb>
   <ejb-name>SimpleBean</ejb-name>
   <jndi-name>ejb/SimpleBean</jndi-name>
   <use-thread-pool-id>session-pool-1</use-thread-pool-id>
   <bean-cache>
     <max-cache-size>1000</max-cache-size>
     <resize-quantity>512</resize-quantity>
     <cache-idle-timeout-in-seconds>7200</cache-idle-timeout-in-seconds>
     <victim-selection-policy>nru</victim-selection-policy>
   </bean-cache>
</ejb>
--------------------------------------------------------------------------------------------------------------------------------------
<property name="eclipselink.profiler" value="QueryMonitor"/>
--------------------------------------------------------------------------------------------------------------------------------------
<properties>
   <property name="eclipselink.cache.size.Order" value="1000"/>
</properties>
--------------------------------------------------------------------------------------------------------------------------------------
public class CartSessionBean implements SessionBean{
    transient OrderSessionRemote session;
    transient OrderSessionHome sessionHome;
    javax.ejb.Handle handle;
    javax.ejb.HomeHandle homeHandle;
    SessionContext ctx;
    /**
     * Tworzy bean.
     * @exception wyrzuca wyjtki CreateException, RemoteException.
     */
    public void ejbCreate() throws CreateException {
        session=getOrderSession();
    }
    /**
     * Usuwa bean. Wymagane przez specyfikacj EJB.
     */
    public void ejbRemove() {}
    /**
     * aduje stan beanu z pamici pomocniczej.
     * Wymagane przez specyfikacj EJB.
     */
    public void ejbActivate() {
        session = getOrderSession();
    }
    /**
     * Zachowuje stan beanu w pamici pomocniczej.
     * Wymagane przez specyfikacj EJB.
     */
    public void ejbPassivate() {}
    /**
     * Ustawia kontekst sesji. Wymagane przez specyfikacj EJB.
     * @param sc Obiekt SessionContext.
     */
    public void setSessionContext(SessionContext sc) {
        this.ctx=sc;
    }
    private OrderSessionRemote getOrderSession() {
        try {
            if (sessionHome == null && homeHandle == null) {
                sessionHome = (OrderSessionHome) ctx.lookup(
                        "java:comp/env/ejb/OrderSession");
                homeHandle = sessionHome.getHomeHandle();
            } else if (sessionHome == null) {
                sessionHome =
                    (OrderSessionHome) homeHandle.getEJBHome();
            }
            if (session == null && handle == null) {
                session = sessionHome.create();
                handle = session.getHandle();
            } else if (session == null) {
                session = (OrderSessionRemote) handle.getEJBObject();
            }
            return session;
        } catch (Exception ex) {
            ex.printStackTrace();
            return null;
        }
    }
}
--------------------------------------------------------------------------------------------------------------------------------------
<ejb-local-ref>
    <description>EJB Session</description>
    <ejb-ref-name>ejb/Session</ejb-ref-name>
    <ejb-ref-type>Session</ejb-ref-type>
    <local-home>
       com.orangerepublic.ejb.session.SessionLocalHome
    </local-home>
    <local>
       com.orangerepublic.ejb.session.SessionLocal
    </local>
    <ejb-link>SessionBean</ejb-link>
  </ejb-local-ref>
--------------------------------------------------------------------------------------------------------------------------------------
<enterprise-beans>
  <session>
    <ejb-name>SessionBean</ejb-name>
    <local-home>
      com.orangerepublic.ejb.session.SessionLocalHome
    </local-home>
    <local>
      com.orangerepublic.ejb.session.SessionLocal
    </local>
    <ejb-class>
      com.orangerepublic.ejb.session.SessionBeanImpl
    </ejb-class>
    <session-type>Stateless</session-type>
...
  </session>
</enterprise-beans>
--------------------------------------------------------------------------------------------------------------------------------------
<ejb>
  <ejb-name>Session</ejb-name>
  <jndi-name>ejb/Session</jndi-name>
  <pass-by-reference>true</pass-by-reference>
  ....
</ejb>
--------------------------------------------------------------------------------------------------------------------------------------
public interface CheckoutSessionLocal extends javax.ejb.EJBLocalObject {
    public void placeOrder(String cartID);
}
/**
 * Wzorzec Session Faade, ktry hermetyzuje wiele mniejszych zada
 * zwizanych ze skadaniem zamwienia
 */
public class CheckoutSession implements javax.ejb.SessionBean {
    public OrderDAO placeOrder(String cartID){
        ShoppingCart cart = getShoppingCart(cartID);
        //tworzy zamwienie na podstawie zawartoci koszyka
        Order order = createOrder(cartID);
        //pobiera kwot z banku
        charge(order.getTotal(), cart.getChargeDetails());
        //wysya zamwienie do magazynu i aktualizuje stan magazynowy
        String whsID = scheduleWarehouseMessage(order);
        //organizuje wysyk
        ship(whsID);
        //aktualizuje rekordy w historii zamwie
        updateOrderHistory(order, cart.getPerson());
        //wysya e-mail z potwierdzeniem
        sendEmailConfirmation(order);
       //tworzy obiekt DOA
       OrderDAO odao = createOrderDAO(order);
       //usuwa koszyk
       ...
       return odao;
    }
}
--------------------------------------------------------------------------------------------------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<sun-cmp-mappings>
  <sun-cmp-mapping>
    <schema>EJB21</schema>
    <entity-mapping>
      <ejb-name>Order</ejb-name>
      <table-name>ORORDER</table-name>
      ...
      <cmr-field-mapping>
        <cmr-field-name>lines</cmr-field-name>
        <column-pair>
          <column-name>ORORDER.ID</column-name>
          <column-name>ORDERLINE.ORDER_ID</column-name>
        </column-pair>
        <fetched-with>
          <default/>
        </fetched-with>
      </cmr-field-mapping>
      ...
  </sun-cmp-mapping>
</sun-cmp-mappings>
--------------------------------------------------------------------------------------------------------------------------------------
<entity-mapping>
   <ejb-name>Order</ejb-name>
   ....
   <consistency>
      <check-version-of-accessed-instances>
         <column-name>ORORDER.version</column-name>
      </check-version-of-accessed-instances>
   </consistency>
</entity-mapping>
--------------------------------------------------------------------------------------------------------------------------------------
<entity-mapping>
   <ejb-name>Order</ejb-name>
   ....
   <consistency>
      <lock-when-loaded/>
   </consistency>
</entity-mapping>
--------------------------------------------------------------------------------------------------------------------------------------
public ArrayList<OrderLine> getDiscountedLines(String orderID);
--------------------------------------------------------------------------------------------------------------------------------------
public ArrayList<OrderLines> getDiscountedLines(String orderID){
    ArrayList<OrderLine> dLines = new ArrayList();
    try {
        InitialContext ic = new InitialContext();
        OrderHome oh =
            (OrderHome)ic.lookup("java:comp/env/ejb/local/Order");
        Order order = oh.findByPrimaryKey(orderID);
        ArrayList<OrderLine> lines = order.getLines();
        for (int i = 0; i < lines.size(); i++) {
            OrderLine ol = (OrderLine)lines.get(i);
            if(ol.getDiscount() > 0){
                  dLines.add(ol);
             }
         }
    } catch (NamingException nex) {
        ....
    } catch (FinderException fex) {
        ...
    }
    return dLines;
}
--------------------------------------------------------------------------------------------------------------------------------------
public interface OrderLineLocalHome extends javax.ejb.EJBLocalHome {
    ...
    public Collection findByDiscountedLines(String id)
        throws javax.ejb.FinderException;
}
--------------------------------------------------------------------------------------------------------------------------------------
<entity>
   <description/>
   <display-name>OrderLine</display-name>
   <ejb-name>OrderLine</ejb-name>
   ...
   <query>
       <description>Find discounted line items from order</description>
       <query-method>
             <method-name>findByDiscountedLines</method-name>
             <method-params>
                   <method-param>java.lang.String</method-param>
             </method-params>
       </query-method>
       <ejb-ql>
         SELECT OBJECT(l) FROM OrderLine AS l WHERE l.discount > 0 AND
l.orderInfo.id = ?1
       </ejb-ql>
   </query>
   ...
</entity>
public ArrayList<OrderLine> getDiscountedLinesByQuery(String orderID){
    ArrayList<OrderLine> dLines = null;
    try {
        InitialContext ic = new InitialContext();
        OrderLineLocalHome olh = (OrderLineLocalHome) ic.lookup(
                "java:comp/env/ejb/OrderLine");
        Collection<OrderLine> lines = olh.findByDiscountedLines(orderID);
        if(lines==null){
            System.out.println("Lines: " + orderID+" is null!");
        }
        dLines = new ArrayList<OrderLine>(lines);
    }
    catch (NamingException nex) {
        nex.printStackTrace();
    }
    catch(FinderException fex){
        fex.printStackTrace();
    }
    return dLines;
}
--------------------------------------------------------------------------------------------------------------------------------------
<sun-ejb-jar>
   <enterprise-beans>
   ...
   <ejb>
       <ejb-name>BookCatalog</ejb-name>
       <jndi-name>ejb/BookCatalog</jndi-name>
       <is-read-only-bean>true</is-read-only-bean>
       <refresh-period-in-seconds>600</refresh-period-in-seconds>
   </ejb>
   ...
   </enterprise-beans>
</sun-ejb-jar>
--------------------------------------------------------------------------------------------------------------------------------------
<assembly-descriptor>
   <!-- Default interceptor--> //Interceptor poziomu domylnego
   <interceptor-binding>
    <ejb-name>*</ejb-name>
      <interceptor-class>
com.orangerepublic.ejb.session.interceptor.AuthorizationInterceptor
      </interceptor-class>
      <interceptor-class>
com.orangerepublic.ejb.session.interceptor.ValidationInterceptor
      </interceptor-class>
      <interceptor-class>
         com.orangerepublic.ejb.session.interceptor.AuditInterceptor
      </interceptor-class>
      <interceptor-class>
         com.orangerepublic.ejb.session.interceptor.LoggingInterceptor
      </interceptor-class>
  </interceptor-binding>
  .....
</assembly-descriptor>
--------------------------------------------------------------------------------------------------------------------------------------
@Stateless
@Interceptors({com.orangerepublic.ejb.session.interceptor.
AuthorizationInterceptor.class})
public class ShoppingCart{
      ...
}
<assembly-descriptor>
<!-- Class interceptor--> //Interceptor poziomu klasy
   <interceptor-binding>
      <ejb-name>OrderSessionBean</ejb-name>
      <interceptor-class>
com.orangerepublic.ejb.session.interceptor.AuthorizationInterceptor
      </interceptor-class>
      <interceptor-class>
com.orangerepublic.ejb.session.interceptor.ValidationInterceptor
      </interceptor-class>
      <interceptor-class>
         com.orangerepublic.ejb.session.interceptor.AuditInterceptor
      </interceptor-class>
      <interceptor-class>
         com.orangerepublic.ejb.session.interceptor.LoggingInterceptor
      </interceptor-class>
   </interceptor-binding>
   ...
</assembly-descriptor>
--------------------------------------------------------------------------------------------------------------------------------------
@Interceptors({com.orangerepublic.ejb.session.interceptor.
AuthorizationInterceptor.class})
      public void getItem(){
            ...
      }
<assembly-descriptor>
   <!-- Method interceptor--> //Interceptor poziomu metody
   <interceptor-binding>
      <ejb-name>OrderSessionBean</ejb-name>
      <interceptor-class>
com.orangerepublic.ejb.session.interceptor.AuthorizationInterceptor
      </interceptor-class>
      <interceptor-class>
com.orangerepublic.ejb.session.interceptor.ValidationInterceptor
      </interceptor-class>
      <interceptor-class>
         com.orangerepublic.ejb.session.interceptor.AuditInterceptor
     </interceptor-class>
     <interceptor-class>
        com.orangerepublic.ejb.session.interceptor.LoggingInterceptor
     </interceptor-class>
     <method>
        <method-name>getItem</method-name>
     </method>
   </interceptor-binding>
   ...
</assembly-descriptor>
--------------------------------------------------------------------------------------------------------------------------------------
<assembly-descriptor>
   <!-- Method interceptor--> //Interceptor poziomu metody
   <interceptor-binding>
      <ejb-name>OrderSessionBean</ejb-name>
      <exclude-default-interceptors>true</exclude-default-interceptors>
      <exclude-class-interceptors>true</exclude-class-interceptors>
      <method>
         <method-name>getItem</method-name>
      </method>
   </interceptor-binding>
   ...
</assembly-descriptor>
--------------------------------------------------------------------------------------------------------------------------------------
@NamedQuery(name="ordersByCustomer",
        query="SELECT o FROM OROrder o WHERE o.customer.id=:id")
Query q = em.createNamedQuery("ordersByCustomer");
q.setParameter("id", nid);
List<Order> o = q.getResultList();
--------------------------------------------------------------------------------------------------------------------------------------
@NamedNativeQuery(name="ordersByCustomerNative",
   query="SELECT t1.ID, t1.DESCRIPTION, t1.TOTAL, t1.STATUS,"+
      "t1.CUSTOMER_ID FROM CUSTOMER t0, ORORDER t1 " +
      "WHERE ((t0.ID = t1.CUSTOMER_ID) AND (t0.ID = ?))",
      resultClass=Order.class)

Query q = em.createNamedQuery("ordersByCustomerNative");
q.setParameter(1, nid);
List<Order> o = q.getResultList();
--------------------------------------------------------------------------------------------------------------------------------------
Query q = em.createQuery(
           "SELECT o FROM OROrder o WHERE o.customer.id="+id);
List<Order> o = q.getResultList();
--------------------------------------------------------------------------------------------------------------------------------------
public class Order {
      ...
      public static final String nativeQuery = "SELECT t1.ID, "+
         "t1.DESCRIPTION, t1.TOTAL, t1.STATUS, t1.CUSTOMER_ID"+
         "FROM CUSTOMER t0, ORORDER t1 " +
         "WHERE ((t0.ID = t1.CUSTOMER_ID) AND (t0.ID = ?))";
      ...
      }
      Query q = em.createNativeQuery(Order.nativeQuery,
                    com.orangerepublic.entity.Order.class);
      q.setParameter(1, nid);
      List<Order> o = q.getResultList();
      ...
}
--------------------------------------------------------------------------------------------------------------------------------------
//ustawia maksymaln liczb rezultatw do pobrania
public Query setMaxResults(int maxResult);
--------------------------------------------------------------------------------------------------------------------------------------
//ustawia pozycj pocztkow pierwszego rezultatu do pobrania
public Query setFirstResult(int startPosition);
--------------------------------------------------------------------------------------------------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<entity-mappings xsi:schemaLocation="http://www.eclipse.org/eclipselink/
xsds/persistence/orm xsd/eclipselink_orm_1_0.xsd" xmlns="http://www.
eclipse.org/eclipselink/xsds/persistence/orm" xmlns:xsi="http://www.
w3.org/2001/XMLSchema-instance" version="1.0">
   <named-query name="findByStatus">
      <query>SELECT o FROM OROrder o WHERE o.status=:status</query>
      <hint name="eclipselink.query-results-cache" value="true"/>
      <hint name="eclipselink.query-results-cache.size" value="200"/>
   </named-query>
   <entity name="OROrder" class="com.orangerepublic.entity.Order"/>
</entity-mappings>
--------------------------------------------------------------------------------------------------------------------------------------
<hint name="eclipselink.query-results-cache.expiry" value="1800000"/>
--------------------------------------------------------------------------------------------------------------------------------------
<hint name="eclipselink.query-results-cache.refreshOnlyIfNewer "
value="true"/>
--------------------------------------------------------------------------------------------------------------------------------------
@OneToMany(cascade=CascadeType.ALL, mappedBy="order",
fetch=FetchType.EAGER)
   private Collection<OrderLine> lines;
--------------------------------------------------------------------------------------------------------------------------------------
@OneToMany(cascade=CascadeType.ALL, mappedBy="order",
fetch=FetchType.LAZY)
      private Collection<OrderLine> lines;
--------------------------------------------------------------------------------------------------------------------------------------
@NamedQuery(name="selectByStatus",
      query="SELECT DISTINCT o FROM Order o LEFT JOIN FETCH o.lines
WHERE o.status = :status")
@Entity
@Table(name = "ORORDERS")
public class Order implements Serializable {
      ...
      @OneToMany(cascade=CascadeType.ALL, mappedBy="order")
      private Collection<OrderLine> lines;
      ...
}
--------------------------------------------------------------------------------------------------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >
   <persistence-unit name="ejb30">
      <provider>org.eclipse.persistence.jpa.PersistenceProvider </provider>
      <jta-data-source>jdbc/ejb30</jta-data-source>
   </persistence-unit>
</persistence>
--------------------------------------------------------------------------------------------------------------------------------------
ImplicitCachingEnabled=true
      MaxStatements=200
--------------------------------------------------------------------------------------------------------------------------------------
} public cancelOrder(String customerID){
    Query q = em.createQuery("ordersByCustomer");
    q.setParameter("customerID", customerID);
    Collection<Order> orders = q.getResultList();

    for(Order o:orders){
        o.setStatus(Order.OrderStatus.CANCELLED);
        em.merge(o);
    }
}
--------------------------------------------------------------------------------------------------------------------------------------
@Entity(name="OROrder")
@NamedQueries(
    @NamedQuery(name="bulkUpdateStatus",
        query="UPDATE order c SET c.status = cancelled WHERE
c.customer.id=:customerID"))
public class Order implements Serializable{
    ...
    public cancelOrder(String customerID){
    Query q = em.createQuery("bulkUpdateStatus");
    q.setParameter("customerID", customerID);
    q.executeUpdate();
}
--------------------------------------------------------------------------------------------------------------------------------------
public class Order implements Serializable {
    ...
    @Version(column="version")
    private Long version;

    public Long getVersion() {
        return version;
    }
}
--------------------------------------------------------------------------------------------------------------------------------------
@TransactionAttribute(TransactionAttributeType.SUPPORTS)
public Order getOrder(String id) {
    return em.find(Order.class, id));
}

