<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Java Snippets</title>
	<atom:link href="http://java.hijodeblog.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://java.hijodeblog.com</link>
	<description>Otro blog más de Hijo de Blog</description>
	<lastBuildDate>Tue, 24 Apr 2012 12:44:06 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Cómo cambiar el timeout por defecto de un socket en Java</title>
		<link>http://java.hijodeblog.com/2012/04/24/como-cambiar-el-timeout-por-defecto-de-un-socket-en-java/#utm_source=feed&#038;utm_medium=feed&#038;utm_campaign=feed</link>
		<comments>http://java.hijodeblog.com/2012/04/24/como-cambiar-el-timeout-por-defecto-de-un-socket-en-java/#comments</comments>
		<pubDate>Tue, 24 Apr 2012 12:44:06 +0000</pubDate>
		<dc:creator>Dr. SeROne</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[conexiones remotas]]></category>
		<category><![CDATA[redes]]></category>
		<category><![CDATA[sockets]]></category>

		<guid isPermaLink="false">http://java.hijodeblog.com/?p=117</guid>
		<description><![CDATA[Cuando se crea un socket de ésta forma: Puede darse que el timeout por defecto usado (el del sistema operativo) sea demasiado larga. Para poder controlarlo es mejor inicializar el socket de ésta forma: Que nos permite especificar un timeout en milisegundos. Espero que os sea de utilidad. ¡Happy coding!]]></description>
			<content:encoded><![CDATA[<p>Cuando se crea un socket de ésta forma:</p>
<pre class="brush: java; title: ; notranslate">Socket socket = new Socket(IP, puerto);</pre>
<p>Puede darse que el timeout por defecto usado (el del sistema operativo) sea demasiado larga. Para poder controlarlo es mejor inicializar el socket de ésta forma:</p>
<pre class="brush: java; title: ; notranslate">Socket socket = new Socket();
socket.connect(new InetAddress(IP, puerto), timeout);</pre>
<p>Que nos permite especificar un timeout en milisegundos.</p>
<p>Espero que os sea de utilidad. ¡Happy coding!</p>
]]></content:encoded>
			<wfw:commentRss>http://java.hijodeblog.com/2012/04/24/como-cambiar-el-timeout-por-defecto-de-un-socket-en-java/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Resolviendo excepciones: Permission Denial, broadcasting Intent XXXX requires null due to receiver YYYY</title>
		<link>http://java.hijodeblog.com/2012/04/02/resolviendo-excepciones-permission-denial-broadcasting-intent-xxxx-requires-null-due-to-receiver-yyyy/#utm_source=feed&#038;utm_medium=feed&#038;utm_campaign=feed</link>
		<comments>http://java.hijodeblog.com/2012/04/02/resolviendo-excepciones-permission-denial-broadcasting-intent-xxxx-requires-null-due-to-receiver-yyyy/#comments</comments>
		<pubDate>Mon, 02 Apr 2012 13:19:44 +0000</pubDate>
		<dc:creator>Dr. SeROne</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[excepción]]></category>

		<guid isPermaLink="false">http://java.hijodeblog.com/?p=112</guid>
		<description><![CDATA[NOTA: Léelo también en Diario de un Androide. Mientras desarrollas tu aplicación que gestione notificaciones puedes recibir una excepción como esta (Siendo XXXX una actividad que reciba intents e YYYY un intent concreto (personalizado, en mi caso)): Hay varias interpretaciones de éste error por internet, pero en mi caso se debría a una visibilidad entre [...]]]></description>
			<content:encoded><![CDATA[<p>NOTA: Léelo también en <a href="http://androide.hijodeblog.com/2012/04/02/resolviendo-excepciones-permission-denial-broadcasting-intent-xxxx-requires-null-due-to-receiver-yyyy/">Diario de un Androide</a>.</p>
<p>Mientras desarrollas tu aplicación que gestione notificaciones puedes recibir una excepción como esta (Siendo XXXX una actividad que reciba intents e YYYY un intent concreto (personalizado, en mi caso)):</p>
<pre class="brush: java; title: ; notranslate">W/ActivityManager: Permission denied: checkComponentPermission() reqUid=10060
W/ActivityManager: Permission Denial: broadcasting Intent { act=YYYY cmp=XXXX bnds=[0,395][480,491] } from XXXX (pid=-1, uid=10073) requires null due to receiver XXXX</pre>
<p>Hay varias interpretaciones de éste error por internet, pero en mi caso se debría a una visibilidad entre componentes, que se solucionó añadiendo <code>android:exported="true"</code> en las actividades o servicios del manifest de tu aplicación.</p>
<p>Espero que os ayude. ¡Happy coding!</p>
]]></content:encoded>
			<wfw:commentRss>http://java.hijodeblog.com/2012/04/02/resolviendo-excepciones-permission-denial-broadcasting-intent-xxxx-requires-null-due-to-receiver-yyyy/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Como permitir que un applet firmado capture audio desde el micrófono</title>
		<link>http://java.hijodeblog.com/2012/03/22/como-permitir-que-un-applet-firmado-capture-audio-desde-el-microfono/#utm_source=feed&#038;utm_medium=feed&#038;utm_campaign=feed</link>
		<comments>http://java.hijodeblog.com/2012/03/22/como-permitir-que-un-applet-firmado-capture-audio-desde-el-microfono/#comments</comments>
		<pubDate>Thu, 22 Mar 2012 12:23:09 +0000</pubDate>
		<dc:creator>Dr. SeROne</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[J2EE]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JEE]]></category>
		<category><![CDATA[audio]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[permisos]]></category>
		<category><![CDATA[seguridad]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://java.hijodeblog.com/?p=110</guid>
		<description><![CDATA[Si al ejecutar una lectura de audio desde el canal del micrófono a través de nuestro applet firmado obtenemos la excepción siguiente: Habrá que buscar (o crear si no existe) el archivo java.policy (a nivel de sistema) o el archivo .java.policy (a nivel de usuario), y editarlo escribiendo algo como lo siguiente: Y si estáis [...]]]></description>
			<content:encoded><![CDATA[<p>Si al ejecutar una lectura de audio desde el canal del micrófono a través de nuestro applet firmado obtenemos la excepción siguiente:</p>
<pre class="brush: java; title: ; notranslate">
java.security.AccessControlException: access denied (javax.sound.sampled.AudioPermission record)
at java.security.AccessControlContext.checkPermission (AccessControlContext.java:323)
at java.security.AccessController.checkPermission(Acc essController.java:546)
at java.lang.SecurityManager.checkPermission(Security Manager.java:532)
...
</pre>
<p>Habrá que buscar (o crear si no existe) el archivo <strong>java.policy</strong> (a nivel de sistema) o el archivo <strong>.java.policy</strong> (a nivel de usuario), y editarlo escribiendo algo como lo siguiente:</p>
<pre class="brush: java; title: ; notranslate">
grant
{
	permission javax.sound.sampled.AudioPermission &quot;record&quot;;
};
</pre>
<p>Y si estáis bajo un Linux (Ubuntu Desktop, en mi caso) y os surge una nueva excepción que dice lo siguiente:</p>
<pre class="brush: java; title: ; notranslate">
java.security.AccessControlException: access denied (java.lang.RuntimePermission loadLibrary.pulse-java)
</pre>
<p>Habrá que rellenar el archivo <strong>.java.policy</strong> con lo siguiente:</p>
<pre class="brush: java; title: ; notranslate">
grant
{
	permission javax.sound.sampled.AudioPermission &quot;record&quot;;
	permission java.lang.RuntimePermission &quot;loadLibrary.pulse-java&quot;;
    permission java.io.FilePermission &quot;&lt;&lt;ALL FILES&gt;&gt;&quot;, &quot;read&quot;;
};
</pre>
<p>¡Espero que os sirva de ayuda! ¡Happy coding!</p>
]]></content:encoded>
			<wfw:commentRss>http://java.hijodeblog.com/2012/03/22/como-permitir-que-un-applet-firmado-capture-audio-desde-el-microfono/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cómo capturar, codificar, decodificar y reproducir audio en formato ALAW para sesiones RTP usando Peers</title>
		<link>http://java.hijodeblog.com/2012/03/22/como-capturar-codificar-decodificar-y-reproducir-audio-en-formato-alaw-para-sesiones-rtp-usando-peers/#utm_source=feed&#038;utm_medium=feed&#038;utm_campaign=feed</link>
		<comments>http://java.hijodeblog.com/2012/03/22/como-capturar-codificar-decodificar-y-reproducir-audio-en-formato-alaw-para-sesiones-rtp-usando-peers/#comments</comments>
		<pubDate>Thu, 22 Mar 2012 09:02:29 +0000</pubDate>
		<dc:creator>Dr. SeROne</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[J2EE]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[alaw]]></category>
		<category><![CDATA[codec]]></category>
		<category><![CDATA[multimedia]]></category>
		<category><![CDATA[peers]]></category>
		<category><![CDATA[rtp]]></category>
		<category><![CDATA[streaming]]></category>
		<category><![CDATA[ulaw]]></category>

		<guid isPermaLink="false">http://java.hijodeblog.com/?p=107</guid>
		<description><![CDATA[Vamos a ver cómo utilizar la librería del softphone Peers para realizar las tareas de captura y reproducción de audio, además de la codificación y decodificación desde audio linear a ALAW y viceversa. ¿Qué es cada cosa de las que hemos hablado ahora? He aquí las definiciones: Peers es un softphone funcional y portable totalmente [...]]]></description>
			<content:encoded><![CDATA[<p>Vamos a ver cómo utilizar la librería del <a href="http://sourceforge.net/projects/peers/">softphone Peers</a> para realizar las tareas de captura y reproducción de audio, además de la codificación y decodificación desde audio linear a ALAW y viceversa.</p>
<p>¿Qué es cada cosa de las que hemos hablado ahora? He aquí las definiciones:</p>
<ul>
<li><a href="http://sourceforge.net/projects/peers/">Peers</a> es un softphone funcional y portable totalmente desarrollado en Java.</li>
<li>ALAW es un codec de compresión de audio usado principalmente para la transmisión de voz en llamadas VoIP.</li>
</ul>
<p>Para usar la librería de Peers basta con bajar el paquete del softphone desde Sourceforge e importar el JAR de la aplicación (peers.jar) dentro de nuestro proyecto Eclipse o Netbeans, así de facil. Con ésto ya tendremos toda la potencia de Peers disponible para nuestra aplicación.</p>
<p>Y ahora vamos ahora a lo interesante, el código (es bastante autoexplicativo):</p>
<h3><span style="text-decoration: underline;">Inicializando el sistema</span></h3>
<p>Para inicializar el sistema de audio de Peers haremos lo siguiente:</p>
<pre class="brush: java; title: ; notranslate">
// Logger para Peers
// Se ha de crear el directorio &quot;./logs&quot; o fallará
(new File(&quot;logs&quot;)).mkdir();
Logger loggerInterno = new Logger(null);

// Inicializamos el audio
soundManager = new SoundManager(false, this.loggerInterno, &quot;.&quot;);
soundManager.openAndStartLines();
</pre>
<h3><span style="text-decoration: underline;">Decodificando y reproduciendo audio RTP</span></h3>
<p>Para decodificar y reproducir los datos RTP que hayamos recibido a través de nuestra sesión RTP haremos lo siguiente:</p>
<pre class="brush: java; title: ; notranslate">
while(recibimosPaquetesRTP)
{
	// Recibimos el paquete desde la fuente RTP
	byte[] paquete = null;

	// ...
	// NOTA: Fuera del ámbito de éste post, deberás escribir tú éste fragmento de código
	// ...

	// Procesamos el paquete
	RtpParser rtpParser = new RtpParser(loggerInterno);
	RtpPacket rtpPacket = rtpParser.decode(paquete);

	// Decodificamos los datos
	Decoder decoder = null;

	switch (rtpPacket.getPayloadType())
	{
		case RFC3551.PAYLOAD_TYPE_PCMU:
		{
			decoder = new PcmuDecoder();
			break;
		}

		case RFC3551.PAYLOAD_TYPE_PCMA:
		{
			decoder = new PcmaDecoder();
			break;
		}
	}

	byte[] rawBuf = decoder.process(rtpPacket.getData());
	soundManager.writeData(rawBuf, 0, rawBuf.length);
}
</pre>
<h3><span style="text-decoration: underline;">Capturando desde el micro y codificando audio antes de enviar</span></h3>
<p>Para recibir datos del micrófono y codificar el audio en ALAW para enviar a través de nuestra sesión RTP haremos lo siguiente:</p>
<pre class="brush: java; title: ; notranslate">
Encoder encoder = new PcmaEncoder(null, null, false, this.padre.loggerInterno, &quot;.&quot;, new CountDownLatch(3));

while(queremosLeerDesdeElMicro)
{
	// Leemos del micro
	byte[] paquete = this.padre.soundManager.readData();

	// Codificamos
	byte[] codificado = encoder.process(paquete);

	// Enviamos el paquete por la sesión RTP

	// ...
	// NOTA: Fuera del ámbito de éste post, deberás escribir tú éste fragmento de código
	// ...
}
</pre>
<p>¡Espero que os sirva de ayuda! ¡Happy coding!</p>
]]></content:encoded>
			<wfw:commentRss>http://java.hijodeblog.com/2012/03/22/como-capturar-codificar-decodificar-y-reproducir-audio-en-formato-alaw-para-sesiones-rtp-usando-peers/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Resolviendo problemas de Hibernate en Beans con Managed Transactions bajo JBoss</title>
		<link>http://java.hijodeblog.com/2012/03/14/resolviendo-problemas-de-hibernate-en-beans-con-managed-transactions-bajo-jboss/#utm_source=feed&#038;utm_medium=feed&#038;utm_campaign=feed</link>
		<comments>http://java.hijodeblog.com/2012/03/14/resolviendo-problemas-de-hibernate-en-beans-con-managed-transactions-bajo-jboss/#comments</comments>
		<pubDate>Wed, 14 Mar 2012 14:55:17 +0000</pubDate>
		<dc:creator>Dr. SeROne</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[J2EE]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JBoss]]></category>
		<category><![CDATA[datasources]]></category>
		<category><![CDATA[hibernate]]></category>
		<category><![CDATA[jboss]]></category>
		<category><![CDATA[transacciones]]></category>

		<guid isPermaLink="false">http://java.hijodeblog.com/?p=105</guid>
		<description><![CDATA[Si tienes una Bean etiquetada con @TransactionManagement(TransactionManagementType.BEAN) y recibes excepciones como éstas: El problema se debe a la forma en que se manejan las transacciones. En ocasiones se resuelve con éstos dos consejos: Añadiendo un verificador al especificador de Datasource (explicación): Seguir el patrón de uso de las transacciones que se puede leer aquí A [...]]]></description>
			<content:encoded><![CDATA[<p>Si tienes una Bean etiquetada con <strong>@TransactionManagement(TransactionManagementType.BEAN)</strong> y recibes excepciones como éstas:</p>
<pre class="brush: java; title: ; notranslate">
javax.persistence.PersistenceException: org.hibernate.exception.GenericJDBCException: Cannot open connection
   at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1214)
   at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1147)
   at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:255)
   ...
   at java.lang.Thread.run(Unknown Source)
 Caused by: org.hibernate.exception.GenericJDBCException: Cannot open connection
   at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:140)
   at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:128)
   at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
   at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:52)
   at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:449)
   at org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:167)
   at org.hibernate.jdbc.AbstractBatcher.prepareQueryStatement(AbstractBatcher.java:161)
   at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1700)
   at org.hibernate.loader.Loader.doQuery(Loader.java:801)
   at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:274)
   at org.hibernate.loader.Loader.doList(Loader.java:2533)
   at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2276)
   at org.hibernate.loader.Loader.list(Loader.java:2271)
   at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:452)
   at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:363)
   at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:196)
   at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1268)
   at org.hibernate.impl.QueryImpl.list(QueryImpl.java:102)
   at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:246)
   ... 32 more
 Caused by: org.jboss.util.NestedSQLException: Transaction is not active: tx=TransactionImple &lt; ac, BasicAction: 0:ffff0a021e29:126a:4f6095ab:c1 status: ActionStatus.ABORT_ONLY &gt;; -
