mirror of
https://github.com/berkeleydb/je.git
synced 2024-11-15 01:46:24 +00:00
211 lines
6.9 KiB
Java
211 lines
6.9 KiB
Java
|
/*-
|
|||
|
* Copyright (C) 2002, 2017, Oracle and/or its affiliates. All rights reserved.
|
|||
|
*
|
|||
|
* This file was distributed by Oracle as part of a version of Oracle Berkeley
|
|||
|
* DB Java Edition made available at:
|
|||
|
*
|
|||
|
* http://www.oracle.com/technetwork/database/database-technologies/berkeleydb/downloads/index.html
|
|||
|
*
|
|||
|
* Please see the LICENSE file included in the top-level directory of the
|
|||
|
* appropriate version of Oracle Berkeley DB Java Edition for a copy of the
|
|||
|
* license and additional information.
|
|||
|
*/
|
|||
|
|
|||
|
package jca.simple;
|
|||
|
|
|||
|
import javax.ejb.SessionBean;
|
|||
|
import javax.ejb.SessionContext;
|
|||
|
import javax.naming.Context;
|
|||
|
import javax.naming.InitialContext;
|
|||
|
|
|||
|
import com.sleepycat.je.Cursor;
|
|||
|
import com.sleepycat.je.Database;
|
|||
|
import com.sleepycat.je.DatabaseConfig;
|
|||
|
import com.sleepycat.je.DatabaseEntry;
|
|||
|
import com.sleepycat.je.Environment;
|
|||
|
import com.sleepycat.je.EnvironmentConfig;
|
|||
|
import com.sleepycat.je.SecondaryConfig;
|
|||
|
import com.sleepycat.je.SecondaryDatabase;
|
|||
|
import com.sleepycat.je.SecondaryKeyCreator;
|
|||
|
import com.sleepycat.je.Transaction;
|
|||
|
import com.sleepycat.je.jca.ra.JEConnection;
|
|||
|
import com.sleepycat.je.jca.ra.JEConnectionFactory;
|
|||
|
|
|||
|
public class SimpleBean implements SessionBean {
|
|||
|
|
|||
|
/*
|
|||
|
* Set this to something appropriate for your environment. Make sure it
|
|||
|
* matches the ra.xml.
|
|||
|
*/
|
|||
|
private final String JE_ENV = "/export/home/cwl/work-jca/je_store";
|
|||
|
private final boolean TRANSACTIONAL = true;
|
|||
|
|
|||
|
private SessionContext sessionCtx;
|
|||
|
|
|||
|
public void ejbCreate() {
|
|||
|
}
|
|||
|
|
|||
|
public void ejbRemove() {
|
|||
|
}
|
|||
|
|
|||
|
public void setSessionContext(SessionContext context) {
|
|||
|
sessionCtx = context;
|
|||
|
}
|
|||
|
|
|||
|
public void unsetSessionContext() {
|
|||
|
sessionCtx = null;
|
|||
|
}
|
|||
|
|
|||
|
public void ejbActivate() {
|
|||
|
}
|
|||
|
|
|||
|
public void ejbPassivate() {
|
|||
|
}
|
|||
|
|
|||
|
public void put(String key, String data) {
|
|||
|
try {
|
|||
|
@SuppressWarnings("unused")
|
|||
|
Environment env = null;
|
|||
|
@SuppressWarnings("unused")
|
|||
|
Transaction txn = null;
|
|||
|
Database db = null;
|
|||
|
@SuppressWarnings("unused")
|
|||
|
SecondaryDatabase secDb = null;
|
|||
|
Cursor cursor = null;
|
|||
|
JEConnection dc = null;
|
|||
|
try {
|
|||
|
dc = getConnection(JE_ENV);
|
|||
|
|
|||
|
env = dc.getEnvironment();
|
|||
|
DatabaseConfig dbConfig = new DatabaseConfig();
|
|||
|
SecondaryConfig secDbConfig = new SecondaryConfig();
|
|||
|
dbConfig.setAllowCreate(true);
|
|||
|
dbConfig.setTransactional(TRANSACTIONAL);
|
|||
|
secDbConfig.setAllowCreate(true);
|
|||
|
secDbConfig.setTransactional(TRANSACTIONAL);
|
|||
|
secDbConfig.setKeyCreator(new MyKeyCreator());
|
|||
|
|
|||
|
/*
|
|||
|
* Use JEConnection.openDatabase() to obtain a cached Database
|
|||
|
* handle. Do not call close() on Database handles obtained
|
|||
|
* using this method.
|
|||
|
*/
|
|||
|
db = dc.openDatabase("db", dbConfig);
|
|||
|
secDb = dc.openSecondaryDatabase("secDb", db, secDbConfig);
|
|||
|
cursor = db.openCursor(null, null);
|
|||
|
cursor.put(new DatabaseEntry(key.getBytes("UTF-8")),
|
|||
|
new DatabaseEntry(data.getBytes("UTF-8")));
|
|||
|
} finally {
|
|||
|
if (cursor != null) {
|
|||
|
cursor.close();
|
|||
|
}
|
|||
|
if (dc != null) {
|
|||
|
dc.close();
|
|||
|
}
|
|||
|
}
|
|||
|
} catch (Exception e) {
|
|||
|
System.err.println("Failure in put" + e);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public void removeDatabase() {
|
|||
|
try {
|
|||
|
JEConnection dc = null;
|
|||
|
try {
|
|||
|
dc = getConnection(JE_ENV);
|
|||
|
|
|||
|
DatabaseConfig dbConfig = new DatabaseConfig();
|
|||
|
dbConfig.setAllowCreate(true);
|
|||
|
dbConfig.setTransactional(TRANSACTIONAL);
|
|||
|
|
|||
|
/*
|
|||
|
* Once you have removed a database from the environment,
|
|||
|
* do not try to open it anymore.
|
|||
|
*/
|
|||
|
dc.removeDatabase("db");
|
|||
|
} finally {
|
|||
|
if (dc != null) {
|
|||
|
dc.close();
|
|||
|
}
|
|||
|
}
|
|||
|
} catch (Exception e) {
|
|||
|
System.err.println("Failure in remove " + e);
|
|||
|
e.printStackTrace();
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public String get(String key) {
|
|||
|
try {
|
|||
|
@SuppressWarnings("unused")
|
|||
|
Environment env = null;
|
|||
|
@SuppressWarnings("unused")
|
|||
|
Transaction txn = null;
|
|||
|
Database db = null;
|
|||
|
Cursor cursor = null;
|
|||
|
JEConnection dc = null;
|
|||
|
try {
|
|||
|
dc = getConnection(JE_ENV);
|
|||
|
|
|||
|
env = dc.getEnvironment();
|
|||
|
DatabaseConfig dbConfig = new DatabaseConfig();
|
|||
|
dbConfig.setAllowCreate(true);
|
|||
|
dbConfig.setTransactional(TRANSACTIONAL);
|
|||
|
|
|||
|
/*
|
|||
|
* Use JEConnection.openDatabase() to obtain a cached Database
|
|||
|
* handle. Do not call close() on Database handles obtained
|
|||
|
* using this method.
|
|||
|
*/
|
|||
|
db = dc.openDatabase("db", dbConfig);
|
|||
|
cursor = db.openCursor(null, null);
|
|||
|
DatabaseEntry data = new DatabaseEntry();
|
|||
|
cursor.getSearchKey(new DatabaseEntry(key.getBytes("UTF-8")),
|
|||
|
data,
|
|||
|
null);
|
|||
|
return new String(data.getData(), "UTF-8");
|
|||
|
} finally {
|
|||
|
if (cursor != null) {
|
|||
|
cursor.close();
|
|||
|
}
|
|||
|
if (dc != null) {
|
|||
|
dc.close();
|
|||
|
}
|
|||
|
}
|
|||
|
} catch (Exception e) {
|
|||
|
System.err.println("Failure in get" + e);
|
|||
|
e.printStackTrace();
|
|||
|
}
|
|||
|
return null;
|
|||
|
}
|
|||
|
|
|||
|
private JEConnection getConnection(String envDir) {
|
|||
|
try {
|
|||
|
EnvironmentConfig envConfig = new EnvironmentConfig();
|
|||
|
envConfig.setTransactional(true);
|
|||
|
envConfig.setAllowCreate(true);
|
|||
|
InitialContext iniCtx = new InitialContext();
|
|||
|
Context enc = (Context) iniCtx.lookup("java:comp/env");
|
|||
|
Object ref = enc.lookup("ra/JEConnectionFactory");
|
|||
|
JEConnectionFactory dcf = (JEConnectionFactory) ref;
|
|||
|
JEConnection dc = dcf.getConnection(envDir, envConfig);
|
|||
|
return dc;
|
|||
|
} catch(Exception e) {
|
|||
|
System.err.println("Failure in getConnection " + e);
|
|||
|
}
|
|||
|
return null;
|
|||
|
}
|
|||
|
|
|||
|
private static class MyKeyCreator implements SecondaryKeyCreator {
|
|||
|
|
|||
|
MyKeyCreator() {
|
|||
|
}
|
|||
|
|
|||
|
public boolean createSecondaryKey(SecondaryDatabase secondaryDb,
|
|||
|
DatabaseEntry keyEntry,
|
|||
|
DatabaseEntry dataEntry,
|
|||
|
DatabaseEntry resultEntry) {
|
|||
|
return false;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|