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

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...

Dettagli

Piccolo manuale d`utilizzo del simulatore AsmetaS

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...

Dettagli

manuale operativo suaplocal

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...

Dettagli