not active: tx=TransactionImple &lt; ac, BasicAction: 0:ffff0a021e29:126a:4f6095ab:c1 status: ActionStatus.ABORT_ONLY &gt;)
   at org.jboss.resource.adapter.jdbc.WrapperDataSource.getConnection(WrapperDataSource.java:95)
   at org.hibernate.ejb.connection.InjectedDataSourceConnectionProvider.getConnection(InjectedDataSourceConnectionProvider.java:71)
   at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:446)
   ... 46 more
 Caused by: javax.resource.ResourceException: Transaction is not active: tx=TransactionImple &lt; ac, BasicAction: 0:ffff0a021e29:126a:4f6095ab:c1 status: ActionStatus.ABORT_ONLY &gt;
   at org.jboss.resource.connectionmanager.TxConnectionManager.getManagedConnection(TxConnectionManager.java:403)
   at org.jboss.resource.connectionmanager.BaseConnectionManager2.allocateConnection(BaseConnectionManager2.java:496)
   at org.jboss.resource.connectionmanager.BaseConnectionManager2$ConnectionManagerProxy.allocateConnection(BaseConnectionManager2.java:941)
   at org.jboss.resource.adapter.jdbc.WrapperDataSource.getConnection(WrapperDataSource.java:89)
   ... 48 more
