Workspace management with CDI

On January 9, 2012, in CDI, Java EE 6, Weld, by lucasterdev

Intro

One of of  Seam 2′s coolest features was the workspace management feature. (this must me the billionth times someone says that ;-) )

With the advent of Java EE 6 & and CDI, one would expect that the implementation of such a cool feature would be top priority to the Seam 3 tem, but  – hey! – It’s JBoss we are talking about! So no, there is no conversation/workspace management in Seam 3 :-/

Andy Gibson’s solution

Andy Gibson implemented a basic workspace manager; I tested it out with JBoss AS 7.0.2.Final and it worked. Here are the pros and cons of Andy’s solution:

Pros:

  • It uses the standard CDI specification API.
  • It’s portable across different Java EE 6 application servers.
  • It’s extensible in that you can, for example, associate descriptions (i.e. use case names) to conversations.

Cons:

  • You have to clutter your CDI bean’s code with workspace management code – which is poor separation of concerns.

Here comes Weld

Weld (JBoss’ implementation of CDI) offers the possibility to implement workspace management in a different, more elegant way. Weld introduces the notion of a ManagedConversation, which extends the Conversation interface with the abilty to lock, unlock and touch (update the last used timestamp) a conversation; it also adds a method to get the timestamp of the moment when conversation was last used. Finally, all non-transient conversations in a session can be obtained from the ConversationContext, as can the current conversation.

My workspace management solution is build upon Weld’s perks. Here are its pros and cons:

Pros:

  • You don’t have to add workspace management code to your CDI bean.
  • You don’t even have to inject anything into yout CDI beans.
  • It allows for separation of concerns.

Cons:

  • It’s depends on Weld.
  • It only works with JBoss AS 6/7.
  • It’s not portable across different CDI implementations (i.e. won’t work on Glassfish, WebSphere, etc…).

My solution’s source code

package cdi;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Date;
import java.util.Iterator;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.enterprise.context.RequestScoped;
import javax.inject.Inject;
import javax.inject.Named;

import org.jboss.solder.logging.Logger;
import org.jboss.weld.context.ConversationContext;
import org.jboss.weld.context.ManagedConversation;
import org.jboss.weld.context.http.Http;

import util.ManagedConversationComparator;

/**
 * This bean needs <strong>Weld</strong>.
 *
 * @author Luca
 *
 */
@Named
@RequestScoped
public class WorkspaceBean implements Serializable {

	private static final long serialVersionUID = -457959303651081423L;

	@Inject
	@Http
	private ConversationContext conversationContext;

	@Inject
	private Logger logger;

	/**
	 * Tells whether a ManagedConversation has timed out.
	 *
	 * @param conv
	 * @return <i>true</i> if it has timed out; <i>false</i> if it has not timed
	 *         out yet
	 */
	public static boolean timedOut(ManagedConversation conv) {
		return conv.getTimeout() < (new Date().getTime() - conv.getLastUsed());
	}

	/**
	 * Get the list of active (long running OR once long-running, then timed-out
	 * but still active) conversation Id's.
	 *
	 * @return a List<String> of conversation ids
	 */
	public List<String> getActiveConversationIds() {
		List<String> result = new ArrayList<String>();
		for (Iterator<ManagedConversation> i = getActiveConversations()
				.iterator(); i.hasNext();) {
			result.add(i.next().getId());
		}
		return result;
	}

	/**
	 * Get a list of the active ManagedConversation. To be in the list, a
	 * conversations must satisfy one of these two requirements:
	 * <ul>
	 * <li>It's long running and has not timed out yet;</li>
	 * <li>It was long running and has timed out.</li>
	 * </ul>
	 * The list does NOT contain transient conversations.
	 *
	 * @return a Collection of org.jboss.weld.context.ManagedConversation,
	 *         sorted by conversation id.
	 */
	public Collection<ManagedConversation> getActiveConversations() {
		List<ManagedConversation> result = new ArrayList<ManagedConversation>(
				conversationContext.getConversations());

		// Weld's documentation reads:
		// "conversations are not assigned ids until they become non-transient."
		// Actually, that's not the case! ConversationContext.getConversations()
		// lacks the current conversation even though it's already long running!
		//
		// We workaround by adding the current conversation, if it's long
		// running.
		ManagedConversation currentConversation = conversationContext
				.getCurrentConversation();
		if (!currentConversation.isTransient()) {
			if (!result.contains(currentConversation))
				result.add(currentConversation);
		}
		// Sort the conversations by conversation id in ascending order
		Collections.sort(result, new ManagedConversationComparator());
		return result;
	}

	/**
	 * Get the list of active, long running, not yet timed-out conversation
	 * Id's.
	 *
	 * @return
	 */
	public List<String> getLongRunningConversationIds() {
		List<String> result = new ArrayList<String>();
		for (Iterator<ManagedConversation> i = getLongRunningConversations()
				.iterator(); i.hasNext();) {
			result.add(i.next().getId());
		}
		return result;
	}

	/**
	 * Get all AND ONLY the <strong>long running</strong> active conversations
	 * that haven't timed out yet.
	 *
	 * @return a Collection of long running
	 *         org.jboss.weld.context.ManagedConversation, sorted by
	 *         conversation id.
	 */
	public Collection<ManagedConversation> getLongRunningConversations() {
		Collection<ManagedConversation> result = new ArrayList<ManagedConversation>();
		ManagedConversation conv;
		// Get all the active conversations
		Collection<ManagedConversation> activeConversations = getActiveConversations();
		for (Iterator<ManagedConversation> i = activeConversations.iterator(); i
				.hasNext();) {
			conv = i.next();
			// If the conversation is STILL long running, add it to the result
			if (!timedOut(conv)) {
				result.add(conv);
			}
		}
		return result;
	}

	/**
	 * Logs info about the workspace
	 */
	private void output() {
		logger.info("Current Conversation: "
				+ conversationContext.getCurrentConversation());
		logger.info("Long Running Conversations: ");
		Iterator<ManagedConversation> i = getLongRunningConversations()
				.iterator();
		while (i.hasNext()) {
			logger.info(i.next());
		}
		logger.info("Active Conversations: ");
		i = getActiveConversations().iterator();
		while (i.hasNext()) {
			logger.info(i.next());
		}
	}

	/*
	 * Life cycle methods
	 */

	@PostConstruct
	public void postConstruct() {
		logger.info("postConstruct()");
		output();
	}

	@PreDestroy
	public void preDestroy() {
		logger.info("preDestroy()");
		output();
	}
}

Here’s an .xhtml snippet that displays the workspace:

<h1>Long Running Conversations</h1>
<ui:repeat var="_conv" value="#{workspaceBean.longRunningConversations}">
	<h:link outcome="wizard2" value="Goto Conversation #{_conv.id}">
		<f:param name="cid" value="#{_conv.id}" />
	</h:link>
	<br/>
</ui:repeat>

<h1>Active</h1>
<ui:repeat var="_conv" value="#{workspaceBean.activeConversations}">
	<h:link outcome="wizard2" value="Goto Conversation #{_conv.id}">
		<h:outputText value=" (timedout)" rendered="#{workspaceBean.timedOut(_conv)}"/>
		<f:param name="cid" value="#{_conv.id}" />
	</h:link>
	<br />
</ui:repeat>

Some remarks

  • Weld’s ManagedConversation and ConversationContext are cool; however, they are not part of the CDI specification; I’d prefer them to be part of some CDI extension – Seam Solder, for instance – and not of Weld itself.
  • It would be useful if the ManagedConversation had methods to set and get the conversation description (i.e. use case name), because it’s needed by 90% of Web apps.
  • A boolean ManagedConversation.isTimedOut() method would be very useful too (we would not need to implement a Comparator)
  • It would also be very useful to be able to observe/intercept Conversation.begin(), Conversation.timeout(), Conversation.end()
 

In this post I’ll be using:

  • JBoss AS 7.0.2.Final
  • Seam Solder 3.1.0.Final

Here’s my adventure in dealing with NonexistentConversationException…

Round 1

If you request a page with a non existent conversation id, a javax.enterprise.context.NonexistentConversationException will be thrown.

For example, if you type something like: http://localhost:8080/myapp/somePageWithAConversationScopedBean.jsf?cid=someNonExistentCid

