Thursday, March 27, 2014

Starting with EJB3(Eclipse Kepler and JBoss 7.1.1 embedded)


Here are to configure an eclipse project to run a small EJB3 example....

My current configuration is:
JDK 1.7
JBoss AS 7.1.1.Final(jboss Eclipse embedded configuration, see here)
JBoss Tools 4.1.2.Final installed in Eclipse(see here)
Eclipse Kepler for JavaEE developer
all on my Debian Wheezy....

We configure two project. One for the server side application. The other one for the client; we create a Dynamic Web Project for this last one. With a jsp file, within a button that starts all the process flow.

Let's we start with the server side application.

1) Under Eclipse File --> New --> EJB Project
I choose the name StartingWithEJB3_ServerSideAppl


Choose "JBoss 7.1 Runtime"(or what JBoss version you have) under "Target runtime" combo menu.
Choose "3.1" under "EJB module version" combo menu.

Then you can click on Finish.

2) Now we have to created two classes. All under "ejbModule" folder.
The first one will be our Stateless Session Bean.
The logic business class.
So, right click on the ejbModule folder --> New --> Other --> Session Bean (EJB 3.x)


Choose a new Java package, that will be created... I give com.test.server.business
Than choose the class name, I give StatelessServerBean
At State type choose Stateless,
and into "Create business interface" section select the "Remote" check field, and I put as name StatelessServerBeanInterface
This field will create the remote Interface for the stateless bean we have created.

This is the content of the com.test.server.business.StatelessServerBean class

package com.test.server.business;

import javax.ejb.Stateless;

/**
 * Session Bean implementation class StatelessServerBean
 * @author Maurizio Franco
 *         http://maurizio-franco.blogspot.it
 *         maurizio.franco@ymail.com
 */
@Stateless
public class StatelessServerBean implements StatelessServerBeanInterface {
    public StatelessServerBean() {
    }

    public String executeTestMethod() {
        return "executeTestMethod invoked!!!";
    }
}


This is the content of the com.test.server.business.StatelessServerBeanInterface interface

package com.test.server.business;

import javax.ejb.Remote;

/**
 * StatelessServerBean interface
 * @author Maurizio Franco
 *         http://maurizio-franco.blogspot.it
 *         maurizio.franco@ymail.com
 */
@Remote
public interface StatelessServerBeanInterface {
    public String executeTestMethod();
}



3) Now we provide to create the second application. The client side application. With a Dynamic Web Project.

Click on New --> Dynamic Web Project


I Choose StartingWithEJB3_ClientAppl as project name.
"JBoss 7.1 Runtime" as "Target runtime"
and "3.0" as Dynamic web module version.
In configuration I had leaved "Default Configuration for JBoss 7.1 Runtime".

Than click on Finish.

4) Under project root create a new folder, I call it resources.
Under it, create a new properties file, I named it jboss-ejb-client.properties
This is its content:

remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED=false
remote.connections=default

remote.connection.default.host=localhost
remote.connection.default.port = 4447


remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS=false

After create it, we have to put it into the class path.
So right-click on the project, Properties --> Java Build Path --> Libraries
Click on the button, on the right, "Add Class Folder" and we have to flag the check button for resources folder under our project.



5) Under src folder now we have to create to packages.
com.ejb3.client.test and com.ejb3.client.test.servlet

6) Under com.ejb3.client.test we have to create to classes.
First one is ContextProvider.
It contains:

package com.ejb3.client.test;

import java.util.Properties;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;

public class ContextProvider {

    private static Context initialContext;

    private static final String PKG_INTERFACES = "org.jboss.ejb.client.naming";

    public static Context getInitialContext() throws NamingException {
        if (initialContext == null) {
            Properties properties = new Properties();
            properties.put(Context.URL_PKG_PREFIXES, PKG_INTERFACES);

            initialContext = new InitialContext(properties);
        }
        return initialContext;
    }
}

7) The other one is EJBApplicationTestClient
It contains:

package com.ejb3.client.test;

import javax.naming.Context;
import javax.naming.NamingException;


import com.test.server.business.StatelessServerBean;
import com.test.server.business.StatelessServerBeanInterface;

public class EJBApplicationTestClient {
   
    public static void main(String[] args) {
        System.out.println(EJBApplicationTestClient.class.getName() + ".main - START");
        StatelessServerBeanInterface bean = doLookup();
        System.out.println(EJBApplicationTestClient.class.getName() + ".main - DEBUG - Call server business logic method: " + bean.executeTestMethod());
    }

