[jboss-cvs] JBoss Messaging SVN: r3700 - projects/jaio/trunk/jaio/native/src.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Mon Feb 11 12:24:36 EST 2008


Author: clebert.suconic at jboss.com
Date: 2008-02-11 12:24:36 -0500 (Mon, 11 Feb 2008)
New Revision: 3700

Added:
   projects/jaio/trunk/jaio/native/src/FileOutput.cpp
   projects/jaio/trunk/jaio/native/src/FileOutput.h
Modified:
   projects/jaio/trunk/jaio/native/src/AIOController.cpp
   projects/jaio/trunk/jaio/native/src/AIOController.h
   projects/jaio/trunk/jaio/native/src/BufferAdapter.h
   projects/jaio/trunk/jaio/native/src/JNIBufferAdapter.cpp
   projects/jaio/trunk/jaio/native/src/JNIBufferAdapter.h
   projects/jaio/trunk/jaio/native/src/LibAIOController.cpp
   projects/jaio/trunk/jaio/native/src/Makefile.am
   projects/jaio/trunk/jaio/native/src/PageManager.cpp
   projects/jaio/trunk/jaio/native/src/PageManager.h
   projects/jaio/trunk/jaio/native/src/PageObserver.cpp
   projects/jaio/trunk/jaio/native/src/PageObserver.h
   projects/jaio/trunk/jaio/native/src/org_jboss_jaio_libaioimpl_LibAIOController.h
Log:
Implementing PagingManager and Observers

Modified: projects/jaio/trunk/jaio/native/src/AIOController.cpp
===================================================================
--- projects/jaio/trunk/jaio/native/src/AIOController.cpp	2008-02-11 09:17:45 UTC (rev 3699)
+++ projects/jaio/trunk/jaio/native/src/AIOController.cpp	2008-02-11 17:24:36 UTC (rev 3700)
@@ -1,7 +1,7 @@
 #include "AIOController.h"
 #include "PageManager.h"
 
-AIOController::AIOController() : manager(10 * 1024)
+AIOController::AIOController(int fileHandle) : fileOutput(fileHandle), manager(10 * 1024, &fileOutput)
 {
 	
 }

Modified: projects/jaio/trunk/jaio/native/src/AIOController.h
===================================================================
--- projects/jaio/trunk/jaio/native/src/AIOController.h	2008-02-11 09:17:45 UTC (rev 3699)
+++ projects/jaio/trunk/jaio/native/src/AIOController.h	2008-02-11 17:24:36 UTC (rev 3700)
@@ -3,6 +3,7 @@
 #include <jni.h>
 
 #include "PageManager.h"
+#include "FileOutput.h"
 
 class AIOController
 {
@@ -13,8 +14,9 @@
 	jmethodID done;
 	int fileHandle;
 	JNIEnv * env;
+	FileOutput fileOutput;
 	PageManager manager;
-	AIOController();
+	AIOController(int fileHandle);
 	virtual ~AIOController();
 };
 #endif /*AIOCONTROLLER_H_*/

Modified: projects/jaio/trunk/jaio/native/src/BufferAdapter.h
===================================================================
--- projects/jaio/trunk/jaio/native/src/BufferAdapter.h	2008-02-11 09:17:45 UTC (rev 3699)
+++ projects/jaio/trunk/jaio/native/src/BufferAdapter.h	2008-02-11 17:24:36 UTC (rev 3700)
@@ -1,6 +1,7 @@
 #ifndef BUFFERADAPTER_H_
 #define BUFFERADAPTER_H_
 
+#include <iostream>
 class BufferAdapter
 {
 public:
@@ -16,5 +17,6 @@
 	virtual void encode(const int& size, void *) = 0;
 	virtual void done() = 0;
 	virtual int blockSize() = 0;
+	virtual void killYourself() = 0;
 };
 #endif /*BUFFERADAPTER_H_*/