You’ll see this page:

HTTP Status 500 -

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.enterprise.event.ObserverException
	sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
	sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
	java.lang.reflect.Constructor.newInstance(Constructor.java:513)
	java.lang.Class.newInstance0(Class.java:355)
	java.lang.Class.newInstance(Class.java:308)
	org.jboss.weld.util.reflection.SecureReflections$16.work(SecureReflections.java:395)
	org.jboss.weld.util.reflection.SecureReflectionAccess.run(SecureReflectionAccess.java:54)
	org.jboss.weld.util.reflection.SecureReflectionAccess.runAsInstantiation(SecureReflectionAccess.java:216)
	org.jboss.weld.util.reflection.SecureReflections.newInstance(SecureReflections.java:390)
	org.jboss.weld.injection.Exceptions.rethrowException(Exceptions.java:40)
	org.jboss.weld.injection.Exceptions.rethrowException(Exceptions.java:92)
	org.jboss.weld.injection.MethodInjectionPoint.invokeOnInstanceWithSpecialValue(MethodInjectionPoint.java:214)
	org.jboss.weld.event.ObserverMethodImpl.sendEvent(ObserverMethodImpl.java:282)
	org.jboss.weld.event.ObserverMethodImpl.sendEvent(ObserverMethodImpl.java:265)
	org.jboss.weld.event.ObserverMethodImpl.notify(ObserverMethodImpl.java:234)
	org.jboss.weld.manager.BeanManagerImpl.notifyObservers(BeanManagerImpl.java:635)
	org.jboss.weld.manager.BeanManagerImpl.fireEvent(BeanManagerImpl.java:622)
	org.jboss.weld.manager.BeanManagerImpl.fireEvent(BeanManagerImpl.java:616)
	org.jboss.solder.servlet.exception.CatchExceptionFilter.doFilter(CatchExceptionFilter.java:74)
	org.jboss.solder.servlet.event.ServletEventBridgeFilter.doFilter(ServletEventBridgeFilter.java:74)

root cause

javax.servlet.ServletException: WELD-000321 No conversation found to restore for id 989
	javax.faces.webapp.FacesServlet.service(FacesServlet.java:606)
	org.jboss.weld.servlet.ConversationPropagationFilter.doFilter(ConversationPropagationFilter.java:67)
	org.jboss.solder.servlet.exception.CatchExceptionFilter.doFilter(CatchExceptionFilter.java:65)
	org.jboss.solder.servlet.event.ServletEventBridgeFilter.doFilter(ServletEventBridgeFilter.java:74)

root cause

org.jboss.weld.context.NonexistentConversationException: WELD-000321 No conversation found to restore for id 989
	org.jboss.weld.jsf.WeldPhaseListener.activateConversations(WeldPhaseListener.java:112)
	org.jboss.weld.jsf.WeldPhaseListener.beforePhase(WeldPhaseListener.java:88)
	com.sun.faces.lifecycle.Phase.handleBeforePhase(Phase.java:228)
	com.sun.faces.lifecycle.Phase.doPhase(Phase.java:99)
	com.sun.faces.lifecycle.RestoreViewPhase.doPhase(RestoreViewPhase.java:116)
	com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
	javax.faces.webapp.FacesServlet.service(FacesServlet.java:593)
	org.jboss.weld.servlet.ConversationPropagationFilter.doFilter(ConversationPropagationFilter.java:67)
	org.jboss.solder.servlet.exception.CatchExceptionFilter.doFilter(CatchExceptionFilter.java:65)
	org.jboss.solder.servlet.event.ServletEventBridgeFilter.doFilter(ServletEventBridgeFilter.java:74)

note The full stack trace of the root cause is available in the JBoss Web/7.0.1.Final logs.
JBoss Web/7.0.1.Final

Joshua Davis suggests a workaround that *should* solve the problem: http://shrubbery.mynetgear.net/c/display/W/Handling+NonexistentConversationException+Gracefully

The forum thread is: http://seamframework.org/Community/HandlingNonexistentConversationExceptionWithSeam3

Add this property to your pom.xml…

<properties>
    <seam.solder.version>3.1.0.Final</seam.solder.version>
</properties>

…add these dependencies to your pom.xml:

<dependency>
    <groupId>org.jboss.solder</groupId>
    <artifactId>solder-api</artifactId>
    <version>${seam.solder.version}</version>
    <scope>compile</scope>
</dependency>
<dependency>
    <groupId>org.jboss.solder</groupId>
    <artifactId>solder-impl</artifactId>
    <version>${seam.solder.version}</version>
    <scope>runtime</scope>
</dependency>

…and create this class:

package solder;

import javax.enterprise.context.NonexistentConversationException;
import javax.inject.Inject;
import org.jboss.solder.exception.control.CaughtException;
import org.jboss.solder.exception.control.Handles;
import org.jboss.solder.exception.control.HandlesExceptions;
import org.jboss.solder.logging.Logger;

@HandlesExceptions
public class MyHandlers {

	@Inject private Logger log;

	public void onNonexistentConversation(@Handles CaughtException evt) {
		log.error("NonexistentConversationException! " + evt.getException().getMessage(), evt.getException());
		evt.handled();
	}
}

You get this page:

HTTP Status 500 -

type Status report

message

description The server encountered an internal error () that prevented it from fulfilling this request.
JBoss Web/7.0.1.Final

and this output:

13:50:48,245 ERROR [solder.MyHandlers] (http--127.0.0.1-8080-1) NonexistentConversationException!
WELD-000321 No conversation found to restore for id 989: org.jboss.weld.context.NonexistentConversationException: WELD-000321 No conversation found to restore for id 989
	at org.jboss.weld.jsf.WeldPhaseListener.activateConversations(WeldPhaseListener.java:112) [weld-core-1.1.2.Final.jar:2011-07-26 15:02]
	at org.jboss.weld.jsf.WeldPhaseListener.beforePhase(WeldPhaseListener.java:88) [weld-core-1.1.2.Final.jar:2011-07-26 15:02]
	at com.sun.faces.lifecycle.Phase.handleBeforePhase(Phase.java:228) [jsf-impl-2.1.3-b02-jbossorg-2.jar:2.1.3-SNAPSHOT]
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:99) [jsf-impl-2.1.3-b02-jbossorg-2.jar:2.1.3-SNAPSHOT]
	at com.sun.faces.lifecycle.RestoreViewPhase.doPhase(RestoreViewPhase.java:116) [jsf-impl-2.1.3-b02-jbossorg-2.jar:2.1.3-SNAPSHOT]
	at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118) [jsf-impl-2.1.3-b02-jbossorg-2.jar:2.1.3-SNAPSHOT]
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593) [jboss-jsf-api_2.1_spec-2.0.0.Beta1.jar:2.0.0.Beta1]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:329) [jbossweb-7.0.1.Final.jar:7.0.2.Final]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.1.Final.jar:7.0.2.Final]
	at org.jboss.weld.servlet.ConversationPropagationFilter.doFilter(ConversationPropagationFilter.java:67) [weld-core-1.1.2.Final.jar:2011-07-26 15:02]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280) [jbossweb-7.0.1.Final.jar:7.0.2.Final]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.1.Final.jar:7.0.2.Final]
	at org.jboss.solder.servlet.exception.CatchExceptionFilter.doFilter(CatchExceptionFilter.java:65) [solder-impl-3.1.0.Final.jar:]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280) [jbossweb-7.0.1.Final.jar:7.0.2.Final]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.1.Final.jar:7.0.2.Final]
	at org.jboss.solder.servlet.event.ServletEventBridgeFilter.doFilter(ServletEventBridgeFilter.java:74) [solder-impl-3.1.0.Final.jar:]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280) [jbossweb-7.0.1.Final.jar:7.0.2.Final]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.1.Final.jar:7.0.2.Final]
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:275) [jbossweb-7.0.1.Final.jar:7.0.2.Final]
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161) [jbossweb-7.0.1.Final.jar:7.0.2.Final]
	at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:139) [jboss-as-web-7.0.2.Final.jar:7.0.2.Final]
	at org.jboss.as.web.NamingValve.invoke(NamingValve.java:57) [jboss-as-web-7.0.2.Final.jar:7.0.2.Final]
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:154) [jbossweb-7.0.1.Final.jar:7.0.2.Final]
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) [jbossweb-7.0.1.Final.jar:7.0.2.Final]
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) [jbossweb-7.0.1.Final.jar:7.0.2.Final]
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:362) [jbossweb-7.0.1.Final.jar:7.0.2.Final]
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877) [jbossweb-7.0.1.Final.jar:7.0.2.Final]
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:667) [jbossweb-7.0.1.Final.jar:7.0.2.Final]
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:952) [jbossweb-7.0.1.Final.jar:7.0.2.Final]
	at java.lang.Thread.run(Thread.java:662) [:1.6.0_26]

