c# web api pdf : How to add bookmarks to pdf document SDK control API .net azure wpf sharepoint BerkeleyDB-JE-GSG15-part697

Library Version 12.1.6.0
Secondary Databases
12/7/2015
Getting Started with JE
Page 142
fewer data items. Turning off sorting permits applications to specify cursors in the proper
order given this scenario.
The default value is false (automatic cursor sorting is performed).
For example:
// All database and environments omitted
JoinConfig config = new JoinConfig();
config.setNoSort(true);
JoinCursor joinCursor = myDb.join(cursorArray, config); 
Secondary Database Example
In previous chapters in this book, we built applications that load and display several JE
databases. In this example, we will extend those examples to use secondary databases.
Specifically:
• In Stored Class Catalog Management with MyDbEnv (page 104) we built a class that we can
use to open and manage a JE Environment and one or more Database objects. In Opening
Secondary Databases with MyDbEnv (page 143) we will extend that class to also open and
manage a SecondaryDatabase.
• In Cursor Example (page 125) we built an application to display our inventory
database (and related vendor information). In Using Secondary Databases with
ExampleInventoryRead (page 146) we will extend that application to show inventory
records based on the index we cause to be loaded using ExampleDatabasePut.
Before we can use a secondary database, we must implement a class to extract secondary
keys for us. We use ItemNameKeyCreator for this purpose.
Example 10.1. ItemNameKeyCreator.java
This class assumes the primary database uses Inventory objects for the record data. The
Inventory class is described in Inventory.java (page 100).
In our key creator class, we make use of a custom tuple binding called InventoryBinding.
This class is described in InventoryBinding.java (page 102).
You can find the following class in:
JE_HOME/examples/je/gettingStarted/ItemNameKeyCreator.java
where JE_HOME is the location where you placed your JE distribution.
package je.gettingStarted;
import com.sleepycat.bind.tuple.TupleBinding;
import com.sleepycat.db.SecondaryKeyCreator;
import com.sleepycat.db.DatabaseEntry;
import com.sleepycat.db.DatabaseException;
import com.sleepycat.db.SecondaryDatabase;
How to add bookmarks to pdf document - add, remove, update PDF bookmarks in C#.net, ASP.NET, MVC, Ajax, WinForms, WPF
Empower Your C# Project with Rapid PDF Internal Navigation Via Bookmark and Outline
bookmark page in pdf; bookmarks in pdf
How to add bookmarks to pdf document - VB.NET PDF bookmark library: add, remove, update PDF bookmarks in vb.net, ASP.NET, MVC, Ajax, WinForms, WPF
Empower Your VB.NET Project with Rapid PDF Internal Navigation Via Bookmark and Outline
create bookmarks pdf file; create bookmarks in pdf from excel
Library Version 12.1.6.0
Secondary Databases
12/7/2015
Getting Started with JE
Page 143
public class ItemNameKeyCreator implements SecondaryKeyCreator {
private TupleBinding theBinding;
// Use the constructor to set the tuple binding
ItemNameKeyCreator(TupleBinding binding) {
theBinding = binding;
}
// Abstract method that we must implement
public boolean createSecondaryKey(SecondaryDatabase secDb,
DatabaseEntry keyEntry,    // From the primary
DatabaseEntry dataEntry,   // From the primary
DatabaseEntry resultEntry) // set the key data on this.
throws DatabaseException {
if (dataEntry != null) {
// Convert dataEntry to an Inventory object
Inventory inventoryItem =
(Inventory)theBinding.entryToObject(dataEntry);
// Get the item name and use that as the key
String theItem = inventoryItem.getItemName();
resultEntry.setData(theItem.getBytes());
}
return true;
}
Now that we have a key creator, we can use it to generate keys for a secondary database. We
will now extend MyDbEnv to manage a secondary database, and to use ItemNameKeyCreator
to generate keys for that secondary database.
Opening Secondary Databases with MyDbEnv
In Stored Class Catalog Management with MyDbEnv (page 104) we built MyDbEnv as an example
of a class that encapsulates Environment and Database opens and closes. We will now extend
that class to manage a SecondaryDatabase.
Example 10.2. SecondaryDatabase Management with MyDbEnv
We start by importing two additional classes needed to support secondary databases. We also
add a global variable to use as a handle for our secondary database.
// File MyDbEnv.java
package je.gettingStarted;
import com.sleepycat.bind.tuple.TupleBinding;
import com.sleepycat.bind.serial.StoredClassCatalog;
C# PDF File Compress Library: Compress reduce PDF size in C#.net
Bookmarks. Comments, forms and multimedia. Flatten visible layers. C#.NET DLLs: Compress PDF Document. Add necessary references: RasterEdge.Imaging.Basic.dll.
auto bookmark pdf; create pdf bookmarks
VB.NET PDF File Split Library: Split, seperate PDF into multiple
Add necessary references: how to split a PDF file into multiple ones by PDF bookmarks or outlines Split PDF Document into Multiple PDF Files Demo Code in VB.NET.
how to bookmark a pdf file in acrobat; how to add bookmarks to pdf document
Library Version 12.1.6.0
Secondary Databases
12/7/2015
Getting Started with JE
Page 144
import com.sleepycat.je.Database;
import com.sleepycat.je.DatabaseConfig;
import com.sleepycat.je.DatabaseException;
import com.sleepycat.je.Environment;
import com.sleepycat.je.EnvironmentConfig;
import com.sleepycat.je.SecondaryConfig;
import com.sleepycat.je.SecondaryDatabase;
import java.io.File;
public class MyDbEnv {
private Environment myEnv;
// The databases that our application uses
private Database vendorDb;
private Database inventoryDb;
private Database classCatalogDb;
private SecondaryDatabase itemNameIndexDb;
// Needed for object serialization
private StoredClassCatalog classCatalog;
// Our constructor does nothing
public MyDbEnv() {}
Next we update the MyDbEnv.setup() method to open the secondary database. As a part
of this, we have to pass an ItemNameKeyCreator object on the call to open the secondary
database. Also, in order to instantiate ItemNameKeyCreator, we need an InventoryBinding
object (we described this class in InventoryBinding.java (page 102)). We do all this work
together inside of MyDbEnv.setup().
public void setup(File envHome, boolean readOnly)
throws DatabaseException {
EnvironmentConfig myEnvConfig = new EnvironmentConfig();
DatabaseConfig myDbConfig = new DatabaseConfig();
SecondaryConfig mySecConfig = new SecondaryConfig();
// If the environment is read-only, then
// make the databases read-only too.
myEnvConfig.setReadOnly(readOnly);
myDbConfig.setReadOnly(readOnly);
mySecConfig.setReadOnly(readOnly);
// If the environment is opened for write, then we want to be
// able to create the environment and databases if
// they do not exist.
myEnvConfig.setAllowCreate(!readOnly);
C# PDF File Split Library: Split, seperate PDF into multiple files
Add necessary references: codes explain how to split a PDF file into multiple ones by PDF bookmarks or outlines Split PDF Document into Multiple PDF Files in C#.
create pdf bookmarks online; create bookmark in pdf automatically
VB.NET PDF File Compress Library: Compress reduce PDF size in vb.
Compress & decompress PDF document file while maintaining original content of target PDF document file. Remove bookmarks, annotations, watermark, page labels
convert word to pdf with bookmarks; convert word pdf bookmarks
Library Version 12.1.6.0
Secondary Databases
12/7/2015
Getting Started with JE
Page 145
myDbConfig.setAllowCreate(!readOnly);
mySecConfig.setAllowCreate(!readOnly);
...
// Environment and database opens omitted for brevity
...
// Open the secondary database. We use this to create a
// secondary index for the inventory database
// We want to maintain an index for the inventory entries based
// on the item name. So, instantiate the appropriate key creator
// and open a secondary database.
ItemNameKeyCreator keyCreator =
new ItemNameKeyCreator(new InventoryBinding());
// Set up the secondary properties
mySecConfig.setAllowPopulate(true); // Allow autopopulate
mySecConfig.setKeyCreator(keyCreator);
// Need to allow duplicates for our secondary database
mySecConfig.setSortedDuplicates(true);
// Now open it
itemNameIndexDb =
myEnv.openSecondaryDatabase(
null,     
"itemNameIndex", // Index name
inventoryDb,     // Primary database handle. This is
// the db that we're indexing. 
mySecConfig);    // The secondary config
Next we need an additional getter method for returning the secondary database.
public SecondaryDatabase getNameIndexDB() {
return itemNameIndexDb;
Finally, we need to update the MyDbEnv.close() method to close the new secondary
database. We want to make sure that the secondary is closed before the primaries. While this
is not necessary for this example because our closes are single-threaded, it is still a good habit
to adopt.
public void close() {
if (myEnv != null) {
try {
//Close the secondary before closing the primaries
itemNameIndexDb.close();
vendorDb.close();
inventoryDb.close();
classCatalogDb.close();
.NET PDF SDK - Description of All PDF Processing Control Feastures
Full page navigation, zooming & rotation; Outlines, bookmarks, & thumbnail display; Insert and add text to any page of PDF document with defined location;
export pdf bookmarks; adding bookmarks to a pdf
C# PDF Convert to HTML SDK: Convert PDF to html files in C#.net
toolkit SDK, preserves all the original anchors, links, bookmarks and font How to Use C#.NET Demo Code to Convert PDF Document to HTML5 Add necessary references
create bookmark pdf; bookmarks pdf files
Library Version 12.1.6.0
Secondary Databases
12/7/2015
Getting Started with JE
Page 146
// Finally, close the environment.
myEnv.close();
} catch(DatabaseException dbe) {
System.err.println("Error closing MyDbEnv: " +
dbe.toString());
System.exit(-1);
}
}
}
That completes our update to MyDbEnv. You can find the complete class implementation in:
JE_HOME/examples/je/gettingStarted/MyDbEnv.java 
where JE_HOME is the location where you placed your JE distribution.
Because we performed all our secondary database configuration management in MyDbEnv, we
do not need to modify ExampleDatabasePut at all in order to create our secondary indices.
When ExampleDatabasePut calls MyDbEnv.setup(), all of the necessary work is performed
for us.
However, we still need to take advantage of the new secondary indices. We do this by
updating ExampleInventoryRead to allow us to query for an inventory record based on
its name. Remember that the primary key for an inventory record is the item's SKU. The
item's name is contained in the Inventory object that is stored as each record's data in the
inventory database. But our new secondary index now allows us to easily query based on the
item's name.
Using Secondary Databases with ExampleInventoryRead
In the previous section we changed MyDbEnv to cause a secondary database to be built
using inventory item names as the secondary keys. In this section, we will update
ExampleInventoryRead to allow us to query our inventory records based on the item name.
To do this, we will modify ExampleInventoryRead to accept a new command line switch, -
s, whose argument is the name of an inventory item. If the switch is present on the command
line call to ExampleInventoryRead, then the application will use the secondary database
to look up and display all the inventory records with that item name. Note that we use a
SecondaryCursor to seek to the item name key and then display all matching records.
Remember that you can find the following class in:
JE_HOME/examples/je/gettingStarted/ExampleInventoryRead.java
where JE_HOME is the location where you placed your JE distribution.
Example 10.3. SecondaryDatabase usage with ExampleInventoryRead
First we need to import a few additional classes in order to use secondary databases and
cursors, and then we add a single global variable:
How to C#: Basic SDK Concept of XDoc.PDF for .NET
Document Protect. You may add PDF document protection functionality into your C# program. OutLines. This class describes bookmarks in a PDF document.
excel hyperlink to pdf bookmark; add bookmark to pdf reader
XDoc.Excel for .NET, Comprehensive .NET Excel Imaging Features
page navigation, zooming & rotation; Outlines, bookmarks, & thumbnail Convert Excel to PDF; Convert Excel to HTML5; Convert Add a blank page or multiple pages to
how to create bookmarks in pdf file; copy bookmarks from one pdf to another
Library Version 12.1.6.0
Secondary Databases
12/7/2015
Getting Started with JE
Page 147
package je.gettingStarted;
import com.sleepycat.je.Cursor;
import com.sleepycat.je.Database;
import com.sleepycat.je.DatabaseEntry;
import com.sleepycat.je.DatabaseException;
import com.sleepycat.je.LockMode;
import com.sleepycat.je.OperationStatus;
import com.sleepycat.je.SecondaryCursor;
import com.sleepycat.bind.EntryBinding;
import com.sleepycat.bind.serial.SerialBinding;
import com.sleepycat.bind.tuple.TupleBinding;
import java.io.File;
import java.io.IOException; 
public class ExampleInventoryRead {
private static File myDbEnvPath =
new File("/tmp/JEDB");
// Encapsulates the database environment and databases.
private static MyDbEnv myDbEnv = new MyDbEnv();
private static TupleBinding inventoryBinding;
private static EntryBinding vendorBinding;
// The item to locate if the -s switch is used
private static String locateItem; 
Next we update ExampleInventoryRead.run() to check to see if the locateItem global
variable a value. If it does, then we show just those records related to the item name passed
on the -s switch.
private void run(String args[]) 
throws DatabaseException {
// Parse the arguments list
parseArgs(args);
myDbEnv.setup(myDbEnvPath, // path to the environment home
true);      // is this environment read-only?
// Setup our bindings.
inventoryBinding = new InventoryBinding();
vendorBinding =
new SerialBinding(myDbEnv.getClassCatalog(),
Vendor.class);
if (locateItem != null) {
showItem();
Library Version 12.1.6.0
Secondary Databases
12/7/2015
Getting Started with JE
Page 148
} else {
showAllInventory();
}
Finally, we need to implement ExampleInventoryRead.showItem(). This is a fairly simple
method that opens a secondary cursor, and then displays every primary record that is related
to the secondary key identified by the locateItem global variable.
private void showItem() throws DatabaseException {
SecondaryCursor secCursor = null;
try {
// searchKey is the key that we want to find in the 
// secondary db.
DatabaseEntry searchKey = 
new DatabaseEntry(locateItem.getBytes("UTF-8"));
// foundKey and foundData are populated from the primary
// entry that is associated with the secondary db key.
DatabaseEntry foundKey = new DatabaseEntry();
DatabaseEntry foundData = new DatabaseEntry();
// open a secondary cursor
secCursor =
myDbEnv.getNameIndexDB().openSecondaryCursor(null, null);
// Search for the secondary database entry.
OperationStatus retVal =
secCursor.getSearchKey(searchKey, foundKey,
foundData, LockMode.DEFAULT);
// Display the entry, if one is found. Repeat until no more
// secondary duplicate entries are found
while(retVal == OperationStatus.SUCCESS) {
Inventory theInventory =
(Inventory)inventoryBinding.entryToObject(foundData);
displayInventoryRecord(foundKey, theInventory);
retVal = secCursor.getNextDup(searchKey, foundKey,
foundData, LockMode.DEFAULT);
}
} catch (Exception e) {
System.err.println("Error on inventory secondary cursor:");
System.err.println(e.toString());
e.printStackTrace();
} finally {
if (secCursor != null) {
secCursor.close();
}
}
}
Library Version 12.1.6.0
Secondary Databases
12/7/2015
Getting Started with JE
Page 149
The only other thing left to do is to update ExampleInventoryRead.parseArgs() to support
the -s command line switch. To see how this is done, see:
JE_HOME/examples/je/gettingStarted/ExampleInventoryRead.java
where JE_HOME is the location where you placed your JE distribution.
Part III. Administering
JE Applications
This section discusses concepts and mechanisms useful for the administration of any JE application,
regardless of the API used to build that application.
12/7/2015
Getting Started with JE
Page 151
Chapter 11. Backing up and Restoring Berkeley
DB Java Edition Applications
Fundamentally, you backup your databases by copying JE log files off to a safe storage
location. To restore your database from a backup, you copy those files to an appropriate
directory on disk and reopen your JE application
Beyond these simple activities, there are some differing backup strategies that you may want
to consider. These topics are described in this chapter.
Databases and Log Files
Before describing JE backup and restore, it is necessary to describe some of JE's internal
workings. In particular, a high-level understanding of JE log files and the in-memory cache is
required. You also need to understand a little about how JE is using its internal data structures
in order to understand why checkpoints and/or syncs are required.
You can skip this section so long as you understand that:
• JE databases are stored in log files contained in your environment directory.
• Every time a JE environment is opened, normal recovery is run.
• For transactional applications, checkpoints should be run in order to bound normal recovery
time. Checkpoints are normally run by the checkpointer thread. Transactional applications
and the checkpointer thread are described in the Berkeley DB, Java Edition Getting Started
with Transaction Processing guide.
• For non-transactional applications, environment syncs must be performed if you want to
guarantee the persistence of your database modifications. Environment syncs are manually
performed by the application developer. See Data Persistence (page 86) for details.
Log File Overview
Your JE database is stored on-disk in a series of log files. JE uses no-overwrite log files, which
is to say that JE only ever appends data to the end of a log file. It will never delete or modify
an existing log file record.
JE log files are named NNNNNNNN.jdb where NNNNNNNN is an 8-digit hexadecimal number that
increases by 1 (starting from 00000000) for each log file written to disk.
JE creates a new log file whenever the current log file has reached a pre-configured size
(10000000 bytes by default). This size is controlled by the je.log.fileMax properties
parameter. See The JE Properties File (page 158) for information on setting JE properties.
By default, log files are placed in the environment home directory. However, you can cause
JE to place log files in subdirectories within the environment home directory. For more
information, see Multiple Environment Subdirectories (page 18).
Documents you may be interested
Documents you may be interested