    public static StatelessServerBeanInterface doLookup() {
        System.out.println(EJBApplicationTestClient.class.getName() + ".doLookup - START");
        Context context = null;
        StatelessServerBeanInterface bean = null;
        try {
            System.out.println(EJBApplicationTestClient.class.getName() + ".doLookup - DEBUG - Obtaining Context");
            context = ContextProvider.getInitialContext();
            System.out.println(EJBApplicationTestClient.class.getName() + ".doLookup - DEBUG - Generate JNDI Lookup name");
            String lookupName = getLookupName();
            System.out.println(EJBApplicationTestClient.class.getName() + ".doLookup - DEBUG - Lookup and cast");
            bean = (StatelessServerBeanInterface) context.lookup(lookupName);
            System.out.println(EJBApplicationTestClient.class.getName() + ".doLookup - DEBUG - remote server bean successfully looked up..");
        } catch (NamingException e) {
            e.printStackTrace();
        }
        return bean;
    }

    private static String getLookupName() {
        System.out.println(EJBApplicationTestClient.class.getName() + ".getLookupName - START");
        //The app name is the EAR name of the deployed EJB without .ear suffix.
        //Since we haven't deployed the application as a .ear, the app name for us will be an empty string
      
        String appName = "";

        //The module name is the JAR name of the deployed EJB without the .jar suffix - in this case is the name of the Project..
       
        String moduleName = "StartingWithEJB3_ServerSideAppl";

        //AS7 allows each deployment to have an (optional) distinct name.
        //This can be an empty string if distinct name is not specified.
        String distinctName = "";

        System.out.println(EJBApplicationTestClient.class.getName() + ".getLookupName - DEBUG - Get EJB bean implementation class name");
        String beanName = StatelessServerBean.class.getSimpleName();
        System.out.println(EJBApplicationTestClient.class.getName() + ".getLookupName - DEBUG - beanName: " + beanName);
       
        System.out.println(EJBApplicationTestClient.class.getName() + ".getLookupName - DEBUG - Get fully qualified remote interface name");
        final String interfaceName = StatelessServerBeanInterface.class.getName();
        System.out.println(EJBApplicationTestClient.class.getName() + ".getLookupName - DEBUG - interfaceName: " + interfaceName);
       
        System.out.println(EJBApplicationTestClient.class.getName() + ".getLookupName - DEBUG - Create a look up string name");
        String name = "ejb:" + appName + "/" + moduleName + "/" + distinctName    + "/" + beanName + "!" + interfaceName;
        System.out.println(EJBApplicationTestClient.class.getName() + ".getLookupName - DEBUG - lookup up name: " + name);
       
        return name;
    }
}

WARNING!!!! I pick the background to red to pay attention to the moduleName, it must be the server module name(normally the name of the server application gived to the eclipse project)

8) Next, under com.ejb3.client.test.servlet we create a Servlet class.
Its name is TestServlet and it contains:

package com.ejb3.client.test.servlets;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.ejb3.client.test.EJBApplicationTestClient;
import com.test.server.business.StatelessServerBeanInterface;

/**
 * Servlet implementation class TestServlet
 */
@WebServlet("/TestServlet")
public class TestServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
      
    /**
     * @see HttpServlet#HttpServlet()
     */
    public TestServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {       
        System.out.println(TestServlet.class.getName() + ".main - START");
        StatelessServerBeanInterface bean = EJBApplicationTestClient.doLookup();
        //Call server business logic method
        System.out.println(TestServlet.class.getName() + ".main - DEBUG - " + bean.executeTestMethod());        
    }


}




9) Now we have surely some errors on the Servlet and on the EJBApplicationTestClient class. Some classes used are not resolved.
So we have to import the jar file of the Server application.
So we do it right clicking on the Server Side Application, in my case on the 
StartingWithEJB3_ServerSideAppl project, (remember the Java EE perspective) go under "Export" --> EJB JAR file  

Our server application project selected in the EJB Project text field.
Than in the Destination text filed we have(with "Browse.." button) to point to:
%ECLIPSE_WORKSPACE_FOLDER/StartingWithEJB3_ClientAppl/WebContent/WEB-INF/lib






After give an F5 on the client project. Only with this forced refresh the project will see the server application jar.