This happens because of a known Weld bug: https://issues.jboss.org/browse/WELD-855

Joshua Davis’ workaround consists of telling Weld to create a new Transient conversation.

Modify our solder.MyHandlers.java:

package solder;

import javax.enterprise.context.NonexistentConversationException;
import javax.inject.Inject;

import org.jboss.solder.exception.control.CaughtException;
import org.jboss.solder.exception.control.Handles;
import org.jboss.solder.exception.control.HandlesExceptions;
import org.jboss.solder.logging.Logger;
import org.jboss.weld.context.http.HttpConversationContext;

@HandlesExceptions
public class MyHandlers {

	@Inject private Logger log;

	public void onNonexistentConversation(@Handles CaughtException evt, HttpConversationContext conversationContext) {
		log.error("NonexistentConversationException! " + evt.getException().getMessage(), evt.getException());
		evt.handled();
		conversationContext.activate(null); // Workaround WELD-855 - Create a new transient conversation.
	}
}

So far, this is the solution suggested in the wiki…
Guess what? It. does. not. work. (You still get HTTP Error 500.):-/

At least, it does not work with JBoss AS 7.0.2.Final and Seam Solder 3.1.0.Final, which are the version I’m using. Joshua didn’t mention which version he tested his workaround against, by the way. When you write an article, you have to ALWAYS mention the versions!!!

My workaround is the following:

package solder;

import java.io.IOException;

import javax.enterprise.context.NonexistentConversationException;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.inject.Inject;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.jboss.solder.exception.control.CaughtException;
import org.jboss.solder.exception.control.Handles;
import org.jboss.solder.exception.control.HandlesExceptions;
import org.jboss.solder.logging.Logger;
import org.jboss.weld.context.http.HttpConversationContext;

@HandlesExceptions
public class MyHandlers {

	@Inject private Logger log;

	public void onNonexistentConversation(@Handles CaughtException evt, HttpServletRequest request, HttpServletResponse response) {
		log.error("NonexistentConversationException! " + evt.getException().getMessage());
		evt.handled();
		// We redirect to the same page, but without cid. This will trigger a new JSF request lifecycle
		// and start a new transient conversation.
		// The drawback is: we cannot append messages to the view, because there is no active FacesContext.
		String redirectURL = response.encodeRedirectURL(request.getRequestURL().toString());
		try {
			response.sendRedirect(redirectURL);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

Round 2

Turns out Joshua Davis uses Seam Solder version 3.1.0.Beta2. So, I change my configuration.

My dependencies now are:

<properties>
	<seam.version>3.1.0.Beta2</seam.version>
	<weld.version>1.1.2.Final</weld.version>
</properties>

<dependencies>
	<dependency>
		<groupId>org.jboss.seam.solder</groupId>
		<artifactId>seam-solder</artifactId>
		<version>${seam.version}</version>
	</dependency>
	<dependency>
		<groupId>org.jboss.seam.catch</groupId>
		<artifactId>seam-catch</artifactId>
		<version>${seam.version}</version>
	</dependency>
	<dependency>
		<groupId>org.jboss.seam.faces</groupId>
		<artifactId>seam-faces</artifactId>
		<version>${seam.version}</version>
	</dependency>
	<!-- seam-faces depends on prettyfaces -->
	<dependency>
		<groupId>com.ocpsoft</groupId>
		<artifactId>prettyfaces-jsf2</artifactId>
		<version>3.3.2</version>
	</dependency>
	<dependency>
		<groupId>org.jboss.weld</groupId>
		<artifactId>weld-core</artifactId>
		<version>${weld.version}</version>
		<scope>compile</scope>
	</dependency>
		<dependency>
		<groupId>org.jboss.spec</groupId>
		<artifactId>jboss-javaee-6.0</artifactId>
		<version>1.0.0.Final</version>
		<type>pom</type>
		<scope>provided</scope>
	</dependency>
</dependencies>

seam-solder 3.1.0.Beta2 also needs the jboss-deployment-structure.xml file for logging to work:

<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
	<deployment>
		<dependencies>
			<module name="org.jboss.logmanager" />
		</dependencies>
	</deployment>
</jboss-deployment-structure>

By the way, @Inject Logger logger in a PhaseListener doesn’t work in seam-solder 3.1.0.Beta2

The exception handler is now as follows:

package solder;

import javax.enterprise.context.NonexistentConversationException;
import javax.inject.Inject;

import org.jboss.seam.exception.control.CaughtException;
import org.jboss.seam.exception.control.Handles;
import org.jboss.seam.exception.control.HandlesExceptions;
import org.jboss.seam.logging.Logger;

import org.jboss.weld.context.http.HttpConversationContext;

@HandlesExceptions
public class JoshuaHandlers {
	@Inject
	private Logger logger;

	public void onNonexistentConversation(
			@Handles CaughtException evt,	HttpConversationContext conversationContext) {
		java.awt.Toolkit.getDefaultToolkit().beep(); // I added a sound effect ;P
		logger.error("NonexistentConversationException!\n" + evt.getException().getMessage(), evt.getException());
		evt.handled();
	}
}

Now, if I enter a non existent cid, this is the page I get:

HTTP Status 500 -

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: WELD-001303 No active contexts for scope type javax.enterprise.context.ConversationScoped
	javax.faces.webapp.FacesServlet.service(FacesServlet.java:606)
	org.jboss.weld.servlet.ConversationPropagationFilter.doFilter(ConversationPropagationFilter.java:67)
	com.ocpsoft.pretty.PrettyFilter.doFilter(PrettyFilter.java:126)

root cause

org.jboss.weld.context.ContextNotActiveException: WELD-001303 No active contexts for scope type javax.enterprise.context.ConversationScoped
	org.jboss.weld.manager.BeanManagerImpl.getContext(BeanManagerImpl.java:667)
	org.jboss.weld.bean.proxy.ContextBeanInstance.getInstance(ContextBeanInstance.java:77)
	org.jboss.weld.bean.proxy.ProxyMethodHandler.invoke(ProxyMethodHandler.java:87)
	cdi.SomeCDIBean$Proxy$_$$_WeldClientProxy.getNum(SomeCDIBean$Proxy$_$$_WeldClientProxy.java)
	sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	java.lang.reflect.Method.invoke(Method.java:597)
	javax.el.BeanELResolver.getValue(BeanELResolver.java:302)
	com.sun.faces.el.DemuxCompositeELResolver._getValue(DemuxCompositeELResolver.java:176)
	com.sun.faces.el.DemuxCompositeELResolver.getValue(DemuxCompositeELResolver.java:203)
	org.apache.el.parser.AstValue.getValue(AstValue.java:134)
	org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:187)
	org.jboss.weld.el.WeldValueExpression.getValue(WeldValueExpression.java:55)
	com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:109)
	javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:194)
	javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:182)
	javax.faces.component.UIOutput.getValue(UIOutput.java:169)
	com.sun.faces.renderkit.html_basic.HtmlBasicInputRenderer.getValue(HtmlBasicInputRenderer.java:205)
	com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.getCurrentValue(HtmlBasicRenderer.java:355)
	com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeEnd(HtmlBasicRenderer.java:164)
	javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:875)
	com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeRecursive(HtmlBasicRenderer.java:312)
	com.sun.faces.renderkit.html_basic.GroupRenderer.encodeChildren(GroupRenderer.java:105)
	javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:845)
	com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeRecursive(HtmlBasicRenderer.java:304)
	com.sun.faces.renderkit.html_basic.GridRenderer.renderRow(GridRenderer.java:185)
	com.sun.faces.renderkit.html_basic.GridRenderer.encodeChildren(GridRenderer.java:129)
	javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:845)
	javax.faces.component.UIComponent.encodeAll(UIComponent.java:1756)
	javax.faces.component.UIComponent.encodeAll(UIComponent.java:1759)
	com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:401)
	com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:131)
	com.ocpsoft.pretty.faces.application.PrettyViewHandler.renderView(PrettyViewHandler.java:163)
	javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:288)
	javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:288)
	com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:121)
	com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
	com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
	javax.faces.webapp.FacesServlet.service(FacesServlet.java:594)
	org.jboss.weld.servlet.ConversationPropagationFilter.doFilter(ConversationPropagationFilter.java:67)
	com.ocpsoft.pretty.PrettyFilter.doFilter(PrettyFilter.java:126)