Added: projects/jaio/trunk/jaio/native/src/FileOutput.cpp
===================================================================
--- projects/jaio/trunk/jaio/native/src/FileOutput.cpp	                        (rev 0)
+++ projects/jaio/trunk/jaio/native/src/FileOutput.cpp	2008-02-11 17:24:36 UTC (rev 3700)
@@ -0,0 +1,27 @@
+#include "FileOutput.h"
+#include <list>
+#include <iostream>
+#include <memory.h>
+
+FileOutput::FileOutput(int _fileHandle)
+{
+	fileHandle = _fileHandle;
+}
+
+FileOutput::~FileOutput()
+{
+}
+
+void FileOutput::completePage(long size, void * page, std::list<BufferAdapter *> * adapters)
+{
+	std::cout << (char *)page;
+	for (std::list<BufferAdapter *>::iterator iter = adapters->begin(); iter != adapters->end(); iter++)
+	{
+		std::cout << "Element read\n\n";
+		(*iter)->done();
+		(*iter)->killYourself();
+	}
+	
+	free (page);
+	delete adapters;
+}


Property changes on: projects/jaio/trunk/jaio/native/src/FileOutput.cpp
___________________________________________________________________
Name: svn:keywords
   + "Id LastChangedDate Author Revision"

Added: projects/jaio/trunk/jaio/native/src/FileOutput.h
===================================================================
--- projects/jaio/trunk/jaio/native/src/FileOutput.h	                        (rev 0)
+++ projects/jaio/trunk/jaio/native/src/FileOutput.h	2008-02-11 17:24:36 UTC (rev 3700)
@@ -0,0 +1,17 @@
+#ifndef FILEOUTPUT_H_
+#define FILEOUTPUT_H_
+
+#include "PageObserver.h"
+
+class FileOutput : public PageObserver
+{
+private:
+	int fileHandle;
+public:
+	FileOutput(int fileHandle);
+	virtual ~FileOutput();
+	void completePage(long size, void *, std::list<BufferAdapter *> *);
+
+};
+
+#endif /*FILEOUTPUT_H_*/

Modified: projects/jaio/trunk/jaio/native/src/JNIBufferAdapter.cpp
===================================================================
--- projects/jaio/trunk/jaio/native/src/JNIBufferAdapter.cpp	2008-02-11 09:17:45 UTC (rev 3699)
+++ projects/jaio/trunk/jaio/native/src/JNIBufferAdapter.cpp	2008-02-11 17:24:36 UTC (rev 3700)
@@ -1,14 +1,16 @@
 #include <jni.h>
 #include "JNIBufferAdapter.h"
+#include <iostream>
 
 JNIBufferAdapter::JNIBufferAdapter(AIOController * _controller, jobject _obj) : BufferAdapter()
 {
 	controller = _controller;
-	obj = _obj;
+	obj = controller->env->NewGlobalRef(_obj);
 }
 
 JNIBufferAdapter::~JNIBufferAdapter()
 {
+	controller->env->DeleteGlobalRef(obj);
 }
 
 
@@ -19,10 +21,12 @@
 }
 void JNIBufferAdapter::done()
 {
+	std::cout << "Calling done " << controller->done;
+	controller->env->CallVoidMethod(obj,controller->done); 
 	return;
 }
 int JNIBufferAdapter::blockSize()
 {
-	return 0;
+	return controller->env->CallIntMethod(obj,controller->encodeSize); 
 }
 

Modified: projects/jaio/trunk/jaio/native/src/JNIBufferAdapter.h
===================================================================
--- projects/jaio/trunk/jaio/native/src/JNIBufferAdapter.h	2008-02-11 09:17:45 UTC (rev 3699)
+++ projects/jaio/trunk/jaio/native/src/JNIBufferAdapter.h	2008-02-11 17:24:36 UTC (rev 3700)
@@ -16,5 +16,11 @@
 	void done();
 	int blockSize();
 	
+	virtual void killYourself()
+	{
+		delete this;
+	}
+	
+	
 };
 #endif /*JNIBUFFERADAPTER_H_*/