10) We have at the last point. Create a simple jsp file to invoke all the process. A simple page that through the button pression will call the
TestServlet thats using the EJBApplicationTestClient class will invoke the remote(on the server) instance of StatelessServerBean to call the executeTestMethod()
The index.jsp contains:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Jsp test page for invoke ejb3 test client class...</title>
</head>
<body>
    <form action="${pageContext.request.contextPath}/TestServlet">
        <h1>After clicking see the server console output....</h1>
        <input type="submit" value="invoke ejb3 client application"/>
    </form>
</body>
</html> 



That's all. 
You can find all this small example in a branch of sourceforge.net ready for download.
The urls for Anonymous download(no password required) are:

svn://svn.code.sf.net/p/mauriziofranco/code/StartingWithEJB3/trunk/StartingWithEJB3_Server 

svn://svn.code.sf.net/p/mauriziofranco/code/StartingWithEJB3/trunk/StartingWithEJB3_Client

Or for checkout directly from command line give these:

svn checkout svn://svn.code.sf.net/p/mauriziofranco/code/StartingWithEJB3/trunk/StartingWithEJB3_Server  mauriziofranco-code

svn checkout svn://svn.code.sf.net/p/mauriziofranco/code/StartingWithEJB3/trunk/StartingWithEJB3_Client  mauriziofranco-code

Bye...

Wednesday, March 26, 2014

Eclipse Kepler: configure JBoss 7 Application Server(Community version) as local instance. The quick developer configuration.

Current environment is
JDK 1.7
Eclipse Kepler 4.3.0
JBoss Tools already installed(version 4.1.2.Final)(if not yet installed please see here)
JBoss Application Server 7.1.1 (COMMUNITY VERSION)downloaded(from here) and installed.

1) Under Eclipse go under Java EE Perspective(in the high on the right, or click on "Window" --> "Open Perspective" --> "Other" --> and here find and choose Java EE)

2) In the low area, in the "Servers" tab, right click and choose New --> Server

3) Here choose your JBoss AS version, under JBoss Community menu folder, in this case "JBoss AS 7.1"


4) Than point to the right home directory of your JBoss installation.


5) Than finish.

That's all. You have now a local instance of the JBoss Community Server into Eclipse Kepler correctly configured...

6) Tests it: right click on the server --> "Start"
Once JBoss is started, from browser point to http://localhost:8080


Bye...

Eclipse Kepler: installing JBoss Tools 4.1.2.Final

My target is that of install only the necessary to execute the local/embedded(to Eclipse) version of JBoss Application Server, and to create and develop a EJB3 project.
This post is only for the installation of the JBoss Tools plugin for Eclipse Kepler.
At now the JBoss Tools version is the 4.1.2.Final for Kepler.

1) Under Eclipse click on "Window" --> "Install New Software" --> "Add" (on the right)
Put JBOSS_TOOLS(or what you want) as alias
and the url:
http://download.jboss.org/jbosstools/updates/stable/kepler


 2) From the list of additional plugins to install choose(it's the minimal requirements for my target...):

- JBoss Application Development
- JBoss Tools And Java EE Development

Then click on Next, Accept the Licenses and click on Finish to starting the downloading and installation of all....(P.S.: different windows will prompted to advise that unsigned software will be installed.... obviously click on "Yes to All"). And yes also to the restart of Eclipse.

That's all...

Bye...

Tuesday, March 25, 2014

Starting with Struts 2(Eclipse Kepler and Tomcat 7 embedded)

Here are to configure a small eclipse project to run a small Struts 2 example project....

My current configuration is:
JDK 1.6
Tomcat 7(eclipse embedded configuration)
Eclipse Kepler for JavaEE developer
Struts 2.3.16.1(refer to Struts Project Home Page)
all on my Debian Wheezy.....

1) Download from Struts site the latest(at now the 2.3.16.1 version) version of .zip file available. Unzip it.

2) Under Eclipse create a new Dynamic Web Project.
Choose a custom name(I choose StartingWithStruts), the target runtime(Tomcat 7 previously configurated) and after in the "Dynamic Web Module Version" combo menu choose the 2.5 specific.
Then next, and choose click on the generate web deployment descriptor(web.xml file) radio button.
Then Finish.

3)Copy into WEB-INF/lib folder these libraries that you find under struts_home_resources_folder directory that you created when you downloaded and unzipped the struts zip file.

