Senior Java udvikler København, Danmark

Kan være tilgængelig

(Opdateret 2021-06-07)

Senior Java udvikler

København, Danmark

Modersmål Danish, English

  • Java, Spring, REST, Microservices
  • databaser MSSQL, MongoDB
  • Kafka, docker, openshift, Linux

Kvalifikationer (40)

Java

C#

TypeScript

CLIENT/SERVER

OBJECT ORIENTED PROGRAMMING

BACK END

Microservices

.NET

TEACHING

C++

API

MS .NET

JQuery

REACTJS

WCF

OAUTH

JSON

Entity Framework

React

Elasticsearch

Angular

MICROSOFT VISUAL STUDIO

QUEUE MANAGEMENT

VISUAL STUDIO

Git

TEST CASE

OO

GUI

PERFORMANCE TESTING

Kubernetes

DESIGN PATTERNS

Docker

TEST DEVELOPMENT

MFC

PERFORMANCE TUNING

CONTINUOUS INTEGRATION/DELIVERY

GraphQL

JavaScript

Caching

TeamCity

Professionel erfaring

Senior Consultant
TDC NET

2021-10 - 2023-05

25 years of employment in the private sector developing in Java, Javascript, Typescript, Angular 11, React, C++, C and C#.
Technical background: network- and concurrent programming making me very experienced in network client/server development in C++ and Java. Then after developing backend monolith web services (3 layer) for many years with Java.
For the last 8 years I moved from the monolith into the micro service world ie. architecture, design and implementation using message and domain driven design (DDD). If needed, I use message broker (asynchronous) resulting in a decoupled and very scaled and performant system with message correlation id for synchronization.
Error handling: applications will fail in production and my principle is: "let it fail". It is just important to have both automatic- and manual retry. And then monitor with alert on manual. The result is a 24/7 fault tolerant system. If using domain events and event sourcing, history is implicit and gives full transparancy in PROD which is alpha/ omega.
Opensource: I've created a generic event based step engine library using Eventsourcing (see below).
Primary tools: Linux, Neovim, zsh, fzf, tmux, Java 11, Quarkus, Micronaut, Spring-boot, REST, Kafka, Cassandra, MongoDB, Redis, Prometheus, Grafana, ElasticSearch, Rancher, Spinnaker, Drone, Kubernetes, Docker, Docker Compose etc..
Analysis and design: model, interface, contract, domain event, workflow, listeners, handler, boundary context, mapper, validator, common util. Controller (keeping DTO's separate and then map), service, repository, entity. Package structure. Extract common code.
Creating API's. Analysing and integrating 3rd part API ie. creating clients.
Patterns and principles: decoupled code with high cohesion adhering design patterns and principles (SOLID) i.e. code that can be unit tested, reused and extended.
Testing: unit -and performance testing is alpha omega.
Practices: I believe in Agile Software Practices e.g. Scrum and pair programming.
Roles: senior developer and devlead in 4 projects. Teaching in Java and "How to Unit test" 3 times.
Personal: it's all about trust. I prefer environments with people that take responsibility, have no excuses and being honest.
The problems starts when not talking. Emphasis on co-working, commitment, interest and the will to learn and teach.. thus motivation. The making of quality code and avoiding technical debt.
A clear and consistent company vision and policy is preferable. I expect leaders to lead and take responsibility.
Experience TDC NET Senior Consultant October 2021 - May 2023 (1 year 8 months) Working as devlead for the back-end team for the Debt Collection Tool project.
The tool is used to find and follow companies that hasn't paid their debt ie.
unpaid invoices. The system consist of a webapp that gives a customer, debitor, followup, manager, admin page and dashboard. Invoices, credit notes and payments can be filtered on due/overdue, paid/unpaid and active/inactive customers. The user is also able to make notes and contacts on customer as part of the followup. Users can search accross all context to find customer, invoice, note or contact info that relates to a followup. The system is importing invoice, credit note and payment data from 5 different billing systems.
Primary solutions created: - importing invocies from 5 billing systems (RAS, NABS, ND, AD and EC).
- event based generic step-engine library using Eventsourcing able to execute arbitrary workflows.
- automatic retry -and then manual after maxAttempt on all write functionality.
- error handling 24/7 with broadcast message to Dashboard, manager and user(s).
- events are created on any change in the system giving full transparency in PROD ie. all history can be traced.
- refactored back-end completely using memory maps for invoice and customer for performance.
- controllers, services, repositories, model, interfaces, component design, requests, responses, common utils, handlers, listeners, validators, mappers and package structure.
- business meetings and writing tasks for implementation.
- pair programming ie. helping back-end team with design and implementation.
- review and refactor of implementation.
- test session with whole team by the end of sprint.
- teaching Java 11 and "How to Unit test".
- buying "must read" books for developers.
- developer interviews.
Technologies used: Java 11, Spring-boot, Websocket, own step-engine library (Opensource), Oracle DB, SQL Developer, MSSQL, REST, Retrofit2, Swagger, Postman, Linux, Neovim, zsh, tmux, ssh, openvpn, git, maven, gitlab and github.
Senior Consultant
Nets Group

2021-04 - 2021-06

Senior Java Backend Developer - assisting NETS Acquirer team transforming current mainframe solution into a distributed microservice solution using Kafka and MongoDB.
Primary solutions created: - architechture analysis and solution suggestion for microservices using event based step-engine which includes automatic -and manual retry, transparancy and complete error handling in prod.
- consuming and persisting kafka messages in mongodb for transaction validation.
- common native async generic Kafka message sender.
- shared repository for common utils used in microservices.
- shared model repository used in microservices.
- mongodb import and export Javascripts.
- externalIdentifiers table view for Acquirer (Angular).
- status search for pending changes (Angular).
- refactor of status in backend and being able to resend approval on error (Angular).
- SprintBootTest using Spock and MockMvc.
- Wiremock standalone service used in int test.
- developer docker image with TigerVNC og Xorg display connect.
Technologies used: Java 11, Generics, Lambda, Stream, Spring-boot, Groovy, Spock, Kafka, Mongodb, BarbelHisto, Wiremock, REST, OpenAPI, Angular 11, Typescript, IntelliJ, Neovim, WSL2, Docker, Docker Compose, Openshift, Yaml, Nexus, Bitbucket, Jenkins, Jira and Confluence.
Renovating apartment
Self-employed

2020-11 - 2021-01

Renovating apartment.
Senior Consultant (Erhvervsstyrelsen)
Danish Business Authority

2020-09 - 2020-10

Senior Java Backend Developer - assisting Java backend teams with analytics and maintenance tasks for Startvirksomhed and Ændrevirksomhed for Erhvervsstyrelsen.
Primary solutions created: - analysis and estimation of tasks for future sprints.
- bugfix and minor refactor of Startvirksomhed og Ændrevirksomhed.
- analysis of Startvirksomhed and Ændrevirksomhed in order to refactor a monolith into a scalable and performant solution with error handling and monitoring.
Technologies used: Java 7, Groovy, Grails, Gradle, Spring, IntelliJ, Git, Jenkins and Linux.
Senior Consultant (Virk)
Virk.dk

2020-05 - 2020-08

Copenhagen, Capital Region, Denmark Senior Java Backend Developer - creating in-memory business e-boks for Virk (The view client). Digitalpost APIet for E-boks professions was defined but work on the mail server itself (backend) had not started. The proposal was to imitate the e-boks mail server so the GUI team could get started and finish.
Service could be deployed with either Wiremock or by hitting Digitalpost (E- box mail server). It was an advantage for both the GUI and test team who conducted the step 1 test via Wiremock and then the step 2 test against Digitalpost (after the Digitalpost E-box mail server had finished developed). All unit and integration tests were completed before the step 2 test started.
Primary solutions created: - in memory E-boks mailserver with full functionality ie adhering the Digitalpost OpenAPI contract.
- GraphQL interface to the web service.
- Wiremock setup so that either in-memory mailserver or Digitalpost endpoint were called depending on enviroment.
- full unit test of in-memory mailserver.
- full integration test against Digitalpost endpoint.
Technologies used: Java 11, Generics, Lambda, Stream, Groovy, Spock, Gradle, Spring-boot, Wiremock, OpenAPI, REST, GraphQL, Docker, Docker Compose, Git, Gitlab, Jenkins, Postman, Jira, Confluence and Linux.
Senior Consultant (Step Engine Library)
TDC Group

2020-01 - 2020-04

Senior Java Backend Developer - created a generic event based step engine used to execute arbitrary workflow defined by developer. Cassandra is used as eventstore but can be changed if wanted. The store is append only ie. all business logic that has happened in production can be traced.
Features - automatic retry with max attempt.
- wait with timeout (eg. waiting for callback).
- manual recover for a particular workflow.
- manual recover for many workflows.
- scales by one consumer pr partition with messages in sequence (no locking).
- full transparency in production since domain events are appended to event store.
- workflows in error can easily be found.
- stacktraces are written to database and can be found by workflow id.
- errors are event based too and also published.
- being backward compatible is about making new versions of events and handle them.
- adding new features it is about adding a new component implementing EventListener.. existing code is not changed.
- if-then-else logic disappear since event handlers are used.
- loading of data to get state.. then do a "if-then-else" is gone since data to be processed is processed once.. state check is not needed again. In case of recover.. retry is done from last good event triggering a step (that has not been processed).
- all events are stored in the event store thus only one table exist for the whole domain model thus reducing development time. The storing and loading of events is provided through the event store API (step engine).
- event store repository logic is handled by the local event store class implementing the event listener ie. business logic is separated from event store logic.
- all other repository CRUD calls can be done in handlers also since events are published based on business logic that has happened.. this also separates business logic from repository logic.
- unit testing is about listening for events.
- the library is light and near to the developer thus having full flexibility.
Senior Consultant (Broadband Onboarding)
TDC Group

2019-09 - 2019-12

Senior Java Backend Developer - helping the TDC Erhverv Onboarding Team creating the Broadband onboarding solution. The solution basically sends out a sms to the customer whenever an order is created for Eniig and FiberFirst.
The solution is stateful and is using the step-engine library (see above).
Automatic retry and full recover is possible using the step-engine. Scaling is achieved using partitions ie one pod pr partition with messages in sequence thus avoiding lock mechanism in consumers. 52% of the code is reuse (step- engine).
Primary solutions created: - workflow architecture for the solution ie. domain events, steps and listeners.
- implementing Micronaut Onboarding service in order to consume kafka command message, execute steps ie. do calls in TDC for verification and send sms.
- swagger integration for status, stacktrace and recover functionality (no logging is used).
- unit test.
Technologies used: Java 8, Generics, Lambda, Stream, Maven, Spring-boot, SpringCloud, Micronaut, JUnit, Mockito, REST, Retrofit2, Kafka, KafkaTool, Cassandra, Oracle DB, SQL Developer, Redis, Docker, Bitbucket, Drone, Spinnaker, Openshift, Rancher, Helm, Swagger, Intellij, Postman, SoapUi, Nexus, Jira, Confluence and Linux.
Senior Consultant (One+ Onboarding)
TDC Group

2019-05 - 2019-08

Senior Java Backend Developer - helping TDC Erhverv Onboarding Team creating the One+ onboarding solution. The solution basically sends out an email to the customer whenever an opportunity (internal calls, voice mail etc) is created in Salesforce. The solution is stateless and idempotent. Scaling is achieved using partitions ie one pod pr partition with messages in sequence thus avoiding lock mechanism in consumers.
Primary solutions created: - microservice architecture for the solution.
- data modelling for Cassandra.
- implementing SpringBoot Trigger service calling Salesforce to get opportunities and thenafter send message to broker (kafka).
- implementing SpringBoot Onboarding service in order to consume message from Kafka, do calls in TDC, store data to Cassandra and finally send email.
- setup and configuration of Kafka.
- automatic retry mechanism using DLQ. Upon dead letter the command message can be recovered manually from recover table. Thenafter recover all commands can be executed.
- swagger integration for status, stacktrace and recover functionality (no logging is used).
- common library with generic Retrofit2 client, native kafka client, partitionKey util etc..
- unit test.
Technologies used: Java 8, Generics, Lambda, Stream, Maven, Spring-boot, SpringCloud, Micronaut, JUnit, Mockito, REST, Retrofit2, Kafka, KafkaTool, Cassandra, Oracle DB, SQL Developer, Redis, Docker, Bitbucket, Drone, Spinnaker, Openshift, Rancher, Helm, Swagger, Intellij, Postman, SoapUi, Nexus, Jira, Confluence and Linux.
Senior Consultant
Tryg

2018-10 - 2019-03

Area, Denmark Senior Java Backend Developer - assisting the Autotaks project at Tryg.
Upon a car crash Tryg will receive a report from a workshop with details about what need to be fixed and a price. Based on the report details, an AI result is computed whether the report is approved or not (manual). The task was to join the report and AI result, compute business logic and then send it to PowerBI for statistical analysis. Besides the Autotaks project two common modules were created for usage by other teams.
Primary solutions created: - microservice able to join streams with workshop report data and AI result.
- microservice able to read from stream, compute business logic and call PowerBI REST interface. Later on JDBC was used to update DB.
- generic security module used for basic authentication and Oauth (JWT).
- metric module collecting JVM (Micrometer) and Filestore (Java) metrics able to send collector registry to Pushgatway used by Prometheus.
- introducing aspect and interception in order not to clutter up business code.
Technologies used: Java 8, Apache Kafka, KStream, KTable, Spring-boot, Generics, Lambda, Stream, CompletableFuture, REST, Retrofit2, MSSQL, OAuth2, PowerBI, Pushgateway, Prometheus, Sentry, IntelliJ, Maven, Git, Gitlab, Jira, Kubernetes, Docker, JUnit, Mockito, Postman, Nexus, Jira, Confluence and Linux.
Senior Consultant
DSB

2018-08 - 2018-10

Area, Denmark Senior Java Backend Developer - assisting the backend developer team for DSB Mobile travel application version 2.
Primary solutions created: - order creation - payment with credit card and Mobilepay - ticket transfer Technologies used: Java 8, Guice, Generics, Lambda, Stream, CompletableFuture, Jooby, REST, Retrofit2, OpenAPI, MongoDB, JUnit, Mockito, Postman, IntelliJ, Maven, Git, Gitlab, Nexus, Jira, Confluence and Linux.
Senior Consultant
BEC

2017-11 - 2018-06

Senior Java Backend Developer - assisting the the customer offer solution (kundetilbud) for Nykredit. The task was to make a Spring-boot service to retrieve and initiating customer scoring based on input data (changes). The score engine is located at Nykredit. Made generic security component used for basic authentication and Oauth (JWT) - now used by other departments in BEC.
Primary solutions created: - Spring-boot application able to listen on MQ queue (call from mainframe), call Nykredit (REST) and send response back on MQ queue.
- generic AccessTokenProvider component to get access token from Nykredit oauth service. Component is loosely coupled so that both basic authentication and JWT can be used. Caching used.
- IdentityProvider component mapping BEC customerId to Nykredit customerId. Caching used.
- creating, signing and verifying JWT using certificate, private and public keys.
Aligned and coordinated with Nykredit.
- helping Nykredit defining REST API i.e. keep it stateless, idempotent, hide implementation, using verbs and hierachies correctly.
- stub/mock Nykredit REST service so that team could work independently of Nykredit.
- devtools REST service to put messages on MQ queue, disable MQ listener and change endpoints runtime (local mocked or Nykredit test endpoints).
- error handling from Nykredit REST call and internal error handling.
- responsible of moving application through all environment ie. TEST, PREPROD and PROD (ordering).
- unit testing to test corner cases - especially all error handling cases.
- discussing, aligning and coordinating architecture and design.
- documenting in confluence.
- testing and reporting errors to Nykredit.
Technologies used: Java 8, Spring-boot, REST, MQ, JMS, Generics, Lambda, CompletableFuture, JUnit, Mockito, Postman, SoapUI, Eclipse, Maven, Git, Nexus, Jenkins, Jira and Confluence.
Senior Consultant
Nordea

2016-12 - 2017-07

Senior Java Backend Developer - assisting the Vizier program. Refactoring monolith into microservices and building a security solution for the REST services that were used in different microservices.
Primary solutions created: - refactor of REST services using Jersey filters, custom annotation, Pre -and ProProcessor (Jersey Custom Injection), reflection, generic exception handler and custom response handler.
- REST Security access solution able to change uri access at runtime.
- splitting existing back end Weblogic web service (monolith) into 5 Spring-boot micro services.
- redefine and exposing new REST API in micro services.
- implementing Spring-boot config for local, dev, test, preprod and prod environments. Local profile config especial useful for developers in order to override locally.
- implementing Apache Kafka queue for each micro service thus being able to use message driven design (caller decoupled).
- adding Swagger framework to micro services.
- performance tuning Spring-boot (cpu, memory and disk analyse) on Linux.
Other responsibilites: - code design and architecture decisions.
- REST API design (using verbs, hierarchies and query for non-hierarchies).
- ER design and tables creation.
- introducing message driven design with Apache Kafka.
- introducing CQRS and Event sourcing.
- preparing for generic workflow engine using event sourcing and message driven design.
- creating Jenkins build/upload to Nexus and deploy projects. Using various Jenkins plugins.
Technologies used: Java 8, Spring-boot, REST, Swagger, Generics, Lambda, Stream, Apache Kafka, JUnit, Mockito, Oracle DB, H2, JMeter, JConsole, SQLDeveloper, SoapUI, Eclipse, Maven, Git, Nexus, Jenkins, Jira and Linux.
Senior Consultant
Nordea

2015-10 - 2016-11

TellOS Branch Solutions Senior Java Backend Developer - assisting the Nordea Branch Solutions (TELLOS) implementing Documentbox/Upload client ie. digital signing (e-boks/ NETS) for DK, FI, NO and SE for household and corporate.
Primary solutions created (implemented): - searchcustomer module for DK, FI, NO and SE for both household and corporate that can be reused in all applications (no dependency from module to application).
- refactoring all clients (dompap-client) to be country independent ie. Nordic Archive, NDS (Nordea Digital Signing) and CMS, Pdfa and Logo. Using both REST and SOAP.
- domain types (dompap-domain).
- common utils (dompap-common).
- workflows for DK, FI, NO and SE for household and corporate.
- web application Documentbox/Upload client using Next framework (Vaadin).
- adding REST operations for workflows.
- SDODetailJAXBReader utility to read SDO (Signed Digital Object) from NETS. Utility used by Private Netbanking also.
- defining metadata fields for household and corporate in Nordic Archive.
Other responsibilites: - participate in workflow engine design and decisions.
- making solution country independent.
- making solution household -and corporate independent.
- supervising and helping with SOLID principles (local and colleaguages from India).
- introducing MVP and how to develop GUI modules/components in large applications.
- advising and helping business for DK, FI, NO and SE.
- coordinating Nordic Archive metadata fields with other projects.
- communicating a with NDS, Nordic Archive, CMS, E-boks and NETS.
Technologies used: Java 8, Spring-boot, REST, Swagger, Generics, Lambda, Stream, JDBC, JUnit, Mockito, Next Platform (Nordea Vaadin Framework), Vaadin (MVP), Apache CXF, WebLogic, Oracle DB, SQLDeveloper, JMeter, SoapUI, Eclipse, Maven, Git, Jenkins, Jira and Confluence.
Senior Consultant
Nordea

2014-10 - 2015-09

Senior Java Backend Developer - working as Devlead and Scrum Master for FPA-STP (Financial Processing Advisory - Straight Through Processing).
Developed backend server and database design for trading platform.
Primary solutions created: - Eclipse Setup and Maven POM modules creation.
- Module, package and structure design.
- Server backend design and development (using Hexagonal design) decoupled from GUI.
- Database design with high performance requirements (many write and read).
- Hibernate development i.e. creating Entities, Generic DAO Layer, Util, Services (Repositories) and In-Memory database (H2) Unit testing.
- Performance tuning, profiling and testing (memory leak, closed database connections etc.) of Hibernate.
- DTO module transfering data between GUI and database (entities).
- Adapter (2) module implementing provider, mapping (to entities) and validation to receive data from legacy systems.
- Unit testing used in all modules with TestNG.
- Design and implement error handling.
- Design and implementing automated test running all use cases (test case) mocking legacy systems.
- Refactor of GUI code using MVP.
Other Responsibilities: - Scrum Master for 3 departments (OneFPT and FPA-STP).
- Daily help and guidiance of GUI developers located in Pune, India.
- Use case description based on User Stories and business department material in order to set scope.
- Technology decision.
- Git learning session.
- Jira setup (filter, component and board).
Technologies used: Java, Spring, Generics, Hibernate (C3P0 and Caching), TestNG, Mockito, Vaadin (MVP), Selenium, WebLogic, H2, Oracle, JMeter, SQLDeveloper, SoapUI, Eclipse, Maven, Git, Jira and Confluence.
Consultant
Nordea

2014-03 - 2014-06

Vesterport (Workflow) Senior .Net Backend Developer responsible for Architecture, business -and technical related tasks. Designed the procedures and protocols for how to build the design and to make the correct interfaces.
Primary solutions created: - Adding BO/DAO layer for Entity Framework.
- Adding generic Util for common methods (findAll, findByPrimaryKey etc.) - Adding interface project to solve circular dependency problems.
- Adding BusinessCore to seperate common business logic from application.
- Adding BusinessModel, BusinessMapper and BusinessValidator to seperate common domain type mapping -and validation behaviour from application.
- TimerUtil for monitoring.
Other Responsibilities: - Describing WCF Monitor Service.
- Describing how to do Unittest of BO/DAO layer using In-Memory database.
- Testing Resharper and CodeRush i.e. make a matrix.
- Finding timeout problem in PROD with TimerUtil and PerfMon.
- Finding sleeping connections, their queries and defragmented indexes in MSSQL server.
Technologies used: .NET, C#, Unity, Dependency Injection, IoC, Generics, Automapper, Moq, Automoq, NUnit, NLog, UML, Visual Studio 2010, Resharper, CodeRush, SQL Squirrel, SQL, MSSQL, Stored Procedure, Enity Framework, SQLite, TFS, Scrum and Windows.
Consultant
Nordea

2013-12 - 2014-02

Vesterport (Workflow) Senior .Net Developer teaching howto Unit test.
Primary solutions created: - Teaching a team how to do Unit test and preconditions for doing so.
- Teaching Dependency Injection (IoC) with Unity in WCF Web Service and standalone application.
- Teaching Patterns and Principles (e.g. SOLID, Separation Of Concern, Dry Principle etc.).
- Integrating NUnit, Moq and Automoq into Unit test projects.
Other Responsibilities: - Buying books about Object Oriented Programming, Refactoring, Principles and Patterns, Dependency Injection, Unit testing, Continous Integration, Domain Driven Design, WCF -and Entity Framework.
- Preparing learning sessions and material for Unit testing.
- Documentation: "Unittest Guide".
Technologies used: .NET, C#, IoC, SOLID, Generics, Lambda, Moq, Automoq, MSTest, NUnit, xUnit, TFS, MSSQL, Visual Studio 2010 and Resharper.
Consultant
Nordea

2013-07 - 2013-11

Vesterport (Workflow) Senior .Net Backend Developer responsible for refactoring current code and related tasks i.e. tasks concerning Ejerskifte, Deponering, Vurdering, Ansøgning, Tilbud, Forbehold, Udbetalingsdata, Købersikring/Kurssikring, Status, Omkostninger, Dokumenter, Notes and ÅOP.
Primary solutions created: - Service layer development i.e. validation and error handling.
- Business layer development.
- BusinessCore development i.e. common business rules -and logic.
- Util development i.e. common code near to system.
- Unit testing of business layer, BusinessCore and utils.
Other Responsibilities: - Subgroup lead, design and development when implementing Status (4 developers) and ÅOP (2 developers).
Technologies used: .NET, C#, Unity, Dependency Injection, IoC, Generics, AOP, Moq, Automoq, NUnit, NLog, SoapUI, Visual Studio 2010, Resharper, SQL Squirrel, SQL, MSSQL, Stored Procedure, Enity Framework, TFS, Scrum and Windows.
Consultant
Nordea

2013-06 - 2013-06

June 2013 (1 month) Vesterport (Workflow) Senior .Net Backend Developer responsible for SOA related tasks. The primary task was dividing the existing web service into two.
Primary solutions created: - Defining WSDL/XSD (operations, messages and elements).
- Defining restrictions for schema validation to handle not defined mandatory values in .NET (date, datetime and enum).
- Splitting WCF Web Service to solve release cycle type problems.
- Generating Proxies and Service References.
Other Responsibilities: - Making and testing proxy (client) for 3rd party company.
- Documentation: "Snitfladegenererings Guide".
Technologies used: .NET, C#, SOAP, Apache CXF, MSSQL, XSD, WSDL, XML, Svcutil, IIS, SoapUI, Wireshark, TcpMon, Visual Studio 2010, Resharper, Java, Maven, IntelliJ, TFS, Scrum and Windows.
Consultant
Nordea

2013-05 - 2013-05

May 2013 (1 month) Vesterport (Workflow) Senior .Net Backend Developer hired to build an installer which could handle a variety of programs and services. The installer were named WFInstall.
Primary solutions created: - An application to start, stop, install, uninstall, update, auto update, revert and backup applications in DEV, PREPROD and PROD. Types of applications are COM+, Assembly, WCF -and Windows services. Application data related to the install and dependencies to other services i.e. windows services and COM + applications are configurable.
Technologies used: .NET, C#, Unity, Autofac, Dependency Injection, IoC, Generics, Lambda, Log4n, UML, Assembly, GAC, COM+, Windows Services, IIS, Visual Studio 2010, Resharper, MSI, Setup, MsiExec, TFS, Scrum and Windows.
Consultant
Nordea

2013-04 - 2013-04

April 2013 (1 month) Vesterport (Workflow) Senior Software Developer responsible for the development tasks related to WCF Web Services. Integrating Scheme validation and aligning web services.
Primary solutions created: - Integrating Schema validation for WCF Web Services.
- Refactor of exiting transport logic into connectors.
- Refactor of WCF Web Service into service-, business- and connector layers.
- Integrating DI (Unity) for WCF Web Services i.e. handle injecting of system resources, connectors, utils, BusiessCore and business layer. PerCall and Context were used.
- Integrating Aspect (Unity) to WCF Web Services to seperate "begin end" -and error handling behaviour.
- Integrating NLog into WCF Web Services.
Other Responsibilities: - Making standard for WCF Web Services i.e. configuration, DI, use of layers, folder -and namespace structure, naming standard, Unit test location etc..
Technologies used: .NET, C#, Unity, Dependency Injection, IoC, Generics, Lambda, AOP, NLog, SOA, XSD, WSDL, XML, SOAP, IIS, SoapUI, Wireshark, TcpMon, Visual Studio 2010, Resharper, Java, Maven, IntelliJ, ClearCase, TFS, Scrum and Windows.
Consultant
Nordea

2013-01 - 2013-03

Fredericia Senior Java Backend Developer working with Tilbud, Forbehold, Documents -and Templates in Boligsagsoverblikket (Digital ejendomshandel).
Boligsagsoverblikket is a decentralized solution from where housing advisors can view and control the mortgage process.
Primary solutions created: - GWT page development (Tilbud and Forbehold).
- Defining WSDL/XSD for document -and templates.
- Client -and server side development concerning documents -and templates.
- Spring Servlet for document -and template downloads (base64).
- Unit testing document -and template logic.
Technologies used: Java, Spring (DI, Servlet, AOP), Dependency Injection (IoC/DI), Generics, JUnit, Mockito, GWT-RPC, GWT, UiBinder, MVC, HTML, CSS, MVC, CXF, JAXB, WSDL, XSD, XML, SoapUI, Wireshark, TcpMon. Tomcat, Oracle WebLogic, IntelliJ, Git, Maven, TeamCity, Nexus, Confluence, Scrum, Windows.
Consultant
Netcompany A/S, TDC (ElanIT)

2012-03 - 2012-09

Vesterbro Java Backend Developer at Netcompany A/S, on the team responsible for implementing a site for TDC Privat Fastnet.
Primary solutions created: - Service layer development (JAX-RS).
- Business layer development handling TDC business rules and mapping to - and from domain model.
- Connector layer development (JAX-WS) used to communicate with TDC backend systems. Connector integration test. Security (basic authentication and envelope).
- Util development.
- BO/DAO layer development (Hibernate).
- Unit testing business layer and utils.
- OSB Proxy -and Business services configuration, 1:1 mapping and XQuery.
- Async JMSConnector Util using Oracle guidelines for asynchronous send - and receive. Performance test of SpringJMS.
- JMSConnector GUI Application (MVC) using WindowsBuilder Pro (Swing) i.e.
using above JMSConnector Util.
- Oracle Weblogic Server install and JMS Queue configuration.
- Extensive use of SoapUI for testing and forensic.
- Reverse code engineering of previous solution.
- Bugfixing backend during test period.
Other responsibilities: - IntelliJ Hotswap setup for the project to avoid server restart during debug.
- OSB Business Service endpoint -and connector bugfixing (SoapUI).
- SSH forwarding -and redirecting so that GUI developers could redirect traffic to local server instance (debug).
Technologies used: Java, Spring, SpringJMS, Akka, Generics, REST, RestEasy, SOAP, WSDL, XSD, JSON, Hibernate, DIBS, JUnit, Mockito, Swing, PL/SQL, IntelliJ, SoapUI, TcpMon, Oracle DB, SQL Developer, Enterprise Architect, Gradle, Maven, Oracle Service Bus (OSB), XQuery, Oracle Weblogic Server, Tomcat, Subversion, CVS, SSH, SCRUM, Windows 7, Linux.
Consultant
Visma SiriusIT (ElanIT)

2011-11 - 2012-01

Ryvangen Working at Visma SiriusIT making back -and frontend development for "Fritidsjagtbevis og indberetning" at borgerportalen http://www.sullissivik.gl/ in Greenland. The main purpose was to give -or renew an existing leisure hunting license. In case of renewal the user had to report the catch from previous season.
Primary solutions created: - Service layer development i.e. Session Scoped Beans facilitating web calls.
- Business layer development i.e. EJB (Stateless Beans) using BusinessCore.
- BusinessCore development containing common business rules and logic e.g.
calculate user state based on backend data.
- BackendConnector project using JAX-WS artifacts generated from WSDL (wsimport) to get -and send data to the backend system.
- Util development e.g. SSN validator component and service input validators.
- Automated server test i.e. all user states (stories) were tested by the server when running in test mode. Back end dependencies were decoupled using proxies returning mock data. TestNG was used.
- JSF and JSTL page development using Session Scoped Beans e.g.
authentication, navigation management, input validators etc.. The GUI was data driven using the user state i.e. only valid options (pages and links) is shown to the user.
- Dynamic report page using Javascript (DOM) and jQuery.
- Solving IE 7, 8 and 9 browser problems using Firebug.
Technologies used: Java, Generics, Dependency Injection (JEE6), JBoss 7.0.2, EJB 3.1, JAXB, SOAP, JAX-WS, WSDL, XSD, XML, SQL, Hibernate, TestNG, Mockito, XHTML, JSF, Facelet, JSTL, jQuery, DOM, Javascript, CSS, Eclipse, Maven, Subversion, Redmine, DB2, SCRUM, Firebug, Selenium, SoapUI, TcpMon, Wireshark, JProfiler, JMeter, SSH, Firefox, Opera, Chrome, Safari, IE7, IE8, IE9, Windows 7.
Software Developer
Premitech Aps

2010-09 - 2011-11

Taastrup The company makes the product Performanceguard. I was part of the backend server development team creating new features, utils and upgrading existing solutions.
Primary solutions created: - HTTP client making a complete test of REST facade (using path recursion, reflection and annotation).
- Upgrading and adding features to existing framework. Measurement aggregation techniques using SQL. Backend concurrency improvement. JDBC util library improvement.
- Longpoll util for Java Servlet Servers with no client dependency (instead of Cometd).
- GWTConnector util to handle longpoll notifications (routing notifications to relevant models with their subscription).
- GWT Application using MVP. Default GWT widgets, GXT and HighChart were used.
- Mac Inventory agent in C++ collecting hardware, software and user data (sysctl and ioreg were used). Agent instructed from server what to collect. Data send to server using HTTP POST against REST facade. Protocol description.
Other responsibilities: - Writing new install -and update documents.
- Installing FreeBSD with Subversion and Trac.
- Subversion backup-and-copy plan with complete validation.
- Research: cross platform c++ compile on BSD (Darwin and iOS) and Linux (Android).
Technologies used: Java, C, C++, SQL, PL/SQL, Generics, Reflection, Annotation, IoC, MSSQL, JDBC, Hibernate, HTTP, REST, JAXB, Jersey (JAX- RS), GWT, Ajax, RestyGWT, XMLHttpRequest, GXT, HighChart, JSP, JSON, JSONP, JUnit. Javascript, jQuery, HTML, CSS. SoapUI, TcpMon, Wireshark, JProfiler, JMeter, SSH, Firebug, Firefox, Opera, Chrome, Safari, IE7, IE8, IE9. Apache, Jetty, IntelliJ, Ant, GCC, G++, Subversion, Trac, Jira, SCRUM, Confluence. Windows XP, 2000, 2003, 2008, Windows 7 and FreeBSD 8.1.
Software Developer
Cirque Bredbånd A/S

2006-11 - 2009-04

The company makes telephone services based on the J2EE platform targeting private and enterprise customers. I was part of the server development team creating backend services, components, utils, applications and web development.
Primary solutions created: - Desktop Notifier application with Visual Studio C++ (hidden application like Microsoft MSN).
- EventManager server component able to handle events from Desktop Notifier and browser.
- Phonestatus service available for inhouse and 3rd party customers.
- SMSGateway (SMSC) service available for inhouse and 3rd party customers.
- Administrator web interfaces were made in order to control, monitor and test the services.
- Service connectors for 3rd parties were made in Java and C++ (JAR and DLL) in order to hide network- and protocol implementation.
Primary utils and tools created (Java): - A high performance, scalable and protocol generic Java NIO Socket Server- and connectors (TCP/UDP).
- A scalable queue, thread- and threadpool system.
- A protocol generic TCP/UDP connector in C++ (DLL).
- A reuseable and extendable GUI Framework for inhouse views.
- GUI applications to mimic network events during development.
Other responsibilities: - Document- and source code repository and bug tracing system.
- Supervisor on technology choice, service-, component- and library design.
- Teamlead role in defining a development strategy for the company - one of the goals was to join two developer departments.
Technologies used: Java, Java NIO, C++, EJB 3.0, JPA, SQL, HTTP, SOAP, JMS, JNDI, LDAP, Java Swing, Applets, Servlets, JSP, Ajax, JSON-RPC, OO Javascript, DOM, CSS, XHTML, JSON, XML, XSD, XSLT, XPATH. TCP, UDP, WIN32 SDK, Windows Thread, IOPort, WinSocket, DLL, Telia SMSC, SMS Text/PDU,, Microsoft Visual Studio C++, Netbeans, Netbeans Profiler, Apache, Tomcat, JBoss 5.0.1, PostgreSQL, Failover (VRRP), OpenSSL, STunnel, Subversion, Trac, Redmine, Wiki, SSH, Windows 2003, XP, Linux, FreeBSD.
Software Developer
Merlinia ApS

2003-06 - 2006-10

The company made OutBack i.e. a client/server solution based on C++ able to show user information and status. The system integrated with LDAP e.g.
MS Active Directory, Calendar and Mail (Microsoft Exchange and Domino) and many telephone PBX's. The client (desktop application) also worked in receptionist mode i.e. able to take in coming calls and forward. I was part of the server development team and mostly did bugfix- and refactoring.
Primary solutions created: - Bug fix and refactoring of thread- and network components (server). Got very experienced in thread, Asynchronous Non-blocking -and Overlapped IO socket development. Techniques were critical section, mutex, semaphores, queue and thread pool.
- Server development i.e. bug fix and feature enhancement using TAPI-, SCCP (Cisco Skinny), LDAP-, ODBC- and Serial Port.
- Unit test development.
- MFC GUI application to change values inside MSI package before

Kontakt konsulent

/