<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;Ak4ASXs_eip7ImA9WhRaFE4.&quot;"><id>tag:blogger.com,1999:blog-2250323519968863550</id><updated>2012-02-16T16:35:48.542-08:00</updated><category term="wls" /><category term="android" /><category term="ws" /><category term="soap" /><category term="j2ee" /><category term="ejb3" /><title>Crappy coding</title><subtitle type="html">Eftersom det är poppis att spara prylar man gärna vill komma ihåg på nätet så startar jag också en kodblog.</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://crappycoding.danielsundberg.nu/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://crappycoding.danielsundberg.nu/" /><author><name>Daniel</name><uri>http://www.blogger.com/profile/17073910749558598512</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>11</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/danielsundberg/Pwhl" /><feedburner:info uri="danielsundberg/pwhl" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;DE8HQnwzeSp7ImA9WhRTEks.&quot;"><id>tag:blogger.com,1999:blog-2250323519968863550.post-3528137191897592403</id><published>2011-11-02T13:47:00.000-07:00</published><updated>2011-11-02T13:47:13.281-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-02T13:47:13.281-07:00</app:edited><title>Java på OSX Lion</title><content type="html">&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"&gt;Om man vill köra Java 1.4 eller 1.5 i OSX Lion är det inte mycket att göra åt om man inte råkar komma över en variant av Leopard-tar.gz filerna för dessa.&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"&gt;Sen kan man ju passa på att stoppa in dessa i OSX Frameworkkatalog och länka till dessa istället för att låta länkarna peka på 1.6. &amp;nbsp;&lt;/span&gt;&lt;div&gt;
&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;div&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;tar xzvf java.1.4.2-leopard.tar.gz&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;sudo mv 1.4.2 /System/Library/Frameworks/JavaVM.framework/Versions/1.4.2-leopard&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;sudo rm /System/Library/Frameworks/JavaVM.framework/Versions/1.4&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;sudo rm /System/Library/Frameworks/JavaVM.framework/Versions/1.4.2&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;sudo ln -s /System/Library/Frameworks/JavaVM.framework/Versions/1.4.2-leopard/ /System/Library/Frameworks/JavaVM.framework/Versions/1.4.2&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;sudo ln -s /System/Library/Frameworks/JavaVM.framework/Versions/1.4.2 /System/Library/Frameworks/JavaVM.framework/Versions/1.4.2&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;tar xzvf java.1.5.0-leopard.tar.gz&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;sudo mv 1.5.0 /System/Library/Frameworks/JavaVM.framework/Versions/1.5.0-leopard&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;sudo rm /System/Library/Frameworks/JavaVM.framework/Versions/1.5&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;sudo rm /System/Library/Frameworks/JavaVM.framework/Versions/1.5.0&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;sudo ln -s /System/Library/Frameworks/JavaVM.framework/Versions/1.5.0-leopard /System/Library/Frameworks/JavaVM.framework/Versions/1.5.0&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;sudo ln -s /System/Library/Frameworks/JavaVM.framework/Versions/1.5.0 /System/Library/Frameworks/JavaVM.framework/Versions/1.5&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"&gt;... och bob är din onkel.&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2250323519968863550-3528137191897592403?l=crappycoding.danielsundberg.nu' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/FRMthCSPUvNZvorbPN8YBjE-_pE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/FRMthCSPUvNZvorbPN8YBjE-_pE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/FRMthCSPUvNZvorbPN8YBjE-_pE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/FRMthCSPUvNZvorbPN8YBjE-_pE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/danielsundberg/Pwhl/~4/323USdVsjKA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://crappycoding.danielsundberg.nu/feeds/3528137191897592403/comments/default" title="Kommentarer till inlägget" /><link rel="replies" type="text/html" href="http://crappycoding.danielsundberg.nu/2011/11/java-pa-osx-lion.html#comment-form" title="0 kommentarer" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2250323519968863550/posts/default/3528137191897592403?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2250323519968863550/posts/default/3528137191897592403?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/danielsundberg/Pwhl/~3/323USdVsjKA/java-pa-osx-lion.html" title="Java på OSX Lion" /><author><name>Daniel</name><uri>http://www.blogger.com/profile/17073910749558598512</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://crappycoding.danielsundberg.nu/2011/11/java-pa-osx-lion.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0MEQXo4eCp7ImA9WhdUGU4.&quot;"><id>tag:blogger.com,1999:blog-2250323519968863550.post-6951139610625846611</id><published>2011-10-06T15:12:00.000-07:00</published><updated>2011-10-06T15:16:40.430-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-06T15:16:40.430-07:00</app:edited><title>Oracle XA</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://www.nalsoft.net/images/oracle_db.gif" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://www.nalsoft.net/images/oracle_db.gif" /&gt;&lt;/a&gt;&lt;/div&gt;
Eftersom det visade sig vara så att man måste granta rättigheter för att köra XA transaktioner på en Oracledatabas från en jboss så passar jag på att påminna mig själv om att det krävs för din dbuser som jag ska köra med från appservern.&lt;br /&gt;
Om man inte gör det dyker detta mysiga felmeddelande upp som en varning i loggen med cirka 3 minuters mellanrum.&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;2011-10-06 23:31:45,099 WARN &amp;nbsp;[com.arjuna.ats.jta.logging.loggerI18N] (Thread-12) [com.arjuna.ats.internal.jta.recovery.xarecovery1] Local XARecoveryModule.xaRecovery &amp;nbsp;got XA exception javax.transaction.xa.XAException, XAException.XAER_RMERR&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Så passa på du med, granta dig själv till en bättre värld.&lt;br /&gt;
&lt;span class="Apple-style-span" style="background-color: white; color: #333333; font-family: monospace; font-size: 11px; line-height: 16px;"&gt;GRANT SELECT ON sys.dba_pending_transactions TO &amp;lt;dbuser&amp;gt;;&lt;br /&gt;GRANT SELECT ON sys.pending_trans$ TO &amp;lt;dbuser&amp;gt;;&lt;br /&gt;GRANT SELECT ON sys.dba_2pc_pending TO &amp;lt;dbuser&amp;gt;;&lt;br /&gt;GRANT EXECUTE ON sys.dbms_system TO &amp;lt;dbuser&amp;gt;;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2250323519968863550-6951139610625846611?l=crappycoding.danielsundberg.nu' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/0e-RIPOfsCtO04xQhXJFmJmjhcI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/0e-RIPOfsCtO04xQhXJFmJmjhcI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/0e-RIPOfsCtO04xQhXJFmJmjhcI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/0e-RIPOfsCtO04xQhXJFmJmjhcI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/danielsundberg/Pwhl/~4/ay7A3BHKnhY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://crappycoding.danielsundberg.nu/feeds/6951139610625846611/comments/default" title="Kommentarer till inlägget" /><link rel="replies" type="text/html" href="http://crappycoding.danielsundberg.nu/2011/10/oracle-xa.html#comment-form" title="0 kommentarer" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2250323519968863550/posts/default/6951139610625846611?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2250323519968863550/posts/default/6951139610625846611?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/danielsundberg/Pwhl/~3/ay7A3BHKnhY/oracle-xa.html" title="Oracle XA" /><author><name>Daniel</name><uri>http://www.blogger.com/profile/17073910749558598512</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://crappycoding.danielsundberg.nu/2011/10/oracle-xa.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0IBQHg-eSp7ImA9WhZTGUs.&quot;"><id>tag:blogger.com,1999:blog-2250323519968863550.post-6237301691678765316</id><published>2011-03-23T08:59:00.001-07:00</published><updated>2011-03-24T03:12:31.651-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-24T03:12:31.651-07:00</app:edited><title>Hotswappa sessioncontext i en ejb2-böna med spring.</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.springsource.com/files/uploads/all/images/product/Logo_Spring_252x150.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="50" src="http://www.springsource.com/files/uploads/all/images/product/Logo_Spring_252x150.png" /&gt;&lt;/a&gt;&lt;/div&gt;Eftersom jag för andra gången glömde bort hur man sätter upp en fin liten hotswappable target source för att swappa in sessionskontextet i en gammal böna tänkte jag att jag lägger upp en liten komihåg på det nu.&lt;br /&gt;
&lt;br /&gt;
Först tar vi och lägger till ett target i sessionsbönan vi ska swappa den från:&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;public class Bean extends AbstractStatelessSessionBean implements SessionBean {&lt;br /&gt;
private HotSwappableTargetSource sessionContextTarget;&lt;br /&gt;
protected void onEjbCreate() throws CreateException {&lt;br /&gt;
BeanFactory beanFactory = getBeanFactory();&lt;br /&gt;
sessionContextTarget = = (HotSwappableTargetSource) beanFactory.getBean("hotswappableSessionContext");&lt;br /&gt;
}&lt;br /&gt;
}&lt;/blockquote&gt;&lt;br /&gt;
samt att vi lägger till själva swappen i set-metoden: &lt;br /&gt;
&lt;blockquote&gt;@Override&lt;br /&gt;
public void setSessionContext(SessionContext sessionContext) {&lt;br /&gt;
super.setSessionContext(sessionContext);&lt;br /&gt;
this.sessionContextTarget.swap(sessionContext);&lt;br /&gt;
}&lt;/blockquote&gt;&lt;br /&gt;
Därefer passar vi på att konfigurera den i springxmlen,&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;&amp;lt;bean id="sessionContextBean" class="nu.danielsundberg.FejkSessionContext"/&amp;gt;&lt;br /&gt;
&amp;lt;bean id="hotswappableSessionContext" class="org.springframework.aop.target.HotSwappableTargetSource"&amp;gt;&lt;br /&gt;
&amp;lt;constructor-arg&amp;gt;&amp;lt;ref local="sessionContextBean"/&amp;gt;&amp;lt;/constructor-arg&amp;gt;&lt;br /&gt;
&amp;lt;/bean&amp;gt;&amp;nbsp;&lt;/blockquote&gt;&lt;br /&gt;
lägger till den injectad i vår andra böna vi vill ha access till contextet i &lt;br /&gt;
&lt;blockquote&gt;&amp;lt;property name="sessionsContext"&amp;gt;&lt;br /&gt;
&amp;lt;ref local="sessionContextBean"/&amp;gt;&lt;br /&gt;
&amp;lt;/property&amp;gt;&lt;/blockquote&gt;och avslutar med att lägga till den i mottagande bönan.&lt;br /&gt;
&lt;blockquote&gt;private SessionContext sessionsContext;&lt;br /&gt;
public void setSessionsContext(SessionContext sessionsContext) {&lt;br /&gt;
this.sessionsContext = sessionsContext;&lt;br /&gt;
}&lt;/blockquote&gt;&lt;br /&gt;
Och bob är min onkel.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2250323519968863550-6237301691678765316?l=crappycoding.danielsundberg.nu' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/8h7xf_NHJiKLnxS0gFumC2ptN28/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/8h7xf_NHJiKLnxS0gFumC2ptN28/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/8h7xf_NHJiKLnxS0gFumC2ptN28/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/8h7xf_NHJiKLnxS0gFumC2ptN28/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/danielsundberg/Pwhl/~4/6HU_ojIelzI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://crappycoding.danielsundberg.nu/feeds/6237301691678765316/comments/default" title="Kommentarer till inlägget" /><link rel="replies" type="text/html" href="http://crappycoding.danielsundberg.nu/2011/03/hotswappa-sessioncontext-i-en-ejb2-bona.html#comment-form" title="0 kommentarer" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2250323519968863550/posts/default/6237301691678765316?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2250323519968863550/posts/default/6237301691678765316?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/danielsundberg/Pwhl/~3/6HU_ojIelzI/hotswappa-sessioncontext-i-en-ejb2-bona.html" title="Hotswappa sessioncontext i en ejb2-böna med spring." /><author><name>Daniel</name><uri>http://www.blogger.com/profile/17073910749558598512</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://crappycoding.danielsundberg.nu/2011/03/hotswappa-sessioncontext-i-en-ejb2-bona.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkUGQXo7eyp7ImA9Wx5bFks.&quot;"><id>tag:blogger.com,1999:blog-2250323519968863550.post-6582031523005178438</id><published>2010-11-01T18:10:00.000-07:00</published><updated>2010-11-01T18:10:20.403-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-01T18:10:20.403-07:00</app:edited><title>@Hide på metoder i Android</title><content type="html">Efter att ha letat oavbrutet i ungefär 2 timmar efter vettiga (eller på något sätt befintliga) sätt att tjuvtitta på en befintlig ström mot Audioslinger (Androids underliggande tjusiga ramverk som skjuter data på ljudhårdvaran) som man inte skapat själv i Androids medialibbar så har jag kommit fram till följande.&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Androids medialibbar suger hästdelar.&lt;/li&gt;
&lt;li&gt;Allt bra "kommer sen" (i det här fallet Open AL och mer native-nära funktioner)&lt;/li&gt;
&lt;/ol&gt;&lt;br /&gt;
Så tills vidare trodde jag förstås att jag var, som undomarna säger idag, rökt. Men av en magisk slump (eller idogt googlande) landade jag på implementationen av de medföljande visualiseringarna av musik i Androidkällkoden, där en metod med namnet "snoop"användes flitigt på mediaspelarklassen som jag ansåg vara värd en extra titt. Efter att ha förundrats över det faktum att jag tydligen inte kunde anropa denna fina metod (eller ens bevisa dess existens i min utvecklingsmiljö) fick jag en snabb lektion i en annotering med det snillrika namnet @Hide. Denna annotering används på metoder som inte anses vara dokumenterbar/förvaltningsbar i Androids källkod (men förmodligen kommer att bli det iom att den finns kvar). Eftersom jag inte har lust att kompilera några stubbar/bygga om Androidprylar från source kom jag raskt att tänka på perfektionen i att reflektera. Så utan mera omsvävningar, här kommer hur du anropar en metod i Android (förslagsvis snoopmetoden på MediaPlayer i det här fallet) på ett mer eller mindre tjusigt sätt tills den slutar gömmas:&lt;br /&gt;
&lt;blockquote&gt;&lt;span class="Apple-style-span" style="color: purple;"&gt;short&lt;/span&gt; [] mVizData = &lt;span class="Apple-style-span" style="color: purple;"&gt;new&lt;/span&gt; &lt;span class="Apple-style-span" style="color: purple;"&gt;short&lt;/span&gt;[1024];&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: purple;"&gt;try&lt;/span&gt; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;Class&amp;lt;MediaPlayer&amp;gt;&lt;mediaplayer&gt; myEvilMediaPlayer = (Class&amp;lt;MediaPlayer&amp;gt;&lt;mediaplayer&gt;) Class.forName(MediaPlayer.class.getName());&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;span class="Apple-style-span" style="color: purple;"&gt;try&lt;/span&gt; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;Class[] parameterTypes = &lt;span class="Apple-style-span" style="color: purple;"&gt;new&lt;/span&gt; Class[] {&lt;span class="Apple-style-span" style="color: purple;"&gt;short&lt;/span&gt;[].class, &lt;span class="Apple-style-span" style="color: purple;"&gt;int&lt;/span&gt;.class};&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;Method snoop = myEvilMediaPlayer.getMethod(&lt;span class="Apple-style-span" style="color: blue;"&gt;"snoop"&lt;/span&gt;, parameterTypes);&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;snoop.setAccessible(&lt;span class="Apple-style-span" style="color: purple;"&gt;true&lt;/span&gt;);&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;Object[] arguments = &lt;span class="Apple-style-span" style="color: purple;"&gt;new&lt;/span&gt; Object[2];&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;arguments[0] = mVizData;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;arguments[1] = 0;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span class="Apple-style-span" style="color: purple;"&gt;int&lt;/span&gt; x = (Integer) snoop.invoke(myEvilMediaPlayer, arguments);&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;System.out.println(x); &lt;br /&gt;
&amp;nbsp;&amp;nbsp;} &lt;span class="Apple-style-span" style="color: purple;"&gt;catch&lt;/span&gt; (SecurityException e) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;e.printStackTrace();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;} &lt;span class="Apple-style-span" style="color: purple;"&gt;catch&lt;/span&gt; (NoSuchMethodException e) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;e.printStackTrace();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;} &lt;span class="Apple-style-span" style="color: purple;"&gt;catch&lt;/span&gt; (IllegalArgumentException e) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;e.printStackTrace();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;} &lt;span class="Apple-style-span" style="color: purple;"&gt;catch&lt;/span&gt; (IllegalAccessException e) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;e.printStackTrace();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;} &lt;span class="Apple-style-span" style="color: purple;"&gt;catch&lt;/span&gt; (InvocationTargetException e) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;e.printStackTrace();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;} &lt;br /&gt;
} &lt;span class="Apple-style-span" style="color: purple;"&gt;catch&lt;/span&gt; (ClassNotFoundException e) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;e.printStackTrace();&lt;br /&gt;
}&lt;br /&gt;
&lt;/mediaplayer&gt;&lt;/mediaplayer&gt;&lt;/blockquote&gt;In your face @Hide annoteringen, det där är vad man får om man försöker gömma metoder för folk.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2250323519968863550-6582031523005178438?l=crappycoding.danielsundberg.nu' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/aArTTRI9oci2tiz9y7J5Vo4fHZE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/aArTTRI9oci2tiz9y7J5Vo4fHZE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/aArTTRI9oci2tiz9y7J5Vo4fHZE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/aArTTRI9oci2tiz9y7J5Vo4fHZE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/danielsundberg/Pwhl/~4/P7J-frBFmbc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://crappycoding.danielsundberg.nu/feeds/6582031523005178438/comments/default" title="Kommentarer till inlägget" /><link rel="replies" type="text/html" href="http://crappycoding.danielsundberg.nu/2010/11/hide-pa-metoder-i-android.html#comment-form" title="2 kommentarer" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2250323519968863550/posts/default/6582031523005178438?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2250323519968863550/posts/default/6582031523005178438?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/danielsundberg/Pwhl/~3/P7J-frBFmbc/hide-pa-metoder-i-android.html" title="@Hide på metoder i Android" /><author><name>Daniel</name><uri>http://www.blogger.com/profile/17073910749558598512</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>2</thr:total><feedburner:origLink>http://crappycoding.danielsundberg.nu/2010/11/hide-pa-metoder-i-android.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Dk8GQnoycSp7ImA9Wx5UFUg.&quot;"><id>tag:blogger.com,1999:blog-2250323519968863550.post-5604833767816630891</id><published>2010-10-19T23:07:00.000-07:00</published><updated>2010-10-19T23:07:03.499-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-19T23:07:03.499-07:00</app:edited><title>Ternary operators i Java</title><content type="html">Okej, jag kan vara lätt kod-fascistisk ibland, och jag uppskattar ett fläskigt syntax-solo lika mycket som the next nerd, men ternary operators, eller shorthand eller the child ny any other name osv borde avskaffas omedelbart i kod som skall läsas av många människor. Jag är ju ogärna gnällig men efter att ha stött på detta fenomen som kräver massor av tid varje gång av mig (eftersom det inte är direkt uppenbart vad ditt statement gör så måste jag naturligtvis läsa det och tolka det) så tänkte jag att jag bloggar en liten kommihåglapp så jag kan översätta snabbare.&lt;br /&gt;
&lt;br /&gt;
Ta exemplet&lt;br /&gt;
&lt;blockquote&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;minVal = (a &amp;lt; b) ? a : b;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/blockquote&gt;där vi trivialt sätter det minsta av 2 värden (a och b då i det här fallet) till minVal. Motsvarande vanlig ifsats borde typiskt vara&lt;br /&gt;
&lt;blockquote&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;if ( a &amp;lt; b ) { minVal = a; } else { minVal = b; }&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/blockquote&gt;men det är ju helt förkastligt att skriva om man vill imponera på folk med sin syntax-skill. Vilket natruligtvis är häftigt i nördsammanhang där och då, men när nyanställda putte ska laga ett PMD-fel från cruisecontrollen och hittar en lång jäkla harrang som han inte riktigt hänger med i så öppnar man ju upp för skapande av ett fel i koden som enbart beror på att man inte kunde kamma sig och skriva en vanlig bond-ifsats istället.&lt;br /&gt;
&lt;br /&gt;
Naturligtvis är det inte fel att använda denna fina funktion som Sun stoppat in i specen, men jag skulle säga att det nog kan tänkas vara moraliskt snarare än tekniskt. Generellt så funkar det iaf så här&lt;br /&gt;
&lt;blockquote&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;resultat = test ? värde1 : värde2;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/blockquote&gt;eller med if/else&lt;br /&gt;
&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;if ( test ) { resultat = värde1; } else { resultat = värde2; }&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/blockquote&gt;så det är ju förstås inte helt svårt när man väl vänjer sig. Ett bra exempel taget ur vanliga livet (något förvanskat förstås men ändå) är följande.&lt;br /&gt;
&lt;div class="p1"&gt; &lt;/div&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;Iterable&amp;lt;Grupp&amp;gt;&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;kanskeTom&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&amp;nbsp;=&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;listaMedPoster&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;.iterator().hasNext() ?&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;listaMedPoster&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&amp;nbsp;: Arrays.asList(Grupp.&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;span class="s1"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;EMPTY&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;);&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;
&lt;div class="p1"&gt;och efter en städning (fick PMD-warnings på raden)&lt;/div&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;Iterable&amp;lt;Grupp&amp;gt; kanskeTom = &lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;span class="s1"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;null&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;;&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&amp;nbsp;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="s1"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;if&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;(listaMedPoster.iterator().hasNext()) {&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&amp;nbsp;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;kanskeTom&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&amp;nbsp;=&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;listaMedPoster&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;;&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&amp;nbsp;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;} &lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;span class="s1"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;else&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt; {&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&amp;nbsp;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;kanskeTom&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&amp;nbsp;= Arrays.asList(Grupp.&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;span class="s2"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;EMPTY&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;);&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&amp;nbsp;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;}&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/blockquote&gt;så nästa gång du funderar på att köra shorthand, tänk på mig som istället för att skumma igenom din kod kommer behöva tänka flera sekunder till på din ifsats.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2250323519968863550-5604833767816630891?l=crappycoding.danielsundberg.nu' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/6hUWdvU_bXyYr8tjfSmAWkEpjm4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/6hUWdvU_bXyYr8tjfSmAWkEpjm4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/6hUWdvU_bXyYr8tjfSmAWkEpjm4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/6hUWdvU_bXyYr8tjfSmAWkEpjm4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/danielsundberg/Pwhl/~4/5ejRpV7PltU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://crappycoding.danielsundberg.nu/feeds/5604833767816630891/comments/default" title="Kommentarer till inlägget" /><link rel="replies" type="text/html" href="http://crappycoding.danielsundberg.nu/2010/10/ternary-operators-i-java.html#comment-form" title="2 kommentarer" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2250323519968863550/posts/default/5604833767816630891?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2250323519968863550/posts/default/5604833767816630891?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/danielsundberg/Pwhl/~3/5ejRpV7PltU/ternary-operators-i-java.html" title="Ternary operators i Java" /><author><name>Daniel</name><uri>http://www.blogger.com/profile/17073910749558598512</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>2</thr:total><feedburner:origLink>http://crappycoding.danielsundberg.nu/2010/10/ternary-operators-i-java.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkABQHg_cCp7ImA9Wx5VFUw.&quot;"><id>tag:blogger.com,1999:blog-2250323519968863550.post-211179663329437426</id><published>2010-10-07T23:19:00.000-07:00</published><updated>2010-10-07T23:19:11.648-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-07T23:19:11.648-07:00</app:edited><title>Android och IPSec/L2TP på Ubuntu.</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.openswan.org/gfx/openswan.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://www.openswan.org/gfx/openswan.png" width="80" /&gt;&lt;/a&gt;&lt;/div&gt;Efter att ha trollat med att sätta upp en VPN som min telefon kan använda kan jag lätt konstatera att det inte fanns så där jättemånga "bra" howtos på teh internets. Så här gjorde jag.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;1. Installera/configurera Openswan&lt;/b&gt;&lt;br /&gt;
För att kryptera IP-paketen vill vi installera Openswan som tillhandahåller kryptering och autentifiering för att skeppa paket mellan din enhet och din server. Här kör alla Openswan så det gjorde jag med.&lt;br /&gt;
&lt;blockquote&gt;&lt;i&gt;sudo aptitude install openswan&lt;/i&gt;&lt;/blockquote&gt;&lt;br /&gt;
och därefter så passade jag på att stoppa in följande i min &lt;i&gt;/etc/ipsec.conf&lt;/i&gt; :&lt;br /&gt;
&lt;blockquote&gt;&lt;i&gt;&lt;br /&gt;
version 2.0&lt;br /&gt;
config setup&lt;br /&gt;
nat_traversal=yes&lt;br /&gt;
virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/12&lt;br /&gt;
oe=off&lt;br /&gt;
protostack=netkey&lt;br /&gt;
&lt;br /&gt;
conn L2TP-PSK-NAT&lt;br /&gt;
rightsubnet=vhost:%priv&lt;br /&gt;
also=L2TP-PSK-noNAT&lt;br /&gt;
&lt;br /&gt;
conn L2TP-PSK-noNAT&lt;br /&gt;
authby=secret&lt;br /&gt;
pfs=no&lt;br /&gt;
auto=add&lt;br /&gt;
keyingtries=3&lt;br /&gt;
rekey=no&lt;br /&gt;
ikelifetime=8h&lt;br /&gt;
keylife=1h&lt;br /&gt;
type=transport&lt;br /&gt;
left=&lt;b&gt;VPNSERVERNS.INTERNA.IP&lt;/b&gt;&lt;br /&gt;
leftprotoport=17/1701&lt;br /&gt;
right=%any&lt;br /&gt;
rightprotoport=17/%any&lt;br /&gt;
&lt;/i&gt;&lt;/blockquote&gt;&lt;br /&gt;
och passade därefter på att sätta lösenordet för att kryptera paket in till mitt fina intranät genom att skriva följande i min &lt;i&gt;/etc/ipsec.secrets&lt;/i&gt; :&lt;br /&gt;
&lt;blockquote&gt;&lt;i&gt;&lt;br /&gt;
&lt;b&gt;VPNSERVERNS.INTERNA.IP&lt;/b&gt;   %any:  PSK &lt;b&gt;MITT LÖSENORD&lt;/b&gt;&lt;br /&gt;
&lt;/i&gt;&lt;/blockquote&gt;&lt;br /&gt;
och eftersom Openswan gnällde en hel massa på diverse så passade jag på att köra följande kommando i mitt fina shell :&lt;br /&gt;
&lt;blockquote&gt;&lt;i&gt;&lt;br /&gt;
for each in /proc/sys/net/ipv4/conf/*&lt;br /&gt;
do&lt;br /&gt;
echo 0 &amp;gt; $each/accept_redirects&lt;br /&gt;
echo 0 &amp;gt; $each/send_redirects&lt;br /&gt;
done&lt;br /&gt;
&lt;/i&gt;&lt;/blockquote&gt;&lt;br /&gt;
och därefter så verifierade jag att allt var ok och därefter starta om Openswan genom att yppa de magiska orden (tillsammans med en magisk gest) :&lt;br /&gt;
&lt;blockquote&gt;&lt;i&gt;&lt;br /&gt;
sudo ipsec verify&lt;br /&gt;
sudo /etc/init.d/ipsec restart&lt;br /&gt;
&lt;/i&gt;&lt;/blockquote&gt;&lt;br /&gt;
Om man har lust att se vad som händer så visas helt magiskt allt som händer i detta sammanhang i loggen &lt;i&gt;/var/log/syslog&lt;/i&gt;. Leta efter det magiska &lt;i&gt;IPSec connection established&lt;/i&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;2. Installera/konfigurera L2TP&lt;/b&gt;&lt;br /&gt;
L2TP är alltså delen som tunnlar data från din klient till ditt säkra nät. Det krypterar inte och det autentifierar inte (vilket är typ anledningen till att man måste köra IPSec framför, vilket alla, läs microsoft och apple, undviker att tänka på). &lt;br /&gt;
&lt;br /&gt;
Hur som helst, installera paketet xl2tp från en apt nära dig :&lt;br /&gt;
&lt;blockquote&gt;&lt;i&gt;&lt;br /&gt;
sudo aptitude install xl2tpd&lt;br /&gt;
&lt;/i&gt;&lt;/blockquote&gt;&lt;br /&gt;
och konfigurera i en trevlig fil som heter &lt;i&gt;/etc/xl2tpd/xl2tpd.conf&lt;/i&gt; :&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;&lt;i&gt;&lt;br /&gt;
[global]&lt;br /&gt;
ipsec saref = yes&lt;br /&gt;
&lt;br /&gt;
[lns default]&lt;br /&gt;
ip range = 10.1.2.2-10.1.2.255&lt;br /&gt;
local ip = 10.1.2.1&lt;br /&gt;
refuse chap = yes&lt;br /&gt;
refuse pap = yes&lt;br /&gt;
require authentication = yes&lt;br /&gt;
ppp debug = yes&lt;br /&gt;
pppoptfile = &lt;b&gt;/etc/ppp/options.xl2tpd&lt;/b&gt;&lt;br /&gt;
length bit = yes&lt;br /&gt;
&lt;/i&gt;&lt;/blockquote&gt;&lt;br /&gt;
Där alltså ip range betyder vilken range dina devices kommer få addresser i och local ip är vilken address som "vpn-adaptern" på servern kommer att få. Bra att inte sätta den i ranget som devices får ip av kan tilläggas. &lt;br /&gt;
&lt;br /&gt;
Därefter passar vi på att (som vi just konfigurerade) sätta ppp-options i filen &lt;i&gt;/etc/ppp/options.xl2tpd&lt;/i&gt; vilket osökt för oss in i nästa steg.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;3. Installera/konfigurera PPP&lt;/b&gt;&lt;br /&gt;
Vi vill förstås ha nått som hanterar användarna, och till det väljer vi PPP. &lt;br /&gt;
&lt;blockquote&gt;&lt;i&gt;&lt;br /&gt;
sudo aptitude install ppp&lt;br /&gt;
&lt;/i&gt;&lt;/blockquote&gt;&lt;br /&gt;
som vi konfigurerar i ovan nämnda fil &lt;i&gt;/etc/ppp/options.xl2tpd&lt;/i&gt; :&lt;br /&gt;
&lt;blockquote&gt;&lt;i&gt;&lt;br /&gt;
require-mschap-v2&lt;br /&gt;
ms-dns 8.8.8.8&lt;br /&gt;
ms-dns 8.8.4.4&lt;br /&gt;
asyncmap 0&lt;br /&gt;
auth&lt;br /&gt;
crtscts&lt;br /&gt;
lock&lt;br /&gt;
hide-password&lt;br /&gt;
modem&lt;br /&gt;
debug&lt;br /&gt;
name l2tpd&lt;br /&gt;
proxyarp&lt;br /&gt;
lcp-echo-interval 30&lt;br /&gt;
lcp-echo-failure 4&lt;br /&gt;
&lt;/i&gt;&lt;/blockquote&gt;&lt;br /&gt;
och eftersom vi nu är på den så kallade "home strech" så passar vi på att lägga till ett lösenord för användaren vi tänkte oss använda när vi loggar in (man har alltså ett username/password och en delad "secret" till nätet, typ som WLAN men bättre). Detta görs med fördel i filen &lt;i&gt;/etc/ppp/chap-secrets&lt;/i&gt; :&lt;br /&gt;
&lt;blockquote&gt;&lt;i&gt;&lt;br /&gt;
# user      server      password            ip&lt;br /&gt;
test        l2tpd       testpassword        *&lt;br /&gt;
&lt;/i&gt;&lt;/blockquote&gt;&lt;br /&gt;
och därefter passar vi på att starta om l2tp-demonen :&lt;br /&gt;
&lt;blockquote&gt;&lt;i&gt;&lt;br /&gt;
sudo /etc/init.d/xl2tpd restart&lt;br /&gt;
&lt;/i&gt;&lt;/blockquote&gt;&lt;br /&gt;
&lt;b&gt;4. Routing, the final frontier.&lt;/b&gt;&lt;br /&gt;
Nu borde allt vara friden och fröjden, men det är det inte direkt eftersom man inte kommer åt nått utanför intranätet. Detta känns lite tråkigt eftersom hela poängen med vpn för mig är att kunna verka komma hemmifrån. En liten lätt routingförändring i iptables löser biffen :&lt;br /&gt;
&lt;blockquote&gt;&lt;i&gt;&lt;br /&gt;
iptables --table nat --append POSTROUTING --jump MASQUERADE&lt;br /&gt;
echo 1 &amp;gt; /proc/sys/net/ipv4/ip_forward&lt;br /&gt;
&lt;/i&gt;&lt;/blockquote&gt;&lt;br /&gt;
och därefter är du good to go. Ett litet aber är förstås att om man kör debianpaketet för openswan från ubunturepot t.ex. så leker den inte bra nog med xl2tp på grund av versionsförbistringar, så att köra med en OSX-baserad klient funkar obra, men androidtelefoner verkar kirra biffen. Lösningen är enligt uppsago att kompilera en nyare version av openswan men det skiter jag i just nu. &lt;br /&gt;
&lt;br /&gt;
Cheers. Skål och tack för en till.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2250323519968863550-211179663329437426?l=crappycoding.danielsundberg.nu' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/gUP5e2kvUsss5ugMp7XslERrf5g/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/gUP5e2kvUsss5ugMp7XslERrf5g/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/gUP5e2kvUsss5ugMp7XslERrf5g/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/gUP5e2kvUsss5ugMp7XslERrf5g/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/danielsundberg/Pwhl/~4/mnDD3mthTDo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://crappycoding.danielsundberg.nu/feeds/211179663329437426/comments/default" title="Kommentarer till inlägget" /><link rel="replies" type="text/html" href="http://crappycoding.danielsundberg.nu/2010/10/android-och-ipsecl2tp-pa-ubuntu.html#comment-form" title="0 kommentarer" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2250323519968863550/posts/default/211179663329437426?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2250323519968863550/posts/default/211179663329437426?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/danielsundberg/Pwhl/~3/mnDD3mthTDo/android-och-ipsecl2tp-pa-ubuntu.html" title="Android och IPSec/L2TP på Ubuntu." /><author><name>Daniel</name><uri>http://www.blogger.com/profile/17073910749558598512</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://crappycoding.danielsundberg.nu/2010/10/android-och-ipsecl2tp-pa-ubuntu.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkUMQH8yfyp7ImA9Wx5SE0U.&quot;"><id>tag:blogger.com,1999:blog-2250323519968863550.post-1090284461725687832</id><published>2010-08-09T12:54:00.000-07:00</published><updated>2010-08-09T13:04:41.197-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-08-09T13:04:41.197-07:00</app:edited><title>Android ListPreference stuff.</title><content type="html">Okej, så efter att ha fått nullpointer en hel kväll och tillslut googlat lite så visar det sig att Androids ListPreference inte kan kombinera string-array med integer-array. Inte så smidigt när man vill spara en int med ett namn typ. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dvs:&lt;br /&gt;
&lt;br /&gt;
&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;lt;resources&amp;gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;lt;string-array name="entries"&amp;gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;lt;item&amp;gt;En minut&amp;lt;/item&amp;gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;lt;item&amp;gt;Två minuter&amp;lt;/item&amp;gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;lt;item&amp;gt;Tre minuter&amp;lt;/item&amp;gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;lt;item&amp;gt;Tio minuter&amp;lt;/item&amp;gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;lt;/string-array&amp;gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;lt;integer-array name="entry_values"&amp;gt; &lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;lt;item&amp;gt;1&amp;lt;/item&amp;gt; &lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;lt;item&amp;gt;2&amp;lt;/item&amp;gt; &lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;lt;item&amp;gt;3&amp;lt;/item&amp;gt; &lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;lt;item&amp;gt;10&amp;lt;/item&amp;gt; &lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;lt;/integer-array&amp;gt; &lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;lt;/resources&amp;gt; &lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
fungerar inte, så istället får man göra en &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;lt;resources&amp;gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;lt;string-array name="entries"&amp;gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;lt;item&amp;gt;En minut&amp;lt;/item&amp;gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;lt;item&amp;gt;Två minuter&amp;lt;/item&amp;gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;lt;item&amp;gt;Tre minuter&amp;lt;/item&amp;gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;lt;item&amp;gt;Tio minuter&amp;lt;/item&amp;gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;lt;/string-array&amp;gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;lt;string-array name="entry_values"&amp;gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;lt;item&amp;gt;1&amp;lt;/item&amp;gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;lt;item&amp;gt;2&amp;lt;/item&amp;gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;lt;item&amp;gt;3&amp;lt;/item&amp;gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;lt;item&amp;gt;10&amp;lt;/item&amp;gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;lt;/string-array&amp;gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;lt;/resources&amp;gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Kanske kan detta inlägg få mig att slippa jäklas lika länge nästa gång. :P&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2250323519968863550-1090284461725687832?l=crappycoding.danielsundberg.nu' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/9wMjkTVV0_BgmiyEtj2ikYqgZ5Q/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/9wMjkTVV0_BgmiyEtj2ikYqgZ5Q/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/9wMjkTVV0_BgmiyEtj2ikYqgZ5Q/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/9wMjkTVV0_BgmiyEtj2ikYqgZ5Q/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/danielsundberg/Pwhl/~4/trsGfCe6_NY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://crappycoding.danielsundberg.nu/feeds/1090284461725687832/comments/default" title="Kommentarer till inlägget" /><link rel="replies" type="text/html" href="http://crappycoding.danielsundberg.nu/2010/08/android-listpreference-stuff.html#comment-form" title="0 kommentarer" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2250323519968863550/posts/default/1090284461725687832?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2250323519968863550/posts/default/1090284461725687832?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/danielsundberg/Pwhl/~3/trsGfCe6_NY/android-listpreference-stuff.html" title="Android ListPreference stuff." /><author><name>Daniel</name><uri>http://www.blogger.com/profile/17073910749558598512</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://crappycoding.danielsundberg.nu/2010/08/android-listpreference-stuff.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUIGRHc4fCp7ImA9WxFUE0U.&quot;"><id>tag:blogger.com,1999:blog-2250323519968863550.post-5531954902287971103</id><published>2010-06-24T06:52:00.000-07:00</published><updated>2010-06-24T06:52:05.934-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-06-24T06:52:05.934-07:00</app:edited><title>Sensors i android.</title><content type="html">Android är ett hejjigt operativ och nu när jag behöver komma ihåg hur man kommer åt sensorerna postar vi lite sånt.&lt;br /&gt;
&lt;br /&gt;
Först behöver man registrera sin listner hos sensormanagern (förslagsvis i onCreate):&lt;br /&gt;
&lt;blockquote&gt;SensorManager sm;&lt;br /&gt;
sm = (SensorManager) getSystemService(SENSOR_SERVICE);&lt;br /&gt;
 &lt;br /&gt;
// Register your SensorListener&lt;br /&gt;
sm.registerListener(sl, SensorManager.SENSOR_ORIENTATION SensorManager.SENSOR_DELAY_NORMAL);&lt;/blockquote&gt;&lt;br /&gt;
sen så kan det vara händigt att i din sensorlistner ha:&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;private final SensorListener sl = new SensorListener() {&lt;br /&gt;
 public void onSensorChanged(int sensor, float[] values) {&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 public void onAccuracyChanged(int sensor, int accuracy) {&lt;br /&gt;
 }&lt;br /&gt;
};&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2250323519968863550-5531954902287971103?l=crappycoding.danielsundberg.nu' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/BnU9EnkUijkoNkOGGC79Lw3GXe4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/BnU9EnkUijkoNkOGGC79Lw3GXe4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/BnU9EnkUijkoNkOGGC79Lw3GXe4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/BnU9EnkUijkoNkOGGC79Lw3GXe4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/danielsundberg/Pwhl/~4/i19hnan31zc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://crappycoding.danielsundberg.nu/feeds/5531954902287971103/comments/default" title="Kommentarer till inlägget" /><link rel="replies" type="text/html" href="http://crappycoding.danielsundberg.nu/2010/06/sensors-i-android.html#comment-form" title="0 kommentarer" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2250323519968863550/posts/default/5531954902287971103?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2250323519968863550/posts/default/5531954902287971103?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/danielsundberg/Pwhl/~3/i19hnan31zc/sensors-i-android.html" title="Sensors i android." /><author><name>Daniel</name><uri>http://www.blogger.com/profile/17073910749558598512</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://crappycoding.danielsundberg.nu/2010/06/sensors-i-android.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEEESHw_cCp7ImA9WxBaEE0.&quot;"><id>tag:blogger.com,1999:blog-2250323519968863550.post-7762210302269336800</id><published>2010-03-19T03:44:00.000-07:00</published><updated>2010-03-19T06:50:09.248-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-19T06:50:09.248-07:00</app:edited><title>Inline XSLT/XML</title><content type="html">Jag ogillar att komma ihåg saker som inte längre är aktuella så jag sparar ned informationen här i hopp om att jag nån gång slipper använda den. Eftersom det kan vara bra att kunna xsltransformera lite xml nån gång så poppar jag in den här&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;&amp;lt;!-- inline xsl --&amp;gt;&lt;br /&gt;
&amp;lt;c:set var=&amp;quot;xsl&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot; version=&amp;quot;1.0&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;xsl:text&amp;gt;Antal XMLposter:&amp;lt;/xsl:text&amp;gt;&amp;lt;b&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;count(*[local-name()='Test'])&amp;quot;/&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;#&amp;quot; onClick=&amp;quot;showhide('xmlData'); return false;&amp;quot;&amp;gt;Visa/d&amp;#246;lj detaljer&amp;lt;/a&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;xmlData&amp;quot; style=&amp;quot;display: none&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;xsl:apply-templates select=&amp;quot;*[local-name()='TestPost']&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Parsa ut ing&amp;#229;ende info --&amp;gt;&lt;br /&gt;
&amp;lt;xsl:template match=&amp;quot;ns:Test&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;xsl:text&amp;gt;Test:&amp;lt;/xsl:text&amp;gt;&amp;lt;b&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;ns:Value&amp;quot;/&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- G&amp;#246;r nada f&amp;#246;r text --&amp;gt;&lt;br /&gt;
&amp;lt;xsl:template match=&amp;quot;text()&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/c:set&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Transformera xml --&amp;gt;&lt;br /&gt;
&amp;lt;c:set var=&amp;quot;xml&amp;quot; scope=&amp;quot;page&amp;quot; value=&amp;quot;${test.xml}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;x:transform doc=&amp;quot;&amp;lt;?xml version='1.0'?&amp;gt;${xml}&amp;quot; xslt=&amp;quot;${xsl}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/c:set&amp;gt;&lt;br /&gt;
&lt;/blockquote&gt;&lt;br /&gt;
Ett händigt verktyg för att testa sin XSL finns passande nog att hitta &lt;a href="http://www.w3schools.com/xsl/"&gt;här&lt;/a&gt; om man känner dragning åt det hållet.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2250323519968863550-7762210302269336800?l=crappycoding.danielsundberg.nu' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/FQMobw42OdyhLwqcx_PefbADe4g/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/FQMobw42OdyhLwqcx_PefbADe4g/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/FQMobw42OdyhLwqcx_PefbADe4g/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/FQMobw42OdyhLwqcx_PefbADe4g/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/danielsundberg/Pwhl/~4/8u-ViatpmIQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://crappycoding.danielsundberg.nu/feeds/7762210302269336800/comments/default" title="Kommentarer till inlägget" /><link rel="replies" type="text/html" href="http://crappycoding.danielsundberg.nu/2010/03/inline-xsltxml.html#comment-form" title="0 kommentarer" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2250323519968863550/posts/default/7762210302269336800?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2250323519968863550/posts/default/7762210302269336800?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/danielsundberg/Pwhl/~3/8u-ViatpmIQ/inline-xsltxml.html" title="Inline XSLT/XML" /><author><name>Daniel</name><uri>http://www.blogger.com/profile/17073910749558598512</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://crappycoding.danielsundberg.nu/2010/03/inline-xsltxml.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUMBSHY5fip7ImA9WxNWEko.&quot;"><id>tag:blogger.com,1999:blog-2250323519968863550.post-2787356366047604726</id><published>2009-10-11T07:53:00.000-07:00</published><updated>2009-10-11T08:04:19.826-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-10-11T08:04:19.826-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ws" /><category scheme="http://www.blogger.com/atom/ns#" term="soap" /><category scheme="http://www.blogger.com/atom/ns#" term="android" /><title>WS &amp; Android</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://t0.gstatic.com/images?q=tbn:BQo87YshUWjirM:http://android.mobishark.com/wp-content/uploads/2009/07/android-developers.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://t0.gstatic.com/images?q=tbn:BQo87YshUWjirM:http://android.mobishark.com/wp-content/uploads/2009/07/android-developers.png" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;Har grejjat lite med Androidappar efter att jag styrde upp mina fina bönor som webbservicear på Glassfish. Det finns en skön patchad KSOAP2 implementation för Android så man enkelt kan snacka med sina servicar. Funkar ju onekligen, men jag vet&amp;nbsp; väl inte om jag tycker det är direkt smidigt. Bara för att man kan göra soapanrop betyder ju inte att det är smidigt att använda. Kanske enklare att bara köra RESTful prylar och skippa hela soap-biten. Men så jag kommer ihåg hur det var jag grejjade så bloggar jag koden iaf.&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;span style="color: #741b47;"&gt;import &lt;/span&gt;org.ksoap2.SoapEnvelope;
&lt;span style="color: #741b47;"&gt;import &lt;/span&gt;org.ksoap2.serialization.SoapObject;
&lt;span style="color: #741b47;"&gt;import &lt;/span&gt;org.ksoap2.serialization.SoapSerializationEnvelope;
&lt;span style="color: #741b47;"&gt;import &lt;/span&gt;org.ksoap2.transport.AndroidHttpTransport;

... &amp;nbsp;&amp;nbsp; &lt;/pre&gt;&lt;pre&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #741b47;"&gt;private static final&lt;/span&gt; String &lt;i&gt;SOAP_ACTION&lt;/i&gt; = "&lt;span style="color: blue;"&gt;getTest&lt;/span&gt;";
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #741b47;"&gt;private static final&lt;/span&gt; String &lt;i&gt;METHOD_NAME&lt;/i&gt; = "&lt;span style="color: blue;"&gt;getTest&lt;/span&gt;";
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #741b47;"&gt;private static final&lt;/span&gt; String &lt;i&gt;NAMESPACE&lt;/i&gt; =&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;"&lt;span style="color: blue;"&gt;http://test.danielsundberg.nu/&lt;/span&gt;";
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #741b47;"&gt;private static final&lt;/span&gt; String &lt;i&gt;URL &lt;/i&gt;=&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;"&lt;span style="color: blue;"&gt;http://services.danielsundberg.nu/TestService/TestBean?wsdl&lt;/span&gt;"; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #741b47;"&gt;private Object&lt;/span&gt; resultRequestSOAP = &lt;span style="color: #741b47;"&gt;null&lt;/span&gt;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;
...

&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span style="color: #741b47;"&gt;private void&lt;/span&gt; search() {
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; SoapObject request = &lt;span style="color: #741b47;"&gt;new &lt;/span&gt;SoapObject(&lt;i&gt;NAMESPACE&lt;/i&gt;, &lt;i&gt;METHOD_NAME&lt;/i&gt;);

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #274e13;"&gt;//SoapObject&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; request.addProperty("&lt;span style="color: blue;"&gt;arg0&lt;/span&gt;", imeibox.getText().toString());
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SoapSerializationEnvelope envelope =&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;&lt;span style="color: #741b47;"&gt;         new &lt;/span&gt;SoapSerializationEnvelope(SoapEnvelope.&lt;i&gt;VER11&lt;/i&gt;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; envelope.setOutputSoapObject(request);

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AndroidHttpTransport androidHttpTransport =&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;&lt;span style="color: #741b47;"&gt;         new &lt;/span&gt;AndroidHttpTransport(&lt;i&gt;URL&lt;/i&gt;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #741b47;"&gt;try &lt;/span&gt;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; androidHttpTransport.call(&lt;i&gt;SOAP_ACTION&lt;/i&gt;, envelope);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; resultRequestSOAP = envelope.getResponse();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SoapObject resultsRequestSOAP = (SoapObject) envelope.bodyIn;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SoapObject result =&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;(SoapObject) resultsRequestSOAP.getProperty("&lt;span style="color: blue;"&gt;return&lt;/span&gt;");
&lt;pre&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; text.setText("&lt;span style="color: blue;"&gt;Result: &lt;/span&gt;"+result.getProperty("&lt;span style="color: blue;"&gt;firstResult&lt;/span&gt;");
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #741b47;"&gt;catch &lt;/span&gt;(Exception e) {
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; text.setText("&lt;span style="color: #741b47;"&gt;An error occured while searching '&lt;/span&gt;" +
             e.getClass() + "&lt;span style="color: blue;"&gt;'&lt;/span&gt;");
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } 
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/pre&gt;&lt;/pre&gt;Funkar men är ju inte direkt smidigt, har inte lyckats casta till några typer andra än bastyperna, men jag har väl inte undersökt jättenoga heller. Hur som så är det ju ballt att kunna snacka soap från en androidapp bara sådär. Kanske inte direkt skivat bröd, men väl som en kasse bärs.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2250323519968863550-2787356366047604726?l=crappycoding.danielsundberg.nu' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/4qoETwOw0FVKk9A71GBkGfRY8B8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/4qoETwOw0FVKk9A71GBkGfRY8B8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/4qoETwOw0FVKk9A71GBkGfRY8B8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/4qoETwOw0FVKk9A71GBkGfRY8B8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/danielsundberg/Pwhl/~4/FSAyKlcCq9U" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://crappycoding.danielsundberg.nu/feeds/2787356366047604726/comments/default" title="Kommentarer till inlägget" /><link rel="replies" type="text/html" href="http://crappycoding.danielsundberg.nu/2009/10/ws-android.html#comment-form" title="0 kommentarer" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2250323519968863550/posts/default/2787356366047604726?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2250323519968863550/posts/default/2787356366047604726?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/danielsundberg/Pwhl/~3/FSAyKlcCq9U/ws-android.html" title="WS &amp; Android" /><author><name>Daniel</name><uri>http://www.blogger.com/profile/17073910749558598512</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://crappycoding.danielsundberg.nu/2009/10/ws-android.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEEGSXs9cCp7ImA9WxNWEEQ.&quot;"><id>tag:blogger.com,1999:blog-2250323519968863550.post-7042576140344068401</id><published>2009-10-08T10:41:00.000-07:00</published><updated>2009-10-09T05:50:28.568-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-10-09T05:50:28.568-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="wls" /><category scheme="http://www.blogger.com/atom/ns#" term="ejb3" /><category scheme="http://www.blogger.com/atom/ns#" term="j2ee" /><title>EJB3 &amp; WLS10</title><content type="html">&lt;a href="http://t0.gstatic.com/images?q=tbn:aZuYV0oak78paM:http://www.marltoncoffee.com/catalog/CoffeeBeanCloseup6beansR.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://t0.gstatic.com/images?q=tbn:aZuYV0oak78paM:http://www.marltoncoffee.com/catalog/CoffeeBeanCloseup6beansR.jpg" /&gt;&lt;/a&gt;Efter att ha testat runt lite känns det som om jag missat nått. Jag verkar inte vara ensam om att inte lyckas accessa mina remotebönor på en klient heller. Först var det lite forskning att hitta åt mappingName (som förstås var specifikt för weblogic) men nu hittar jag iaf bönorna i JNDI. Dock när jag försöker instansiera dem i klienten så får jag ett spännande ClassCastException. Var ju också ruskigt smidigt att få till en webbservice av bönorna.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Bönan&lt;/b&gt;&lt;br /&gt;
&lt;pre&gt;&lt;span style="color: #666666;"&gt;@Local&lt;/span&gt;({TestLocal.&lt;span style="color: #741b47;"&gt;class&lt;/span&gt;})
&lt;span style="color: #666666;"&gt;@Remote&lt;/span&gt;({TestRemote.&lt;span style="color: #741b47;"&gt;class&lt;/span&gt;})
&lt;span style="color: #666666;"&gt;@Stateless&lt;/span&gt;(name="&lt;span style="color: blue;"&gt;TestBean&lt;/span&gt;", mappedName="&lt;span style="background-color: white; color: blue;"&gt;ejb/Test&lt;/span&gt;",&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;description="&lt;span style="color: blue;"&gt;Test implementation.&lt;/span&gt;")
&lt;span style="color: #666666;"&gt;@WebService&lt;/span&gt;(endpointInterface =&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;"&lt;span style="color: blue;"&gt;nu.danielsundberg.service.TestRemote&lt;/span&gt;",&lt;/pre&gt;&lt;pre&gt;serviceName="&lt;span style="color: blue;"&gt;TestRemote&lt;/span&gt;")
&lt;span style="color: #741b47;"&gt;public class&lt;/span&gt; TestBean &lt;span style="color: #741b47;"&gt;implements &lt;/span&gt;TestLocal, TestRemote {
 &amp;nbsp;&amp;nbsp; &lt;span style="color: #666666;"&gt;@&lt;/span&gt;javax.jws.&lt;span style="color: #666666;"&gt;WebMethod&lt;/span&gt;()
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #741b47;"&gt;public int&lt;/span&gt; test(&lt;span style="color: #741b47;"&gt;int &lt;/span&gt;tal1, &lt;span style="color: #741b47;"&gt;int &lt;/span&gt;tal2) {
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="background-color: white; color: #741b47;"&gt;return &lt;/span&gt;tal1+tal2;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
} 
&lt;/pre&gt;&lt;br /&gt;
&lt;b&gt;Localinterface&lt;/b&gt;&lt;br /&gt;
&lt;pre&gt;&lt;span style="color: #741b47;"&gt;&lt;span style="color: #666666;"&gt;@Local&lt;/span&gt; 
&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span style="color: #741b47;"&gt;public interface&lt;/span&gt; Test{
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #741b47;"&gt;int &lt;/span&gt;test(&lt;span style="color: #741b47;"&gt;int &lt;/span&gt;tal1, &lt;span style="color: #741b47;"&gt;int &lt;/span&gt;tal2);
}
&lt;/pre&gt;&lt;br /&gt;
&lt;b&gt;Remoteinterface&lt;/b&gt;&lt;br /&gt;
&lt;pre&gt;&lt;span style="color: #999999;"&gt;@Remote
@WebService
@SOAPBinding&lt;/span&gt;(style =&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;javax.jws.soap.SOAPBinding.Style.&lt;i&gt;&lt;span style="color: blue;"&gt;DOCUMENT&lt;/span&gt;&lt;/i&gt;)
&lt;span style="color: #741b47;"&gt;public interface &lt;/span&gt;TestRemote &lt;span style="color: #741b47;"&gt;extends &lt;/span&gt;Test{
}
&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
Bönorna dyker upp i domänens JNDI-träd okej, frågan är om jag har packat ihop mitt projekt på nått fel sätt så att klassladdarstrul uppstår. Webbservicen blir iaf klockren. Ska replikera mitt projekt och testa i Glassfish istället och kolla om den klarar sig lite bättre.&lt;br /&gt;
&lt;br /&gt;
Dock verkar EJB3-standarden vara lite som skivat bröd, jäkligt smidigt dvs.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2250323519968863550-7042576140344068401?l=crappycoding.danielsundberg.nu' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Yn7GtSOhBa6M3mWggWQBFSqxA5c/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Yn7GtSOhBa6M3mWggWQBFSqxA5c/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Yn7GtSOhBa6M3mWggWQBFSqxA5c/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Yn7GtSOhBa6M3mWggWQBFSqxA5c/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/danielsundberg/Pwhl/~4/hMhq1kj25fg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://crappycoding.danielsundberg.nu/feeds/7042576140344068401/comments/default" title="Kommentarer till inlägget" /><link rel="replies" type="text/html" href="http://crappycoding.danielsundberg.nu/2009/10/ejb3-wls10.html#comment-form" title="0 kommentarer" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2250323519968863550/posts/default/7042576140344068401?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2250323519968863550/posts/default/7042576140344068401?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/danielsundberg/Pwhl/~3/hMhq1kj25fg/ejb3-wls10.html" title="EJB3 &amp; WLS10" /><author><name>Daniel</name><uri>http://www.blogger.com/profile/17073910749558598512</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://crappycoding.danielsundberg.nu/2009/10/ejb3-wls10.html</feedburner:origLink></entry></feed>

