Starší komentáře ke článku: JDO - různé implementace a jejich použití

Zpět na článek | Úvodní stránka Interval.cz

Avatar

Autor komentáře: jeeff

Datum vložení: 21.1.2005 13:16:49

Vcera som si povedal, ze JDO teda vyskusam, chcel som to nasit na existujuce tabulky. Pouzival som JPOX vratane pluginu pre Eclipse. Zasadny problem som mal v tom, ze v Beanoch sa neobjavoval primarny kluc, co je ale potrebne, aby som vedel spravit linky typu /edito.do?prodid=XX, viem ze sa to da ziskat nejako inak, ale vadi mi, ze to nema priamo ten bean.

Potom som ale na kolegovu radu vyskusal Cayenne (<a href='http://interval.cz/__redirect/redirect.asp?what=interval_discussion&url=http://www.objectstyle.org/cayenne/' target='_blank'>http://www.objectstyle.org/cayenne/</a>) a tam sa to dalo vyriesit jednoduchsie (priamo do beanu) a hlavne to ma pekny designer. Pustil som reverse na databazu a za par minut som mal funkcne beany vratane mojej customizacie (aby bean obsahoval priamo getProdId()). Ziskanie zoznamu objektov a ziskanie konkretneho objektu podla kluca je tiez velmi jednoduche. Nie je to sice standard JDO, ale je to jednoducho pouzitelne a funkcne. Rozhodne odporucam vyskusat.

Avatar

Autor komentáře: Miroslav Holubec

Datum vložení: 26.1.2005 15:19:21

org.jpox.AutoCreateSchema -> org.jpox.autoCreateSchema

Avatar

Autor komentáře: Miroslav Holubec

Datum vložení: 26.1.2005 15:31:11

pokud chcete vykouset tak funkcni priklad
Osoba.java z minuleho dilu
na tom
java -Dlog4j.configuration=file:log4j.properties org.jpox.enhancer.JPOXEnhancer package.jdo
(je potreba mit v CLASSPATH soubory bcel.jar jpox.jar jpox-enhancer.jar log4j.jar, jdbc driver k vasi databazi a soubor package.jdo)

DBTool.java
import java.io.IOException;
import java.util.Collection;
import java.util.Iterator;
import java.util.Properties;

import javax.jdo.Extent;
import javax.jdo.JDOHelper;
import javax.jdo.PersistenceManager;
import javax.jdo.PersistenceManagerFactory;
import javax.jdo.Query;
import javax.jdo.Transaction;

/**
* @author tholu01
*
*/
public class DBTool
{
public static void main(String args[]) throws IOException
{
System.out.println("JPOX Tutorial");
System.out.println("=============");

PersistenceManager pm = createPersistenceManager();
System.out.println("Created a PersistenceManager");

// Persistence of a Product and a Book.
Transaction tx = pm.currentTransaction();
try
{
tx.begin();
Osoba pepa = new Osoba("Pepa", "Novak", 23);
pm.makePersistent(pepa);

tx.commit();
System.out.println("Karel have been persisted");
}
finally
{
if (tx.isActive())
{
tx.rollback();
}
}
System.out.println("");

// Perform some query operations
tx = pm.currentTransaction();
try
{
tx.begin();
System.out.println("Executing Query");
Extent e = pm.getExtent(Osoba.class, true);
Query q = pm.newQuery(e, "vek < 30");
q.setOrdering("vek ascending");
Collection c = (Collection) q.execute();
Iterator iter = c.iterator();
while (iter.hasNext())
{
Object obj = iter.next();
System.out.println("> " + obj);
}

tx.commit();
}
finally
{
if (tx.isActive())
{
tx.rollback();
}
pm.close();
}
System.out.println("");
System.out.println("End of Tutorial");
}

/**
* Utility method to create a PersistenceManager
* @return The PersistenceManager
**/
private static PersistenceManager createPersistenceManager()
throws IOException
{
Properties properties = new Properties();
properties.setProperty(
"javax.jdo.PersistenceManagerFactoryClass",
"org.jpox.PersistenceManagerFactoryImpl");
properties.setProperty(
"javax.jdo.option.ConnectionDriverName",
"org.postgresql.Driver");
properties.setProperty(
"javax.jdo.option.ConnectionURL",
"jdbc:postgresql:jdotest");
properties.setProperty("javax.jdo.option.ConnectionUserName", "jdo");
properties.setProperty("javax.jdo.option.ConnectionPassword", "jdo");
properties.setProperty("org.jpox.autoCreateSchema","true");
properties.setProperty("org.jpox.validateTables","false");
properties.setProperty("org.jpox.validateConstraints","false");
PersistenceManagerFactory pmfactory =
JDOHelper.getPersistenceManagerFactory(properties);
PersistenceManager pm = pmfactory.getPersistenceManager();
return pm;
}
}
a pak uz to jede :)))

