Default Postgresql configuration only allow connection from localhost, if you want your PostgreSQL to accepting connection from other ip, there are some changes that you need to do.
First, you need to open file pg_hba.conf and edit “IPv4 local connections” part. Add other ip that you want to be connected to your database.
# IPv4 local connections: host all all 127.0.0.1/32 trust host all all 192.168.1.0/16 trust
After that, open file postgresql.conf and do some editing in “listen_addresses” part.
#listen_addresses = 'localhost' # what IP address(es) to listen on; listen_addresses = '*' # comma-separated list of addresses; # defaults to 'localhost', '*' = all # (change requires restart)
After restarting your postgresql , it can accept connection from other ip.
In this example im trying to create a simple application using MyBatis cache ability. What is cache anyway? A cache is designed to reduce traffic between your application and the database by conserving data already loaded from the database and put it whether in memory or in file. Database access is necessary only when retrieving data that is not currently available in the cache. So basically not all queries are taken from database, but from cache instead.
As you can see here, MyBatis has lots of caching products. But on this example im using OSCache.
First, as always, a simple mysql table
CREATE TABLE contoh
(
nama VARCHAR(10) NOT NULL,
alamat VARCHAR(200),
PRIMARY KEY (nama)
)
insert into contoh (nama, alamat) values ('edw', 'Jakarta');
insert into contoh (nama, alamat) values ('danu', 'Ciledug');
insert into contoh (nama, alamat) values ('kamplenk', 'Tangerang');
insert into contoh (nama, alamat) values ('tebek', 'BSD');
insert into contoh (nama, alamat) values ('nugie', 'Pamulang');
insert into contoh (nama, alamat) values ('samsu', 'Bandung');
And a simple java bean to represent my table,
package com.edw.bean;
import java.io.Serializable;
public class Contoh implements Serializable {
private String nama;
private String alamat;
// setter and getter
@Override
public String toString(){
return nama+" : "+alamat;
}
}
And a simple java interface to create query method
package com.edw.mapper;
import com.edw.bean.Contoh;
import java.util.List;
public interface ContohMapper {
List<Contoh> selectAll();
}
My xml query, please take a look at line 5.
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.edw.mapper.ContohMapper" >
<cache type="org.mybatis.caches.oscache.OSCache"/>
<resultMap id="ContohMap" type="com.edw.bean.Contoh" >
<id column="nama" property="nama" jdbcType="VARCHAR" />
<result column="alamat" property="alamat" jdbcType="VARCHAR" />
</resultMap>
<select id="selectAll" resultMap="ContohMap">
SELECT * FROM contoh
</select>
</mapper>
And my xml configuration to load all my xml queries,
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="UNPOOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost/test"/>
<property name="username" value="root"/>
<property name="password" value=""/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/edw/xml/ContohMapper.xml" />
</mappers>
</configuration>
A java class to load all my xml configurations,
package com.edw.config;
import java.io.Reader;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class MyBatisSqlSessionFactory {
protected static final SqlSessionFactory FACTORY;
static {
try {
Reader reader = Resources.getResourceAsReader("com/edw/xml/Configuration.xml");
FACTORY = new SqlSessionFactoryBuilder().build(reader);
} catch (Exception e){
throw new RuntimeException("Fatal Error. Cause: " + e, e);
}
}
public static SqlSessionFactory getSqlSessionFactory() {
return FACTORY;
}
}
Now i create my main java class.
package com.edw.main;
import com.edw.bean.Contoh;
import com.edw.config.MyBatisSqlSessionFactory;
import com.edw.mapper.ContohMapper;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.apache.log4j.Logger;
public class Main {
private Logger logger = Logger.getLogger(this.getClass());
public Main(){
}
private void execute(){
// test caching by doing select queries for 10 times
for (int i = 0; i < 10; i++) {
SqlSession session = MyBatisSqlSessionFactory.getSqlSessionFactory().openSession();
ContohMapper mapper = session.getMapper(ContohMapper.class);
List<Contoh> contohs = mapper.selectAll();
for (Contoh contoh : contohs) {
logger.debug(contoh);
}
session.close();
try {
logger.debug("sleeping for 3 seconds");
Thread.sleep(3000);
} catch (Exception e) {
}
}
}
public static void main(String[] args) {
Main main = new Main();
main.execute();
}
}
Last, is create 2 properties file. One is for log4j configuration, and another one for oscache configuration.
This is my log4j.properties
# Global logging configuration
log4j.rootLogger=DEBUG,stdout
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d [%c{1}] %-5p %c:%L - %m%n
And this is my oscache.properties
cache.capacity=1000 cache.memory=true cache.algorithm=com.opensymphony.oscache.base.algorithm.LRUCache
If you run the application, you’ll notice that for the second queries it will take from cache instead of database. This is what written on my log console.
2012-05-20 02:06:11,687 [Connection] DEBUG java.sql.Connection:27 - ooo Connection Opened 2012-05-20 02:06:11,688 [AbstractConcurrentReadCache] DEBUG com.opensymphony.oscache.base.algorithm.AbstractConcurrentReadCache:694 - get called (key=1247278887:1786588787:com.edw.mapper.ContohMapper.selectAll:0:2147483647:SELECT * FROM contoh) 2012-05-20 02:06:11,688 [LoggingCache] DEBUG org.apache.ibatis.cache.decorators.LoggingCache:27 - Cache Hit Ratio [com.edw.mapper.ContohMapper]: 0.6666666666666666 2012-05-20 02:06:11,689 [Main] DEBUG com.edw.main.Main:31 - edw : Jakarta 2012-05-20 02:06:11,689 [Main] DEBUG com.edw.main.Main:31 - danu : Ciledug 2012-05-20 02:06:11,692 [Main] DEBUG com.edw.main.Main:31 - kamplenk : Tangerang 2012-05-20 02:06:11,692 [Main] DEBUG com.edw.main.Main:31 - tebek : BSD 2012-05-20 02:06:11,692 [Main] DEBUG com.edw.main.Main:31 - nugie : Pamulang 2012-05-20 02:06:11,693 [Main] DEBUG com.edw.main.Main:31 - samsu : Bandung 2012-05-20 02:06:11,693 [Connection] DEBUG java.sql.Connection:27 - xxx Connection Closed 2012-05-20 02:06:11,693 [Main] DEBUG com.edw.main.Main:36 - sleeping for 3 seconds BUILD STOPPED (total time: 8 seconds)
Banyak kawan gw yang bertanya, apa sih untungnya gw belajar java? Apa sih yang gw dapet dari belajar java? Kira-kira investasi waktu belajar java, menguntungkan apa engga yah?
Coba gw share apa yang gw dapet dari thread programmer java di kaskus, semoga bisa menjawab kegalauan temen-temen gw semua.
why java?
1. Java adalah bahasa pemrograman yang verbose, static dan normalnya cuma ada 1 cara untuk melakukan sesuatu.
Tidak seperti Perl yang TIMTOWTDI (There Is More Than One Way To Do It) sehingga code yang dibikin pakai Java gampang dipahami oleh orang lain yang tidak bikin code itu. Akibatnya code Java bisa dipelihara dengan mudah oleh suatu team.
2. Dukungan terhadap database dan transaksi yang sangat bagus.
Sebagai contoh Java EE dari sejak awal mendukung declarative transaction management. Ini feature penting buat enterprise yang jarang didukung platform lain.
3. Web Java berjalan dalam suatu app server.
App server ini bisa mengatur dan memonitor pemakaian resource hardware dari applikasi Java. Jadi aplikasi Java berjalan dalam suatu lingkungan yang terkelola (managed environment).
4. Language nya kaku, jadi enak buat sesuatu yang besar.
Karena ke-kaku-an ini bisa di-lihat sebagai fondasi. Name spacingnya Java bagus, portabel, enak bikin library codenya. Kekakuan ini biasanya disebut sebagai “Strong and Static typed”. Ini yang membuat compiler bisa membantu pengecekan kode developer. Jadi salah dikit-dikit error. (kalo PHP, ada salah juga gak tahu si developernya )
5. Java Stable dan robust.
Enterprise butuh sesuatu yang stabil dan handal dimana aplikasi-nya bisa jalan bertahun-tahun.
6. Scalable.
Aplikasi Java dapat dengan mudah di-scale horizontal maupun vertical. Ini sangat penting apabila bisnis yang super sibuk ingin menambah resource mesin ke apps yang sudah jalan. Dan di Java horizontal-vertical scalabity memang benar-benar mudah.
7. Open and Liberal.
Ini sangat penting apabila ada masalah dengan bahasa pemrograman, kita bisa tau dimana permasalahannya dan buka source code-nya, terus kita benerin sendiri. Ya memang gampang sih kalau ada masalah kita bisa telpon vendor-nya. Tapi dalam situasi kritis kadang kita perlu buka dan oprek sendiri. Sedangkan bahasa2 tertutup seperti VB dan Delphi hal seperti itu sangat menyulitkan ketika ada masalah dengan bahasa-nya. Itu makanya di Java ada banyak framework2, karena semua-nya terbuka.
sumber : http://www.kaskus.us/showthread.php?t=10402662
Mungkin ada kawan-kawan gw yang lain yang bersedia untuk menambahkan?
On my last EJB3 tutorial, im still using the old fashioned way of EJB3. Still importing lots of jars, which is very dangerous due to the fact that sometimes i forgot which jar i need to include.
That’s why now im trying to use one of Glassfish’s feature application, appclient. It can bundle all the libraries and dependencies your EJB client needed, so it save your time from including various Glassfish’s jars to your project.
Lets start with a very simple ejb interface class,
package com.edw.facade;
public interface ConnectionFacadeRemote {
String sayHello(String string);
int sayAge(int age);
}
And a simple main class,
package com.edw.main;
import com.edw.facade.ConnectionFacadeRemote;
import java.util.Properties;
import javax.naming.Context;
import javax.naming.InitialContext;
import org.apache.log4j.Logger;
public class Main {
private Logger logger = Logger.getLogger(Main.class);
private void connect() {
try{
Properties props = new Properties();
props.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.enterprise.naming.SerialInitContextFactory");
props.setProperty("org.omg.CORBA.ORBInitialHost", "localhost");
props.setProperty("org.omg.CORBA.ORBInitialPort", "3700");
InitialContext ctx = new InitialContext();
ConnectionFacadeRemote connectionFacadeRemote = (ConnectionFacadeRemote) ctx.lookup("com.edw.facade.ConnectionFacadeRemote");
logger.debug(connectionFacadeRemote.sayHello("edwin "));
logger.debug("my age is " + connectionFacadeRemote.sayAge(12) + " years");
}catch(Exception ex){
logger.error(ex,ex);
}
}
public static void main(String[] args) {
Main tejbc = new Main();
tejbc.connect();
}
}
After you create all classes needed, you have to build your application into .jar.
Next is to pull all the jar needed for this EJB client application to run smoothly. First go to your Server glassfish’s bin folder located in your Server glassfish installation folder, in my PC it would be (C:\Program Files\glassfish-3.0.1\glassfish\bin). And execute the package-appclient command.
C:\Program Files\glassfish-3.0.1\glassfish\bin>package-appclient Creating C:\Program Files\glassfish-3.0.1\glassfish\lib\appclient.jar
It would create a jar file, appclient.jar, which located in your glassfish lib installation folder.
Next is copy your appclient.jar into your client computers. Extract it, and execute appclient command. The appclient format would be, appclient -jar
C:\Users\edw\Documents\appclient\appclient\glassfish\bin>appclient -jar "C:\Users\edw\Documents\NetBeansProjects\TestEJBClient\dist\TestEJBClient.jar" Apr 19, 2012 6:28:03 PM com.sun.enterprise.transaction.JavaEETransactionManagerSimplified initDelegates INFO: Using com.sun.enterprise.transaction.jts.JavaEETransactionManagerJTSDelegate as the delegate 2012-04-19 18:28:10,067 [Main] DEBUG com.edw.main.Main:22 - hello edwin 2012-04-19 18:28:10,072 [Main] DEBUG com.edw.main.Main:23 - my age is 24 years
You can see the server side’s source code here. And here is my netbeans project structure

Not too hard right



