Thursday, January 11, 2007


Regarding proper packaging files with project in NETBEANS 5.5



To package file with project having requered PATH in WAR you have
click on "Item" content field after typing PATH in PATH in WAR field.
Screen should look like on Windows:-





on Linux:-

In this case when you get back to this screen later it will look like on Windows:-





on Linux:-





If you just click "OK" after typing in PATH in WAR field , when you get back to this
screen you will find "PATH in WAR" field empty.
In this case packaging will place file in root folder of corresponding WAR archive.
instead of "WEB-INF" for example.
It works this way on Linux and on Windows.

Thursday, January 04, 2007


Facelets, (JBOSS) Seam, Netbeans and Glassfish



This posting demonstrates that we don't have to package components.xml
with sampleProject-war.



Working on second sample from :

Recent publication: Facelets, (JBOSS) Seam, Netbeans and Glassfish

I have commented out second entry in components.xml:-


<!DOCTYPE components PUBLIC
"-//JBoss/Seam Component Configuration DTD 1.1//EN"
"http://jboss.com/products/seam/components-1.1.dtd">

<components>

<component name="org.jboss.seam.core.init">
<property name="debug"> true </property>
</component>

<!--
<component name="org.jboss.seam.core.init">
<property name="jndiPattern"> java:comp/env/sampleProject-ejb/#{ejbName}/local </property>
</component>
-->

<component name="entityManager" class="org.jboss.seam.core.ManagedPersistenceContext">
<property name="persistenceUnitJndiName"> java:/sampleProject-ejbPU</property>
</component>

</components>




and kept web.xml's corresponding entry in place:-


<context-param>
<description>
</description>
<param-name>org.jboss.seam.core.init.jndiPattern</param-name>
<param-value>java:comp/env/sampleProject?ejb/#{ejbName}/local</param-value>
</context-param>
<listener>
<listener-class>org.jboss.seam.servlet.SeamListener</listener-class>
</listener>
<filter>
<filter-name>SeamRedirectFilter </filter-name>
<filter-class>org.jboss.seam.servlet.SeamRedirectFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>SeamRedirectFilter </filter-name>
<url-pattern>*.xhtml</url-pattern>
</filter-mapping>
<filter>
<filter-name>SeamExceptionFilter</filter-name>
<filter-class>org.jboss.seam.servlet.SeamExceptionFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>SeamExceptionFilter </filter-name>
<url-pattern >*.xhtml</url-pattern>
</filter-mapping>
<ejb-local-ref>
<ejb-ref-name>sampleProject?ejb/ActionBean/local</ejb-ref-name>
<ejb-ref-type>Session</ejb-ref-type>
<local>dummy.ActionLocal</local>
<ejb-link >ActionBean</ejb-link>
</ejb-local-ref>




Packaging components.xml with sampleProject-war, generated following
entry into C: \Solaris\AppServer\domains\domain1\logs\server.log during deployment:-