note The full stack trace of the root cause is available in the JBoss Web/7.0.1.Final logs.
JBoss Web/7.0.1.Final

…and this is the output:

23:18:51,861 ERROR [solder.JoshuaHandlers] (http--127.0.0.1-8080-1) NonexistentConversationException!
WELD-000321 No conversation found to restore for id 778: org.jboss.weld.context.NonexistentConversationException: WELD-000321 No conversation found to restore for id 778
	at org.jboss.weld.jsf.WeldPhaseListener.activateConversations(WeldPhaseListener.java:112) [weld-core-1.1.2.Final.jar:2011-07-26 15:02]
	at org.jboss.weld.jsf.WeldPhaseListener.beforePhase(WeldPhaseListener.java:88) [weld-core-1.1.2.Final.jar:2011-07-26 15:02]
	at com.sun.faces.lifecycle.Phase.handleBeforePhase(Phase.java:228) [jsf-impl-2.1.3-b02-jbossorg-2.jar:2.1.3-SNAPSHOT]
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:99) [jsf-impl-2.1.3-b02-jbossorg-2.jar:2.1.3-SNAPSHOT]
	at com.sun.faces.lifecycle.RestoreViewPhase.doPhase(RestoreViewPhase.java:116) [jsf-impl-2.1.3-b02-jbossorg-2.jar:2.1.3-SNAPSHOT]
	at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118) [jsf-impl-2.1.3-b02-jbossorg-2.jar:2.1.3-SNAPSHOT]
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593) [jboss-jsf-api_2.1_spec-2.0.0.Beta1.jar:2.0.0.Beta1]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:329) [jbossweb-7.0.1.Final.jar:7.0.2.Final]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.1.Final.jar:7.0.2.Final]
	at org.jboss.weld.servlet.ConversationPropagationFilter.doFilter(ConversationPropagationFilter.java:67) [weld-core-1.1.2.Final.jar:2011-07-26 15:02]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280) [jbossweb-7.0.1.Final.jar:7.0.2.Final]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.1.Final.jar:7.0.2.Final]
	at com.ocpsoft.pretty.PrettyFilter.doFilter(PrettyFilter.java:126) [prettyfaces-jsf2-3.3.2.jar:]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280) [jbossweb-7.0.1.Final.jar:7.0.2.Final]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.1.Final.jar:7.0.2.Final]
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:275) [jbossweb-7.0.1.Final.jar:7.0.2.Final]
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161) [jbossweb-7.0.1.Final.jar:7.0.2.Final]
	at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:139) [jboss-as-web-7.0.2.Final.jar:7.0.2.Final]
	at org.jboss.as.web.NamingValve.invoke(NamingValve.java:57) [jboss-as-web-7.0.2.Final.jar:7.0.2.Final]
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:154) [jbossweb-7.0.1.Final.jar:7.0.2.Final]
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) [jbossweb-7.0.1.Final.jar:7.0.2.Final]
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) [jbossweb-7.0.1.Final.jar:7.0.2.Final]
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:362) [jbossweb-7.0.1.Final.jar:7.0.2.Final]
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877) [jbossweb-7.0.1.Final.jar:7.0.2.Final]
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:667) [jbossweb-7.0.1.Final.jar:7.0.2.Final]
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:952) [jbossweb-7.0.1.Final.jar:7.0.2.Final]
	at java.lang.Thread.run(Thread.java:662) [:1.6.0_26]

23:18:51,867 INFO  [faces.phaselisteners.MyPhaseListener] (http--127.0.0.1-8080-1) Before Phase: RENDER_RESPONSE 6
23:18:51,908 GRAVE [javax.enterprise.resource.webcontainer.jsf.application] (http--127.0.0.1-8080-1) Error Rendering View[/wizard2.xhtml]: javax.el.ELException: /wizard2.xhtml @16,65 value="#{someCDIBean.num}": org.jboss.weld.context.ContextNotActiveException: WELD-001303 No active contexts for scope type javax.enterprise.context.ConversationScoped
	at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:114) [jsf-impl-2.1.3-b02-jbossorg-2.jar:2.1.3-SNAPSHOT]
	at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:194) [jboss-jsf-api_2.1_spec-2.0.0.Beta1.jar:2.0.0.Beta1]
	at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:182) [jboss-jsf-api_2.1_spec-2.0.0.Beta1.jar:2.0.0.Beta1]
	at javax.faces.component.UIOutput.getValue(UIOutput.java:169) [jboss-jsf-api_2.1_spec-2.0.0.Beta1.jar:2.0.0.Beta1]
	at com.sun.faces.renderkit.html_basic.HtmlBasicInputRenderer.getValue(HtmlBasicInputRenderer.java:205) [jsf-impl-2.1.3-b02-jbossorg-2.jar:2.1.3-SNAPSHOT]
	at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.getCurrentValue(HtmlBasicRenderer.java:355) [jsf-impl-2.1.3-b02-jbossorg-2.jar:2.1.3-SNAPSHOT]
	at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeEnd(HtmlBasicRenderer.java:164) [jsf-impl-2.1.3-b02-jbossorg-2.jar:2.1.3-SNAPSHOT]
	at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:875) [jboss-jsf-api_2.1_spec-2.0.0.Beta1.jar:2.0.0.Beta1]
	at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeRecursive(HtmlBasicRenderer.java:312) [jsf-impl-2.1.3-b02-jbossorg-2.jar:2.1.3-SNAPSHOT]
	at com.sun.faces.renderkit.html_basic.GroupRenderer.encodeChildren(GroupRenderer.java:105) [jsf-impl-2.1.3-b02-jbossorg-2.jar:2.1.3-SNAPSHOT]
	at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:845) [jboss-jsf-api_2.1_spec-2.0.0.Beta1.jar:2.0.0.Beta1]
	at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeRecursive(HtmlBasicRenderer.java:304) [jsf-impl-2.1.3-b02-jbossorg-2.jar:2.1.3-SNAPSHOT]
	at com.sun.faces.renderkit.html_basic.GridRenderer.renderRow(GridRenderer.java:185) [jsf-impl-2.1.3-b02-jbossorg-2.jar:2.1.3-SNAPSHOT]
	at com.sun.faces.renderkit.html_basic.GridRenderer.encodeChildren(GridRenderer.java:129) [jsf-impl-2.1.3-b02-jbossorg-2.jar:2.1.3-SNAPSHOT]
	at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:845) [jboss-jsf-api_2.1_spec-2.0.0.Beta1.jar:2.0.0.Beta1]
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1756) [jboss-jsf-api_2.1_spec-2.0.0.Beta1.jar:2.0.0.Beta1]
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1759) [jboss-jsf-api_2.1_spec-2.0.0.Beta1.jar:2.0.0.Beta1]
	at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:401) [jsf-impl-2.1.3-b02-jbossorg-2.jar:2.1.3-SNAPSHOT]
	at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:131) [jsf-impl-2.1.3-b02-jbossorg-2.jar:2.1.3-SNAPSHOT]
	at com.ocpsoft.pretty.faces.application.PrettyViewHandler.renderView(PrettyViewHandler.java:163) [prettyfaces-jsf2-3.3.2.jar:]
	at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:288) [jboss-jsf-api_2.1_spec-2.0.0.Beta1.jar:2.0.0.Beta1]
	at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:288) [jboss-jsf-api_2.1_spec-2.0.0.Beta1.jar:2.0.0.Beta1]
	at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:121) [jsf-impl-2.1.3-b02-jbossorg-2.jar:2.1.3-SNAPSHOT]
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) [jsf-impl-2.1.3-b02-jbossorg-2.jar:2.1.3-SNAPSHOT]
	at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139) [jsf-impl-2.1.3-b02-jbossorg-2.jar:2.1.3-SNAPSHOT]
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:594) [jboss-jsf-api_2.1_spec-2.0.0.Beta1.jar:2.0.0.Beta1]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:329) [jbossweb-7.0.1.Final.jar:7.0.2.Final]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.1.Final.jar:7.0.2.Final]
	at org.jboss.weld.servlet.ConversationPropagationFilter.doFilter(ConversationPropagationFilter.java:67) [weld-core-1.1.2.Final.jar:2011-07-26 15:02]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280) [jbossweb-7.0.1.Final.jar:7.0.2.Final]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.1.Final.jar:7.0.2.Final]
	at com.ocpsoft.pretty.PrettyFilter.doFilter(PrettyFilter.java:126) [prettyfaces-jsf2-3.3.2.jar:]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280) [jbossweb-7.0.1.Final.jar:7.0.2.Final]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.1.Final.jar:7.0.2.Final]
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:275) [jbossweb-7.0.1.Final.jar:7.0.2.Final]
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161) [jbossweb-7.0.1.Final.jar:7.0.2.Final]
	at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:139) [jboss-as-web-7.0.2.Final.jar:7.0.2.Final]
	at org.jboss.as.web.NamingValve.invoke(NamingValve.java:57) [jboss-as-web-7.0.2.Final.jar:7.0.2.Final]
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:154) [jbossweb-7.0.1.Final.jar:7.0.2.Final]
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) [jbossweb-7.0.1.Final.jar:7.0.2.Final]
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) [jbossweb-7.0.1.Final.jar:7.0.2.Final]
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:362) [jbossweb-7.0.1.Final.jar:7.0.2.Final]
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877) [jbossweb-7.0.1.Final.jar:7.0.2.Final]
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:667) [jbossweb-7.0.1.Final.jar:7.0.2.Final]
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:952) [jbossweb-7.0.1.Final.jar:7.0.2.Final]
	at java.lang.Thread.run(Thread.java:662) [:1.6.0_26]