commons-fileupload-1.3.1.jar
commons-io-2.2.jar
commons-lang3-3.1.jar
commons-logging-1.1.3.jar
freemarker-2.3.19.jar
javassist-3.11.0.GA.jar
ognl-3.0.6.jar
struts2-core-2.3.16.1.jar
xwork-core-2.3.16.1.jar

Ensure you have into your classpath(right click on the project, Properties, Java Build Path, libraries)  "Web App Libraries" library setted.



4) Add in web.xml the filter StrutsPrepareAndExecuteFilter class in every time a page is called. Update web.xml in this way:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>StartingWithStruts</display-name>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
  <filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>      
    </filter>
    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
</web-app>


5)Create a package com.test within our first class LoginAction
that maps our first jsp page, a login form.
Note the execute method, that is the action called when form button is performed...
Note the extension of ActionSupport class that will allow us to use the getText method(to get properties from resource bundle file)

package com.test;

import com.opensymphony.xwork2.ActionSupport;

/**
 * Class that maps our first jsp page, a simple login form
 * @author Maurizio Franco
 *         http://maurizio-franco.blogspot.it
 *         maurizio.franco@ymail.com
 */
public class LoginAction extends ActionSupport {

    private String username ;
    private String password ;
    /**
     * @return the username
     */
    public String getUsername() {
        return username;
    }
    /**
     * @param username the username to set
     */
    public void setUsername(String username) {
        this.username = username;
    }
    /**
     * @return the password
     */
    public String getPassword() {
        return password;
    }
    /**
     * @param password the password to set
     */
    public void setPassword(String password) {
        this.password = password;
    }
   
    /*
     * Performs a simple check if username.equals(password)
     * It returns a String that maps the next page where the flow is redirected.
     */
    public String executeLogin () {
        String returnValue = "" ;       
        if (username.equals(password)) {
            returnValue = "loginOK" ;
        } else {
            addActionError(getText("error.login"));
            returnValue = "loginKO" ;
        }
        return returnValue ;
    }

}



 6) Under WebContent I create a two jsp files.
First one is index.jsp file that contains:

<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<html>
    <head>
        <title>StartingWithStruts</title>
    </head>
   
    <body>
        <h2>StartingWithStruts - Simple Login Form</h2>
        <s:actionerror />
        <s:form action="login.action" method="post">
            <s:textfield name="username" key="label.username" size="20" />
            <s:password name="password" key="label.password" size="20" />
            <s:submit method="executeLogin" key="label.login" align="center" />
        </s:form>
    </body>
</html>

Then loginOK.jsp, that contains a simple page to give the success login message.

<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
<title>Welcome page...</title>
</head>

<body>
    <h2>User <s:property value="username" /> logged successfully!!!</h2>
</body>
</html>

7) Then we have to add in the classpath two files. The resources bundle file, that I call messages.properties and I add it under src folder
It contains this:

label.username= Username
label.password= Password
label.login= Login
error.login= Invalid Username/Password. Please try again.

Then directly under src folder I create a struts.xml file with this:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
    <constant name="struts.custom.i18n.resources" value="messages" />

    <package name="default" extends="struts-default" namespace="/">
        <action name="login" method="executeLogin" class="com.test.LoginAction">
            <result name="loginOK">loginOK.jsp</result>
            <result name="loginKO">index.jsp</result>
        </action>
    </package>
</struts>



That's all.
Start the embedded Tomcat and point to http://loaclhost:8080/YOUR_PROJECT_NAME/index.jsp

You can fine this smaill project illustreted by me, under a sourceforge.net branch. Ready for download via SVN.
This is the direct url:
svn://svn.code.sf.net/p/mauriziofranco/code/StartingWithStruts/trunk/StartingWithStruts
or this is command for shell:
svn checkout svn://svn.code.sf.net/p/mauriziofranco/code/StartingWithStruts/trunk/StartingWithStruts  mauriziofranco-code



For other documentation and examples refer to http://struts.apache.org/release/2.2.x/docs/home.html

Bye....

 

Sunday, March 23, 2014

Play DVD under Debian Wheezy

Edit /etc/apt/sources.list and add this line....

deb http://www.deb-multimedia.org wheezy main non-free
(refer to this link for more info )

Than give these command from command line....

apt-get update
 apt-get upgrade
apt-get install deb-multimedia-keyring
apt-get upgrade
apt-get update

apt-get install libavcodec54 libdvdcss

Now you are ready.....
Last thing.....
I suggest to use VLC as player
So if you have not installed it, give(from command line):

