4 the 3rd party libraries
TRANSCRIPT
BEXIS Tech Talk Series
#4: The 3rd Party Libraries
Javad ChamanaraApril 2016
2
Recall
BEXIS Tech Talk #4: The 3rd Party Libraries
DB2 PgS
Data Access
Core Functions
UI
UI Framework
...
Modularity
IntegrationSynthesis Work
Semantic Search
Analytics
User Defined
Spatial Querying
External Tools
Web Services
Archiving
Import/ Export
Publishing
3
User Interface
• jQuery• jQuery UI
No need to explain them
BEXIS Tech Talk #4: The 3rd Party Libraries
4
User Interface
• Telerik Extensions for ASP.NET MVC– Set of UI controls– Server and Client side computation/binding– Based on jQuery– Extends the MVC’s HTML Helper
• Grid• Chart• Splitter & Slider• TreeView• …
BEXIS Tech Talk #4: The 3rd Party Libraries
5
User Interface->Telerik
• Telerik Extensions for ASP.NET MVC– Set of UI controls– Server and Client side computation/binding– Based on jQuery– Extends the MVC’s HTML Helper
• Grid• Chart• Splitter & Slider• TreeView• …
BEXIS Tech Talk #4: The 3rd Party Libraries
6
User Interface->Telerik
@(Html.Telerik().Grid(Model.Data).Name("PrimaryDataResultGrid").DataBinding(dataBinding => dataBinding
.Ajax() .Select("_CustomPrimaryDataBinding", "Data", new RouteValueDictionary { { "area", “ddm" }, { "datasetID", id } })
.OperationMode(GridOperationMode.Server))
.EnableCustomBinding(true).HtmlAttributes(new {@class = "primaryDataResultGrid" })
.ClientEvents(events => events.OnLoad("PrimaryDataResultGrid_OnLoad").OnDataBound("PrimaryData_OnCommand").OnColumnHide("PrimaryData_OnCommand").OnColumnShow("PrimaryData_OnCommand")
)BEXIS Tech Talk #4: The 3rd Party Libraries
7
User Interface->Telerik
BEXIS Tech Talk #4: The 3rd Party Libraries
8
User Interface
• Bootstrap– A framework for• HTML• CSS• JS
– Responsive design– On client side
BEXIS Tech Talk #4: The 3rd Party Libraries
9
User Interface->Bootstrap
<div id="navbarCollapse" class="collapse navbar-collapse"> <ul class="nav navbar-nav"> <li>@Html.ActionLink("Dashboard", "Index", "Home", new {area = "" }, null)</li> <li>@Html.ActionLink("Search", "Index", "Home",
new {area = "ddm" }, null)</li> </ul>…
BEXIS Tech Talk #4: The 3rd Party Libraries
10
Framework
• Unity IoC– Inversion of Control– Dependency Injection• Factory Pattern
– Service Locator• Object life cycle mgmt.
– Configuration Based– Version 2– URL: https://github.com/unitycontainer/unity
BEXIS Tech Talk #4: The 3rd Party Libraries
11
Framework -> Unity
<alias alias="Logger" type="Vaiona.Logging.ILogger, Vaiona.Logging" /><alias alias="DatabaseLogger" type="Vaiona.Logging.Loggers.DatabaseLogger, Vaiona.Logging" /><register type="Logger" mapTo="DatabaseLogger" name="Diagnostics.Logging"> <lifetime type="singleton" /></register>
<register type="Logger" mapTo="DatabaseLogger" name="General.Logging"> <lifetime type="singleton" /></register>return IoC.IoCFactory.Container.Resolve<ILogger>();
return IoC.IoCFactory.Container.Resolve<ILogger>("General.Logging");
BEXIS Tech Talk #4: The 3rd Party Libraries
12
Framework
• PostSharp– Post Compilation Code Weaving– Used in:• Logging• MVC Action handling• Authorization
– Version: 2.x (community)– URL: https://www.postsharp.net/
BEXIS Tech Talk #4: The 3rd Party Libraries
13
Framework->PostSharp
public class DiagnoseAttribute : OnMethodBoundaryAspect { public override void OnEntry(MethodExecutionArgs args) {
var sw = new Stopwatch(); sw.Start(); args.MethodExecutionTag = sw; }…
BEXIS Tech Talk #4: The 3rd Party Libraries
14
Framework
• NHibernate– Object Relational Mapping (ORM)– Configuration Based Mappings– …– Version 4– URL: http://nhibernate.info/
BEXIS Tech Talk #4: The 3rd Party Libraries
15
Vaiona
• IoC• Logging• Entities• Persistence• Serialization• Web
BEXIS Tech Talk #4: The 3rd Party Libraries
https://github.com/javadch/VWF.Mvc
16
Vaiona -> IoC
• Provides IoC services• Decouples the clients from any concrete IoC
provider• Used in Logging, Persistence, Search• Configuration based for easy alteration• Multiple Mappings for each
interface/implementation pair, suing namespaces
BEXIS Tech Talk #4: The 3rd Party Libraries
17
Vaiona -> Logging
• AOP, cross-cutting functionality• Uses code interception and weaving techniques
(PostSharp)• Aspects (intercept functions’ execution)– Trace: records call to methods– Performance: records methods’ execution time– Diagnose: records methods’ arguments & return values– Exception: records not caught exceptions
• And log to a DB table using the loggers
BEXIS Tech Talk #4: The 3rd Party Libraries
18
Vaiona -> Logging
//[RecordCall]//[LogExceptions][Diagnose][MeasurePerformance]public ActionResult Index(Int64 id=0){
LoggerFactory.LogCustom("Hi, I am a custom message!");
return View();
}
BEXIS Tech Talk #4: The 3rd Party Libraries
19
Vaiona -> Logging
• Entity Logging– What happened to an entity– What happened to the relation between 2 entities
• Custom Logging– Free style programmer friendly logging
BEXIS Tech Talk #4: The 3rd Party Libraries
20
Vaiona -> Logging
• Log records capture information about the:– Web request (URL, agent, etc.)– User information (username)– Action performed (CRUD)– Call context (assembly, class, method)– Entity affected (id, type, relations affected)– Performance (execution time)– Diagnostics (parameters, arguments, return values)– General (date, time)
BEXIS Tech Talk #4: The 3rd Party Libraries
21
Vaiona -> Logging
• Log management– Web.config switches
<appSettings><add key="IsLoggingEnable" value="false" /><add key="IsCallLoggingEnable" value="true" /><add key="IsPerformanceLoggingEnable" value="true" /><add key="IsDiagnosticLoggingEnable" value="true" /><add key="IsExceptionLoggingEnable" value="true" /></appSettings>
Custom logs are always written!
BEXIS Tech Talk #4: The 3rd Party Libraries
22
Vaiona -> Logging
• Usage scenarios– System behavior monitoring– Bottleneck detection– Logical bug detection– User studies– Software improvement planning– Auditing– …
BEXIS Tech Talk #4: The 3rd Party Libraries
23
Vaiona -> Logging
• Limitations– Not possible to turn it on/off on individual
functions– Exceptions on the logging itself are not caught– Log records are persisted async; no guarantee on
writing
BEXIS Tech Talk #4: The 3rd Party Libraries
24
Vaiona -> Entities
• Base classes for:– Persisting Data Entities– Data Modification Auditing– Versioning and Concurrency Control– State Mgmt.
BEXIS Tech Talk #4: The 3rd Party Libraries
25
Vaiona -> Entities
public class Party : BaseEntity{}public class Dataset : BusinessEntity{}
BEXIS Tech Talk #4: The 3rd Party Libraries
26
Vaiona -> Entities
public abstract class BaseEntity : ISystemVersionedEntity
{ public virtual XmlNode Extra { get; set; } public virtual long Id { get; set; } public virtual int VersionNo { get; set; }
BEXIS Tech Talk #4: The 3rd Party Libraries
public virtual void Dematerialize(bool includeChildren = true); public virtual void Materialize(bool includeChildren = true);}
27
Vaiona -> Entities
public abstract class BusinessEntity : BaseEntity, IStatefullEntity, IAuditableEntity{
public virtual EntityAuditInfo CreationInfo { get; set; } public virtual EntityAuditInfo ModificationInfo { get; set; } public virtual EntityStateInfo StateInfo { get; set; }}
BEXIS Tech Talk #4: The 3rd Party Libraries
28
Vaiona -> Persistence
• Persistence Mgmt.– Schema Export– DB creation– DB activity logging– Caching– Configuration– Session Sharing
BEXIS Tech Talk #4: The 3rd Party Libraries
29
Vaiona -> Persistence->Mappings(NHibernate)
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="BExIS.Dlm.Entities" namespace="BExIS.Dlm.Entities.DataStructure"> <class xmlns="urn:nhibernate-mapping-2.2" name="Unit" table="Units"
dynamic-update="true" select-before-update="true"> <id name="Id" type="Int64"> <column name="Id" /> <generator class="native" /> </id> <version name="VersionNo" type="Int32"> <column name="VersionNo" /> </version> <property name="Name" type="String"> <column name="Name" /> </property> <property name="Abbreviation" type="String"> <column name="Abbreviation" /> </property> <property name="Description" type="String"> <column name="Description" /> </property>…
BEXIS Tech Talk #4: The 3rd Party Libraries
30
Vaiona -> Persistence-> Arrangement
BEXIS Tech Talk #4: The 3rd Party Libraries
31
Vaiona -> Persistence->Setup
Starting up the IoCprotected void Application_Start(){
IoCFactory.StartContainer (Path.Combine(AppConfiguration.AppRo
ot, "IoC.config"), "DefaultContainer");
…
BEXIS Tech Talk #4: The 3rd Party Libraries
32
Vaiona -> Persistence->Setup
Exporting the schemaprotected void Application_Start(){ IPersistenceManager pManager = PersistenceFactory.GetPersistenceManager(); pManager.Configure(AppConfiguration.DefaultApplicationConnection.ConnectionString, AppConfiguration.DatabaseDialect, "Default", AppConfiguration.ShowQueries); if (AppConfiguration.CreateDatabase)
pManager.ExportSchema(); pManager.Start();
BEXIS Tech Talk #4: The 3rd Party Libraries
33
Vaiona -> Persistence->Setup
Registering the DB session manager for MVC actionspublic static void RegisterGlobalFilters (GlobalFilterCollection filters){ filters.Add(new PersistenceContextProviderFilterAttribute());
BEXIS Tech Talk #4: The 3rd Party Libraries
34
Vaiona -> Persistence
• Unit of Work– Transaction Mgmt.– Bulk operations
using (IUnitOfWork uow = persistenceManager.GetUnitOfWork()){
IRepository<Unit> repo = uow.GetRepository<Unit>();
// more repos, more changesrepo.Put(u);
uow.Commit(); // applies all the changes}
BEXIS Tech Talk #4: The 3rd Party Libraries
35
Vaiona -> Persistence
• Repository– CRUD operations on data entities– Keeps track of changes– Can return IQueryable for:
• further querying• Dynamic querying
– Accepts:• LINQ expressions• named queries• native queries
BEXIS Tech Talk #4: The 3rd Party Libraries
36
Vaiona -> Persistence
using (IUnitOfWork uow = persistenceManager.GetUnitOfWork()){
var x = new Unit();IRepository<Unit> repo =
uow.GetRepository<Unit>(); repo.Get(p => p.Id == 21).First()
.ConversionsIamTheSource.ToList()
.ForEach(c => c.Source = x);
var q = repo.Query(p => p.Abbreviation.StartsWith("m")); var w = from a in q
where a.Dimension.Equals("Length")select (a);
}
BEXIS Tech Talk #4: The 3rd Party Libraries
37
Vaiona -> Serialization
• Entities need to be de/serialized in XML• Entities have attributes and relationships• Object graphs may create cycles
BEXIS Tech Talk #4: The 3rd Party Libraries
38
Vaiona -> Serialization
[AutomaticMaterializationInfo("Amendments", typeof(List<Amendment>), "XmlAmendments", typeof(XmlDocument))]
public abstract class DataTuple : BaseEntity
BEXIS Tech Talk #4: The 3rd Party Libraries
public abstract class BaseEntity{ public virtual void Dematerialize(bool
includeChildren=true){…} public virtual void Materialize(bool
includeChildren=true){…}}
39
Vaiona -> Web
• Web Request Interception• MVC Action Interception–Authorization–Ambient Transaction Mgmt.
• Web Session Mgmt.–Per session culture settings–Multi tenancy
BEXIS Tech Talk #4: The 3rd Party Libraries
40
Vaiona -> Web
• Layout Mgmt.– Pages inherit layout from masters– Masters separate between arrangement and
content– Arrangement in layout.cshtml file• HTML + placeholders
– Content from services• Registered in layout.xml
BEXIS Tech Talk #4: The 3rd Party Libraries
41
Vaiona -> Web
Layout.cshtml<body> <div id="informationContainer"> @Html.RenderAuto("Menu") </div>…
BEXIS Tech Talk #4: The 3rd Party Libraries
42
Vaiona -> Web
Layout.xml <MapItem ContentKey="Menu"> <ContentProviders> <ContentProvider Area="Site" Controller="Nav" Action="Menu" Type="Action" Enabled="true"> <Parameters> <Parameter Name="oreintation" Value="1"/> </Parameters> </ContentProvider> </ContentProviders> </MapItem>
BEXIS Tech Talk #4: The 3rd Party Libraries
43
Lucene
• Apache Lucene.Net• Search on– Metadata• Datasets created between 2010 and 2015• Datasets in project sWEEP
– Primary data• Datasets that contain value 22• Datasets that contain information about “temperature”• Datasets that have a “temperature” column and that
column contains values >= 22
BEXIS Tech Talk #4: The 3rd Party Libraries
44
Outlook
Whats next in the talk series?
How to develop a module for BExIS
BEXIS Tech Talk #4: The 3rd Party Libraries
BEXIS Tech Talk #4: The 3rd Party Libraries 4545
Thanks!Questions?
Contact:[email protected]://bexis2.uni-jena.de
Acknowledgment