JBoss + Eclipselink - Property eclipselink.ddl-generation aus standalone.xml lesen?

LimDul

Top Contributor
Besteht die Möglichkeit die Properter eclipselink.ddl-generation aus einer anderen Quelle, als der persistence.xml zu lesen? Am liebsten wäre mir aus der standalone.xml des JBoss als dort hinterlegte Property.
 

mihe7

Top Contributor
Vorab: das ist alles völlig ungetestet, ich habe mich nur ganz kurz informiert, weil ich die Frage interessant fand.

EL scheint ja zumindest offiziell in der PersistenceContext-Annotation nicht zu funktionieren. Ich würde folgendes probieren:

In der persistence.xml die Property eclipselink.metadata-source mit dem FQN einer Klasse belegen, die MetaDataSource implementiert, z. B. als Ableitung von https://www.eclipse.org/eclipselink...tence/jpa/metadata/MetadataSourceAdapter.html. Dort könnte getPropertyOverrides verwendet (überschrieben) werden, um ...
 

LimDul

Top Contributor
Interessante Idee, das würde sogar mehr Möglichkeiten bieten. Muss ich mal schauen, dass ich kommende Woche mal Zeit finde, das auszuprobieren.

Hintergrund der Frage ist halt, dass wir in der persistence.xml den Wert auf "NONE" stehen haben, weil in den Produktiven System wollen wir die DB Migration selber über liquibase machen - Eclipselink es automatisch zu machen ist keine sinnvolle Option.

Auf der anderen Seiten hat jeder Entwickler die Anwendung lokal laufen mit einer lokalen H2 Datenbank (Produktion läuft auf Oracle). Dafür schreiben wir keine Skripte (die meisten Oracle Scripte laufen da auch) und seine lokale H2 DB mit SQL Skripten zu migrieren ist lästig. Das heißt für die lokale Entwicklung ist create-or-extend-tables meist die bessere Wahl. Nur kommt es sehr leicht vor, dass man das dann lokal umstellt und am Ende ausversehen das eincheckt. (Gut, das verhindern wir mittlerweile mit Unit-Tests). Aber eine Möglichkeit aufwandsarm lokal eine andere Einstellung zu haben als in Produktion wäre halt gut.
 

LimDul

Top Contributor
Gefällt mir aus verschiedenen Gründen nicht so gut. Ich möchte (bisher) auf Maven-Profile verzichten. Inwieweit das dann vor allen in Eclipse mit dem Deployment als exploded war funktioniert, weiß ich nicht. Ich sehe da mit Eclipse (aufgrund von Eclipse) mehr Probleme als Nutzen.
 

LimDul

Top Contributor
Der Tipp war Gold wert:
Java:
public class EclipselinkMetadataSourceAdapter extends MetadataSourceAdapter {

    @Override
    public Map<String, Object> getPropertyOverrides(Map<String, Object> properties,
            ClassLoader classLoader,
            SessionLog log) {
        HashMap<String, Object> result = new HashMap<>();
        String ddlProperty = System.getProperty("eclipselink.ddl");
        if (StringUtils.isNotBlank(ddlProperty)) {
            result.put("eclipselink.ddl-generation", ddlProperty);
        }
        return result;
    }

}

standalone.xml
XML:
    <system-properties>
        <property name="eclipselink.ddl" value="create-or-extend-tables"/>
    </system-properties>

Done.
 

Ähnliche Java Themen

Neue Themen


Oben