Caused by: org.jboss.weld.context.ContextNotActiveException: WELD-001303 No active contexts for scope type javax.enterprise.context.ConversationScoped
	at org.jboss.weld.manager.BeanManagerImpl.getContext(BeanManagerImpl.java:667) [weld-core-1.1.2.Final.jar:2011-07-26 15:02]
	at org.jboss.weld.bean.proxy.ContextBeanInstance.getInstance(ContextBeanInstance.java:77) [weld-core-1.1.2.Final.jar:2011-07-26 15:02]
	at org.jboss.weld.bean.proxy.ProxyMethodHandler.invoke(ProxyMethodHandler.java:87) [weld-core-1.1.2.Final.jar:2011-07-26 15:02]
	at cdi.SomeCDIBean$Proxy$_$$_WeldClientProxy.getNum(SomeCDIBean$Proxy$_$$_WeldClientProxy.java) [classes:]
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [:1.6.0_26]
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) [:1.6.0_26]
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) [:1.6.0_26]
	at java.lang.reflect.Method.invoke(Method.java:597) [:1.6.0_26]
	at javax.el.BeanELResolver.getValue(BeanELResolver.java:302) [jboss-el-api_2.2_spec-1.0.0.Final.jar:1.0.0.Final]
	at com.sun.faces.el.DemuxCompositeELResolver._getValue(DemuxCompositeELResolver.java:176) [jsf-impl-2.1.3-b02-jbossorg-2.jar:2.1.3-SNAPSHOT]
	at com.sun.faces.el.DemuxCompositeELResolver.getValue(DemuxCompositeELResolver.java:203) [jsf-impl-2.1.3-b02-jbossorg-2.jar:2.1.3-SNAPSHOT]
	at org.apache.el.parser.AstValue.getValue(AstValue.java:134) [jbossweb-7.0.1.Final.jar:7.0.2.Final]
	at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:187) [jbossweb-7.0.1.Final.jar:7.0.2.Final]
	at org.jboss.weld.el.WeldValueExpression.getValue(WeldValueExpression.java:55) [weld-core-1.1.2.Final.jar:2011-07-26 15:02]
	at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:109) [jsf-impl-2.1.3-b02-jbossorg-2.jar:2.1.3-SNAPSHOT]
	... 45 more