apt-get install vlc

Bye...


Friday, March 21, 2014

Starting with Web Services(Eclipse Kepler, Tomcat 7)

Here is a small guide to learn how web services run and how Eclipse simplifies the developer job.

The configuration expected is
Java 6
Eclipse Kepler for JavaEE developer
Tomcat 7 (Eclipse embedded configuration)

1) Under Eclipse create a new Dynamic Web Project.
Choose a custom name(remember this will be the server side appl), the target runtime(Tomcat 7 previously configurated) and after in the "Dynamic Web Module Version" combo menu choose the 2.5 specific. Then finish(if you want customize the other fields to choose in the others windows.

2) I create 2 classes.
One is my bean class that is the object that "travel" in the communication between my smalls server and client applications.... 
It's com.test.TestMessage and this is the content:

package com.test;

/**
 * 
 * Test bean class with simple string message property
 * 
 * @author Maurizio Franco
 *         http://maurizio-franco.blogspot.it
 *         maurizio.franco@ymail.com
 */
public class TestMessage {
   
    private String message ;

    /**
     * @return the message
     */
    public String getMessage() {
        return message;
    }

    /**
     * @param message the message to set
     */
    public void setMessage(String message) {
        this.message = message;
    }
    



3) This is the com.test.TestProvider that is the class that will provide the methods(in this case only one: getMessage) as endpoints for this server side application.


package com.test;

/**
 *
 * Test class, provides a simple method that returns a TestMessage instance.
 *
 * @author Maurizio Franco
 *         http://maurizio-franco.blogspot.it
 *         maurizio.franco@ymail.com
 */
public class TestProvider {

    public TestMessage getMessage () {
        TestMessage tm = new TestMessage () ;
        tm.setMessage("Prova messaggio di test...");
        return tm ;
    }
   
}



4) Now we are ready to produce the wsdl file that is at the base of the WebServices architecture.
Click on the project and choose New --> Web Service
In the Service implementation we have to choose the TestProvider class
(so put the complete name com.test.TestProvider)
Then we can choose the only Deploy service setting(see the image above) and ensure that under "Configuration:" you have
- Server runtime Tomcat v.7.0 Server (or the server runtime you prefer)
- Web service runtime: Apache Axis (that's the lib Eclipse will use to produce the wsdl)
- Service project: StartingWithWebServices_Server (that's the name of my project, so you select the yours)
Then click on Finish

Well, you have ended the procedure to build your server side application.
Ensure Eclipse have added into Tomcat(embedded) the application into the deployed list. If no add it.
Now we have to create a client side application.

5) Create another Dynamic Web Project with the same specifics of the previously(this will be the client side appl).

6) Point on the TestProvider.wsdl that is in the previously project(the server side application) into WebContent/wsdl folder
Select "Test client", the as hight as possible option and then click on finish.
Ensure you have on the right, under Configuration: Client project: that your project name is correctly indicated(TestWSClient is the current name of my project).
We choose the "Test client" option to produce also, the tests jsp files for quickly try all the "game".





Ensure you have the client application into Tomcat(embedded) deployed applications.

Go under your browser and point to:
http://loaclhost:8080/StartingWithWSClient/sampleTestProviderProxy/TestClient.jsp

where  StartingWithWSClient is the Context name that I give to my project....

Here you can see three methods added as default from wsdl generator, more the method contained into the TestProvider class.
The getMessage method.
If you click on it in the center frame you can see two buttons; clicking on invoke button, in the above frame you can see the result of the method invocation on the server side application.

This should be a quick way to see how to invoke from a jsp file a method, and relative response from the server side application, all through web service architecture.


You can find these small applications(the client and the server sided) under sourceforge.net site, ready to download, via SVN.
The url are:
svn://svn.code.sf.net/p/mauriziofranco/code/StartingWithWebServices/trunk/StartingWithWebServices_Server
svn://svn.code.sf.net/p/mauriziofranco/code/StartingWithWebServices/trunk/StartingWithWebServices_Client
And the istructions from command line are:
svn checkout svn://svn.code.sf.net/p/mauriziofranco/code/StartingWithWebServices/trunk/StartingWithWebServices_Server  mauriziofranco-code
svn checkout svn://svn.code.sf.net/p/mauriziofranco/code/StartingWithWebServices/trunk/StartingWithWebServices_Client  mauriziofranco-code

That's all.....
Bye..

Wednesday, March 19, 2014