</pre>
<p>El problema se debe a la forma en que se manejan las transacciones. En ocasiones se resuelve con éstos dos consejos:</p>
<ul>
<li>Añadiendo un verificador al especificador de Datasource (<a href="https://community.jboss.org/message/94287">explicación</a>):
<pre class="brush: java; title: ; notranslate">&lt;valid-connection-checker-class-name&gt; com.mysql.jdbc.integration.jboss.MysqlValidConnectionChecker &lt;/valid-connection-checker-class-name&gt;</pre>
</li>
<li>Seguir el patrón de uso de las transacciones <a href="https://community.jboss.org/wiki/WhatIsTheCorrectPatternForUserTransactions">que se puede leer aquí</a></li>
</ul>
<p>A mi me ha ayudado mucho, ¡espero que os ayude a vosotros!</p>
<p>Happy coding!</p>
]]></content:encoded>
			<wfw:commentRss>http://java.hijodeblog.com/2012/03/14/resolviendo-problemas-de-hibernate-en-beans-con-managed-transactions-bajo-jboss/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Solucionando la excepción java.lang.OutOfMemoryError</title>
		<link>http://java.hijodeblog.com/2012/03/06/solucionando-la-excepcion-java-lang-outofmemoryerror/#utm_source=feed&#038;utm_medium=feed&#038;utm_campaign=feed</link>
		<comments>http://java.hijodeblog.com/2012/03/06/solucionando-la-excepcion-java-lang-outofmemoryerror/#comments</comments>
		<pubDate>Tue, 06 Mar 2012 12:25:33 +0000</pubDate>
		<dc:creator>Dr. SeROne</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[JBoss]]></category>
		<category><![CDATA[excepciones]]></category>
		<category><![CDATA[jboss]]></category>
		<category><![CDATA[tomcat]]></category>

		<guid isPermaLink="false">http://java.hijodeblog.com/?p=103</guid>
		<description><![CDATA[Si al desplegar tu aplicación en Tomcat/JBoss te sale ésta famosa excepción: Ésta web y ésta otra lo explican bastante bien, pero resumiendo, el problema viene de que el ClassLoader del anterior de ploy de la aplicación no ha sido descargado y recolectado como basura, por lo que se lanza ésa excepción. Las posibles causas [...]]]></description>
			<content:encoded><![CDATA[<p>Si al desplegar tu aplicación en Tomcat/JBoss te sale ésta famosa excepción:</p>
<pre class="brush: java; title: ; notranslate">java.lang.OutOfMemoryError: PermGen space</pre>
<p><a href="http://rubensa.wordpress.com/2008/02/11/java-classloader-permgen-exception/">Ésta web</a> y <a href="http://www.javamexico.org/blogs/avali2/causas_y_solucion_de_java_lang_outofmemoryerror_permgen_space_failure">ésta otra</a> lo explican bastante bien, pero resumiendo, el problema viene de que el ClassLoader del anterior de ploy de la aplicación no ha sido descargado y recolectado como basura, por lo que se lanza ésa excepción.</p>
<p>Las posibles causas son:</p>
<ul>
<li>Cualquier referencia desde fuera de la aplicación a un objeto de la aplicación en la cual haya sido cargada la clase por el cargador de clases de la aplicación, causará una fuga de memoria en el cargador de clases. Habrá que vigilar las referencias.</li>
<li>A veces se produce cuando la aplicación se reinstala en el servidor sin reiniciar el servidor. La forma de reinstalar las aplicaciones es eliminando el classloader que cargó la aplicación por primera vez y creando un nuevo classloader para la nueva instancia de la aplicación.</li>
</ul>
<p>Espero que ésto os ayude como me ha ayudado a mi <img src='http://java.hijodeblog.com/wp-includes/images/smilies/icon_smile.gif' alt="icon smile Solucionando la excepción java.lang.OutOfMemoryError" class='wp-smiley' title="Solucionando la excepción java.lang.OutOfMemoryError" /> </p>
<p>¡Happy coding!</p>
]]></content:encoded>
			<wfw:commentRss>http://java.hijodeblog.com/2012/03/06/solucionando-la-excepcion-java-lang-outofmemoryerror/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Enviando emails desde una aplicación Android</title>
		<link>http://java.hijodeblog.com/2012/02/21/enviando-emails-desde-una-aplicacion-android/#utm_source=feed&#038;utm_medium=feed&#038;utm_campaign=feed</link>
		<comments>http://java.hijodeblog.com/2012/02/21/enviando-emails-desde-una-aplicacion-android/#comments</comments>
		<pubDate>Tue, 21 Feb 2012 11:41:46 +0000</pubDate>
		<dc:creator>Dr. SeROne</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[email]]></category>
		<category><![CDATA[gmail]]></category>

		<guid isPermaLink="false">http://java.hijodeblog.com/?p=101</guid>
		<description><![CDATA[Hoy vamos a enviar un correo electrónico desde nuestra aplicación. Ésto puede ser de mucha utilidad. Por ejemplo, para permitir que nuestros usuarios se pongan en contacto con nostros o nos puedan enviar un log de la aplicación para reportar fallos. Hacerlo es muy sencillo, éste snippet de código lo explica a la perfección: Facil, [...]]]></description>
			<content:encoded><![CDATA[<p>Hoy vamos a enviar un correo electrónico desde nuestra aplicación. Ésto puede ser de mucha utilidad. Por ejemplo, para permitir que nuestros usuarios se pongan en contacto con nostros o nos puedan enviar un log de la aplicación para reportar fallos.</p>
<p>Hacerlo es muy sencillo, éste snippet de código lo explica a la perfección:</p>
<pre class="brush: java; title: ; notranslate">
Intent email = new Intent(android.content.Intent.ACTION_SEND);
email.setType(&quot;plain/text&quot;);

email.putExtra(android.content.Intent.EXTRA_EMAIL, new String[]{&quot;email@email.com&quot;});
email.putExtra(android.content.Intent.EXTRA_SUBJECT, &quot;Asunto de mi correo&quot;);
email.putExtra(android.content.Intent.EXTRA_TEXT, &quot;Texto de mi correo&quot;);

email.putExtra(Intent.EXTRA_STREAM,
	Uri.parse(&quot;file://&quot;+Environment.getExternalStorageDirectory()+&quot;/archivo.txt&quot;));

startActivity(Intent.createChooser(email, &quot;Enviar correo electrónico&quot;));
</pre>
<p>Facil, ¿eh? ¡Happy coding!</p>
<p><img class="aligncenter" src="https://lh4.googleusercontent.com/-2dEhlsMu8z0/T0OET7cVBvI/AAAAAAAAkK4/CsgNftpRHAQ/s256/hi-256-4-f4f3667dfb66514a859a216284211dd72f820799.png" alt="hi 256 4 f4f3667dfb66514a859a216284211dd72f820799 Enviando emails desde una aplicación Android"  title="Enviando emails desde una aplicación Android" /></p>
]]></content:encoded>
			<wfw:commentRss>http://java.hijodeblog.com/2012/02/21/enviando-emails-desde-una-aplicacion-android/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Exploded deploy en JBoss 6 sobre Windows</title>
		<link>http://java.hijodeblog.com/2012/02/08/exploded-deploy-en-jboss-6-sobre-windows/#utm_source=feed&#038;utm_medium=feed&#038;utm_campaign=feed</link>
		<comments>http://java.hijodeblog.com/2012/02/08/exploded-deploy-en-jboss-6-sobre-windows/#comments</comments>
		<pubDate>Wed, 08 Feb 2012 10:46:52 +0000</pubDate>
		<dc:creator>Dr. SeROne</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JBoss]]></category>
		<category><![CDATA[JEE]]></category>
		<category><![CDATA[deploy]]></category>
		<category><![CDATA[errores]]></category>
		<category><![CDATA[jboss]]></category>
		<category><![CDATA[solución de problemas]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://java.hijodeblog.com/?p=98</guid>
		<description><![CDATA[Cuando intento deployar un archivo EAR sobre un JBoss 6 bajo windows, recibo el siguiente error: Leemos aquí lo siguiente: &#8220;Every EAR application should specify a unique string name for the class loader&#8221;. Así que nos pondremos manos a la obra haciendo lo siguiente: El deploy a través de la Admin Console de JBoss sigue [...]]]></description>
			<content:encoded><![CDATA[<p>Cuando intento deployar un archivo EAR sobre un JBoss 6 bajo windows, recibo el siguiente error:</p>
<pre class="brush: java; title: ; notranslate">Failed to create Resource EJEMPLO.ear - cause: java.lang.Exception:Failed to distribute 'file:/XXXX/EJEMPLO.ear' to 'EJEMPLO.ear' - cause: java.lang.RuntimeException:java.io.FileNotFoundException: C:\XXXX\EJEMPLO.ear\META-INF\jboss-app.xml (El sistema no puede encontrar la ruta especificada)</pre>
<p>Leemos <a href="http://docs.jboss.org/jbossas/docs/Getting_Started_Guide/4/html-single/index.html">aquí</a> lo siguiente: &#8220;Every EAR application should specify a unique string name for the class loader&#8221;. Así que nos pondremos manos a la obra haciendo lo siguiente:</p>
<pre class="brush: java; title: ; notranslate">&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;jboss-app&gt;
	&lt;loader-repository&gt;
		EJEMPLO:archive=EJEMPLO.ear
	&lt;/loader-repository&gt;
&lt;/jboss-app&gt;</pre>
<p>El deploy a través de la Admin Console de JBoss sigue fallando. Así que tras otro rato de investigación (Google, qué haría sin ti&#8230;), siguiendo pistas de <a href="https://community.jboss.org/thread/150559">algunos</a> de los <a href="https://community.jboss.org/message/624591">foros</a> de JBoss, probaremos a hacer lo siguiente:</p>
<ul>
<li>Detener JBoss</li>
<li>Descomprimir el archivo ear en el directorio deploy de JBoss, añadiendo la extensión al directorio (es decir, descomprimiremos EJEMPLO.ear al directorio <strong>deploy/EJEMPLO.ear/</strong>).</li>
<li>Descomprimir dentro de ése directorio los archivos de los EBJ y el WAR en directorios con sus respectivas extensiones.</li>
<li>Volver a arrancar JBoss</li>
</ul>
<p>Viendo los logs al iniciar JBoss, vemos que por fin todo se deploya correctamente. Y si modificamos algún recurso, éste se actualiza correctamente sin necesidad de un redeploy <img src='http://java.hijodeblog.com/wp-includes/images/smilies/icon_smile.gif' alt="icon smile Exploded deploy en JBoss 6 sobre Windows" class='wp-smiley' title="Exploded deploy en JBoss 6 sobre Windows" /> </p>
<p>¡Espero que os sirva de ayuda! ¡Happy coding!</p>
]]></content:encoded>
			<wfw:commentRss>http://java.hijodeblog.com/2012/02/08/exploded-deploy-en-jboss-6-sobre-windows/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Solucionando problemas durante el desarrollo: Unable to open sync connection</title>
		<link>http://java.hijodeblog.com/2012/02/01/solucionando-problemas-durante-el-desarrollo-unable-to-open-sync-connection/#utm_source=feed&#038;utm_medium=feed&#038;utm_campaign=feed</link>
		<comments>http://java.hijodeblog.com/2012/02/01/solucionando-problemas-durante-el-desarrollo-unable-to-open-sync-connection/#comments</comments>
		<pubDate>Wed, 01 Feb 2012 15:37:20 +0000</pubDate>
		<dc:creator>Dr. SeROne</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[ayudas]]></category>
		<category><![CDATA[solución de errores]]></category>

		<guid isPermaLink="false">http://java.hijodeblog.com/?p=95</guid>
		<description><![CDATA[Tras un rato de desarrollo en ocasiones el ADB se vuelve un poco loco, y al subir un APK al móvil desde Eclipse recibimos éste error: La solución es sencilla: Quitar el cable USB Desactivar la depuración USB en el móvil y volverla a activar Conectar el cable USB de nuevo Espero que os sirva [...]]]></description>
			<content:encoded><![CDATA[<p>Tras un rato de desarrollo en ocasiones el ADB se vuelve un poco loco, y al subir un APK al móvil desde Eclipse recibimos éste error:</p>
<pre class="brush: java; title: ; notranslate">Unable to open sync connection!</pre>
<p>La solución es sencilla:</p>
<ol>
<li>Quitar el cable USB</li>
<li>Desactivar la depuración USB en el móvil y volverla a activar</li>
<li>Conectar el cable USB de nuevo</li>
</ol>
<p>Espero que os sirva de ayuda. ¡Happy coding <img src='http://java.hijodeblog.com/wp-includes/images/smilies/icon_smile.gif' alt="icon smile Solucionando problemas durante el desarrollo: Unable to open sync connection" class='wp-smiley' title="Solucionando problemas durante el desarrollo: Unable to open sync connection" /> !</p>
]]></content:encoded>
			<wfw:commentRss>http://java.hijodeblog.com/2012/02/01/solucionando-problemas-durante-el-desarrollo-unable-to-open-sync-connection/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Como hacer que una aplicación solicite permisos de superusuario</title>
		<link>http://java.hijodeblog.com/2012/01/18/como-hacer-que-una-aplicacion-solicite-permisos-de-superusuario/#utm_source=feed&#038;utm_medium=feed&#038;utm_campaign=feed</link>
		<comments>http://java.hijodeblog.com/2012/01/18/como-hacer-que-una-aplicacion-solicite-permisos-de-superusuario/#comments</comments>
		<pubDate>Wed, 18 Jan 2012 16:34:06 +0000</pubDate>
		<dc:creator>Dr. SeROne</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[desarrollo]]></category>
		<category><![CDATA[manual]]></category>
		<category><![CDATA[pedir root]]></category>
		<category><![CDATA[superusuario]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://java.hijodeblog.com/?p=93</guid>
		<description><![CDATA[Si tenemos el terminal rooteado podemos hacer muchas tareas interesantes desde nuestras aplicaciones. Pero antes de hacer nada, tenemos que solicitar al usuario los permisos de superusuario. Haremos un método estático par ayudarnos en las tareas de ejecutar cosas como Root: Luego, para solicitar root basta ejecutar cualquier comando, por ejemplo: Inspirado en el código [...]]]></description>
			<content:encoded><![CDATA[<p>Si tenemos el terminal rooteado podemos hacer muchas tareas interesantes desde nuestras aplicaciones. Pero antes de hacer nada, tenemos que solicitar al usuario los permisos de superusuario.</p>
<p>Haremos un método estático par ayudarnos en las tareas de ejecutar cosas como Root:</p>
<pre class="brush: java; title: ; notranslate">
/**
 * Ejecuta un comando como Root
 */
public static boolean ejecutarComoRoot(String comando)
{
	Process p = null;

	try
	{
		// Ejecutamos como SU
		p = Runtime.getRuntime().exec(&quot;su -c &quot;+comando);

		try
		{
			p.waitFor();

			// Comprobamos si somos root
			if (p.exitValue() != 255)
			{
				Log.i(&quot;Serone&quot;, &quot;Comando '&quot;+comando+&quot;' ejecutado como root correctamente <img src='http://java.hijodeblog.com/wp-includes/images/smilies/icon_smile.gif' alt="icon smile Como hacer que una aplicación solicite permisos de superusuario" class='wp-smiley' title="Como hacer que una aplicación solicite permisos de superusuario" /> &quot;);
				return true;
			}
			else
			{
				Log.e(&quot;Serone&quot;, &quot;No somos root, no se puede ejecutar '&quot;+comando+&quot;'...&quot;);
			}
		}
		catch (InterruptedException e)
		{
			Log.e(&quot;Serone&quot;, &quot;No somos root, no se puede ejecutar '&quot;+comando+&quot;'...&quot;, e);
		}
	}
	catch (IOException e)
	{
		Log.e(&quot;Serone&quot;, &quot;No somos root, no se puede ejecutar '&quot;+comando+&quot;'...&quot;, e);
	}

	return false;
}
</pre>
<p>Luego, para solicitar root basta ejecutar cualquier comando, por ejemplo:</p>
<pre class="brush: java; title: ; notranslate">
// Pedimos root (ejecutando un programa cualquiera como superusuario)
Utils.ejecutarComoRoot(&quot;ls&quot;);
</pre>
<p>Inspirado en el código de <a href="http://www.stealthcopter.com/blog/2010/01/android-requesting-root-access-in-your-app/">ésta web</a>.</p>
<p>¡Happy coding!</p>
]]></content:encoded>
			<wfw:commentRss>http://java.hijodeblog.com/2012/01/18/como-hacer-que-una-aplicacion-solicite-permisos-de-superusuario/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
<!-- WP Super Cache is installed but broken. The path to wp-cache-phase1.php in wp-content/advanced-cache.php must be fixed! -->