Avatar

Autor komentáře: Mike

Datum vložení: 27.1.2005 16:37:53

Nevim, jestli jsem jenom spatne hledal, ale nejak jsem neprisel na to, jak vytvorit "factory" pomoci DataSource. Na vypisovani properties v kodu nebo souboru jsem asi moc liney ... ;) A mozna by se nasel i nejaky dalsi duvod proc pouzivat datasource. :)

Avatar

Autor komentáře: Radek Burget

Datum vložení: 27.1.2005 18:58:02

Pokud se mýlím, tak mě opravte, ale domnívám se, že to nejde a ani není důvod, proč by to mělo jít. Z pohledu programátora s tím DataSource nijak přímo nesouvisí, jedná se prostě o jiný způsob přístupu k databázi. Život by to stejně nezjednodušilo - adresu db serveru, login a heslo musíte nějak zadat i do DataSource, ostatní parametry naopak z DataSource vzít stejně nelze. Nejlepší je mít externí soubor jpox.properties jak je v článku zmíněno - vytvoří se jednou a pak už se kopíruje mezi projekty a mění se jen vybrané parametry.

Avatar

Autor komentáře: Mike

Datum vložení: 28.1.2005 9:00:52

Spis jsem uvazoval o situaci, kdy jsou role developer, deployer, admin vyrazne oddeleny nebo situaci, kdy s jednou databazi pracuje vice modulu. Vyvojar nepotrebuje znat detaily o ostre db, deployer nemusi rozumnet pouzite technologii (jenom upravi jndi name v deskriptorech), admin nemusi nikomu sdelovat udaje o db, jejich zmenach ... pokud se prestehuje db na jinou adresu, jenom zmeni nastaveni datasource a neni treba sahat do nastaveni nekolika aplikaci. Ale to jsou jen obecna doporuceni ... me se libi a proto jsem se ptal. :)

Avatar

Autor komentáře: Mike

Datum vložení: 28.1.2005 9:47:26

Nakonec jsem to nasel na <a href='http://interval.cz/__redirect/redirect.asp?what=interval_discussion&url=http://www.jpox.org/docs/1_1/pmf.html' target='_blank'>http://www.jpox.org/docs/1_1/pmf.html</a> ...
javax.jdo.PersistenceManagerFactoryClass=org.jpox.PersistenceManagerFactoryImpl
javax.jdo.option.ConnectionDriverName=org.jpox.driver.JPOXDriver
javax.jdo.option.ConnectionURL=jpox:myJndiDataSource
... resp. ekvivalent v kodu (najit v init parametr, pridat do Properties) a jsem u toho, co mi vrtalo v hlave. ;)

Prislo mi divne, ze u jinych implementaci jsem to nasel, tak jsem zacal poradne cist dokumentaci ... holt jsem Cech, ktery uz z principu (nebo blbosti?, spis jesitnosti) necte manualy! ;)

Zpět na článek | Úvodní stránka Interval.cz