Plain Old Java Objects (POJOs)
Transcript
Plain Old Java Objects (POJOs)
Simple design Matteo Vaccari http://matteo.vaccari.name/ Milano XP User Group, 19 settembre 2007 1 • Simple project configuration • Simple interfaces • Simple (internal) design 2 5 minuti • Installare ed eseguire il progetto non deve richiedere più di 5 minuti 3 I. Scaricare maven >= 2.06 e aggiungere l'eseguibile di maven nella variabile $PATH II. Importare il certificato pubblico del servernel truststore della JVM(tipicamente in $JAVA_HOME/jre/lib/security/cacerts). Questo può essere fatto a riga di comando tramite l'utility keytool o in modalità grafica tramite la comoda utility Portecle 4 III. Configurare la proprie credenziali per maven copiando il file settings.xml opportunamente modificato nella cartella $HOME/.m2 (se si vuole configurare per user) o in $M2_HOME/conf (se si vuole configurare system-wide). Va inoltre impostato il repository per essere usato come repository di proxy. 5 IV.Aggiungere al repository maven la versione da me patchata di wagon-webdav-provider plugin e il suo POM. Questo si ottiene (dopo aver scaricato i file in una cartella che chiameremo $DOWNLOADFOLDER) lanciando il comando cd $DOWNLOADFOLDER mvn install:install-file -DgroupId=org.apache.maven.wagon -DartifactId=wagon-webdav -Dversion=1.0-beta-3 -Dpackaging=jar -Dfile=wagon-webdav-1.0-beta-3.jar mvn install:install-file -DgroupId=org.apache.maven.wagon DartifactId=wagon-webdav -Dversion=1.0-beta-3 Dpackaging=pom -Dfile=wagon-webdav-1.0-beta-3.pom 6 V. Scaricare i sorgenti con svn co https://www.example.com/repos/ dev/.../trunk VI.... VII.... VIII.... XLVI. ... non abbiamo ancora finito... 7 “ Ho installato il progetto su 5 macchine, e ogni volta ho perso una giornata. I problemi erano sempre diversi... ” 8 There must be a better way 9 Per scaricare il progetto: svn co https://svn.mplatform.it/svn/mp/abc-unico/trunk Carica in Eclipse i due progetti abc-unico e abc-da. Per vedere funzionare il progetto: Esegui cd trunk/abc-unico script/create_db.names.sh script/server.sh Apri il browser alla url http://localhost:8080/ Inserisci admin/admin 10 #!/bin/bash # create_db.names.sh -- ricostruisce i DB echo 'Drop db.names...' mysqladmin -uroot --force drop abc_development mysqladmin -uroot --force drop abc_test echo 'Create db.names...' mysqladmin -uroot create abc_development mysqladmin -uroot create abc_test echo 'grant all on abc_development.* to abc@localhost;' | mysql -uroot echo 'grant all on abc_test.* to abc@localhost;' | mysql -uroot echo 'Build schema...' cat db/???_*.sql | mysql -uabc abc_development cat db/???_*.sql | mysql -uabc abc_test echo 'Populate development...' mysql -uabc abc_development < db/populate.sql mysql -uabc abc_development < db/user_agents.sql 11 Simple configuration 12 ## TEST ## # portal.url = https://www.xxx.net:8449/foo # portal.db.username = zero9it # portal.db.password = 8an81r0 # OPTIONS portal.type = all portal.encoding = UTF-8 portal.language = it portal.incremental = false portal.xml = content.xml .... 13 • Capisco il significato delle var di configurazione? • Sono tutte necessarie? • Posso conservare le configurazioni di tutti gli ambienti in un solo progetto? 14 development: db.name: abc_development db.username: abc db.password: "" db.host: localhost test: db.name: abc_test db.username: abc db.password: "" db.host: localhost production: db.name: abcdb db.username: abc_user db.password: secret db.host: localhost 15 SimpleConfig.get(“db.hostname”); SimpleConfig.setEnvironment(“test”); 16 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> <!-- livello di debug --> <appender name="console" class="org.apache.log4j.ConsoleAppender"> <param name="Target" value="System.out"/> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="[h3gFlat] %d{dd-MMM HH:mm:ss} [%C.%M] [%L] %p - %m%n"/> </layout> </appender> <appender name="appender" class="org.apache.log4j.DailyRollingFileAppender"> <param name="Append" value="true"/> <param name="DatePattern" value=".yyyy-MM-dd"/> <param name="File" value="${catalina.home}/logs/h3gflat/webapp.log"/> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d [%t] %c.%M %p - %m%n"/> </layout> </appender> <appender name="selector" class="org.apache.log4j.DailyRollingFileAppender"> <param name="Append" value="true"/> <param name="DatePattern" value=".yyyy-MM-dd"/> <param name="File" value="${catalina.home}/logs/h3gflat/content_selector.log"/> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d [%t] %c.%M %p - %m%n"/> </layout> </appender> <appender name="HBAppender" class="org.apache.log4j.DailyRollingFileAppender"> <param name="Append" value="true"/> <param name="DatePattern" value=".yyyy-MM-dd"/> <param name="File" value="${catalina.home}/logs/h3gflat/Hibernate.log"/> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d [%t] %c.%M %p - %m%n"/> </layout> </appender> ... 17 public class SimpleLogger { private static final Log log = LogFactory.getLog(SimpleLogger.class); private static final String DEFAULT_LEVEL = "INFO"; public static void info(Object message) { log.info(message); } public static void configure(SimpleConfig config) { String level = config.get("log.level", DEFAULT_LEVEL); String pathname = config.get("log.pathname"); if ("".equals(pathname)) { configureStandardOutput(level); } else { configureFileAppender(pathname, level); } } 18 static public void configureFileAppender(String pathname, String level) { Properties p = new Properties(); p.setProperty("log4j.appender.File", "org.apache.log4j.DailyRollingFileAppender"); p.setProperty("log4j.appender.File.File", pathname); p.setProperty("log4j.appender.File.Append", "true"); p.setProperty("log4j.appender.File.DatePattern", "'.'yyyy-MM-dd"); p.setProperty("log4j.appender.File.layout", "org.apache.log4j.PatternLayout"); p.setProperty("log4j.appender.File.layout.ConversionPattern", "%d [%c] %m%n"); p.setProperty("log4j.rootLogger", level + ", File"); } System.setProperty("log4j.defaultInitOverride", "true"); PropertyConfigurator.configure(p); 19 SimpleLogger.configure(SimpleConfig.getConfig()); ... SimpleLogger.info(“hai visto com’è semplice?!?”); 20 Simple architecture • Don’t do the database’s work • EJB vs. Plain Old Java Objects (POJOs) • Don’t do the network’s work • WS_* vs. REST • CORBA, RMI, DCOM vs. plain socket • Don’t do the operating system’s work 21
Documenti analoghi
presentato - Matteo Vaccari
create_databases.sh
#!/bin/bash
if [ ! -d db ]; then
echo "Questo script deve essere eseguito nella dir principale del progetto"
exit 1
fi
echo 'Drop databases...'
mysqladmin -uroot --force drop d...
Piccolo manuale d`utilizzo del simulatore AsmetaS
documentazione allegata alla libreria [http://logging.apache.org/log4j/docs/index.html].
I messaggi di testo inviati ai logger sono frammenti di codice xml. L’interprete è fornito con due
classi di...
manuale operativo suaplocal
La scrittura del file di log è assicurata dalla presenza, all’interno del war, della libreria log4j-1.2.15.jar e del
file application.properties nella %CONF_DIR%/common/. E’ possibile eventualmente...