0

Bir web üzerinde Glassfish - Java EE tabanlı bir web uygulaması üzerinde çalışmak zorundayım ve uygulamayı birden çok ortama dağıtmamız gerekecek ve hangi env'ye bağlı olarak farklı özellikler var. Uygulama yayında. Yani sorum şu, bu yapılandırmaları nasıl yapabilirim? ÖrneğinÇevreye bağımlılık özellikleri - glassfish (NO Spring)

, benim orm.xml içinde, var ben örneğin, ProdSchema için DevSchema değiştirebilir Bu nasıl

<?xml version="1.0" encoding="UTF-8"?> <entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm orm_1_0.xsd" version="1.0"> 
    <persistence-unit-metadata> 
     <persistence-unit-defaults> 
      <schema>DevSchema</schema>    
     </persistence-unit-defaults> 
    </persistence-unit-metadata> </entity-mappings> 

gibi bir şey? 2 özellik dosyam var mı? dev.properties ve prod. özellikleri. Değerleri uygun dosya bağımlı listesinden env'de nasıl kullanabilirim?

Teşekkürler!

+0

Glassfish'in komut satırını çok sayıda parametre ayarlamak için kullanabilirsiniz. [bu KB makalesi] (http://docs.oracle.com/cd/E18930_01/html/821-2416/gglpq.html), JNDI özelliklerini nasıl ayarlayabileceğinizi gösterir [bu bir] (https://glassfish.java .net/javaee5/persistence/entity-persistence-support.html) komut satırında ayarlayabileceğiniz bir dizi diğer paramızı listeler. Yani katmanlı bir dağıtımda, ortam başına farklı komut satırı paramları – kolossus

cevap

1

Uygulamanızı oluşturmak için Maven'i kullanırsanız, persistence.xml ürünümüzü oluşturmak için Maven resource filtering'dan yararlanabilirsiniz. Basitçe "DevSchema" yı, özellik dosyanızın anahtarıyla değiştirin ve dosyayı Maven kaynak eklentisi yapılandırmasının <filter> etiketine gönderin (ayrıntılar için yukarıdaki bağlantıya bakın). Bununla birlikte, bu, farklı ortamlar için iki farklı savaş eseri ile sonuçlanacağınızı ima eder. Bu genellikle anti-desen olarak kabul edilir; Her iki eseri de takip etmeniz gerekecek ve artefakt deponuz (eğer varsa) neredeyse iki kez çarpışan SAVAŞLAR taşıyacak. Genel olarak, tek kullanımın tüm dağıtımlar için kullanılması tercih edilir. Bunun için, tüm kalıcı birimlerinizi farklı isimler altında tek bir persistence.xml tanımlayabilir ve uygun olanı seçmek için CDI kullanabilirsiniz. Bu en az iki yolla yapılabilir.

  1. kullanma yapımcı yöntemi:

    @PersistenceContext(unitName = "DevPU") 
    private EntityManager devEM; 
    
    @PersistenceContext(unitName = "ProdPU") 
    private EntityManager prodEM; 
    
    @Produces @MyDB EntityManager getEM() { 
        // Here you must detect your current environment and return the appropriate entity manager 
    } 
    

    diğer bazı fasulye alanına EntityManager enjekte etmek için:

    @Inject @MyDB private EntityManager em; 
    

    Sen belirtmek için @MyDB açıklama türünü tanımlamak zorunda kalacak varsayılan olmayan bu EntityManager enjekte edilmek zorundadır (varsayılan uygulama uygulama sunucusu tarafından seçilir).

  2. kullanma yapımcı alanları: İki ek açıklamaları, @ProdDB ve @DevDB tanımlamak zorunda kalacak Burada

    @Inject private Instance<EntityManager> instance; 
    
    void foo() { 
        // this could be ProdDB as well, depending on the environment 
        EntityManager em = instance.select(DevDB.class).get(); 
    } 
    

    ve dinamik (javax.enterprise.inject.Instance enjeksiyon yoluyla birini seçin:

    @Produces 
    @DevDB 
    @PersistenceContext(unitName = "DevPU") 
    private EntityManager devEM; 
    
    @Produces 
    @ProdDB 
    @PersistenceContext(unitName = "ProdPU") 
    private EntityManager prodEM; 
    

    EntityManager enjekte etmek veya bu bir parametreyle tek ek açıklama tipi olabilir).

+0

Merhaba. Cevabınız için teşekkürler! Maalesef, Ant kullanıyoruz. Ant'de benzer bir işlevsellik var mı (bildiğiniz şey)? – 0x56794E

+0

Bir ['filtre '] var (https://ant.apache.org/manual/Tasks/filter.html) ['copy'] (https://ant.apache.org/manual/Tasks/copy.html) göreviyle bağlantılı olarak çalışan ve tam olarak aynı olan ant görevi. – Dimitri

İlgili konular