estos scripts se activan desde el archivo crontab
copidatabases.sh (mysql)
#!/bin/sh
fecha=$(date +%y-%m-%d-%H-%M)
DIRECTORIO_INICIAL=/var/lib/mysql
DIRECTORIO_FINAL=$1
mkdir $DIRECTORIO_FINAL/$fecha
for a in `ls $DIRECTORIO_INICIAL`
do
fname=`echo $a | tr A-Z a-z`
echo $DIRECTORIO_INICIAL/$a $DIRECTORIO_INICIAL/$fname
/usr/bin/mysqldump -u ADMIN --password=nickel $fname>$DIRECTORIO_FINAL/$fecha/$fname.sql
done;
exit 0
copi.sh (directorios a incluir y tar)
#!/bin/sh
DIAS=$3
DIRECTORIO_INICIAL=$1
DIRECTORIO_FINAL=$2
fecha=$(date +%y-%m-%d-%H-%M)
find $DIRECTORIO_INICIAL -mtime -$DIAS \! -type d | cat > $DIRECTORIO_FINAL$fecha.txt
tar -cv -T $DIRECTORIO_FINAL$fecha.txt -f $DIRECTORIO_FINAL$fecha.tar
martes, 13 de noviembre de 2007
linux script copias seguridad
Publicado por Juan Antonio Ruz en 3:18 1 comentarios
Categorías: Configuraciones Seguridad Servidor
jueves, 8 de noviembre de 2007
cache de explorer no busca actualizacion de informacion
En herramientas>opciones de internet
pestaña general, información relativa a archivos temporales de internet> configuración
Comprobar: automaticamente
o eso o mandar un parametro en el get que sea por ejemplo la hora
Publicado por Juan Antonio Ruz en 5:52 0 comentarios
Categorías: cache, explorer, navidad, Soluciones
miércoles, 24 de octubre de 2007
enum con propiedades, para controlar los mensajes al usuario
http://java.sun.com/docs/books/tutorial/java/javaOO/enum.html
public enum ReflectionMensaje {
ILEGAL_ACCESO("ilegal acceso al metodo: "),
METODO_INEXISTENTE("No existe el metodo: "),
EXCEPCION_INVOCACION("excepcion de invocacion en el metodo: ");
private final String mensaje; // in kilograms
ReflectionMensaje(String m) {
this.mensaje = m;
}
public String toString() {
return mensaje; //To change body of overridden methods use File | Settings | File Templates.
}
}
Publicado por Juan Antonio Ruz en 12:28 0 comentarios
Categorías: java
jueves, 18 de octubre de 2007
configure log en jboss
hay que editar el archivo server/default/conf/log4j.xml
e incluir nuevas categorias
<category name="oracle.adf">
<priority value="WARN"/>
</category>
Publicado por Juan Antonio Ruz en 3:38 0 comentarios
martes, 16 de octubre de 2007
jndiPatter en components.xml
<component name="org.jboss.seam.core.init">
< property> name="jndiPattern" pruebaSevilla/#{ejbName}/local/ <property>
</component>
Publicado por Juan Antonio Ruz en 10:14 0 comentarios
Categorías: Seam
miércoles, 10 de octubre de 2007
Acceder a componente stateless de seam
como es un componente sin estado no se puede acceder a través de la función:
Contexts.getSessionContext()
entonces:
Component.getInstance(nombre);
Publicado por Juan Antonio Ruz en 4:42 0 comentarios
Categorías: Seam 1.2
jueves, 4 de octubre de 2007
How to specify platform independent file path?
How to specify platform independent file path?
WINDOWS
File.separatorChar: \
File.separator: \
File.pathSeparator: ;
File.pathSeparatorChar: ;
LINUX
File.separatorChar: /
File.separator: /
File.pathSeparator: ;
File.pathSeparatorChar: ;
Y una función para obtener el path url del archivo:
protected String damePathURL(String serverPathFile){
try{
return serverPathFile.replaceAll(File.separator, "/");
}catch(Exception e){
//lanzaría una excepción de tipo java.util.regex.PatternSyntaxException al intentar sustituir el File.Separator=\
return serverPathFile.replaceAll(File.separator+File.separator, "/");
}
}
Publicado por Juan Antonio Ruz en 1:48 3 comentarios
martes, 2 de octubre de 2007
Mailing en seam
El ejemplo de seam-mail muestra como funciona la libreria jboss-seam-mail.jar
Basicamente hay que añadir el componente :
mail:mail-session host="smtpHost" username="user" password="password"
en el archivo WEB-INF/components.xml
y en el archivo jsf, la declaración de tld
xmlns:m="http://jboss.com/products/seam/mail"
Publicado por Juan Antonio Ruz en 10:20 0 comentarios
Categorías: Seam 1.2
jueves, 20 de septiembre de 2007
Actualiza richfaces3.1 en seam
Simplemente hay que quitar la librería actual de richfaces sustituirla por las 3 nuevas que trae la actualización:
- richfaces-ui-3.1.0.jar
- richfaces-api-3.1.0.jar
- richfaces-impl-3.1.0.jar
por mi parte he incluído el modulo en application.xml
>module >
>java >richfaces-api-3.1.0.jar >/java >
>/module >
encontrado en el forum de jboss-seam:
http://www.jboss.com/index.html?module=bb&op=viewtopic&t=118650
Publicado por Juan Antonio Ruz en 3:34 0 comentarios
Categorías: RichFaces, Seam 1.2, Soluciones
linux symbolic link
ln -s [TARGET DIRECTORY OR FILE] ./[SHORTCUT]
ln -s /usr/local/apache/logs ./logs
Publicado por Juan Antonio Ruz en 2:01 0 comentarios
Categorías: linux
viernes, 14 de septiembre de 2007
Volver a linkear un directorio con subversion en google.code
Borrar todas las carpetas presentes en ese directorio con nombre .svn y después seleccionar share directory
Publicado por Juan Antonio Ruz en 3:13 0 comentarios
Categorías: Google, subversion
martes, 11 de septiembre de 2007
internacionalización en jboss seam, varios ficheros de mensajes, herencia
Hay que incluir el componente en el components.xml
distinguiendo los nombres de cada grupo de mensajes
<core:resource-bundle>
<core:bundle-names>
<value>messages</value>
<value>zmessages</value>
</core:bundle-names>
</core:resource-bundle>
Para acceder desde el jsf dos formas (en la mayoría de las ocasiones la mejor es la segunda):
- a través del mapa de mensajes #{messages['mensajeUsuario']}
- a través de la sintaxis de punto #{messages.mensajeUsuario}
Para acceder al componente de Messages desde la fase de invocación del programa (es decir siempre que no sea en el jsf esto es en las clases java que escribimos) hay que acceder de la siguiente forma:
Stringn mensajeInternacionalizado=Messages.instance().get('mensajeUsuario')
Publicado por Juan Antonio Ruz en 6:04 0 comentarios
Persistencia de propiedades de tipo Objeto no primitivo: Annotation Type Embedded
Hay que anotar la propiedad objeto con la anotacion @Embedded. Y el objeto en cuestión con la anotacion @Embeddable.
Ej:
@Embedded
ClienteImagen fichero
@Embeddable
public class ClienteImagen {
String imgMini;
String imgZoom;
public String getImgMini() {
return imgMini;
}
public void setImgMini(String imgMini) {
this.imgMini = imgMini;
}
public String getImgZoom() {
return imgZoom;
}
public void setImgZoom(String imgZoom) {
this.imgZoom = imgZoom;
}
}
http://tom.tharrisx.homedns.org/sm3rdpartyref/hibernate-annotations-3.3.0.GA/doc/jpa-api/javax/persistence/Embedded.html
Publicado por Juan Antonio Ruz en 5:17 0 comentarios
Categorías: api, hibernate, persistencia
lunes, 10 de septiembre de 2007
language in lunux, locales
/etc/environment
LANGUAGE="de_DE:de:en_GB:en"
LANG=de_DE@euro
LC_ALL=es_ES@euro
LANGUAGE=es_ES@euro
LC_TYPE=es_ES@euro
LANG=es_ES@euro
export LANG=de_DE@euro
Esto lanza un programa para reconfigurar las locales:
dpkg-reconfigure locales
En este momento las tengo en:
locale
LANG=de_DE@euro
LC_CTYPE="de_DE@euro"
LC_NUMERIC="de_DE@euro"
LC_TIME="de_DE@euro"
LC_COLLATE="de_DE@euro"
LC_MONETARY="de_DE@euro"
LC_MESSAGES="de_DE@euro"
LC_PAPER="de_DE@euro"
LC_NAME="de_DE@euro"
LC_ADDRESS="de_DE@euro"
LC_TELEPHONE="de_DE@euro"
LC_MEASUREMENT="de_DE@euro"
LC_IDENTIFICATION="de_DE@euro"
LC_ALL=
Publicado por Juan Antonio Ruz en 1:49 0 comentarios
Categorías: linux
domingo, 9 de septiembre de 2007
jboss jems installer sin interface grafica (en servidor)
link:http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4025336
java -jar jems-installer-1.2.0.jar -installGroup ejb3-clustered
installpath=/opt/jboss-4.0.5
Publicado por Juan Antonio Ruz en 12:13 0 comentarios
Categorías: JBoss, linux, Soluciones
jueves, 6 de septiembre de 2007
Cambiar nombre de tabla en mysql
ALTER TABLE `nombre` RENAME `NombreNuevo` ;
Publicado por Juan Antonio Ruz en 10:10 0 comentarios
Categorías: MySql
martes, 4 de septiembre de 2007
Character-set en jboss requestURI
http://www.jboss.com/index.html?module=bb&op=viewtopic&t=107804
Connector port="8080" address="${jboss.bind.address}" useBodyEncodingForURI="true" URIEncoding="UTF-8"
maxThreads="250" strategy="ms" maxHttpHeaderSize="8192"
emptySessionPath="true"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true"
Publicado por Juan Antonio Ruz en 6:20 0 comentarios
Categorías: JBoss, Soluciones
viernes, 31 de agosto de 2007
articulos interesantes para programar en java con herramientas actuales
http://shrubbery.mynetgear.net/
Publicado por Juan Antonio Ruz en 5:18 0 comentarios
Categorías: Intellij IDEA, java
jueves, 30 de agosto de 2007
Foro de discusión de Google Calendar
Publicado por Juan Antonio Ruz en 10:24 0 comentarios
Categorías: Google
Pruebas de unidad en Jboss Seam, implementar org.jboss.seam.log.Log con org.apache.commons.logging.Log
Si intentamos probar un componente de Jboss Seam en aislamiento/unidad y este componente tiene una Log inyectado por Seam, tendremos un nullexception al lanzar la prueba, aquí dejo un ejemplo en el que creamos una clase que implementa org.jboss.seam.log.Log y que accede a org.apache.commons.logging.Log
public class BeanTest {
@Test
public void testBean(){
Bean bean=new Bean();
bean.log=new Logger();
bean.run();
}
}
class Logger implements org.jboss.seam.log.Log{
Log log = LogFactory.getLog(BeanTest.class);
public boolean isDebugEnabled() {
return log.isDebugEnabled();
}
public boolean isErrorEnabled() {
return log.isErrorEnabled();
}
public boolean isFatalEnabled() {
return log.isFatalEnabled();
}
public boolean isInfoEnabled() {
return log.isInfoEnabled();
}
public boolean isTraceEnabled() {
return log.isTraceEnabled();
}
public boolean isWarnEnabled() {
return log.isWarnEnabled();
}
public void trace(Object object, Object... params) {
log.trace(object);
}
public void trace(Object object, Throwable t, Object... params) {
log.trace(object,t);
}
public void debug(Object object, Object... params) {
log.debug(object);
}
public void debug(Object object, Throwable t, Object... params) {
log.debug(object,t);
}
public void info(Object object, Object... params) {
log.info(object);
}
public void info(Object object, Throwable t, Object... params) {
log.info(object,t);
}
public void warn(Object object, Object... params) {
log.warn(object);
}
public void warn(Object object, Throwable t, Object... params) {
log.warn(object,t);
}
public void error(Object object, Object... params) {
log.error(object);
}
public void error(Object object, Throwable t, Object... params) {
log.error(object,t);
}
public void fatal(Object object, Object... params) {
log.fatal(object);
}
public void fatal(Object object, Throwable t, Object... params) {
log.fatal(object,t);
}
}
Publicado por Juan Antonio Ruz en 9:11 0 comentarios
Categorías: Seam 1.2, Soluciones, TestNG
miércoles, 29 de agosto de 2007
Obtener el url abosulto de una imagen en Picasa
MediaGroup group = photoEntry.getExtension(MediaGroup.class);
List
MediaThumbnail thumbnail = thumbnails.get(0);
String url = thumbnail.getUrl();
información obtenida de:
foro de discusion de picasa
Publicado por Juan Antonio Ruz en 6:49 0 comentarios
Categorías: Picasa
viernes, 24 de agosto de 2007
Combinar edición FCKeditor con Blogger
Para que cuando seleccionemos un item en fckeditor nos incluya el path completo podemos incluir estas lineas de código dentro de la función existente OpenFile( fileUrl ) en el archivo:
FCKeditor\editor\filemanager\browser\default\frmresourceslist.html
function OpenFile( fileUrl )
{
var var1=document.URL.substr(0,document.URL.indexOf('/editor/'));
var lugar=resultado.lastIndexOf('/');
var pathServidor=resultado.substr(0,lugar);
window.top.opener.SetUrl( pathServidor+fileUrl ) ;
window.top.close() ;
window.top.opener.focus() ;
}
Con esta modificación en el fckeditor, si lo utilizamos para editar entradas de blog, nos mantendrá el url completo al servidor adecuado. Esto funcionará en links a archivos
Publicado por Juan Antonio Ruz en 3:25 0 comentarios
miércoles, 22 de agosto de 2007
Obtener el contenido de una entrada de blogger
TextContent tc = (TextContent)entry.getContent();
HtmlTextConstruct ptc = (HtmlTextConstruct)tc.getContent();
System.out.println(ptc.getHtml());
Publicado por Juan Antonio Ruz en 12:08 0 comentarios
jueves, 9 de agosto de 2007
Mostrar espacio usado en directorios
En esta instrucción primero se llama al comando du para mostrar el espacio usado por el direcotorio /usr/javatools después se (tee)envia al archivo analisis/data y por ultimo se muestra por pantalla con la utilidad more dicho archivo
du -b 10000 /usr/javatools/ | tee analisis/data | more
du -sk *
wikipedia
Publicado por Juan Antonio Ruz en 5:06 2 comentarios
Categorías: linux
miércoles, 11 de julio de 2007
Pasar un parametro en jsf
Para no sobrecargar las llamadas al servidor desde el renderizado de la página jsf, podemos guardar valores dentro del componente ui:param de xmlns:ui="http://java.sun.com/jsf/facelets"
<ui:param name="path" value="../"/>
y en el resto de la página solamente llamaremos a #{path}
Publicado por Juan Antonio Ruz en 5:32 0 comentarios
Categorías: JSF
martes, 10 de julio de 2007
Acceder a componente core.manager y core.ConversationEntries en PhaseId.INVOKE_APPLICATION
Para acceder a la lista de conversaciones desde nuestro código java y pretendemos hacerlo de la forma
@In
Manager manager
Nos dará error de illegalArgumentException cuando instancie el componente.
Para solucionarlo podemos acceder directamente con:
Manager manager = Manager.instance();
ConversationEntries conversationEntries = ConversationEntries.instance();
y de esta forma tendremos las conversaciones (ConversationEntry ) y toda su funcionalidad :
for(ConversationEntry idConversacion:conversationEntries.getConversationEntries()) {
if(idConversacion.isCurrent())log.error("cURRENT!!");
log.error("idConversacion_"+idConversacion.getId()+" view"+idConversacion.getViewId());
}
Publicado por Juan Antonio Ruz en 4:09 1 comentarios
Categorías: Seam 1.2, Soluciones
jueves, 5 de julio de 2007
Interfaces en ejb3, herencia
El componente Seam con estado tiene una interfaz pública por lo cual obtendremos un error si intentamos implementar varias interfaces solo desde la implementación y no desde la interface.
ej mal hecho--- > ERROR:
public interface CatalogoAction {
...
}
public class CatalogoActionImpl implements Serializable, CatalogoAction, ListadoResultados{
....
}
ej bien hecho:
public interface CatalogoAction extends ListadoResultados {
}
public class CatalogoActionImpl implements Serializable, CatalogoAction{
....
}
Publicado por Juan Antonio Ruz en 3:53 1 comentarios
Categorías: EJB, Seam 1.2, Soluciones
martes, 3 de julio de 2007
No funciona el estado del componente cuando se intenta cambiar un valor
Cuando intento cambiar una propiedad de un componente con estado a través de sus metodos get/setter que se definen en la interface, no funciona!
Tenía un problema con la etiqueta h:form, había 1 formulario dentro de otro y eso hacía el error
Publicado por Juan Antonio Ruz en 6:05 0 comentarios
Categorías: JSF, Seam 1.2, Soluciones
SelectOneMenu con entidades y valor nulo
<h:selectOneMenu value="#{search.category}">
<s:convertEntity />
<ui:remove> <f:selectItem itemLabel="Any" itemValue="#{anyCategory}" /></ui:remove>
<s:selectItems value="#{allCategories.resultList}" var="category"
label="#{category.name}"
noSelectionLabel="ANY" />
</h:selectOneMenu
Publicado por Juan Antonio Ruz en 5:10 0 comentarios
Recargar factoria de elementos al acabar una conversación
Para recargar una factoría de objetos que tendremos cargados en session para optimizar el rendimiento de la base de datos, podemos utilizar los eventos, los cuales al finalizar una tarea/conversación se pueden encargar de forma transparente (programación orientada a aspectos) de acceder a variables de otros componentes para su inicialización.
Ejemplo:
al finalizar un pedido de compra se necesita que el catalogo de productos muestre el stock actualizado.
public class CheckOutBean implements CheckOut, Serializable{
...
@End
@RaiseEvent("limpiarCatalogo")
public void enviarPedido() {
persist.order()
}
}
public class CatalogoBean implements Serializable, Catalogo {
...
@Observer("limpiarCatalogo")
public void limpiarPiezas(){
log.error("RESET CATALOGO ");
piezasList=null;
}
}
**** Esto puede parecer obvio, pero si lo que hacemos es recargar la colección en vex de limpiarla no funcionará, ya que la transacción depende de las phases de jsf, es decir que no se producirá la actualización hasta que no se salga de la PhaseId.INVOKE_APPLICATION.
Publicado por Juan Antonio Ruz en 2:33 0 comentarios
Categorías: AOP, Eventos, Seam 1.2, Soluciones
Eventos en Seam
Seam contempla varios modelos de eventos:
- JSF eventos
- <h:commandButton value="enviar" action="#{helloWorld.sayHello}"/>
- jBPM transition events (.jpdl), se especifican en la etiqueta event en la cual hay que definir el tipo de evento (node-enter, node-leave, process-start, process-end, task-create, task-assign, task-start, task-end, before-signal, after-signal). Hay que distinguir entre bussiness process (varios usuarios implicados) y pageflow (un usuario)
- <event type="">
- Seam page actions (pages.xml), se ejecutan antes del renderizado de una página
- <pages>
<page view-id="hello.jsp" action="#{helloWorld.sayHello}"/>
</pages> - Seam component-driven events
- se puede definir en el archivo components.xml o en el propio código java a través de anotaciones o referencias a componentes propios de Seam es decir Events.instance
- anotacion para observar un evento @Observer("nombreEvento")
- anotación para lanzar un evento @RaiseEvent("nombreEvento")
- Seam contextual events
- componentes Seam siempre instalados
- preSetVariable, postSetVariable, preRemoveVariable ...
se produce cuando el metodo devuelve un not-null y sin excepciones!
Publicado por Juan Antonio Ruz en 2:20 1 comentarios
Categorías: Seam 1.2
lunes, 2 de julio de 2007
¿qué es un pageflow?
Pageflow podríamos definirlo como definición de proceso o flujo de negocio. Para su representación se utiliza jPDL que tiene sintaxis XML y puede editarse gráficamente con un plugin de eclipse. En dicha representación se concretan los diferentes estados, decisiones, tareas, páginas web, etc con las cuales interactua el usuario.
Existen dos formas de definir un pageflow en Seam:
- Sin estado - faces-config.xml /pages.xml
- Con estado - jPDL
continuará ....
Publicado por Juan Antonio Ruz en 13:46 1 comentarios
viernes, 29 de junio de 2007
DataModelSelection en Conversation context problem
Después de mucho probar me he dado cuenta que el datamodelselection funciona en un contexto de session
Publicado por Juan Antonio Ruz en 3:44 0 comentarios
jueves, 28 de junio de 2007
Interceptar toda la aplicacion en Seam
Podemos utilzar la filosofía de Seam de interceptar todo, para cronometrar nuestra aplicación y comprobar en que métodos se producen retardos.
- Creamos una clase que extienda de org.jboss.seam.ejb.SeamInterceptor es decir la clase que utiliza Seam para interceptar los componentes de la aplicacion:
- public class MiaoInterceptor extends SeamInterceptor {
@AroundInvoke
public Object aroundInvoke(InvocationContext invocation) throws Exception
{
if(invocation.getTarget().getClass().getPackage().toString().contains("es.miao")){
long l = System.currentTimeMillis();
String invocacion=invocation.getTarget().getClass().getSimpleName()+"."+invocation.getMethod().getName()+"()";
System.out.println("INICIANDO: "+invocacion);
Object o = invocation.proceed();
long ll = System.currentTimeMillis();
System.out.println("FINALIZANDO: "+invocacion+" Tiempo total: "+(ll-l)+" milisegundos");
return o;
}
return invocation.proceed();
}
} - Cambiar en el ejb-jar.xml el interceptor de seam por el nuestro
- <?xml version="1.0" encoding="UTF-8"?>
<ejb-jar xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd"
version="3.0">
<interceptors>
<interceptor>
<interceptor-class>org.jboss.seam.ejb.SeamInterceptor</interceptor-class>
</interceptor>
<interceptor>
<interceptor-class>es.miao.MiaoInterceptor</interceptor-class>
</interceptor>
</interceptors>
<assembly-descriptor>
<interceptor-binding>
<ejb-name>*</ejb-name>
<interceptor-class>org.jboss.seam.ejb.SeamInterceptor</interceptor-class>
</interceptor-binding>
<interceptor-binding>
<ejb-name>*</ejb-name>
<interceptor-class>es.miao.MiaoInterceptor</interceptor-class>
</interceptor-binding>
</assembly-descriptor>
</ejb-jar>
Publicado por Juan Antonio Ruz en 7:29 0 comentarios
InstantiationException: Configurar intelli jidea para correr pruebas de seam
Un problema es que el seam necesita que en el directorio donde se copian todos los recursos empleados exista el security.drl, y esto se hace settings>compiler>resource patterns e incluir ?*.drl;
además hay que copiar persistence-text.xml a persistence.xml, esto lo hace el archivo ant del seam, pero hay que indicarselo al intellijidea. se puede hacer configurando la prueba para que corra una tarea ant antes de arrancar.
Publicado por Juan Antonio Ruz en 6:55 0 comentarios
Categorías: Intellij IDEA, Seam 1.2, TestNG
miércoles, 27 de junio de 2007
Alta de autonomo en epigrafe de programador en sevilla
Hacienda al lado de la casa de la moneda
La seguridad social en calle castelar mapa
- darse de alta en el IAE (Impuesto de actividades económicas)
- Mostrador 16 pedir modelo 036
- pedir número para declaración censal
- entregar modelo cumplimentado
- epigrafe 762 Programador
- ir a la seguridad social
- fotocopiar el 036 sellado
- llevar el numero de cuenta para domiciliación
- llevar el número de la seguridad social
- el epigrafe en seguridad social es el 72210:Edición de programas
Publicado por Juan Antonio Ruz en 4:05 0 comentarios
Categorías: hacienda, seguridad social
martes, 26 de junio de 2007
jbpm en seam
primer ejemplo a seguir el numberguess example de seam aunque también está el dvd-store
hay que definir el componente de la definición del proceso en el components.xml:
<component class="org.jboss.seam.core.Jbpm">
<property name="pageflowDefinitions">
<value>pageflow.jpdl.xml</value>
<value>cheat.jpdl.xml</value>
</property>
</component>
y posteriormente la definición del proceso en este caso de cheat.jpdl
<pageflow-definition xmlns="http://jboss.com/products/seam/pageflow"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=
"http://jboss.com/products/seam/pageflow http://jboss.com/products/seam/pageflow-1.2.xsd"
name="cheat">
<start-page name="confirm" view-id="/confirm.jspx">
<transition name="yes" to="cheat">
<action expression="#{numberGuess.cheated}"/>
</transition>
<transition name="no" to="end"/>
</start-page>
<page name="cheat" view-id="/cheat.jspx">
<redirect/>
<transition to="end"/>
</page>
<page name="end" view-id="/numberGuess.jspx">
<redirect/>
<end-conversation/>
</page>
</pageflow-definition>
y en el pages.xml arrancamos el pageflow
<pages>
<page view-id="/numberGuess.jspx">
<begin-conversation join="true" pageflow="numberGuess"/>
</page>
<page view-id="/confirm.jspx">
<begin-conversation nested="true" pageflow="cheat"/>
</page>
</pages>
aunque también se puede arrancar desde el componente
@Create
@Begin(pageflow="numberGuess")
public void begin(){
...
}
Publicado por Juan Antonio Ruz en 12:51 0 comentarios
Categorías: components.xml, jbpm, pages.xml, Seam 1.2
pages.xml navegacion
Entre las razones de elegir el pages.xml para definir la navegación se encuentran:
- la posibilidad de especificar valores del request en la redirección
- comenzar o acabar una conversación desde la evaluación de una regla
- avaluar cualquier expressión de tipo EL
Para ver el empleo del pages.xml se puede ojear lo que produce el seam-jems generate-entities
Utilizar reglas de navegacion con pages.xml
lo que en faces-config.xml se escribiría así:
<navigation-rule>
<from-view-id>/editDocument.xhtml</from-view-id>
<navigation-case>
<from-action>#{documentEditor.update}</from-action>
<from-outcome>success</from-outcome>
<to-view-id>/viewDocument.xhtml</to-view-id>
<redirect/>
</navigation-case>
</navigation-rule>
lo que en pages.xml quedaría así:
<pageview-id="/editDocument.xhtml">
<navigationfrom-action="#{documentEditor.update}"
evaluate="#{documentEditor.errors.size}">
<ruleif-outcome="0">
<redirectview-id="/viewDocument.xhtml"/>
</rule>
</navigation>
</page>
o incluso
<pageview-id="/editDocument.xhtml">
<navigationfrom-action="#{documentEditor.update}">
<ruleif="#{documentEditor.errors.empty}">
<redirectview-id="/viewDocument.xhtml"/>
</rule>
</navigation>
</page>
Publicado por Juan Antonio Ruz en 12:18 0 comentarios
Categorías: faces-config.xml, pages.xml, Seam 1.2
Gestión de errores en Seam
Con la etiqueta "restrict" me parece que se produce una redirección una vez que se salva la condición?
Ejemplo de Seam util para investigar: blog, en este no se recoge la excepción en el pages.xml, unicamente la clase de excepción EntryNotFoundException tiene las etiquetas:
@ApplicationException(rollback=true)
@HttpError(errorCode=HttpServletResponse.SC_NOT_FOUND)
y entonces y con el web.xml:
<error-page>
<error-code>404</error-code>
<location>/seam/404.xhtml</location>
</error-page>
directamente busca el 404.xhtml
Las excepciones heredan de RuntimeException y se producen en la invocación de un metodo jsf, es decir metodo público que no devuelve nada.
ejemplo metodo jsf que lanza excepción:
public void buscar(){
....
thrown new RuntimeException("algo ha fallado");
....
}
ademas se pueden producir a través del pages.xml con la etiqueta "restrict" o con "action" dentro de "page"
<page view-id="/gestion/*">
<restrict>#{authenticator.admin}</restrict>
</page>
<exception class="es.miao.MiaoExcepcion">
<redirect view-id="/error.xhtml">
<message>ha funcionado la runtime exception</message>
</redirect>
</exception>
Se supone que al entrar en cualquier pagina que se corresponda con el patrón "/gestion/*" es decir todas aquellas que se encuentren en la carpeta gestion, serán restringidas a que el componente authenticator responda afirmativamente al metodo isAdmin().
De lo contrario la etiqueta restrict se encarga de llevar a la página de error correspondiente.
<exception class="org.jboss.seam.security.NotLoggedInException">
<redirect view-id="/login.xhtml">
<message>#{messages.masInfo}</message>
</redirect>
</exception>
Con "restrict" es el componente Identity el que se encarga de evaluar la expressión y lanzar la correspondiente excepción, también podríamos obtener una excepción de la etiqueta "action"
<action execute="#{catalogoAction.disminuye}" />
Se supone que las acciones jsf no devuelven nada como resultado return void. Sin embargo la etiqueta restrict espera un boolean [boolean isAdmin(), ó , boolean isChecked()]
Publicado por Juan Antonio Ruz en 11:15 0 comentarios
Seam componentes (traduccion de seam tutorial)
Existen 4 tipos de componentes:
- EJB 3.0 stateless session beans
- EJB 3.0 stateful session beans
- EJB 3.0 entity beans
- JavaBeans
- EJB 3.0 message-driven beans
Beans sin estado, se suelen usar como jsf listeners.
Contexto: stateless context
Los EJB 3.0 stateful session beans:
Son componentes con estado
Por defecto su contexto es de conversación, unicamente no puede estar en el contexto de página o stateless context.
Cuando están es contexto de sessión son siempre serializados por Seam
Los EJB 3.0 Entity Beans:
Son los beans que representan a las entidades persistentes.
Debido a que tienen una identidad en el contexto de seam y además una entidad en la persistencia, se suelen instanciar en el propio código java en lugar de instanciarlos Seam.
Estos beans no soportan la biyección.
Por defecto son de Contexto de conversación. No pueden ser stateless (Sin estado).
...
Publicado por Juan Antonio Ruz en 10:15 4 comentarios
Categorías: Seam 1.2
(Interceptores)Factorias de session que se recargan según eventos:
De esta forma no recargamos las llamadas a la base de datos:
@Stateful
@Scope(SESSION)
@Name("bookingList")
@Restrict("#{identity.loggedIn}")
@TransactionAttribute(REQUIRES_NEW)
public class BookingListAction implements BookingList, Serializable
{
.......
@Factory
@Observer("bookingConfirmed")
public void getBookings()
{
bookings = em.createQuery("select b from Booking b where b.user.username = :username order by b.checkinDate")
.setParameter("username", user.getUsername())
.getResultList();
}
........
}
@Stateful
@Name("hotelBooking")
@Restrict("#{identity.loggedIn}")
public class HotelBookingAction implements HotelBooking
{
...
@End
public void confirm()
{
em.persist(booking);
facesMessages.add("#{messages.gracias}, #{user.name}, your confimation number for #{hotel.name} is #{booking.id}");
log.info("New booking: #{booking.id} for #{user.username}");
events.raiseTransactionSuccessEvent("bookingConfirmed");
}
...
}
Publicado por Juan Antonio Ruz en 10:00 1 comentarios
Pages.xml param converter Entity Id as Page Parameters
Al utilizar el seam framework:entity-home
<framework:entity-home name="empresaCasa" entity-class="es.miao.Empresa" >
<framework:id >#{param.empresaId}</framework:id>
</framework:entity-home>
Me daba un error de hibernate de conversión, se esperaba un long (el id de empresa) y se recibe un string. En la documentación de Seam viene que se pueden añadir conversores a los parametros recibidos, en este caso había que aclarar en el pages.
<page view-id="/gestion/empresa.xhtml">
<param name="empresaId" value="#{empresaCasa.id}" converterId="javax.faces.Long" />
</page>
Publicado por Juan Antonio Ruz en 2:50 0 comentarios
Categorías: Seam 1.2, Soluciones
lunes, 25 de junio de 2007
Hibernate anotar una enumeracion
public enum Status {OPEN,CANCELLED,PROCESSING,SHIPPED}
@Column(name="STATUS")
public Status getStatus() {
return status;
}
public void setStatus(Status status) {
this.status = status;
}
Publicado por Juan Antonio Ruz en 11:27 0 comentarios
Categorías: hibernate
viernes, 22 de junio de 2007
Conversaciones en Jboss Seam
Se puede entender por una conversación en Seam algo muy parecido de lo que hacemos cuando conversamos entre personas.
Existe un lugar (AplicationContext), un tiempo (SessionContext) y después una serie de objetos implicados en la conversación. Entre los objetos implicados en la conversación se encuentra el usuario, que participa a través de eventos, de tipo:
- JSF
- jBMP
- Seam page actions
- Seam component-drive events
El objeto ConversationEntry tiene una serie de propiedades que usaremos al cambiar de conversación. Entre elllas el viewId, es decir en nuestro caso, la página jsf. Igualmente tiene el metodo select(), que cambia la conversación seleccionada a la conversación actual.
Las clases implicadas son:
org.jboss.seam.core.ConversationEntry
org.jboss.seam.core.ConversationList
org.jboss.seam.core.Manager
Publicado por Juan Antonio Ruz en 8:19 0 comentarios
Categorías: Seam 1.2
jueves, 21 de junio de 2007
interesante en seam
Limitaciones/validaciones en inputs jsf y seam:
@NotNull(message="Credit card number is required")
@Length(min=16, max=16, message="Credit card number must 16 digits long")
@Pattern(regex="^\\d*$", message="Credit card number must be numeric")
Añadir un mensaje a un control jsf a través del componente facesMessages de Seam
facesMessages.addToControl("verify", "Re-enter new password");
facesMessages.addToControl("username", "Username #{user.username} #{messages.traducciones}");
* notar que podemos hacer referencia a un componente a traves del lenguaje EL
Añadir un contador con interceptores
esto se hace a través del pages.xml
<page view-id="*">
<action execute="#{blog.hitCount.hit}"/>
</page>
Obtener la pagina actual desde cualquier componente
javax.faces.context.FacesContext.getCurrentInstance().getViewRoot().getViewId()
Obtener info del contexto para upload y directorios de imgs
facesContext.externalContext.requestContextPath
i18n, se puede acceder a través de la clase java, y el mismo properties puede tener referencias EL
facesMessages.addFromResourceBundle("Hello");
Hello=Hello,#{user.firstName}#{user.lastName}
Inyectar de forma dinámica objetos en cada contexto (extraído de ejemplo de DVD Store)
@In Context sessionContext;
private static final String USER_VAR = "currentUser";
function void xxx(){
Object found=dao.get(xx)
sessionContext.set(USER_VAR, found);
}
ya está inyectado el objeto found en el contexto de session.
Publicado por Juan Antonio Ruz en 2:17 0 comentarios
Categorías: Seam 1.2
miércoles, 20 de junio de 2007
Obtener el hibernate Session desde EntityManager
javax.persistence.EntityManager ---------> org.hibernate.Session
Para utizar la API de hibernate desde el EntityManager inyectado desde Seam
@PersistenceContext
private EntityManager em;
Session session = ((HibernateEntityManager) em.getDelegate()).getSession();
Publicado por Juan Antonio Ruz en 11:36 0 comentarios
lunes, 18 de junio de 2007
UnifiedExpressionLanguage operador &&
El operador "&&" se cambia a "and"
http://java.sun.com/javaee/5/docs/tutorial/doc/JSPIntro7.html
not empty
empty
la expresión quedaría de la siguiente forma: #{empty cart.cart}
Publicado por Juan Antonio Ruz en 10:47 0 comentarios
Convertir byte[] a archivo
File file = new File(name);
file.createNewFile();
FileInputStream fileInputStream = new FileInputStream(name);
ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(fileData);
OutputStream outputStream = new FileOutputStream(
name);
int data;
while ((data = byteArrayInputStream.read()) != -1) {
outputStream.write(data);
}
fileInputStream.close();
outputStream.close();
Publicado por Juan Antonio Ruz en 4:36 0 comentarios
Categorías: java
jueves, 14 de junio de 2007
s:link uso de esta etiqueta de seam
<s:link value="#{msg.title}" action="#{messageManager.select}"/>
@Stateful
@Scope(SESSION)
@Name("messageManager")
public class MessageManagerBean implements Serializable, MessageManager
{
public void select()
{
if (message!=null) message.setRead(true);
}
}
Publicado por Juan Antonio Ruz en 3:06 0 comentarios
miércoles, 13 de junio de 2007
Ejemplo heritance jpa
package es.miao;
import java.io.Serializable;
import javax.persistence.*;
import org.hibernate.validator.Length;
import org.hibernate.validator.NotNull;
@Entity
@Table(name = "color_primaria")
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="tipo", discriminatorType=DiscriminatorType.STRING, length=3)
@DiscriminatorValue(value="PRI")
public class CombinacionColorPrimaria implements Serializable {
//seam-gen attributes (you should probably edit these)
private Long id;
private Integer version;
private Color color;
//add additional entity attributes
//seam-gen attribute getters/setters with annotations (you probably should edit)
@Id @GeneratedValue
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
@Version
public Integer getVersion() {
return version;
}
private void setVersion(Integer version) {
this.version = version;
}
@ManyToOne
public Color getColor() {
return color;
}
public void setColor(Color color) {
this.color = color;
}
}
package es.miao;
import java.io.Serializable;
import javax.persistence.*;
import org.hibernate.validator.Length;
@Entity
@DiscriminatorValue(value="SEC")
public class CombinacionColorSecundaria extends CombinacionColorPrimaria implements Serializable {
}
Publicado por Juan Antonio Ruz en 6:03 0 comentarios
Categorías: jpa
DiscriminatorColumn problem
@DiscriminatorColumn(name="tipo", discriminatorType=DiscriminatorType.STRING, length=20)
@DiscriminatorValue(value="PRIM")
No hay que poner en la clase java la propiedad!
Publicado por Juan Antonio Ruz en 5:51 0 comentarios
Categorías: jpa
anotaciones colecciones persistencia
@OneToMany(mappedBy="aplicacion", cascade=CascadeType.ALL)
public List
return piezas;
}
@ManyToOne
public Aplicacion getAplicacion() {
return this.aplicacion;
}
@ManyToMany(targetEntity=GrupoMusica.class)
@JoinTable(name="MUSICOSENGRUPO",
joinColumns=
@JoinColumn(name="musico_ID", referencedColumnName="id"),
inverseJoinColumns=
@JoinColumn(name="grupo_ID", referencedColumnName="id"))
public List
return grupos;
}
@ManyToMany(targetEntity=Musico.class)
@JoinTable(name="MUSICOSENGRUPO",
joinColumns=
@JoinColumn(name="grupo_ID", referencedColumnName="id"),
inverseJoinColumns=
@JoinColumn(name="musico_ID", referencedColumnName="id"))
public List
return musicos;
}
Publicado por Juan Antonio Ruz en 4:31 0 comentarios
Categorías: jpa
s:convertEntity: Utilizar un selectitems en seam 1.2
<h:selectOneMenu id="aplicacion" value="#{piezaHome.instance.aplicacion}" >
<f:selectItems value="#{aplicacionList.resultList}"/>
<s:convertEntity />
</h:selectOneMenu>
aplicacionList.resultList nos devuelve el listado de aplicaciones disponibles, es decir un list de objetos, solo que la clase Aplicacion extiende de SelectItem y sobreescribe los siguientes metodos de estos:
@Transient
public String getLabel() {
return getName(); //To change body of overridden methods use File | Settings | File Templates.
}
@Transient
public Object getValue() {
return this; //To change body of overridden methods use File | Settings | File Templates.
}
Publicado por Juan Antonio Ruz en 3:59 0 comentarios
martes, 12 de junio de 2007
configurar IntelliJ Idea con seam para TestNG
settings>proyect structure
modules>actualModule
- addContentroot
- add jbossseam folder
- mark lib as sourcefolder
- actual module
- sourceFolders:
- embedded-ejb/conf
- resources
- src/action
- src/model
- testFolders:
- src/test
Dependencies:
- proyectDependencies:
- addClasses: actualModule/lib/*
References to resources outside module: relative
Si te da un error
javax.naming.NameAlreadyBoundException
puede ser que la librería jboss-seam.jar y el source seam/src/main estén arrancando el datasource dos veces!!!
mirar en ejemplos del SEAM!!!
Create the jboss-seam Eclipse project with the following directories
in your source path:
src/main/
examples/blog/src/
examples/blog/resources/
embedded-ejb/conf/
And all jar files from the following directories in your classpath:
lib/
embedded-ejb/lib
3. Run examples/blog/src/org/jboss/seam/example/blog/test/testng.xml
using the TestNG plugin.
Publicado por Juan Antonio Ruz en 6:54 0 comentarios
Categorías: IDE, Intellij IDEA, Seam, Seam 1.2, Soluciones, TestNG
lunes, 11 de junio de 2007
package-info jdk6 con clases compiladas con jdk5
clean all
ant run build del seam
ant run build del example
A package-info class contains annotated package and annotation type. These classes are compiled using JDK 6 compiler with target 1.5. JDK 5 fails to load the generated package-info with the following error:
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6553734
Publicado por Juan Antonio Ruz en 12:54 0 comentarios
viernes, 8 de junio de 2007
Idioma japones arreglado
he colocado esto en la cabecera de las páginas correspondientes:
<%@ page contentType="text/html; charset=utf-8" pageEncoding="UTF-8"%>
y en la definicion de los campos de la base de datos:
column charset: utf8
column collate:utf8_bin
EN LOCAL FUNCIONA ok
TENGO QUE IMPORTAR INFO A LOCAL Y EXPORTAR TODO ESQUEMA A SERVER
Publicado por Juan Antonio Ruz en 6:46 0 comentarios
Categorías: i18n, MySql, Soluciones
jueves, 7 de junio de 2007
Tail for Win32
un programa para windows que hace como el tail -f de linux
Publicado por Juan Antonio Ruz en 2:42 0 comentarios
miércoles, 6 de junio de 2007
deleted object would be re-saved by cascadE
La excepción que lanza es la siguiente:
org.hibernate.ObjectDeletedException: deleted object would be re-saved by cascade (remove deleted object from associations): [es.cafs.model.RecursoProfesorImpl#33]
y ocurría la segunda vez que intentaba borrar un item(RecursoProfesorImagen) de un Set de un Objeto(Profesor), y además el scope era de Conversation, así que el error era que había que refrescar la entidad principal una vez que se volvia a seleccionar la entidad hija.
Publicado por Juan Antonio Ruz en 6:17 1 comentarios
lunes, 4 de junio de 2007
Obvio en action script
El archivo y el nombre de clase que la contiene debe coincidir el nombre
Clase Cuadrado debe existir en el path correspondiente pero siempre en un archivo llamado Cuadrado.as
Publicado por Juan Antonio Ruz en 10:01 0 comentarios
Categorías: actionscript
viernes, 1 de junio de 2007
Cambiar el log en jboss console
Hay que editar {JBOSS_HOME}/server/default/conf/log4j.xml
Este es el appender por defecto:
<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
<param name="Threshold" value="INFO"/>
<param name="Target" value="System.out"/>
<layout class="org.apache.log4j.PatternLayout">
<!-- The default pattern: Date Priority [Category] Message\n -->
<param name="ConversionPattern" value="%d{ABSOLUTE} %-5p [%c{1}:%L] %m%n"/>
</layout>
</appender>
Y habría que cambiar la class de appender por:org.apache.log4j.ConsoleAppender poner el nivel del log a debug para que veamos todos los debug excepto los que no queramos que lo especificamos incluyendo las siguientes categorías
<category name="org.jboss">
<priority value="INFO"/>
</category>
<category name="org.hibernate">
<priority value="WARN"/>
</category>
<category name="javax">
<priority value="WARN"/>
</category>
Publicado por Juan Antonio Ruz en 7:28 0 comentarios
Categorías: JBoss
sábado, 26 de mayo de 2007
DisclosureEvent event
DisclosureEvent event tiene un metodo para saber si se ha cerrado o abierto el componente CoreShowDetailItem, así recibiremos muchos eventos aunque la accion haya sido solamente expandir uno solo de ellos.
Publicado por Juan Antonio Ruz en 7:27 0 comentarios
Categorías: ADF
miércoles, 23 de mayo de 2007
af:validateDateTimeRange problem
El error del del validador de date TimeRange se debe a que debemos resetear el Time del Calendar correspondiente, más o menos así:
public void resetTime(Calendar f ){
f.set(Calendar.HOUR_OF_DAY, 0);
f.set(Calendar.MINUTE, 0);
f.set(Calendar.SECOND, 0);
f.set(Calendar.MILLISECOND, 0);
}
<af:validateDateTimeRange maximum="#{convCursosListado.seleccionClaseActual.finFiltro.time}"
minimum="#{convCursosListado.seleccionClaseActual.inicioLimite.time}"/>
Publicado por Juan Antonio Ruz en 11:53 0 comentarios
lunes, 21 de mayo de 2007
Seam contexto evento en componente produce errores en adf:Switcher
Falla el af:switcher.setFacetName(String name) cuando el componente que lo activa pierde el render.
Publicado por Juan Antonio Ruz en 7:10 0 comentarios
Categorías: ADF, Seam, Soluciones
lunes, 14 de mayo de 2007
decimales en java
public static float roundNum(float num) throws Exception
{
float valor = 0;
valor = num;
valor = valor*100;
valor = java.lang.Math.round(valor);
valor = valor/100;
return valor;
}
si quieres que se trunque a 1 decimal multiplicas por 10 y divides para 10
si quieres que se trunque a 2 decimales multiplicas por 100 y divides para 100
y asi según el número de decimales que necesites.
el método round(valor) de la clase java.lang.Math también puede recibir valores doubles en su argumento
Publicado por Juan Antonio Ruz en 3:44 0 comentarios
Categorías: java
jueves, 3 de mayo de 2007
Cambiar usuario y grupo
drwxr-xr-x 2 root mysql 4096 2007-05-03 19:02 qx014
empezando que root es el propietario y mysql el grupo
chgrp -R mysql /var/lib/mysql/qx014 --> esto cambiaría el grupo a mysql
chown nuevo-usuario archivo
Publicado por Juan Antonio Ruz en 10:09 0 comentarios
Categorías: linux
Espacio libre
free y vmstat
du -s directorio para conocer el espacio libre
Publicado por Juan Antonio Ruz en 5:50 0 comentarios
Categorías: linux
Control de recursos, ps
- Usuarios conectados
- programas en ejecución
- estado de la memoria, fisica y virtual
- espacio libre de los discos
- información relacionada con las sesiones de trabajo
- run : ejecución
- sleep: bloqueado o dormido a la espera de algún servicio
- ready: listo
- stopped: detenido
- zoombie: ha terminado pero se encuentra a la espera de un evento
El comando who permite conocer los usuarios conectados en un momento dado.
el comando finger permite conocer los usuarios conectados desde maquinas remotas
Para visualizar procesos:
ps
ps auxw | more
( [a] otros usuarios, [u]información asociada a los recursos, [x] para ver los demonios, [w] ver nombre completo del programa)
Las abreviaturas del estado son:
- R: (runnning -ready)
- S e I: (sleeping /iddle)
- T (stopped)
- Z (zoombie)
- H (halt)
- P (page wait)
- D (disk wait)
Y luego hay uno muy util: pstree que muestra las relaciones entre procesos, hay que combinarlo con more: pstree | more.
a
Publicado por Juan Antonio Ruz en 5:32 0 comentarios
Categorías: linux
alias command
los alias permiten asociar un comando con parametros a un nombre que hace de comando. Ej:
alias ll="ls -l"
entonces cuando ejecutemos ll entonces hará listado con detalles
los alias así definidos pertenecen al contexto, para incluirlos en el inicio habría que incluirlos en el .bashrc
Publicado por Juan Antonio Ruz en 5:22 0 comentarios
Categorías: linux
instalar jdk linux
http://javabasico.osmosislatina.com/java_linux.htm
Publicado por Juan Antonio Ruz en 3:16 0 comentarios
miércoles, 2 de mayo de 2007
inittab iniciar servicios en arranque
http://www.hispafuentes.com/hf-doc/man/man5/inittab.5.html
Publicado por Juan Antonio Ruz en 7:43 0 comentarios
Categorías: Configuraciones Seguridad Servidor, linux, servidores
reboot reinicio
/sbin/reboot
o
/sbin/shutdown -r now
Publicado por Juan Antonio Ruz en 6:53 0 comentarios
Categorías: linux
tail -f para mostrar log de forma continuada
tail -f archivoLOG
-n para indicar numero de lineas
Publicado por Juan Antonio Ruz en 6:29 0 comentarios
Categorías: linux
martes, 1 de mayo de 2007
Patrones en linux para buscar
http://es.wikipedia.org/wiki/Expresi%C3%B3n_regular
http://www.ss64.com/osx/grep_pattern.html
Publicado por Juan Antonio Ruz en 10:22 0 comentarios
Categorías: linux
Problema con characterSet
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ page contentType="text/html;charset=windows-1250" %>
Bueno, estas líneas las quité y funcionó, es decir que la "ñ" quedaba grabada en la base de datos de esa forma y antes aparecía un punto más o menos así --> ~
Publicado por Juan Antonio Ruz en 9:08 0 comentarios
Categorías: i18n, JSF, JSP, MySql, Soluciones
lunes, 30 de abril de 2007
Acceder a componentes de Seam desde JSP JSF
Component o = (Component) Contexts.getApplicationContext().get("convProfesores.component");
Profesores profesores = (Profesores) o.getInstance("convProfesores");
y para enviar variables aprovechando el conexto de seam (aunque se podría hacer a través del request):
Contexts.getApplicationContext().set("nombreDeVariable", objeto a enviar);
EntidadConRecursos entidadConRecursos = (EntidadConRecursos) Contexts.getApplicationContext().get(nombreDeVariable);
Publicado por Juan Antonio Ruz en 5:07 0 comentarios
sábado, 28 de abril de 2007
Convert Date to Calendar
Calendar calendar = Calendar.getInstance();
calendar.setTime(i.getFechaInicio());
Publicado por Juan Antonio Ruz en 12:26 0 comentarios
Categorías: java
@RequestParameter en Seam
@RequestParameter
String idCurso;
Publicado por Juan Antonio Ruz en 8:59 0 comentarios
Categorías: Seam
viernes, 27 de abril de 2007
NonUniqueObjectException - Illegal attempt to associate a collection with two open sessions
El problema estaba relacionado con los tipos de contexto de Seam e hibernate
Estaba cargando en session unas listas de datos y en contexto (Render phase) de evento hibernate daba error
Publicado por Juan Antonio Ruz en 11:24 0 comentarios
invertir java.util.List
List
for(int index=lista.size()-1; index>=0; index--)
invertir.add(parents.get(index));
return invertir;
Publicado por Juan Antonio Ruz en 9:06 0 comentarios
Categorías: java
jueves, 26 de abril de 2007
obtener el valor del request en jstl/jsf
#{param.nombreDeVariable}
info obtenida en
http://www.exampledepot.com/egs/javax.servlet.jsp.jstl.core/getparam.html?l=rel
Publicado por Juan Antonio Ruz en 12:38 0 comentarios
JSF ADF RENDER DISPLAY PROBLEM
Si se utiliza más de un formulario en la página el explorer casca en el visualizado
Publicado por Juan Antonio Ruz en 9:34 0 comentarios
Categorías: ADF, JSF, Soluciones
Componentes JSF/ADF y renderizado
<af:panelBorder id="panelBorder"></af:panelBorder>
<af:panelBox id="panelBox"></af:panelBox>
el panelBorder genera un div
y el panelBox un table
Publicado por Juan Antonio Ruz en 9:00 0 comentarios
miércoles, 25 de abril de 2007
PermGen space Jboss OutOfMemoryError:
hay que incrementar la memoria reservada para el permgen dela siguiente forma en el run .bat del jboss
set JAVA_OPTS=%JAVA_OPTS% -Xms512m -Xmx1000m -XX:MaxPermSize=128m
Publicado por Juan Antonio Ruz en 8:05 5 comentarios
Categorías: JBoss, Soluciones
Expression Language EL con conditional
<af:goLink styleClass="#{(appADFServicio.actualPage=='/home.jsp')?'menuPrincipalLinkON':'menuPrincipalLink'}" text="#{messages.home}" destination="home.jsf"/>
Funciones en EL:
incluir la etiqueta: xmlns:fn="http://java.sun.com/jsp/jstl/functions"
y acceder a través del prefijo fn, ejemplo fn:substring
http://java.sun.com/j2ee/1.4/docs/tutorial/doc/index.html
http://java.sun.com/products/jsp/jstl/1.1/docs/tlddocs/index.html
Publicado por Juan Antonio Ruz en 4:58 0 comentarios
Problemas con el character set en java
Actualizar driver y que no haya duplicados de librería
actualmente estoy usando mysql-connector-java-5.0.5-bin.jar
Publicado por Juan Antonio Ruz en 3:13 0 comentarios
Categorías: i18n, java, Soluciones
Internacionalización en mysql
SHOW VARIABLES LIKE 'character_set_system';
Publicado por Juan Antonio Ruz en 2:52 0 comentarios
martes, 24 de abril de 2007
Ejecutar archivos jar desde la linea de comandos
java -cp . -jar archivo.jar
Publicado por Juan Antonio Ruz en 4:00 0 comentarios
Categorías: java
lunes, 23 de abril de 2007
error hibernate.hbm2ddl.auto mysql restrictions
Si al utilizar la herramienta de hibernate: hbm2ddl Si tienes un error parecido a éste:
Caused by: java.sql.BatchUpdateException: null, message from server: "Cannot add or update a child row: a foreign key constraint fails (`pruebasevilla/traducciones`, CONSTRAINT `FK6CE29E6294037F2F` FOREIGN KEY (`entidadTraduccion`) REFERENCES `profesores` (`id`))"
Tienes mysql configurado con restricciones, para arreglarlo sigue estos pasos (hay que reconfigurar mysql):
- inicia mysql Server Instance Configuration Wizard
- Selecciona: reconfigure Instance
- Selecciona: detailed Configuration
- Selecciona lo que tu veas yo marqué Developer Machine
- Selecciona:Non-Transactional Database Only
- Selecciona lo que tu veas yo marqué Decision Support(DSS)/OLAP
- Selecciona: Enable TCP/IP Networking
- Selecciona: Enable Strict Mode
- ...
Publicado por Juan Antonio Ruz en 7:01 0 comentarios
Categorías: hibernate, MySql, Soluciones
jboss seam no escanea componentes / scanning problem seam
si no existe el seam.properties no funciona, aunque sea un archivo en blanco debe existir en el source path
Publicado por Juan Antonio Ruz en 4:47 0 comentarios
Categorías: JBoss, Seam, Soluciones
crear un nuevo usuario en mysql
GRANT ALL PRIVILEGES
ON *.* TO 'root'@'localhost' IDENTIFIED BY '' WITH
GRANT OPTION;
Publicado por Juan Antonio Ruz en 1:25 0 comentarios
Categorías: MySql
jueves, 19 de abril de 2007
Problema actualizando la base de datos con dbunit : dbunit Cannot delete or update a parent row:
Bueno pues para que funcione DBUNIt en una base de datos con restricciones de indices, es decir foreigns keys, pues antes de actualizar los datos habría que deshabilitar dichas restricciones de la siguiente forma:
SET FOREIGN_KEY_CHECKS=0, AUTOCOMMIT=0 ===========> DESHABILITAR
SET FOREIGN_KEY_CHECKS=1, AUTOCOMMIT=1 ===========> HABILITAR
SessionFactory ds = (SessionFactory)ctx.lookup(getDataSourceJNDIName());
Connection conexionPrincipal = ds.openSession().connection();
conexionPrincipal.createStatement().execute("SET FOREIGN_KEY_CHECKS=0, AUTOCOMMIT=0");
/**
aquí se harían las operaciones de actualizar la base de datos
**/
conexionPrincipal.createStatement().execute("SET FOREIGN_KEY_CHECKS=1, AUTOCOMMIT=1");
información encontrada en:
http://forum.springframework.org/archive/index.php/t-21957.html
Publicado por Juan Antonio Ruz en 8:50 0 comentarios
Categorías: MySql, Soluciones, TDD
windows xp home edition sp2 sobre macos problema restart reboot problem
http://www.apple.com/support/downloads/imacefifirmwareupdate11.html
Publicado por Juan Antonio Ruz en 6:13 0 comentarios
Categorías: MACOSX, Soluciones, windows
miércoles, 18 de abril de 2007
Cambiar la memoria del JVM
http://weblogs.java.net/blog/aiqa/archive/2005/04/jvm_memory_usag.html
Aquí he encontrado la solución pero sencillamente hay que cambiar estos parametros:
set JAVA_OPTS=%JAVA_OPTS% -Xms300m -Xmx800m
Publicado por Juan Antonio Ruz en 7:58 0 comentarios
Categorías: java
martes, 17 de abril de 2007
lunes, 16 de abril de 2007
af:chooseDate
Para conseguir un calendario como éste ( ADF ) con el componente af:chooseDate habría que insertar el siguiente código en la página jsp. Siendo el maxValue y el minValue los limites del calendario, es decir los días en los que se puede hacer click
<af:chooseDate binding="#{Bean.chooseDate1}" id="chooseDate1"
maxValue="#{Bean.maximo}"
minValue="#{Bean.minimo}"/>
y quedando la clase java de la siguiente manera:
import oracle.adf.view.faces.component.core.input.CoreChooseDate;
public class Bean {
private CoreChooseDate chooseDate1;
public CoreChooseDate getChooseDate1() {
return chooseDate1;
}
public void setChooseDate1(CoreChooseDate chooseDate1) {
this.chooseDate1 = chooseDate1;
}
public Date getMaximo(){
Calendar hoy=Calendar.getInstance();
hoy.roll(Calendar.DAY_OF_YEAR,10);
return hoy.getTime();
}
public Date getMinimo(){
Calendar hoy=Calendar.getInstance();
hoy.roll(Calendar.DAY_OF_YEAR,-10);
return hoy.getTime();
}
}
Publicado por Juan Antonio Ruz en 1:45 0 comentarios
Categorías: ADF
viernes, 13 de abril de 2007
Anotaciones y anotaciones de persistencia
Anotaciones de persistencia:
annotations.hibernate.org/
www.hibernate.org/hib_docs/
Los EJB3 se caracterizan por ser POJOs, es decir Plain Old Java Object, y esto quiere decir que no tienen nada de especial, son solo clases con propiedades y sus respectivos metodos accesores (get/set).
Las anotaciones (persistencia) se agrupan en dos categorías: mapeo lógico(relaciones y modelado de objeto) y mapeo físico(esquema de la base de datos)
Las clases para ello se encuentran en: javax.persistence.*
Hay que tener en cuenta que todos los campos o metodos no declarados como estaticos o transient se consideran persistentes. Así que habría que anotar todas las propiedades que no queramos persistir con: @Transient. Y la etiqueta minima de persistencia sería la de @Basic la cual puede ir complementada por el tipo de carga que queremos, ejemplo @Basic(fetch= FetchType.LAZY), esto tiene sus restricciones así que hay que mirar el tutorial y enterarse bien.
Publicado por Juan Antonio Ruz en 8:43 0 comentarios
Framework para javaScript
Me han recomendado este:
www.mochikit.com
Publicado por Juan Antonio Ruz en 7:55 0 comentarios
Categorías: frameworks, javaScript
extensiones para firefox
Las extensiones simplemente extienden la funcionalidad básica del programa. En este caso dan más funcionalidad al navegador firefox.
Para utilizar el disco de gmail como disco duro Gspace
Para comparar la visualizacion en el explorer: IE Tab
Para el desarrollo web CSS existe una muy util : Firebug
FTP ...
Las extensiones se ordenan en categorias:
Examinar extensiones por categoría
Publicado por Juan Antonio Ruz en 7:22 0 comentarios
Categorías: firefox
configurar JAVA_HOME en eclipse y ant
Cuando recibimos el mensaje: Perhaps JAVA_HOME does not point to the JDK, que en mi caso me salió al intentar lanzar unas pruebas desde ANT tenemos que seguir las siguientes instrucciones :
-----------------------------------------------
Of course, JAVA_HOME is pointing to the right location, in both the OS environment and within Eclipse (This variable can be set within Eclipse through Window > Preferences > Java > Classpath Variables).
So how to fix the Ant build problem?
Go to Window > Preferences > Ant > Runtime. Choose the Classpath tab. Select the Global Properties node in the tree and click Add External JARs. Select tools.jar from your JDK directory (e.g., j2sdk1.4.2_03\lib\tools.jar).
------------------------------------------------
Publicado por Juan Antonio Ruz en 3:52 0 comentarios
jueves, 12 de abril de 2007
CSS links
http://alistapart.com/topics/code/css/
http://alistapart.com/articles/customcorners2
http://alistapart.com/topics/code/serverside/
Publicado por Juan Antonio Ruz en 11:02 0 comentarios
Categorías: CSS
Especificación EJB3
El mejor tutorial que he visto por ahora:
http://trailblazer.demo.jboss.com/EJB3Trail/
Publicado por Juan Antonio Ruz en 3:31 0 comentarios
miércoles, 11 de abril de 2007
¿qué es un Aspecto en una instancia de clase u objeto?
¿qué es un aspecto en la programación orientada a aspectos POA?
Un aspecto es una serie de operaciones que se repiten y pueden afectar a diferentes objetos y operaciones diferentes.
Un caso común es la métrica o testeo de la aplicación en tiempo. Si tenemos que incluir el código relacionado con medir el tiempo que tarda un método en ejecutarse dentro del propio método, entonces estamos mezclando aspectos diferentes e independientes del programa, tales como la ejecucion de una suma y el tiempo que tarda el producirse.
**** en desarrollo pero se refiere al aspecto en su forma más abstracta o dicho de otra forma el aspecto como perteneciente a un proceso
- El aspecto se puede referir al estado temporal (entendido como fase temporal o estado) del ciclo de vida de un objeto.
- También se puede entender como un comportamiento (interfaz) de la clase o instancia.
Los aspectos se implementan en forma de interceptores.
Un interceptor es un proxy.
En un programa orientado a aspectos debe existir un objeto que se encarga de devolver las nuevas instancias de las clases implicadas en la ejecución del programa. Este objeto encargado de la creación de nuevos objetos (el típico SpringFrameWork o Jboss Seam) devuelve proxys que tiene el mismo comportamiento que la clase esperada pero además aporta más comportamientos a la clase.
Ideas a desarrollar:
Entender la programación como un algoritmo de ciclos temporales/vitales de la instancia de un objeto.
Hibernate y ¿Para qué y cuando usar: equals y hashCode?
Según el tutorial de hibernate-3, esto se hace para utilizar las colecciones de tipo java.util.Set se implementaría así:
Teniendo en cuenta que se hace por el tema de indexación en un java.util.Set
public class Cat {
...
public boolean equals(Object other) {
if (this == other) return true;
if ( !(other instanceof Cat) ) return false;
final Cat cat = (Cat) other;
if ( !cat.getLitterId().equals( getLitterId() ) ) return false;
if ( !cat.getMother().equals( getMother() ) ) return false;
return true;
}
public int hashCode() {
int result;
result = getMother().hashCode();
result = 29 * result + getLitterId();
return result;
}
}
***HAY QUE ACCEDER A LAS PROPIEDADES A TRAVÉS DE SUS ACESORES PORQUE ES DE ESA FORMA QUE HIBERNATE CARGA LAS PROPIEDADES
Publicado por Juan Antonio Ruz en 11:08 0 comentarios
Categorías: hibernate, java, Lecciones JAVA
Could not find selected item matching value af:selectOneChoice f:selectItems
Este problema se da cuando en un selecItems no encuentra en la lista de posibles valores el valor seleccionado (selected) aunque veamos que de hecho si existe.
ADF/JSF al intentar seleccionar el valor de la lista de posibles valores lo hace a través del metodo equals() que tenemos que sobreescribir para que compare las claves de negocio y no compare por serialización del objeto (en este caso nunca serian iguales dos instancias con iguales valores de una clase).
Y el problema se produce cuando el acceso a los valores lo hacemos sin el correspondiente metodo interceptado por hibernate (PORQUE SI UTILIZAMOS HIBERNATE ESTAMOS UTILIZANDO POA [programación orientada a aspectos y por lo tanto interceptores] )
por un problema en la implementacion del equals e Hibernate.
La razón de este error es la siguiente:
Al acceder a las propiedades de los objetos sin el metodo adecuado (interceptado por hibernate) es decir los getter, el valor que devuelve es el que tiene por defecto la clase o el que tenga la instancia del objeto en un momento dado del programa.
Publicado por Juan Antonio Ruz en 2:38 0 comentarios
Categorías: ADF, AOP, Errores, hibernate, Soluciones
miércoles, 4 de abril de 2007
domingo, 1 de abril de 2007
Variables de entorno
set [sin argumentos] ---> visualizar todas las variables
Ejemplos para incluir variable:
- JAVA_HOME="${JAVA_HOME}:/usr/javatools/jdk1.5.0/:"
PATH="${PATH}:/home/my_user/bin:"
export variable=valor ---> incluir variable con valor en el proceso actual
echo $nombre_variable --> visualiza valor de variable
*Nota:
(Dos puntos sin incluir después un directorio son tratados como
el directorio de trabajo actual)
Publicado por Juan Antonio Ruz en 6:11 0 comentarios
Categorías: linux
Definir variables de entorno en macosx
Habría que editar el siguiente archivo
~/.MacOSX/environment.plist
siendo ~/ el directorio del usuario a modificar
En caso de no existir dicho archivo hay que crearlo a mano y también colocarle las directivas xml correspondientes
Y podemos utilizar la herramienta:/Developer/Applications/
PropertyListEditor.app
Hay que reiniciar la sesión de usuario para que surja efecto.
Ejemplo:
Publicado por Juan Antonio Ruz en 5:42 0 comentarios
Categorías: MACOSX
viernes, 30 de marzo de 2007
Configurar permisos para cuenta ftp
Hay que tener en cuenta que el usuario y el grupo de la carpeta destinada a ftp (y que tiene que ser la misma que la existente en el archivo de configuración) debe tener los correspondientes permisos de escritura/lectura/ejecucion
chmod 741 html/ftp/ quedando de la siguiente forma
drwxr----x 2 usuario grupo 4096 Mar 30 22:20 ftp
Publicado por Juan Antonio Ruz en 12:26 1 comentarios
chgrp chown
wikipedia chgrp
chgrp -R nuevogrp directorio
wikipedia chown
chown -R nuevousr directorio
Publicado por Juan Antonio Ruz en 12:02 0 comentarios
Categorías: Configuraciones Seguridad Servidor, linux
Control de usuarios y contabilidad de recursos
Fichero /etc/passwd
En cada linea puedes encontrar todos estos parametros (JOÉ):
- nombre de cuenta
- contraseña cifrada,
- identificador numerico
- identificador de grupo
- informacion convencional
- directorio raiz de la cuenta
- interprete de comandos asignado
http://www.linux-party.com/TutorialLinux/linux_files/linux5.html
Publicado por Juan Antonio Ruz en 11:50 0 comentarios
Categorías: Configuraciones Seguridad Servidor, linux, servidores
Configurar Servidor FTP
Cómo configurar tu servidor FTP desde línea de comandos en un sistema operativo Linux.
Para que nuestro Linux tenga la posibilidad de que se le conecten por FTP para realizar transferencia de ficheros, necesita tener instalado y configurado un servidor de FTP. En este artículo vamos a ver el modo de configurar un servidor de FTP por línea de comandos. No pasaremos a describir lo que es un servidor de FTP ya que en el tutorial de FTP ya lo explicamos.
Configuración
Una vez instalados comenzaremos a configurarlo a nuestro gusto. Comenzaremos con la lista de usuarios que podrán tener acceso al servidor FTP:
Para configurar este parámetro necesitaremos abrir el archivo /etc/ftpusers que se encuentra en /etc/. En este archivo pondremos ver una lista con los usuarios que tienen acceso.
Pero en realidad el archivo más importante para la configuración del servidor es el /etc/proftpd.conf que contiene todos los parámetros de configuración, entre otras cosas la ubicación de los archivos compartidos. Dentro de este archivo se encuentran los siguientes parámetros, que podemos modificar dependiendo del uso que le queramos dar.
anonymous.allow
Con este parámetros se habilita o deshabilita el usuario anónimo.
Anonymous.allow=trae (usuario anónimo habilitado)
Anonymous.allow=false (usuario anónimo deshabilitado)
Write_enable
Indica si una carpeta tiene permiso de escritura o no. En otras palabras indica si a una carpeta se la pueden subir archivos o no.
Write_enable=trae (si tiene permiso de escritura)
Write_enable=false (no tiene permiso de escritura)
ftpd_banner
Permite poner un mensaje de bienvenida a los usuarios cuando se conecten
ftpd_banner=mensaje
chroot_local_user
Permite o no a los usuarios locales el acceso a la maquina
chroot_local_user=trae
chroot_local_user=false
Para decirle al servidor fe FTP que usuarios tienen permiso para acceder tenemos que coger la ruta de el archivo antes comentado donde se encontraba la lista de usuarios (vsftpd.user_list)
Para ello en el archivo de configuración pondríamos algo como esto:
Chroot_list_file=/etc/vsftpd.user_list
Básicamente con estos comandos podrás configurar tu servidor FTP en Linux sin ningún problema.
Arrancar y detener el servidor de FTP
Ya solo nos queda arrancar el servidor para lo cual utilizaremos los siguientes comandos.
Para arrancar el servicio: /etc/init.d/proftpd Start
Para parar el servicio: /etc/init.d/proftpd stop
Para reiniciar el servicio: /etc/init.d/proftpd restart
Conclusión
Este artículo esta escrito haciendo referencia a Linux red hat 9.0 pero las configuraciones y los comandos son mas o menos los mismo en las distintas distribuciones.
Publicado por Juan Antonio Ruz en 11:33 0 comentarios
En qué consiste llevar un buen mantenimiento de un servidor en linux
Aquí un listado de las características que debería tener el mantenimiento de un servidor linux:
- Copias de seguridad incrementales
- Replicación de información
- Incluir los demonios en el arranque del servidor
- Procesos periodicos (crontab)
- crear una imagen inicial con los programas necesarios
- control de usuarios y contabilidad de recursos
- controlar spam - /var/mail
¿qué más se os ocurre ?
Publicado por Juan Antonio Ruz en 6:27 0 comentarios
Categorías: EN DESARROLLO, linux, servidores
Codificacion de fichero de internacionalizacion.properties
Después de mucho cavilar, es decir de averigüar si podía ser el problema de jboss, de mi MACOSX, del JVM, o del editor de java (eclipse o intellij idea), probé a guardar nuevamente el archivo .properties con la codificación final dentro del paquete .war y funcionó. El "culpable" era ANT, y concretamente su tarea copy que había que indicarle la codificación a seguir.
Publicado por Juan Antonio Ruz en 6:20 0 comentarios
Categorías: ANT, i18n, Soluciones
Solucion: columnas dinamicas en un af:iterator
La solución, aparente chapuza pero es que con c:if no funcionaba, consiste en utilizar el iterator varias veces (esto serían las celdas de la tabla ) y renderizar la fila en función de #{vs.index mod 3==[numero de fila del 0 al 2]}
<h:panelGrid columns="4">
<af:outputText value="#{messages.clases}"/>
<af:iterator value="#{curso.clasesList}" var="clase" first="0" varStatus="vs">
<afh:rowLayout rendered="#{vs.index mod 3==0}">
<af:outputText value="#{clase.nombre}" escape="false"/>
</afh:rowLayout>
</af:iterator>
<af:iterator value="#{curso.clasesList}" var="clase" first="1" varStatus="vs">
<afh:rowLayout rendered="#{vs.index mod 3==1}">
<af:outputText value="#{clase.nombre}" escape="false"/>
</afh:rowLayout>
</af:iterator>
<af:iterator value="#{curso.clasesList}" var="clase" first="2" varStatus="vs">
<afh:rowLayout rendered="#{vs.index mod 3==2}">
<af:outputText value="#{clase.nombre}" escape="false"/>
</afh:rowLayout>
</af:iterator>
</h:panelGrid >
Publicado por Juan Antonio Ruz en 6:06 0 comentarios
Categorías: ADF, Soluciones
mysql character set --> JAPones
links interesantes:
http://www.javaworld.com/javaworld/jw-09-2004/jw-0906-unicode.html?page=2
http://www.java2s.com/Code/Java/Development-Class/StringConverterUnicode.htm
http://forums.mysql.com/read.php?103,144564,146204#msg-146204
http://galaxy.andromda.org/forum/viewtopic.php?t=4386&view=next&sid=43ab0c5645142a2b937d8e5fb1040cbe
http://www.oop-reserch.com/mysql.html
probar con charset:big5
collation:big5_bin
Publicado por Juan Antonio Ruz en 4:44 1 comentarios
Categorías: EN DESARROLLO, i18n, MySql
jueves, 29 de marzo de 2007
Comandos útiles para saber el juego de caracteres en tus bases de datos de mysql
(Character Sets and Collations in MySQL)
mysql> SHOW CHARACTER SET;
mysql> SHOW FULL COLUMNS FROM test;
mysql> ALTER TABLE test CHARACTER SET latin1;
Publicado por Juan Antonio Ruz en 11:36 0 comentarios
Permisos en linux - chmod
Algunos ejemplos de utilización
para ejecutables unos permisos adecuados serían:
rwxr-x--x lo que indica todos los permisos para propietario y ejecución para el resto
al utilizar el comando chmod se puede hacer de forma relativa o absoluta.
Al hacerlo de forma relativa lo que se hace es modificar los permisos existentes con expresiones del tipo:
- o-w # esto sería quitar el permiso de escritura al propietario
- g+w # esto daria permiso de escritura a grupo
** si se quiere hacer a un directorio y a todos los que cuelgan de él hay que utilizar chmod -R XXX dir
· chmod 600 directorio asigna permisos de lectura y escritura al propietario
· chmod 444 directorio asigna permisos de lectura o todos
· chmod 777 directorio todos los permisos a todos
r w x | r w x | r w x | |
Permisos Actuales | 4+2+1 | 4+0+1 | 0+0+0 |
7 | 5 | 0 |
r w x | r w x | r w x | |
Cambiar a: | 4+2+1 | 4+0+1 | 4+0+1 |
7 | 5 | 5 |
Por último aquí esta una tabla que permite saber rápidamente que valor asignar como permiso a cualquiera de los tres modos.
Val. | Permisos |
0 | --- |
1 | --x |
2 | -w- |
3 | -wx |
4 | r-- |
5 | r-x |
6 | rw- |
7 | rwx |
Permisos en directorios:
el derecho de ejecucion [x] en los directorios indica derecho de paso por el directorio a los ficheros o directorios contenidos en él. El derecho de lectura [r] da derecho a conocer su contennido. Puede ser útil el no dar derecho de lectura y si de ejecución, de esa forma permitiremos el paso por el directorio restringiendo el conocimiento de su contenido.
El permiso de escritura [w] indica si se puede crear/modificar/eliminar su contenido
Bits especiales:
Los últimos 3 bits relacionados con los permisos.
setuid- hace un set de id de usuario
setgid - hace un set de id de grupo
sticky - fija ej programa permanentemente en la memoria (esto es una propiedad de los virus quedarse como residentes en la memoria)
Guía para Crear Archetypes
Creando archetypes podemos definir nuestra aplicación mínima. Es decir , una aplicación que contendrá los recursos mínimos que sabemos utilizaremos. Se podría definir como automatizar nuestros propios frameworks.
http://maven.apache.org/plugins/maven-archetype-plugin/examples/archetype.html
me acaban de dejar este link que podemos ir mirando y que tiene buena pinta:
http://www.chuidiang.com/chuwiki/index.php?title=Categor%C3%ADa:Maven
Publicado por Juan Antonio Ruz en 7:42 1 comentarios
Categorías: MAVEN
miércoles, 28 de marzo de 2007
apt-get
...apt?.
APT son las siglas de Advanced Package Tool. APT es un sistema de gestión de paquetes de software desarrollado por el APT Team
del Proyecto Debian
bajo licencia GNU/GPL
.
Es el sistema de gestión de paquetes más avanzado en la actualidad y el que má flexibilidad y potencia posee para entornos de red.
... apt-get?.
``apt-get
'' es la utilidad para usar desde la línea de órdenes que hace de interfaz entre el usuario y APT.
Publicado por Juan Antonio Ruz en 9:16 0 comentarios
Categorías: linux
Comprimir/descomprimir
* Ficheros tar
Empaquetar: tar -cvf archivo.tar /dir/a/comprimir/
Desempaquetar: tar -xvf archivo.tar
Ver contenido tar -tf archivo.tar
* Ficheros gz
Comprimir: gzip -9 fichero
Descomprimir: gzip -d fichero.gz
* Ficheros bz2
Comprimir: bzip fichero
Descomprimir: bzip2 -d fichero.bz2
gzip ó bzip2 sólo comprimen ficheros [no directorios, para eso existe tar]. Para comprimir y archivar al mismo tiempo hay que combinar el tar y el gzip o el bzip2 de la siguiente manera:
* Ficheros tar.gz
Comprimir: tar -czfv archivo.tar.gz ficheros
Descomprimir: tar -xzvf archivo.tar.gz
Ver contenido: tar -tzf archivo.tar.gz
* Ficheros tar.bz2
Comprimir: tar -c ficheros | bzip2 > archivo.tar.bz2
Descomprimir: bzip2 -dc archivo.tar.bz2 | tar -xv
Ver contenido: bzip2 -dc archivo.tar.bz2 | tar -t
* Ficheros zip
Comprimir: zip archivo.zip ficheros
Descomprimir: unzip archivo.zip
Ver contenido: unzip -v archivo.zip
* Ficheros lha
Comprimir: lha -a archivo.lha ficheros
Descomprimir: lha -x archivo.lha
Ver contenido: lha -v archivo.lha
Ver contenido: lha -l archivo.lha
* Ficheros arj
Comprimir: arj a archivo.arj ficheros
Descomprimir: unarj archivo.arj
Descomprimir: arj -x archivo.arj
Ver contenido: arj -v archivo.arj
Ver contenido: arj -l archivo.arj
* Ficheros zoo
Comprimir: zoo a archivo.zoo ficheros
Descomprimir: zoo -x archivo.zoo
Ver contenido: zoo -L archivo.zoo
Ver contenido: zoo -v archivo.zoo
* Ficheros rar
Comprimir: rar -a archivo.rar ficheros
Descomprimir: rar -x archivo.rar
Ver contenido: rar -l archivo.rar
Ver contenido: rar -v archivo.rar
Publicado por Juan Antonio Ruz en 9:06 0 comentarios
Categorías: linux
Descargar archivos desde el web a traves de la consola
wget -c ftp.juan.es/pub/programas/netscape.rpmEl primer ejemplo se bajaría el fichero netscape.rpm directamente al directorio actual, pudiendo cortarlo en cualquier momento con CTRL+C para continuar su download otro dia desde el punto en que se quedó (como reget, NetVampire, etc) utilizando el mismo comando. El segundo ejemplo se bajaría todos los ficheros que hubieran en el directorio pub/fotos/paisajes del ftp especificado, y el tercero se bajaría la web www.8052.com completa (incluyendo fotos, subdirectorios, etc) para poder navegar por ella en el disco duro offline.
wget -r ftp.juan.es/pub/fotos/paisajes
wget -rL www.8052.com
Publicado por Juan Antonio Ruz en 9:04 0 comentarios
Categorías: linux
Reiniciar Mysql
Para reiniciar MySql
/etc/init.d/mysql stop
/etc/init.d/mysql start
Archivo de configuración de mysql en /etc/mysql/my.cnf
Despues en /etc/mysql/my.cf comentar skip-network y reiniciar el mysql
Re: Como reisntalo mysql?
La cosa mejor es salvar los datos primero
cp -R /var/lib/mysql /home/back-up
cp /etc/mysql/my.cnf /home/back-up
despues borras realmente todo con:
apt-get remove --purge mysql*
que te borra todas estas cosas
mysql
mysql-base
mysql-client
mysql-client-4.1
mysql-common
mysql-common-4.1
mysql-dev
mysql-devel
mysql-doc
mysql-doc-4.1
mysql-gpl-client
mysql-server
mysql-server-4.1
despues hace un apt-get clean que borra la cache de apt
y por ultimo instalas todo de nuevo
;-)
ojo --purge borra absolutamente todo!
Publicado por Juan Antonio Ruz en 7:34 0 comentarios
Categorías: MySql
martes, 27 de marzo de 2007
Buscando en linux
find directorio -name nombre
find /usr/ -name *svn*
find . -mtime 0 # find files modified within the past 24 hours
find . -mtime -1 # find files modified within the past 24 hours
find . -mtime 1 # find files modified between 24 and 48 hours ago
find . -mtime +1 # find files modified more than 48 hours ago
find . -mmin +5 -mmin -10 # find files modifed between 6 and 9 minutes ago
Publicado por Juan Antonio Ruz en 12:20 0 comentarios
Categorías: linux
Interceptores Jboss Seam
Fases de JSF ya es mucha diferencia
Hay que crear una @interface que la utilizaremos para etiquetar/interceptar la clase(componente en terminos de Seam) correspondiente
import javax.interceptor.Interceptors;
import java.lang.annotation.Documented;
import static java.lang.annotation.ElementType.TYPE;
import java.lang.annotation.Retention;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
import java.lang.annotation.Target;
/**
* Created by IntelliJ IDEA.
* User: juanitu
* Date: 12-abr-2007
* Time: 17:43:24
* To change this template use File | Settings | File Templates.
*/
@Target(TYPE)
@Retention(RUNTIME)
@Documented
@Interceptors(Interceptor.class)
public @interface EtiquetaInterceptora {
}
Despues definimos el interceptor poniendo especial interes en como tratamos el tema de las fases de la aplicacion:
import org.jboss.seam.annotations.Around;
import org.jboss.seam.annotations.Within;
import org.jboss.seam.interceptors.*;
import org.jboss.seam.contexts.Contexts;
import org.jboss.seam.contexts.Lifecycle;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import javax.interceptor.AroundInvoke;
import javax.interceptor.InvocationContext;
import javax.faces.event.PhaseId;
import es.cafs.dao.CafsDAO;
import es.cafs.metadata.componentes.Componentes;
import java.lang.reflect.Method;
/**
* Created by IntelliJ IDEA.
* User: juanitu
* Date: 12-abr-2007
* Time: 17:45:36
* To change this template use File | Settings | File Templates.
*/
@Around({BijectionInterceptor.class, ValidationInterceptor.class,
ConversationInterceptor.class, BusinessProcessInterceptor.class})
@Within(RemoveInterceptor.class)
public class Interceptor {
protected static Log log = LogFactory.getLog(org.jboss.seam.interceptors.Interceptor.class);
@AroundInvoke
public Object checkLoggedIn(InvocationContext invocation) throws Exception {
CafsDAO dao = (CafsDAO) Contexts.getApplicationContext().get(Componentes.appCafsDAO);
log.error(dao==null);
Method method = invocation.getMethod();
log.error(invocation.getTarget().getClass()+"-"+method.getName() + " " + method.getReturnType());
if (Lifecycle.getPhaseId() == PhaseId.INVOKE_APPLICATION) {
log.error("INVOCANDO FASE");
} else {
log.error(invocation.getTarget().getClass()+"-"+method.getName() + " " + method.getReturnType());
log.error("OTRA FASE");
}
return invocation.proceed();
}
}
Y por último hay que etiquetar el componente correspondiente
@Scope(ScopeType.CONVERSATION)
@Name(Componentes.convVisorInformacion)
@Logeando
public class VisorInformacion{
}
Publicado por Juan Antonio Ruz en 11:30 0 comentarios
Introducción a Maven
Maven es una herramienta escrita en Java para facilitar el trabajo de programación en java, concretamente se utiliza para la compilación y mantenimiento de cualquier proyecto basado en Java.
- Permitir la compilación del código fuente y su empaquetamiento de forma fácil, es decir: te puedes olvidar de las dependencias de segundos y terceros
- Estandarizar el directorio donde se incluyen los diferentes recursos
- Proporcionar información eficiente o útil sobre el proyecto
- Enfoque a patrones de diseño o desarrollo
- Permitir la migración a nuevas versiones de las herramientas a utilizar
No te olvides de:
export PATH=/usr/local/maven-2.0.5/bin:$PATH
Creating a webapp
Use maven-archetype-webapp to start a simple webapp maven project. The command is as follows
mvn archetype:create
-DgroupId=[your project's group id]
-DartifactId=[your project's artifact id]
-DarchetypeArtifactId=maven-archetype-webapp
POM: "Project Object Model".
Documento XML que representa el proyecto:
- archivos de configuración
- programadores implicados y sus roles
- empresa y licencias
- URL del proyecto
- dependencias
En un proyecto con Maven el pom.xml, es lo único imprescindible.
The Basics
4.0.0
org.codehaus.mojo
my-project
1.0
groupId: Id de organizacion o empresa, suele ser su paquete java
ej: com.mediaymedia
artifactId: El nombre del proyecto: wiki
version:
packaging:
http://maven.apache.org/pom.html#Introduction
Publicado por Juan Antonio Ruz en 5:13 0 comentarios
Categorías: MAVEN
Interface e implementación: causas y efectos
diferencias y consecuencias del diseño con interfaces.
Diseño robusto frente a diseño frágil
Contrato de interface
La interfaz
PD: diseño orientado a pruebas con Mocks
Publicado por Juan Antonio Ruz en 0:48 0 comentarios
Categorías: java, Lecciones JAVA, POO, TDD
lunes, 26 de marzo de 2007
Programación en Java ¿y qué más?
¿y que más? Pues nuestro interés se dirigirá a programar orientándonos a objetos,aspectos y pruebas.
Utilizaremos las siguientes herramientas: TestNG, DBUnit, Hibernate, JSF, JBoss Seam ...
http://es.wikipedia.org/wiki/Lenguaje_de_programaci%C3%B3n
http://es.wikipedia.org/wiki/Lenguaje_de_programaci%C3%B3n_Java
http://es.wikipedia.org/wiki/Orientado_a_objetos
http://es.wikipedia.org/wiki/Programaci%C3%B3n_Extrema
http://es.wikipedia.org/wiki/J2EE
Se pondrá un especial interés en recopilar los errores que vayan apareciendo
Publicado por Juan Antonio Ruz en 1:14 0 comentarios
Categorías: java