JPA and MySQL... quick smart guide(with Eclipse)

Here are to configure a small eclipse project to run JPA capabilities on a mysql database.....

My current configuration is:
JDK 1.6
Eclipse Kepler for JavaEE developer
MySql 5.5
Mysql_jdbc_connector (to connect your java application to mysql db)
EclipseLink 2.5 (provides advanced support for leading relational databases)
all on my Debian Wheezy.....

1)Under Eclipse, create a new "JPA Project".
Insert a custom name. Leaves all the default settings(none target runtime, JPA Version 2.1, Basic JPA Configuration).
Going ahead, setting "EclipseLink 2.5.x" in the Platform combo menu.
Next in the JPA Implementation menu select User Library, then with the button image "Manage Libraries" create twe variables with the relative mapping to three libraries, as above:
-  ECLIPSELINK alias variable that points to $ECLIPSELINK_HOME_DIR/*.jar (where *.jar means some of the libraries under the $ECLIPSELINK_HOME_DIR folder and his subfolders, please see the image above)
- MYSQL_CONNECTOR alias variable that points to $MY_SQL_CONNECTOR_HOME_DIR/mysql-connector-java-5.1.29-bin.jar

Alternatives to the manual mapping of the ECLIPSELINK jars you can click instead on the "Download library..." button and select the version of your Eclipse IDE installed(in this case Eclipse Kepler).
This procedure is automatic and avoids also to download manually the EclipseLink .zip file.



Under the Connection combo menu, click on the "Add connection..."
Select MySQL, Next, Near the Drivers combo menu click on "New Driver Definition".
Under the "Name/Type" tab, select MySQL JDBC Driver, with System Version 5.1.
Under the "JAR List" tab, click on the only showed mysql-connector-java-5.1.0-bin.jar and click on the right on the "Edit JAR Zip..." button.
Select the mysql-connector that you have previously downloaded....
Then click on OK.
Insert your database connection info....:
database name(custom)
URL(complete URL) --> jdbc:mysql://your_database_ip:3306/your_db_name
User name: your db applicative user name
Password: your db applicative password
Click on "Save password" check box
and on the right click on the "Test Connection" button.
Go ahead only if you have a correct response to this db test connection...
If no, solve before this problem. You must have the connection working...


 Then click on "Finish" button.

2) This is an example script used to create my custom table Users
CREATE TABLE Users (
        id INT(5) NOT NULL AUTO_INCREMENT,
        username VARCHAR(20) NOT NULL,
        email    VARCHAR(40) NOT NULL,
        password VARCHAR(20) NOT NULL,               
        PRIMARY KEY(id)
); 

3)This is the content of my persistence.xml(under src/META-INF folder)
<?xml version="1.0" encoding="UTF-8" ?>
<persistence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
     version="2.0" xmlns="http://java.sun.com/xml/ns/persistence">
     <persistence-unit name="JPATestProject" transaction-type="RESOURCE_LOCAL">
          <class>com.bean.User</class>
          <properties>
              <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/your_db_name"/>
              <property name="javax.persistence.jdbc.user" value="your_db_user_name"/>
              <property name="javax.persistence.jdbc.password" value="db_user_password"/>
              <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
          </properties>
     </persistence-unit>
</persistence>

4)I create 2 classes.
One to map the Users db table.
It is com.bean.User class and contains this:

package com.bean;

import java.io.Serializable;
import java.lang.String;
import javax.persistence.*;

/**
 * Entity implementation class for Entity: User
 * @author Maurizio Franco
 *         http://maurizio-franco.blogspot.it
 *         maurizio.franco@ymail.com

 */
@Entity
@Table(name="Users")
public class User implements Serializable {

      
    @Id @GeneratedValue
    (strategy=GenerationType.IDENTITY)
    private int id;
   
    private String username;
    private String password;
    private String email;
    private static final long serialVersionUID = 1L;

    public User() {
        super();
    }  
    public int getId() {
        return this.id;
    }

    public void setId(int id) {
        this.id = id;
    }  
    public String getUsername() {
        return this.username;
    }

    public void setUsername(String username) {
        this.username = username;
    }  
    public String getPassword() {
        return this.password;
    }

    public void setPassword(String password) {
        this.password = password;
    }  
    public String getEmail() {
        return this.email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
  
}

5) The other is the class that tests if all the game works...
com.test.Test is the class and contains this....:

package com.test;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

import com.bean.User;