Modified: projects/jaio/trunk/jaio/native/src/LibAIOController.cpp
===================================================================
--- projects/jaio/trunk/jaio/native/src/LibAIOController.cpp	2008-02-11 09:17:45 UTC (rev 3699)
+++ projects/jaio/trunk/jaio/native/src/LibAIOController.cpp	2008-02-11 17:24:36 UTC (rev 3700)
@@ -20,7 +20,15 @@
 {
 	std::string fileName = convertJavaString(env, jstrFileName);
 	
-	AIOController * controller = new AIOController();
+
+	int handle = open(fileName.data(),  O_WRONLY | O_CREAT, 0666);
+	if (handle < 0)
+	{
+		throwException(env, "java/lang/RuntimeException", "Can't open file");
+		return 0;
+	}
+	
+	AIOController * controller = new AIOController(handle);
 	controller->done = env->GetMethodID(clazz,"done","()V");
 	if (!controller->done) return 0;
 	
@@ -34,13 +42,7 @@
 	if (!controller->done) return 0;
 	
 	
-	controller->fileHandle = open(fileName.data(),  O_WRONLY | O_CREAT, 0666);
-	if (controller->fileHandle < 0)
-	{
-		throwException(env, "java/lang/RuntimeException", "Can't open file");
-		delete controller;
-		return 0;
-	}
+	controller->fileHandle = handle;
 	
     controller->env = env;	
 	
@@ -51,7 +53,14 @@
   (JNIEnv *, jclass, jlong controllerAddress, jobject obj)
 {
 	AIOController * controller = (AIOController *) controllerAddress;
-	JNIBufferAdapter adapter (controller, obj);
+	JNIBufferAdapter * adapter = new JNIBufferAdapter(controller, obj);
 	controller->manager.addData(adapter);
 }
 
+JNIEXPORT void JNICALL Java_org_jboss_jaio_libaioimpl_LibAIOController_flushMemory
+  (JNIEnv *, jclass, jlong controllerAddress)
+{
+	AIOController * controller = (AIOController *) controllerAddress;
+	controller->manager.flush();
+	
+}

Modified: projects/jaio/trunk/jaio/native/src/Makefile.am
===================================================================
--- projects/jaio/trunk/jaio/native/src/Makefile.am	2008-02-11 09:17:45 UTC (rev 3699)
+++ projects/jaio/trunk/jaio/native/src/Makefile.am	2008-02-11 17:24:36 UTC (rev 3700)
@@ -1,7 +1,7 @@
 #AM_CXXFLAGS = $(JVM_CXXFLAGS)
 lib_LTLIBRARIES = libJaio.la
 
-libJaio_la_SOURCES = LibAIOController.cpp AIOController.cpp  JavaUtilities.h       PageManager.cpp AIOController.h    JNIBufferAdapter.cpp  PageManager.h BufferAdapter.h    JNIBufferAdapter.h    PageObserver.cpp JavaUtilities.cpp    org_jboss_jaio_libaioimpl_LibAIOController.h  PageObserver.h
+libJaio_la_SOURCES = LibAIOController.cpp AIOController.cpp  JavaUtilities.h       PageManager.cpp AIOController.h    JNIBufferAdapter.cpp  PageManager.h BufferAdapter.h    JNIBufferAdapter.h    PageObserver.cpp JavaUtilities.cpp    org_jboss_jaio_libaioimpl_LibAIOController.h  PageObserver.h FileOutput.h FileOutput.cpp
 #libJaio_la_SOURCES = LibAIOController.cpp AIOController.cpp 
 
  
\ No newline at end of file

Modified: projects/jaio/trunk/jaio/native/src/PageManager.cpp
===================================================================
--- projects/jaio/trunk/jaio/native/src/PageManager.cpp	2008-02-11 09:17:45 UTC (rev 3699)
+++ projects/jaio/trunk/jaio/native/src/PageManager.cpp	2008-02-11 17:24:36 UTC (rev 3700)
@@ -1,9 +1,12 @@
+#include "memory.h"
+#include "BufferAdapter.h"
 #include "PageManager.h"
-#include "BufferAdapter.h"
 
-PageManager::PageManager(int _pageSize)
+PageManager::PageManager(int _pageSize, PageObserver * _observer)
 {
 	pageSize = _pageSize;
+	observer = _observer;
+	initMemory();
 }
 
 PageManager::~PageManager()
@@ -11,8 +14,26 @@
 }
 
 
-void PageManager::addData(BufferAdapter& adapter)
+void PageManager::addData(BufferAdapter * adapter)
 {
-	char * str = "Hello Guys"; 
-	adapter.encode (10, (void *)str);
+
+	list->push_back(adapter);
+	int size = adapter->blockSize();
+	
+	adapter->encode (size, memoryArea + pagePosition);
+	
+	pagePosition += size;
 }
