Monday, March 5, 2012

JBoss and debug breakpoints

The problem

Got in on a Monday morning ready to write some code.  Start up the JBoss server via JBoss tools, but it just freezes after a while.  Works perfectly with debug arguments.  So I started the server via the bin/debug.sh command and connected Eclipse to the JBoss server.  As soon as I connected to the server it froze and when I disconnected everything went back to normal...

The Solution

Debug breakpoint in a EJB causes a heavy overhead to JBoss startup.  And that is exactly what I did had a breakpoint left in from the previous week.  So remove all breakpoints when you have finished debugging!

Wednesday, February 29, 2012

Packet drops in Ubuntu and Fedora with Realtek NIC driver r8169

The Problem
I recently purchased a Gigabyte GA-Z68X-UD4-B3 motherboard, installed Ubuntu and started to download eclipse.  The download took forever!  Tried to open a few websites and some of them just timed out.  I was just about to get on the phone with the ISP when I noticed doing a ping the router some packets where being lost!


The solution
The motherboard comes with a Realtek network card running the r8169 chip.  Now for some reason Ubuntu and Fedora detects this as a r8168.

To check this run:
lsmod | grep r8168
If you get a output if means your using the r8168 driver instead of the r8169.

Step one is to download the driver required from Realtek
http://www.realtek.com.tw/downloads/downloadsView.aspx?Langid=1&PNid=13&PFid=5&Level=5&Conn=4&DownTypeID=3&GetDown=false

Once the download is complete extract
tar vjxf r8168-8.tar.bz2
The next step will disable the network interface, remove the r8168 module.
sudo rmmod r8168
Now run the autorun.sh file in the extracted folder
sudo ./autorun.sh
Blacklist the r8168 module form being loaded again you will have to add it to the blacklist
sudo gedit /etc/modprobe.d/blacklist.conf
Add the following line:
blacklist r8169
Update the driver cache
sudo update-initramfs -u
Now to check that everything went according to plan run
lsmod | grep r8168
If you get a output your done and dusted!

Monday, February 27, 2012

LXDE HDMI as default audio output device

The Problem:

If you are have a old pc running a lightweight linux interface like LXDE or XFCE, e.g LUbuntu and need to get the audio out to work via the HDMI you most probably have notices there is not a nice GUI to do this like in Ubuntu.

The Solution:

pavucontrol is a great and simple solution.  I know it is a bit heavyweight since you have to install pulseaudio but it is the easiest solution I have found.  To install:
sudo apt-get install pulseaudio pavucontrol
then to run
pavucontrol

Thursday, February 16, 2012

Cannot create Seam component, scope is not active


The problem:

I kept on running into to following error:
WARN  [org.jboss.seam.Component]  Cannot create Seam component, scope is not active: mySuperAction(CONVERSATION)
SEVERE [javax.enterprise.resource.webcontainer.jsf.lifecycle] JSF1054: (Phase ID: RESTORE_VIEW 1, View ID: /ThePage.xhtml) Exception thrown during phase execution: javax.faces.event.PhaseEvent[source=com.sun.faces.lifecycle.LifecycleImpl@19da36b]

Seam said my long-running conversation was gone.  But how could this be!  Well after a lot of digging I found this hidden line in the Seam documentation:

Conversational components have one minor limitation: they cannot be used to hold bindings to JSF components. 

What I was doing is I had a DataTable binding in the JSF.  The reason for this is I was not sure what columns or data was going to be displayed for the datatable until the time the page was being generated.

The solution:


As stated in the documentation, move and the HtmlPanelGrid in a new container with scope set to EVENT.
@Name("grid")
@Scope(ScopeType.EVENT)
public class Grid
{
    private HtmlPanelGrid htmlPanelGrid;

    // getters and setters
    ...
}@Name("mySuperAction")
@Scope(ScopeType.CONVERSATION)
public class MySuperAction
{
    @In(create=true)
    private Grid grid;
   
    private void populateTable(){....}

 }
Add to the page.xml a new action that calls the populateTable:
<action execute="#{mySuperAction.populateTable}" />
Now for the binding:
<h:panelGroup id="dynamicTablePanel" binding="#{grid.htmlPanelGrid}" />
Just as a note I found in a few forum posts where made where they stated adding getters and setters for the Grid on the MySuperAction thus making the binding look like this:

 <h:panelGroup id="dynamicTablePanel" binding="#{mySuperAction.grid.htmlPanelGrid}" />
This will work until you do your first AJAX call on the page and you will be hit with a nice RESTORE_VIEW error.