23:18:51,912 INFO  [faces.phaselisteners.MyPhaseListener] (http--127.0.0.1-8080-1) After Phase: RENDER_RESPONSE 6
23:18:51,917 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/as702sandboxWarMaven].[facesServlet]] (http--127.0.0.1-8080-1) Servlet.service() for servlet facesServlet threw exception: org.jboss.weld.context.ContextNotActiveException: WELD-001303 No active contexts for scope type javax.enterprise.context.ConversationScoped
	at org.jboss.weld.manager.BeanManagerImpl.getContext(BeanManagerImpl.java:667) [weld-core-1.1.2.Final.jar:2011-07-26 15:02]
	at org.jboss.weld.bean.proxy.ContextBeanInstance.getInstance(ContextBeanInstance.java:77) [weld-core-1.1.2.Final.jar:2011-07-26 15:02]
	at org.jboss.weld.bean.proxy.ProxyMethodHandler.invoke(ProxyMethodHandler.java:87) [weld-core-1.1.2.Final.jar:2011-07-26 15:02]
	at cdi.SomeCDIBean$Proxy$_$$_WeldClientProxy.getNum(SomeCDIBean$Proxy$_$$_WeldClientProxy.java) [classes:]
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [:1.6.0_26]
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) [:1.6.0_26]
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) [:1.6.0_26]
	at java.lang.reflect.Method.invoke(Method.java:597) [:1.6.0_26]
	at javax.el.BeanELResolver.getValue(BeanELResolver.java:302) [jboss-el-api_2.2_spec-1.0.0.Final.jar:1.0.0.Final]
	at com.sun.faces.el.DemuxCompositeELResolver._getValue(DemuxCompositeELResolver.java:176) [jsf-impl-2.1.3-b02-jbossorg-2.jar:2.1.3-SNAPSHOT]
	at com.sun.faces.el.DemuxCompositeELResolver.getValue(DemuxCompositeELResolver.java:203) [jsf-impl-2.1.3-b02-jbossorg-2.jar:2.1.3-SNAPSHOT]
	at org.apache.el.parser.AstValue.getValue(AstValue.java:134) [jbossweb-7.0.1.Final.jar:7.0.2.Final]
	at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:187) [jbossweb-7.0.1.Final.jar:7.0.2.Final]
	at org.jboss.weld.el.WeldValueExpression.getValue(WeldValueExpression.java:55) [weld-core-1.1.2.Final.jar:2011-07-26 15:02]
	at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:109) [jsf-impl-2.1.3-b02-jbossorg-2.jar:2.1.3-SNAPSHOT]
	at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:194) [jboss-jsf-api_2.1_spec-2.0.0.Beta1.jar:2.0.0.Beta1]
	at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:182) [jboss-jsf-api_2.1_spec-2.0.0.Beta1.jar:2.0.0.Beta1]
	at javax.faces.component.UIOutput.getValue(UIOutput.java:169) [jboss-jsf-api_2.1_spec-2.0.0.Beta1.jar:2.0.0.Beta1]
	at com.sun.faces.renderkit.html_basic.HtmlBasicInputRenderer.getValue(HtmlBasicInputRenderer.java:205) [jsf-impl-2.1.3-b02-jbossorg-2.jar:2.1.3-SNAPSHOT]
	at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.getCurrentValue(HtmlBasicRenderer.java:355) [jsf-impl-2.1.3-b02-jbossorg-2.jar:2.1.3-SNAPSHOT]
	at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeEnd(HtmlBasicRenderer.java:164) [jsf-impl-2.1.3-b02-jbossorg-2.jar:2.1.3-SNAPSHOT]
	at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:875) [jboss-jsf-api_2.1_spec-2.0.0.Beta1.jar:2.0.0.Beta1]
	at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeRecursive(HtmlBasicRenderer.java:312) [jsf-impl-2.1.3-b02-jbossorg-2.jar:2.1.3-SNAPSHOT]
	at com.sun.faces.renderkit.html_basic.GroupRenderer.encodeChildren(GroupRenderer.java:105) [jsf-impl-2.1.3-b02-jbossorg-2.jar:2.1.3-SNAPSHOT]
	at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:845) [jboss-jsf-api_2.1_spec-2.0.0.Beta1.jar:2.0.0.Beta1]
	at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeRecursive(HtmlBasicRenderer.java:304) [jsf-impl-2.1.3-b02-jbossorg-2.jar:2.1.3-SNAPSHOT]
	at com.sun.faces.renderkit.html_basic.GridRenderer.renderRow(GridRenderer.java:185) [jsf-impl-2.1.3-b02-jbossorg-2.jar:2.1.3-SNAPSHOT]
	at com.sun.faces.renderkit.html_basic.GridRenderer.encodeChildren(GridRenderer.java:129) [jsf-impl-2.1.3-b02-jbossorg-2.jar:2.1.3-SNAPSHOT]
	at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:845) [jboss-jsf-api_2.1_spec-2.0.0.Beta1.jar:2.0.0.Beta1]
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1756) [jboss-jsf-api_2.1_spec-2.0.0.Beta1.jar:2.0.0.Beta1]
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1759) [jboss-jsf-api_2.1_spec-2.0.0.Beta1.jar:2.0.0.Beta1]
	at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:401) [jsf-impl-2.1.3-b02-jbossorg-2.jar:2.1.3-SNAPSHOT]
	at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:131) [jsf-impl-2.1.3-b02-jbossorg-2.jar:2.1.3-SNAPSHOT]
	at com.ocpsoft.pretty.faces.application.PrettyViewHandler.renderView(PrettyViewHandler.java:163) [prettyfaces-jsf2-3.3.2.jar:]
	at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:288) [jboss-jsf-api_2.1_spec-2.0.0.Beta1.jar:2.0.0.Beta1]
	at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:288) [jboss-jsf-api_2.1_spec-2.0.0.Beta1.jar:2.0.0.Beta1]
	at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:121) [jsf-impl-2.1.3-b02-jbossorg-2.jar:2.1.3-SNAPSHOT]
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) [jsf-impl-2.1.3-b02-jbossorg-2.jar:2.1.3-SNAPSHOT]
	at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139) [jsf-impl-2.1.3-b02-jbossorg-2.jar:2.1.3-SNAPSHOT]
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:594) [jboss-jsf-api_2.1_spec-2.0.0.Beta1.jar:2.0.0.Beta1]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:329) [jbossweb-7.0.1.Final.jar:7.0.2.Final]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.1.Final.jar:7.0.2.Final]
	at org.jboss.weld.servlet.ConversationPropagationFilter.doFilter(ConversationPropagationFilter.java:67) [weld-core-1.1.2.Final.jar:2011-07-26 15:02]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280) [jbossweb-7.0.1.Final.jar:7.0.2.Final]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.1.Final.jar:7.0.2.Final]
	at com.ocpsoft.pretty.PrettyFilter.doFilter(PrettyFilter.java:126) [prettyfaces-jsf2-3.3.2.jar:]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280) [jbossweb-7.0.1.Final.jar:7.0.2.Final]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.1.Final.jar:7.0.2.Final]
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:275) [jbossweb-7.0.1.Final.jar:7.0.2.Final]
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161) [jbossweb-7.0.1.Final.jar:7.0.2.Final]
	at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:139) [jboss-as-web-7.0.2.Final.jar:7.0.2.Final]
	at org.jboss.as.web.NamingValve.invoke(NamingValve.java:57) [jboss-as-web-7.0.2.Final.jar:7.0.2.Final]
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:154) [jbossweb-7.0.1.Final.jar:7.0.2.Final]
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) [jbossweb-7.0.1.Final.jar:7.0.2.Final]
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) [jbossweb-7.0.1.Final.jar:7.0.2.Final]
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:362) [jbossweb-7.0.1.Final.jar:7.0.2.Final]
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877) [jbossweb-7.0.1.Final.jar:7.0.2.Final]
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:667) [jbossweb-7.0.1.Final.jar:7.0.2.Final]
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:952) [jbossweb-7.0.1.Final.jar:7.0.2.Final]
	at java.lang.Thread.run(Thread.java:662) [:1.6.0_26]

Uhm… this might be what the wiki talks about.

Now, let’s try the workaround again. The exception handler is as follows:

package solder;

import javax.enterprise.context.NonexistentConversationException;
import javax.inject.Inject;

import org.jboss.seam.exception.control.CaughtException;
import org.jboss.seam.exception.control.Handles;
import org.jboss.seam.exception.control.HandlesExceptions;
import org.jboss.seam.logging.Logger;

import org.jboss.weld.context.http.HttpConversationContext;

@HandlesExceptions
public class JoshuaHandlers {
	@Inject
	private Logger logger;

	public void onNonexistentConversation(
			@Handles CaughtException evt,	HttpConversationContext conversationContext) {
		java.awt.Toolkit.getDefaultToolkit().beep(); // I added a sound effect ;P
		logger.error("NonexistentConversationException!\n" + evt.getException().getMessage(), evt.getException());
		evt.handled();
		conversationContext.activate(null); // Workaround WELD-855 - Create a new transient conversation.
	}
}

Yes! The view now renders

, and the console output is:

23:17:15,706 ERROR [solder.JoshuaHandlers] (http--127.0.0.1-8080-1) NonexistentConversationException!
WELD-000321 No conversation found to restore for id 778: org.jboss.weld.context.NonexistentConversationException: WELD-000321 No conversation found to restore for id 778
	at org.jboss.weld.jsf.WeldPhaseListener.activateConversations(WeldPhaseListener.java:112) [weld-core-1.1.2.Final.jar:2011-07-26 15:02]
	at org.jboss.weld.jsf.WeldPhaseListener.beforePhase(WeldPhaseListener.java:88) [weld-core-1.1.2.Final.jar:2011-07-26 15:02]
	at com.sun.faces.lifecycle.Phase.handleBeforePhase(Phase.java:228) [jsf-impl-2.1.3-b02-jbossorg-2.jar:2.1.3-SNAPSHOT]
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:99) [jsf-impl-2.1.3-b02-jbossorg-2.jar:2.1.3-SNAPSHOT]
	at com.sun.faces.lifecycle.RestoreViewPhase.doPhase(RestoreViewPhase.java:116) [jsf-impl-2.1.3-b02-jbossorg-2.jar:2.1.3-SNAPSHOT]
	at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118) [jsf-impl-2.1.3-b02-jbossorg-2.jar:2.1.3-SNAPSHOT]
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593) [jboss-jsf-api_2.1_spec-2.0.0.Beta1.jar:2.0.0.Beta1]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:329) [jbossweb-7.0.1.Final.jar:7.0.2.Final]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.1.Final.jar:7.0.2.Final]
	at org.jboss.weld.servlet.ConversationPropagationFilter.doFilter(ConversationPropagationFilter.java:67) [weld-core-1.1.2.Final.jar:2011-07-26 15:02]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280) [jbossweb-7.0.1.Final.jar:7.0.2.Final]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.1.Final.jar:7.0.2.Final]
	at com.ocpsoft.pretty.PrettyFilter.doFilter(PrettyFilter.java:126) [prettyfaces-jsf2-3.3.2.jar:]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280) [jbossweb-7.0.1.Final.jar:7.0.2.Final]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.1.Final.jar:7.0.2.Final]
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:275) [jbossweb-7.0.1.Final.jar:7.0.2.Final]
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161) [jbossweb-7.0.1.Final.jar:7.0.2.Final]
	at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:139) [jboss-as-web-7.0.2.Final.jar:7.0.2.Final]
	at org.jboss.as.web.NamingValve.invoke(NamingValve.java:57) [jboss-as-web-7.0.2.Final.jar:7.0.2.Final]
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:154) [jbossweb-7.0.1.Final.jar:7.0.2.Final]
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) [jbossweb-7.0.1.Final.jar:7.0.2.Final]
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) [jbossweb-7.0.1.Final.jar:7.0.2.Final]
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:362) [jbossweb-7.0.1.Final.jar:7.0.2.Final]
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877) [jbossweb-7.0.1.Final.jar:7.0.2.Final]
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:667) [jbossweb-7.0.1.Final.jar:7.0.2.Final]
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:952) [jbossweb-7.0.1.Final.jar:7.0.2.Final]
	at java.lang.Thread.run(Thread.java:662) [:1.6.0_26]