/**
 *
 * @author Maurizio Franco
 *         http://maurizio-franco.blogspot.it
 *         maurizio.franco@ymail.com

 *
 */ public class Test {

    private static final String PERSISTENCE_UNIT_NAME = "JPATestProject";
   

    public static void main(String[] args) {
        EntityManagerFactory emf =
                Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME);
            EntityManager em = emf.createEntityManager();
                        
              //INSER new User
              em.getTransaction().begin();
              User appo = new User () ;
                       
             
              appo.setUsername("username123AAABBB");
              appo.setEmail("provaJPA_123");             
              appo.setPassword("password123");   
              em.persist(appo);            
              em.flush();
              em.getTransaction().commit();
              em.close();
             
              System.out.println("Inserted new User.... with username: " + appo.getUsername() + " - email: " + appo.getEmail());
             
             
//              //SELECT for id.....
//              int userId = 26 ;
//              appo = (User) em.find(User.class, userId);
//             
//              System.out.println("username: " + appo.getUsername() + " - email: " + appo.getEmail());
             
    }

}


Now you are ready to go....:-)

Run Test class and provides to do the insert test of a new User object.

 
Refer to this oracle documentation for other Accessing a JPA Entity using an EntityManager. Or the other Entity Manager capabilities....

Refer to these other links.... Eclipse info, eclipseLink JPA configuration, EclipseLink JPA Examples.


Bye....

PS.: You find the small project of above, available for anonymous download under source forge....
The url to point to checkout is this(ready to run under Eclipse with anonymous username and no password required) :
svn://svn.code.sf.net/p/mauriziofranco/code/StartingWithJPA/trunk/StartingWithJPA
Or you can checkout from command line with this:
svn checkout svn://svn.code.sf.net/p/mauriziofranco/code/StartingWithJPA/trunk/StartingWithJPA mauriziofranco-code

P.P.S.: remember to customize the persistence.xml....

Have a good job.....

Thursday, March 13, 2014

Hibernate quick start guide(with Eclipse).

I used, at now, the latest versions of...
Eclipse Kepler for JavaEE developer
Hibernate ORM 4.3.4
Java 6
MySQL 5.5(more mysql connector... download here)
...all installed on my Debian Wheezy...

Here's a smart guide to create a very small project for Hibernate capabilities.

For Hibernate ORM 4.3.4 resources file, please refer to official site for download latest version.

1) Eclipse: create a new Java Project.

2) Add in the classpath(right click on the project -> properties -> Java Build Path -> Libraries -> Add external libraries) the libraries contained into the hibernate zip file(currently is hibernate-release-4.3.4.Final.zip) you download. You can put only the contents of the "required" folder.

3) Add in the classpath the mysql-connector_XXX.jar(from here) depends of the version of your db version and of connector version....

4) Into src folder create the bean class that maps the persistent object

package com.bean;


import java.io.Serializable;
import java.lang.String;

/**
 * Entity implementation class for Entity: User
 * @author Maurizio Franco
 *         http://maurizio-franco.blogspot.it
 *         maurizio.franco@ymail.com
 */
public class User implements Serializable {
    private static final long serialVersionUID = 1L;
   
    private int id;
   
    private String username;
    private String password;
    private String email;
   

    public User() {
        super();
    }  
    public int getId() {
        return this.id;
    }

    public void setId(int id) {
        this.id = id;
    }  
    public String getUsername() {
        return this.username;
    }

    public void setUsername(String username) {
        this.username = username;
    }  
    public String getPassword() {
        return this.password;
    }

    public void setPassword(String password) {
        this.password = password;
    }  
    public String getEmail() {
        return this.email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
  
}


5) Here is the table script....

CREATE TABLE Users (
               id INT(5) NOT NULL AUTO_INCREMENT,
               username VARCHAR(20) NOT NULL,
               email    VARCHAR(40) NOT NULL,
               password VARCHAR(20) NOT NULL,               
               PRIMARY KEY(id) 

);

6) Then the class thats provides to test the insert of data....

package com.test;

import org.hibernate.Session; 
import org.hibernate.SessionFactory; 
import org.hibernate.Transaction; 
import org.hibernate.cfg.Configuration;

import com.bean.User;



/**
 *
 * Test class, to run simple database operations...
 *
 * @author Maurizio Franco
 *         http://maurizio-franco.blogspot.it
 *         maurizio.franco@ymail.com
 */
public class StoreData {