+
+void PageManager::initMemory()
+{
+	memoryArea = (char *)malloc(pageSize);
+	list = new std::list<BufferAdapter *>();
+	pagePosition = 0;
+}
+
+void PageManager::flush()
+{
+    observer->completePage(pagePosition, memoryArea, list);
+    initMemory();
+}

Modified: projects/jaio/trunk/jaio/native/src/PageManager.h
===================================================================
--- projects/jaio/trunk/jaio/native/src/PageManager.h	2008-02-11 09:17:45 UTC (rev 3699)
+++ projects/jaio/trunk/jaio/native/src/PageManager.h	2008-02-11 17:24:36 UTC (rev 3700)
@@ -2,16 +2,28 @@
 #define PAGEMANAGER_H_
 
 #include "BufferAdapter.h"
+#include "PageObserver.h"
 
+#include <list>
 
+
 class PageManager
 {
 private:
 	int pageSize;
+	int pagePosition;
+	std::list<BufferAdapter *> * list;
+	char * memoryArea;
+	
+	PageObserver * observer;
+	
+	void initMemory();
+
 public:
-	PageManager(int pageSize);
+	PageManager(int pageSize, PageObserver * observer);
 	virtual ~PageManager();
-	void addData(BufferAdapter& adapter);
+	void addData(BufferAdapter* adapter);
+	void flush();
 };
 
 #endif /*PAGEMANAGER_H_*/

Modified: projects/jaio/trunk/jaio/native/src/PageObserver.cpp
===================================================================
--- projects/jaio/trunk/jaio/native/src/PageObserver.cpp	2008-02-11 09:17:45 UTC (rev 3699)
+++ projects/jaio/trunk/jaio/native/src/PageObserver.cpp	2008-02-11 17:24:36 UTC (rev 3700)
@@ -1,9 +1,2 @@
 #include "PageObserver.h"
 
-PageObserver::PageObserver()
-{
-}
-
-PageObserver::~PageObserver()
-{
-}

Modified: projects/jaio/trunk/jaio/native/src/PageObserver.h
===================================================================
--- projects/jaio/trunk/jaio/native/src/PageObserver.h	2008-02-11 09:17:45 UTC (rev 3699)
+++ projects/jaio/trunk/jaio/native/src/PageObserver.h	2008-02-11 17:24:36 UTC (rev 3700)
@@ -4,13 +4,23 @@
 #include <list>
 #include "BufferAdapter.h"
 
-class PageObserver : public BufferAdapter
+/**
+ * This is probably going to be the file itself
+ */
+class PageObserver
 {
 public:
-	PageObserver();
-	~PageObserver();
+	PageObserver()
+	{
+		
+	}
+
+	virtual ~PageObserver()
+	{
+	}
 	
-	virtual void completePage(void *, std::list<BufferAdapter>)=0;
+	// Implementations of PageObserver should also delete the list, and delete each element of BufferAdapter calling BufferAdapter::killYourslef()
+	virtual void completePage(long size, void *, std::list<BufferAdapter *> *)=0;
 };
 
 #endif /*PAGEOBSERVER_H_*/

Modified: projects/jaio/trunk/jaio/native/src/org_jboss_jaio_libaioimpl_LibAIOController.h
===================================================================
--- projects/jaio/trunk/jaio/native/src/org_jboss_jaio_libaioimpl_LibAIOController.h	2008-02-11 09:17:45 UTC (rev 3699)
+++ projects/jaio/trunk/jaio/native/src/org_jboss_jaio_libaioimpl_LibAIOController.h	2008-02-11 17:24:36 UTC (rev 3700)
@@ -23,6 +23,14 @@
 JNIEXPORT void JNICALL Java_org_jboss_jaio_libaioimpl_LibAIOController_append
   (JNIEnv *, jclass, jlong, jobject);
 
+/*
+ * Class:     org_jboss_jaio_libaioimpl_LibAIOController
+ * Method:    flushMemory
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL Java_org_jboss_jaio_libaioimpl_LibAIOController_flushMemory
+  (JNIEnv *, jclass, jlong);
+
 #ifdef __cplusplus
 }
 #endif




More information about the jboss-cvs-commits mailing list