23:17:15,716 INFO  [faces.phaselisteners.MyPhaseListener] (http--127.0.0.1-8080-1) Before Phase: RENDER_RESPONSE 6
23:17:16,042 INFO  [faces.phaselisteners.MyPhaseListener] (http--127.0.0.1-8080-1) After Phase: RENDER_RESPONSE 6

So, what changed? The main differences between my configuration and Joshua’s are:

  • Different Seam version (me 3.1.0.Final, him 3.1.0.Beta2)
  • Added seam-faces (and its transitive dependencies: seam-imternational, joda-time, prettyfaces-jsf2)

I thinks seam-faces plays a great role in all this. So, I’l try to revert my configuration back to how it was at the beginning, and I will add seam-faces.

[...later...]

Yes! seam-faces was the missing piece.

Here’s the working pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>org.mycompany</groupId>
	<artifactId>SomeProject</artifactId>
	<packaging>war</packaging>
	<version>0.0.1-SNAPSHOT</version>
	<name>SomeProject</name>
	<build>
		<sourceDirectory>${basedir}/src</sourceDirectory>
		<outputDirectory>${basedir}/build/classes</outputDirectory>
		<resources>
			<resource>
				<directory>${basedir}/src</directory>
				<excludes>
					<exclude>**/*.java</exclude>
				</excludes>
			</resource>
		</resources>
		<plugins>
			<plugin>
				<artifactId>maven-war-plugin</artifactId>
				<configuration>
					<warSourceDirectory>${basedir}/WebContent</warSourceDirectory>
				</configuration>
			</plugin>
			<plugin>
				<artifactId>maven-compiler-plugin</artifactId>
				<configuration>
					<source>1.6</source>
					<target>1.6</target>
				</configuration>
			</plugin>
		</plugins>
	</build>

	<properties>
		<seam.version>3.1.0.Final</seam.version>
		<weld.version>1.1.2.Final</weld.version>
	</properties>

	<repositories>
		<repository>
			<id>JBoss1</id>
			<name>Public Repository Group</name>
			<url>https://repository.jboss.org/nexus/content/groups/public/</url>
		</repository>
		<repository>
			<id>JBoss2</id>
			<name>Public JBoss Repository Group</name>
			<url>http://repository.jboss.org/nexus/content/groups/public-jboss/</url>
		</repository>
		<repository>
			<id>JBoss3</id>
			<name>JBoss Releases</name>
			<url>https://repository.jboss.org/nexus/content/repositories/releases/</url>
		</repository>
	</repositories>

	<dependencies>
		<dependency>
			<groupId>org.jboss.spec</groupId>
			<artifactId>jboss-javaee-6.0</artifactId>
			<version>1.0.0.Final</version>
			<type>pom</type>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>org.jboss.weld</groupId>
			<artifactId>weld-core</artifactId>
			<version>${weld.version}</version>
			<scope>compile</scope>
		</dependency>
		<dependency>
			<groupId>org.jboss.solder</groupId>
			<artifactId>solder-api</artifactId>
			<version>${seam.version}</version>
			<scope>compile</scope>
		</dependency>
		<dependency>
			<groupId>org.jboss.solder</groupId>
			<artifactId>solder-impl</artifactId>
			<version>${seam.version}</version>
			<scope>runtime</scope>
		</dependency>
		<dependency>
			<groupId>org.jboss.seam.faces</groupId>
			<artifactId>seam-faces-api</artifactId>
			<version>${seam.version}</version>
			<scope>compile</scope>
		</dependency>
		<dependency>
			<groupId>org.jboss.seam.faces</groupId>
			<artifactId>seam-faces</artifactId>
			<version>${seam.version}</version>
			<scope>runtime</scope>
		</dependency>
		<dependency>
			<groupId>org.jboss.seam.international</groupId>
			<artifactId>seam-international-api</artifactId>
			<version>${seam.version}</version>
			<scope>compile</scope>
		</dependency>
		<dependency>
			<groupId>org.jboss.seam.international</groupId>
			<artifactId>seam-international</artifactId>
			<version>${seam.version}</version>
			<scope>runtime</scope>
		</dependency>
		<dependency>
			<groupId>joda-time</groupId>
			<artifactId>joda-time</artifactId>
			<version>1.6.2</version>
		</dependency>
		<dependency>
			<groupId>com.ocpsoft</groupId>
			<artifactId>prettyfaces-jsf2</artifactId>
			<version>3.3.2</version>
		</dependency>
	</dependencies>
</project>

Here’s the working exception handler:

package solder;

import javax.enterprise.context.NonexistentConversationException;
import javax.inject.Inject;

import org.jboss.solder.exception.control.CaughtException;
import org.jboss.solder.exception.control.Handles;
import org.jboss.solder.exception.control.HandlesExceptions;
import org.jboss.solder.logging.Logger;

import org.jboss.weld.context.http.HttpConversationContext;

@HandlesExceptions
public class JoshuaHandlers {

	@Inject
	private Logger logger;

	public void onNonexistentConversation(
			@Handles CaughtException<NonexistentConversationException> evt, HttpConversationContext conversationContext) {
		java.awt.Toolkit.getDefaultToolkit().beep();
		logger.error("NonexistentConversationException!\n" + evt.getException().getMessage(), evt.getException());
		evt.handled();
		conversationContext.activate(null); // Workaround WELD-855 - Create a new transient conversation.
	}
}

In the next posts I’ll show how to implement a Workspace Manager (a-la Seam 2).

 

[Fix] Seam keeps redeploying

On December 28, 2011, in Eclipse, JBoss AS 5, JBoss Tools, Seam, Seam 2, by lucasterdev

Does your Seam 2 app undeploy-redeploy in an infinite loop? Congratulations! You have just come across one of the well-known-for-years-and-easy-to-fix-though-ignored bugs of JBoss AS 5!

.*dia files are generated by JBoss Tools when editing faces-config.xml and pages.xml with the visual editor. JBoss AS 5 screws up when he finds such files….

Those files are listed neither in Package Explorer, nor in Project Explorer; they are listed in the Navigator view though.

Here’s the fix: remove all *.jsfdia and *.spdia files from your project or from the exploded .war

 

I’ll just leave this here…

On December 16, 2011, in Grails, Grails 2.0.0, Play!, by lucasterdev
Grails 2.0.0 error view

The new Grails 2.0.0 error view

Play! 1.2.x error view

Play! 1.2.x error view

 

m2eclipse: here we o again…

On December 6, 2011, in Eclipse 3.7 (Indigo), m2eclipse, Maven, by lucasterdev
Cannot complete the install because one or more required items could not be found.
  Software being installed: m2e connector for build-helper-maven-plugin     0.15.0.201109290002 (org.sonatype.m2e.buildhelper.feature.feature.group 0.15.0.201109290002)
  Missing requirement: m2e connector for build-helper-maven-plugin 0.15.0.201109290002 (org.sonatype.m2e.buildhelper 0.15.0.201109290002) requires 'bundle org.eclipse.m2e.jdt [1.1.0,1.2.0)' but it could not be found
  Cannot satisfy dependency:
    From: m2e connector for build-helper-maven-plugin 0.15.0.201109290002 (org.sonatype.m2e.buildhelper.feature.feature.group 0.15.0.201109290002)
    To: org.sonatype.m2e.buildhelper [0.15.0.201109290002]

Solution – add the following update site:

http://download.eclipse.org/technology/m2e/releases/1.1

Outcome:

An error occurred while collecting items to be installed
session context was:(profile=epp.package.jee, phase=org.eclipse.equinox.internal.p2.engine.phases.Collect, operand=, action=).
Multiple problems occurred while downloading.
Unable to read repository at http://download.eclipse.org/technology/m2e/milestones/1.1/1.1.0.20111108-0328/plugins/org.eclipse.m2e.refactoring_1.1.0.20111108-0328.jar.pack.gz.
Read timed out
Unable to read repository at http://download.eclipse.org/technology/m2e/milestones/1.1/1.1.0.20111108-0328/plugins/org.eclipse.m2e.refactoring_1.1.0.20111108-0328.jar.
Read timed out
Cannot complete the install because of a conflicting dependency.
  Software being installed: m2e connector for build-helper-maven-plugin 0.15.0.201109290002 (org.sonatype.m2e.buildhelper.feature.feature.group 0.15.0.201109290002)
  Software currently installed: m2e - Maven Integration for Eclipse 1.0.100.20110804-1717 (org.eclipse.m2e.feature.feature.group 1.0.100.20110804-1717)
  Only one of the following can be installed at once:
    Maven Integration for Eclipse 1.0.0.20110607-2117 (org.eclipse.m2e.core 1.0.0.20110607-2117)
    Maven Integration for Eclipse 1.1.0.20111108-0328 (org.eclipse.m2e.core 1.1.0.20111108-0328)
    Maven Integration for Eclipse 1.0.100.20110804-1717 (org.eclipse.m2e.core 1.0.100.20110804-1717)
  Cannot satisfy dependency:
    From: m2e - Maven Integration for Eclipse 1.0.100.20110804-1717 (org.eclipse.m2e.feature.feature.group 1.0.100.20110804-1717)
    To: org.eclipse.m2e.core [1.0.100.20110804-1717]
  Cannot satisfy dependency:
    From: m2e connector for build-helper-maven-plugin 0.15.0.201109290002 (org.sonatype.m2e.buildhelper 0.15.0.201109290002)
    To: bundle org.eclipse.m2e.core [1.1.0,1.2.0)
  Cannot satisfy dependency:
    From: m2e connector for build-helper-maven-plugin 0.15.0.201109290002 (org.sonatype.m2e.buildhelper.feature.feature.group 0.15.0.201109290002)
    To: org.sonatype.m2e.buildhelper [0.15.0.201109290002]
 

Git breviary

On November 19, 2011, in Git, by lucasterdev

Git is a distributed version control system.

“Distributed” = everyone has and entire copy/history of the repository, not just the current copy like in svn. All working copies are a full copy of the repository.

Because of that, in Git most operatins are local; hence, it’s fast (whilst svn is all remote and slow).

It’s used for Linux kernel, Xorg X Server, Android, VLC and others…

 

Single developer mode

Tell git who we are:

git config –global user.name “Luca”

git config –global user.email “luca@somemail.com”

Use colors:

git config –global color.diff auto

git config –global color.status auto

git config –global color.branch auto

Settings are saved in %USER_HOME%/.gitconfig

Create a project

mkdir SomeProject

cd SomeProject

Set up the repository for our project

(we are in SomeProject folder)

git init

> Initialized empty Git repository in %USER_HOME/luca/SomeProject/.git/

(Yes, the repo has to be inside the project folder)

Get info on the repo:

git status

git log

Commit changes is a 2-step process

Why? Because we my want to have files that are only for personal use but have no bearing on the project itself. (example: notes and sketches)

Git commits only changes to files that we staged for commit.

1. Add a file to the repository and stage it for commit

git add nameoffile

2. Commit changes

git commit -m ‘some message’

Each commit gets a SHA1 hash number for data integrity.

Or you can perform steps 1. and 2. in once:

git commit -a

Empty the staging area:

git reset

Empty the staging area and revert the changes to the files:

git reset –hard

Create a remote repo

A remote repo can be an external drive or a remote server accessed through ssh.

cd G:  // an external drive, for instance

md Backup

cd Backup

git init –bare // this reates a remote repo

Add a remote repo to our project to push to

git remote add remote_name path_or_url_to_the_remote

If remote_name == “origin”, it will be the default remote server git pushes to.

Push changes to a remote repo

If the remote is empty, you also create the master branch

git push remote_name master

Following pushes:

git push remote_name

 

Multiple developer mode

The remote repo had better be a server!

Protocols to access the server: WebDav, git://, SSH

Create a remote SSH repository

ssh luca@sshservername

> enter password

mkdir export/git

cd export/git

mkdir ProjectServer

cd ProjectServer

git init –bare –shared

exit // exit the ssh session

Add the remote SSH server to push to

(we are in SomeProject folder)

git remote add remote_server_name luca@sshservername:/export/git/ProjectServer

If server_name == “origin”, it will be the default remote server git pushes to.

Push to the SSH remote

git push origin master

> enter ssh password

Before doing push, remember to do fetch+rebase!

Fetching changes is a 2 step process

git fetch remote_name // gets the changes

git rebase remote_name/branch_name // applies changes to our local repo

> enter ssh password

Remove a remote

git remote rm remote_name

 

Github

Add a remote github repo

git remote add origin git@github.com:username/repo_name.git // github creates ssh repos

Clone: creates a local repo cloning the contents of the remote repo

git clone git@github.com:username/repo_name.git

 

More on Rebase

1. Reverts your local repo changes back to where the local was the same as the remote.

2. Applies changes from the remote.

3. Adds your changes back on top.

 

Pull

1. Applies the remote’s changes on top of our local’s.

 

Useful WordPress plugins

On October 28, 2011, in Wordpress, by lucasterdev
  • W3 Total Cache / WP Super cache (for caching)
  • All in one SEO Pack (for SEO optimization)
  • Google XML Sitemaps (for SEO optimization)
  • SI CAPTCHA Anti-Spam (for spam)
  • SyntaxHighlighter Evolve (for syntax highlighint)
 

Make PlayOnLinux work in Ubuntu 11

On October 26, 2011, in PlayOnLinux, Ubuntu, Ubuntu 11, Wine, by lucasterdev

Do NOT install PlayOnLinux from the Ubuntu Software Center!

First, install/update some required libraries:

sudo apt-get install debhelper libpq-dev libwxgtk2.8-dev libxml2-dev

Then, update the repo:

wget -q "http://deb.playonlinux.com/public.gpg" -O- | sudo apt-key add -

sudo wget http://deb.playonlinux.com/playonlinux_natty.list -O /etc/apt/sources.list.d/playonlinux.list

sudo apt-get update

Finally, install PlayOnLinux:

sudo apt-get install playonlinux

 
 

Make Web Services work with JBoss AS 7

On October 25, 2011, in JBoss AS 7, Web Service, by lucasterdev

1. Use JBoss AS 7, (the one with EVERYTHING), not the Web profile version. The Web profile version doesn’t support Web Services.

2. Open standalone.xml and add the following:

<extension module="org.jboss.as.webservices"/>

and the following:

<subsystem xmlns="urn:jboss:domain:webservices:1.0" xmlns:javaee="http://java.sun.com/xml/ns/javaee" xmlns:jaxwsconfig="urn:jboss:jbossws-jaxws-config:4.0">
    <wsdl-host>
        localhost
    </wsdl-host>
    <modify-wsdl-address>
        true
    </modify-wsdl-address>
    <endpoint-config>
        <jaxwsconfig:config-name>
            Standard-Endpoint-Config
        </jaxwsconfig:config-name>
    </endpoint-config>
    <endpoint-config>
        <jaxwsconfig:config-name>
            Recording-Endpoint-Config
        </jaxwsconfig:config-name>
        <jaxwsconfig:pre-handler-chains>
            <javaee:handler-chain>
                <javaee:protocol-bindings>
                    ##SOAP11_HTTP ##SOAP11_HTTP_MTOM ##SOAP12_HTTP ##SOAP12_HTTP_MTOM
                </javaee:protocol-bindings>
                <javaee:handler>
                    <javaee:handler-name>
                        RecordingHandler
                    </javaee:handler-name>
                    <javaee:handler-class>
                        org.jboss.ws.common.invocation.RecordingServerHandler
                    </javaee:handler-class>
                </javaee:handler>
            </javaee:handler-chain>
        </jaxwsconfig:pre-handler-chains>
    </endpoint-config>
</subsystem>

Some links, as reference:

http://community.jboss.org/message/631303?tstart=0