    public static void main(String[] args) { 
        System.out.println("StoreData - START");
        //creating configuration object 
        Configuration cfg=new Configuration();
        //populates the data of the configuration file
        cfg.configure("hibernate.cfg.xml"); 
         
        //creating seession factory object 
        SessionFactory factory=cfg.buildSessionFactory(); 
         
        //creating session object 
        Session session=factory.openSession(); 
         
        //creating transaction object 
        Transaction t=session.beginTransaction(); 
             
        User e1=new User(); 
        e1.setUsername("usernamexxx"); 
        e1.setPassword("pwdxxx");
        e1.setEmail("mail@xxxx");
         
        session.persist(e1);//persisting the object 
         
        t.commit();//transaction is committed 
        session.close(); 
         
        System.out.println("StoreData - successfully saved");           
    } 

}




7) Now under the src folder you have to create two configuration files.
The first map the bean/persistent object. It's user.hbm.xml
Note that here we map the com.bean.User to the Users table.

<?xml version='1.0' encoding='UTF-8'?> 
<!DOCTYPE hibernate-mapping PUBLIC   "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 
 
 <hibernate-mapping> 
  <class name="com.bean.User" table="Users"> 
    <id name="id"> 
     <generator class="assigned"></generator> 
    </id> 
           
    <property name="username"></property> 
    <property name="password"></property>
    <property name="email"></property> 
           
  </class> 
           
 </hibernate-mapping>


8) the other configuration file maps contains database connection info.
Also this is under the src folder. It's hibernate.cfg.xml

<?xml version='1.0' encoding='UTF-8'?> 
<!DOCTYPE hibernate-configuration PUBLIC 
          "-//Hibernate/Hibernate Configuration DTD 3.0//EN" 
          "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> 

 
<hibernate-configuration> 
 
    <session-factory> 
        <property name="hbm2ddl.auto">update</property> 
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property> 
        <property name="connection.url">jdbc:mysql://localhost:3306/your_db_name</property> 
        <property name="connection.username">your_username</property> 
        <property name="connection.password">your_password</property> 
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property> 
    <mapping resource="user.hbm.xml"/> 
    </session-factory> 
 
</hibernate-configuration>


That's all.... or not?? Remember to customize your hibernate.cfg.xml....
in connection.url, connection.username and connection.password properties....

Execute the main method of StoreData class....
It will provides the simple insert operation...

You can find a small project(contains all you have seen up to here) into a branch of sourceforce.net svn.
It's ready to use...

The url is:
svn://svn.code.sf.net/p/mauriziofranco/code/StartingWithHibernate/trunk/StartingWithHibernate
And the istructions from command line are:
svn checkout svn://svn.code.sf.net/p/mauriziofranco/code/StartingWithHibernate/trunk/StartingWithHibernate  mauriziofranco-code

Bye..

Tuesday, March 11, 2014

HTML: center horizzontally body content(in according to css3)

Insert the content of your body element into this div...

<div style="display: flex;flex-direction: row;flex-wrap: wrap;justify-content: center;align-items: center;">
[..............Your content.......]
</div>

Bye...

Friday, March 7, 2014

Developing JSP: starting with JSTL

For introduce last version of JSTL into your project please download last version of jstl jar file. At the moment the 1.2 version.

Click here to download the 1.2 jstl jar file

Here you can find the JSP Standard Tag Library home page: https://jstl.java.net

Start you eclipse project putting the downloaded jar file into the WEB-INF/lib folder.
No more configuration are needed into web.xml(for servlet container with recently version specifications...).

For starting to use it, into the jsp point to the jstl library that you need...
For example:

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
[...]
 <fmt:setBundle basename="resources.messages"/>
//here I put my messages.properties file into my sources folder, into resources package...
[...]
<fmt:message key="homepage.title"/>
//this get the property value with homepage.title key


To start there is this Java EE 5 Online Tutorial(Chapter 7 - JavaServer Pages Standard Tag Library)

Instead refer to the online official javadoc for the full tld information.

Bye...

Installing jdk on 64 bit....: install.sfx.3886 not found

Attempting to install the precompiled Java binaries on a pure 64-bit Linux system fails with the following error message:

install.sfx.3886 not found

Install the ia32-libs package solves the problem.... give:

apt-get install ia32-libs


Be carefull on Ubuntu 13.10. 
Its repository doesn't provides ia32-ibs.
Here you have to install lib32z1


Bye....