[#|2007-01-04T13:58:38.265+0300|WARNING|sun-appserver-pe9.0|javax.enterprise.resource.webcontainer.jsf.lifecycle|
_ThreadID=15;_ThreadName=httpWorkerThread-8080-1;_RequestID=02b398d6-1127-4c3d-9444-5c446d01a0a5;|
Could not instantiate Seam component:
action org.jboss.seam.InstantiationException:
Could not instantiate Seam component: action
at org.jboss.seam.Component.newInstance(Component.java:1722)
at org.jboss.seam.Component.getInstance(Component.java:1625)
at org.jboss.seam.Component.getInstance(Component.java:1592)
at org.jboss.seam.Component.getInstance(Component.java:1586)
at org.jboss.seam.jsf.SeamELResolver.getValue(SeamELResolver.java:39)
. . . . . . . . .




Configuration suggested above didn’t.
However entry:-


[#|2007-01-05T12:59:02.046+0300|WARNING|sun-appserver-pe9.0|javax.enterprise.system.core.classloading|
_ThreadID=11;_ThreadName=httpWorkerThread-4848-0;_RequestID=6735512c-cb12-4daf-9af8-406d320f710d;|
Input stream has been finalized or forced closed without being explicitly closed; stream instantiation
reported in following stack trace
java.lang.Throwable
at com.sun.enterprise.loader.EJBClassLoader$SentinelInputStream.(EJBClassLoader.java:1123)
at com.sun.enterprise.loader.EJBClassLoader.getResourceAsStream(EJBClassLoader.java:788)
. . . . . . . . . ..




showed up in both cases during deployment , but didn't affect running application
No packaging components.xml with sapmleProject-war has been done before running
project.Regarding proper packaging view also:-


Packaging files with projects issues in NetBeans 5.5


Snapshots:-














Unload NetBeans 5.5 and run deployed apps:-





Load NetBeans and perform database control:-



We are going to make a slight modification to original project.



*****************
ActionLocal.java
*****************


package dummy;
import javax.ejb.Local;
/**
* This is the business interface for Action enterprise bean.
*/
@Local
public interface ActionLocal {
public String registration ();
}




*********************
ActionBean.java
*********************


package dummy;
import dummy.entity.User;
import java.util.List;
import javax.ejb.Stateless;
import javax.faces.context.FacesContext;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import org.jboss.seam.annotations.Factory;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Outcome;
import org.jboss.seam.ejb.SeamInterceptor;

@Stateless
@Name( "action" )

public class ActionBean implements ActionLocal {
@In( create=true , required=true )
User user;

@PersistenceContext ( )
private EntityManager em;
public ActionBean ( ) { }
public String registration (){
List persons = em.createQuery("select x from User x where x.username=:username").setParameter("username", user.getUsername()).getResultList();
if (persons.size()==0)
{
em.persist(user);
return "success";
}
else
{
return "repeat";
}
}

}




***************************************************************
First client for sampleTemplate - template-client.xhtm
***************************************************************


<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html">
<body>
This text above will not be displayed.
<ui:composition template="/template.xhtml">
This text will not be displayed.
<ui:define name="title">
Registration Form
</ui:define>
This text will also not be displayed.
<ui:define name="body">
<ui:define name="content">
<h:form>
<h:inputText id="username" value="#{user.username}"/>
<h:inputText id="password" value="#{user.password}"/>
<h:commandButton value="Sign in" action="#{action.registration}"/>
</h:form>
</ui:define>
</ui:define>
This text will not be displayed.
</ui:composition>
This text below will also not be displayed.
</body>
</html>




****************************************************************
Second client for sampleTemplate -TemplateClientOk.xhtml
****************************************************************


<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html">

<body>

<ui:composition template="sampleTemplate.xhtml">

<ui:define name="top">
Registration done for:
</ui:define>

<ui:define name="content">
<h:form>
<h:outputText id="username" value="#{user.username}"/>
</h:form>
</ui:define>

</ui:composition>

</body>
</html>




**************************************************************
Third client for sampleTemplate -TemplateClientNO.xhtml
**************************************************************


<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html">

<body>

<ui:composition template="sampleTemplate.xhtml">

<ui:define name="top">
Already registered user's name:
</ui:define>
<ui:define name="content">
<h:form>
<h:outputText id="username" value="#{user.username}"/>
</h:form>
</ui:define>

</ui:composition>

</body>
</html>




*****************************
Add to faces-config.xml
*****************************


<navigation-rule>
<from-view-id>/template-client.xhtml</from-view-id>
<navigation-case>
<from-outcome>success</from-outcome>
<to-view-id>/templateClientOK.xhtml</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>repeat</from-outcome>
<to-view-id>/TemplateClientNO.xhtml</to-view-id>
</navigation-case>
</navigation-rule>





Now testing runs smoothly . Violation of primary key doesn't cause apps crash








Attempt to register twice is caught:-